python - Tensorboard 损失图可以追溯到过去 (Keras)
问题描述
我有一个与此处描述的问题类似的问题,只是我使用的是带有 Tensorflow 后端的 Keras,而不是 Tensorflow。我已经用不同的元参数训练了 18 个用于时间序列预测的 MLP 模型,所有这些模型都是用相同的基本架构创建的。我正在扫描的 3 个元参数是模型用于预测的前瞻、模型的深度以及我是否使用 L2 正则化。
model = Sequential()
# input_shape should be a 3D tensor with shape (batch_size, timesteps ,input_dim)
model.add(Flatten())
# hidden layer sizes should drop gradually from 256 to 2*lookahead
hidden_layer_sizes = [int(256 - i * (256 - 2 * lookahead) / depth) for i in range(depth)]
for hidden_layer_size in hidden_layer_sizes:
if regularization:
model.add(Dense(hidden_layer_size, kernel_initializer="he_normal",
kernel_regularizer = regularizers.l2(0.01), activation=activations))
else:
model.add(Dense(hidden_layer_size, kernel_initializer="he_normal",
activation=activations))
model.add(Dense(2 * lookahead))
loss = losses.mean_squared_error
model.compile(loss=loss, optimizer=self.kwargs["optimizer"], metrics=['mae'])
每个模型的张量板数据通过相关的 Keras 回调保存在单独的文件夹中
callback_tensorboard = TensorBoard(log_dir=log_dir,
histogram_freq=5,
write_graph=False,
write_grads=True,
write_images=False)
但由于某种原因,18 个模型中有 3 个保存了两个 tensorboard 文件而不是一个,结果图表显示了这种随着时间倒退的奇怪现象
为什么会这样?然后删除第二个张量板文件,我该怎么做才能防止这种情况发生?
解决方案
发生这种情况是因为每次调用时mode.fit()
都会重新初始化 keras 中的内部纪元计数器。但是,您可以在编译模型时手动设置它,例如:
model.compile(optimizer=tf.train.AdamOptimizer(),
loss=tf.losses.mean_squared_error)
init_epoch = 0
然后当 ypu 调用 fit 时,您可以将附加参数传递给 keras,该参数描述当前时代:
epoch_count = 200
init_epoch += epoch_count
history = model.fit(x_train, y_train,
batch_size=256,
epochs=init_epoch,
validation_data=(x_test, y_test),
verbose=1,
initial_epoch=init_epoch-epoch_count,
)
推荐阅读
- c# - 在 WPF xaml 中查找绑定的实现
- python - 如何使用py脚本根据kibana中的时间戳获取所有以前的数据?(它每次都覆盖)
- excel - 将多个工作簿中的一行复制粘贴到主工作簿
- r - 导致此错误的原因:错误 cSPADE 算法 'eid' 无效
- java - 出现错误“无法建立与节点 -1 的连接。代理可能不可用。” 在使用 kafka KStream 时
- javascript - 当我在模式中编辑评论然后返回到评论模式并删除它时出现意外错误
- javascript - 如何在react js中取消选中删除其标签的选中元素
- r - 识别数据框中的以下日期组
- r - formattable:更改列的字体并在同一列上应用 color_bar
- coldfusion - 如果只有 1 列,如何 cfloop 查询该行