首页 > 解决方案 > TensorFlow Keras:在 model.fit 期间打印并保存损失和梯度

问题描述

我正在使用如下基本代码在 TensorFlow Keras 中训练神经网络:

model.fit(x_train, y_train, epochs=5)

有没有办法打印出并保存每个时期的损失函数值、梯度和梯度范数model.fit

谢谢。

标签: pythontensorflowkerasgradientloss

解决方案


为了在训练期间的每个 epoch 之后打印和保存变量,您可以使用Callbacks。您可以编写自己的回调或使用内置回调。例如内置回调,CSVLogger帮助您将每个 epoch 结果存储在 CSV 文件中。

您也可以使用ModelCheckpoint来在每个时期后在检查点中保存权重。

如果您想在每个 epoch 之后打印渐变,您有两种可能性。

编写自定义训练并用于tf.GradientTape()记录自动微分的操作,然后tape.gradient()为您计算梯度。有关更多信息,请参阅此链接

或者,如果您想使用model.fit(),您应该再次编写自定义回调,然后在模型中打印变量,如下所示print(model.trainable_variables)

这是自定义回调的示例:

class myCallback(tf.keras.callbacks.Callback):
  def on_epoch_end(self, epoch, logs={}):
   print(model.trainable_variables)

my_callback = myCallback()
model.fit(x_train, y_train, epochs=5, callbacks=[my_callback])

推荐阅读