为什么我的Keras培训无法正确恢复?

时间:2019-03-22 03:55:08

标签: c# python tensorflow keras

我正在尝试确保正确地恢复我的训练。培训使用来自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。如您所见,培训在继续进行时有很大不同。我检查了训练数据是否相同且顺序相同。

resume vs continuous

可能有什么问题吗?看来优化器状态未正确还原。我尝试了true.h5两种格式。 TF 1.12 GPU

Google Collab笔记本,说明了问题:https://colab.research.google.com/drive/1yb9uK7lQM0M5uuk-hypRUacTFdAIfyGZ

Another one,我实际上使用.ckpt而不是load_model

1 个答案:

答案 0 :(得分:0)

保存模型的权重并再次加载时,将失去优化状态。因此,如果与加载的模型一起运行,则与模型的连续运行相比,第一步可能会获得不同的损失值。

我相信您遇到损失差异的原因是因为重新加载了模型的权重