我正在尝试确保正确地恢复我的训练。培训使用来自Adam
的{{1}}优化器。我确实同时设置了TF和NumPy种子。
tf.keras.optimizers
下面是TensorBoard的屏幕截图,显示了3个运行-红色为400步,橙色为200步,蓝色为200步,其中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,
});
设置为resume
。如您所见,培训在继续进行时有很大不同。我检查了训练数据是否相同且顺序相同。
可能有什么问题吗?看来优化器状态未正确还原。我尝试了true
和.h5
两种格式。 TF 1.12 GPU
Google Collab笔记本,说明了问题:https://colab.research.google.com/drive/1yb9uK7lQM0M5uuk-hypRUacTFdAIfyGZ
Another one,我实际上使用.ckpt
而不是load_model
答案 0 :(得分:0)
保存模型的权重并再次加载时,将失去优化状态。因此,如果与加载的模型一起运行,则与模型的连续运行相比,第一步可能会获得不同的损失值。
我相信您遇到损失差异的原因是因为重新加载了模型的权重