TF2.0 API学习(Python)五:模块tf.keras.optimizers.Optimizer、模块tf.summary

tf.keras.optimizers.Optimizer

Keras优化器的基类

tf.keras.optimizers.Optimizer(
    name, gradient_aggregator=None, gradient_transformers=None, **kwargs
)

不可以直接实例化这个类,而应实例化它的子类

在自定义训练循环中的用法

在Keras模型中,有时会在首次调用模型时创建变量,而不是在构建时创建变量。 示例包括1)没有预先定义输入形状的顺序模型,或2)子类化模型。 在这些情况下,将var_list传递为可调用的。

opt = tf.keras.optimizers.SGD(learning_rate=0.1)

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(num_hidden, activation='relu'))
model.add(tf.keras.layers.Dense(num_classes, activation='sigmoid'))

loss_fn = lambda: tf.keras.losses.mse(model(input), output)
var_list_fn = lambda: model.trainable_weights

for input, output in data:
	opt.minimize(loss_fn, var_list_fn)

在应用gradients之前先对其进行处理

调用minimum()既要计算gradients,又要将其应用于变量。 如果要在应用gradients之前对其进行处理,则可以分三步使用优化器:

1)使用tf.GradientTape计算gradients。
2)根据需要处理gradients
3)使用apply_gradients()应用处理后的gradients。

# 建立优化器
opt = tf.keras.optimizers.SGD(learning_rate=0.1)

# 对一组变量求gradient
with tf.GradientTape() as tape:
    loss = <call_loss_function>

vars = <list_of_variables>
grads = tape.gradient(loss, vars)

# Process the gradients, for example cap them, etc.
# capped_grads = [MyCapper(g) for g in grads]
processed_grads = [process_gradient(g) for g in grads]

# Ask the optimizer to apply the processed gradients.
opt.apply_gradients(zip(processed_grads, var_list))

模块: tf.summary

用于编写摘要数据的操作,用于分析和可视化。

该tf.summary模块提供用于编写​​摘要数据的API。可以在TensorBoard(TensorFlow随附的可视化工具包)中可视化此数据。

tf.summary.create_file_writer

为给定的日志目录创建摘要文件编写器。

tf.summary.create_file_writer(
    logdir, max_queue=None, flush_millis=None, filename_suffix=None, name=None
)

logdir 一个字符串,指定要在其中写入事件文件的目录。
返回一个SummaryWriter对象。

tf.summary.scalar

编写标量摘要

tf.summary.scalar(
    name, data, step=None, description=None
)

name 此摘要的名称。 用于TensorBoard的summary标记将是此名称的任何活动名称范围的前缀。
data 实数标量值,可以转换为float32张量。
step 该摘要的显式int64可转换单调步进值。如果省略,默认为tf.summary.experimental.get_step(),它不能为None。

扫描二维码关注公众号,回复: 12889090 查看本文章

tf.summary.flush

强制摘要编写器将所有缓冲的数据发送到存储。

tf.summary.flush(
    writer=None, name=None
)

writer 要刷新的tf.summary.SummaryWriter资源。 如果此参数为None,则将使用线程默认值。 否则,返回tf.no_op。
name 操作的名称(可选)。

猜你喜欢

转载自blog.csdn.net/Winds_Up/article/details/112596918