为什么我的Keras训练不能正常恢复?

2024-04-30 00:29:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我要确保我的训练能正常恢复。培训使用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。正如你所看到的,训练在恢复时有很大的不同。我检查了训练数据是一样的,顺序也是一样的。在

resume vs continuous

可能出了什么问题?优化器状态似乎没有正确恢复。我尝试了.h5.ckpt两种格式。TF 1.12 GPU

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

Another one,实际上我使用load_model而不是{}


Tags: runnewmodeltfloadvalstepsmetrics
1条回答
网友
1楼 · 发布于 2024-04-30 00:29:32

当您保存模型的权重并再次加载它时,您将失去优化状态。因此,如果你用加载的模型运行它,在最初的步骤中,你可能会得到不同的损失值,与模型的连续运行相比较。在

我相信你之所以会经历损失的差异,是因为重新加载了模型的权重

相关问题 更多 >