我要确保我的训练能正常恢复。培训使用Adam
中的Adam
优化器。我确实同时播下了TF和NumPy的种子。在
model.compile(optimizer: new Adam(),
loss: tf.keras.losses.categorical_crossentropy_fn,
metrics: metrics);
if (resume)
model.load_weights(path);
var checkpoints = new ModelCheckpoint(
ModelDir + "/weights.{epoch:02d}-{auc:.4f}-val{val_auc:.4f}" + ModelExtension,
save_best_only: false,
period: 1);
Console.WriteLine($"=========== RUN {Run.ID} ===========");
model.fit_dyn(trainData, trainValues,
epochs: 36000,
steps_per_epoch: 1,
initial_epoch: startingEpoch,
verbose: 2,
validation_data: validation,
validation_steps: validationSampleCount,
callbacks: new ICallback[]{
Run.TensorBoard,
checkpoints,
});
下面是TensorBoard的屏幕截图,显示了3次运行-400步红色一次,200步橙色,200步蓝色,并将resume
设置为true
。正如你所看到的,训练在恢复时有很大的不同。我检查了训练数据是一样的,顺序也是一样的。在
可能出了什么问题?优化器状态似乎没有正确恢复。我尝试了.h5
和.ckpt
两种格式。TF 1.12 GPU
Google Collab笔记本,说明问题:https://colab.research.google.com/drive/1yb9uK7lQM0M5uuk-hypRUacTFdAIfyGZ
Another one,实际上我使用load_model
而不是{
当您保存模型的权重并再次加载它时,您将失去优化状态。因此,如果你用加载的模型运行它,在最初的步骤中,你可能会得到不同的损失值,与模型的连续运行相比较。在
我相信你之所以会经历损失的差异,是因为重新加载了模型的权重
相关问题 更多 >
编程相关推荐