python-3.x - 如何在 Keras 自定义训练循环中跟踪权重和梯度
问题描述
我在 Keras 中定义了以下自定义模型和训练循环:
class CustomModel(keras.Model):
def train_step(self, data):
x, y = data
with tf.GradientTape() as tape:
y_pred = self(x, training=True) # Forward pass
loss = self.compiled_loss(y, y_pred, regularization_losses=self.losses)
trainable_vars = self.trainable_variables
gradients = tape.gradient(loss, trainable_vars)
self.optimizer.apply_gradients(zip(gradients, trainable_vars))
self.compiled_metrics.update_state(y, y_pred)
return {m.name: m.result() for m in self.metrics}
我正在使用以下代码在一个简单的玩具数据集上训练模型:
inputs = keras.layers.Input(shape=(1,))
hidden = keras.layers.Dense(1, activation='tanh')(inputs)
outputs = keras.layers.Dense(1)(hidden)
x = np.arange(0, 2*np.pi, 2*np.pi/100)
y = np.sin(x)
nnmodel = CustomModel(inputs, outputs)
nnmodel.compile(optimizer=keras.optimizers.SGD(lr=0.1), loss="mse", metrics=["mae"])
nnmodel.fit(x, y, batch_size=100, epochs=2000)
我希望能够看到每个训练循环的函数中的gradient
和trainable_vars
变量的值,但train_step
我不知道该怎么做。
我试图在我的 python IDE 中的函数内设置一个断点,train_step
并期望它在我调用后在训练的每个时期的断点处停止,model.fit()
但这并没有发生。我还尝试让他们在每个时期之后打印出日志中的值,但我不确定如何实现这一点。
解决方案
推荐阅读
- mysql - MySQL 上的 INTERVAL '0-0' YEAR_MONTH 是什么意思?
- actions-on-google - 在提示输出中包括会话存储日期和/或时间
- php - 开发我的 Web 应用程序时出现 EasyAdmin Bundle 问题
- excel - 没有为具有数值的字符串参数调用 UDF
- javascript - 如果文本进入下一行,则截断文本(调整窗口大小)
- node.js - 如何在nodejs中保存文件?
- react-native - 远程交互式推送通知 - 如何?
- react-native - 在 React Native 中向组件添加子组件
- c++ - 现代Cmake找不到Eigen库依赖
- javascript - 单击时滚动到 Kendo Grid 行 - 出现意外的 JavaScript 错误