【问题标题】:tensorflow:Can save best model only with val_acc available, skippingtensorflow:只能在 val_acc 可用的情况下保存最佳模型,跳过
【发布时间】:2020-08-13 18:35:28
【问题描述】:

我对@9​​87654321@ 有疑问。正如您在我的日志文件中看到的那样,警告总是出现在计算 val_acc 的最后一次迭代之前。因此,Modelcheckpoint 永远找不到val_acc

Epoch 1/30
1/8 [==>...........................] - ETA: 19s - loss: 1.4174 - accuracy: 0.3000
2/8 [======>.......................] - ETA: 8s - loss: 1.3363 - accuracy: 0.3500 
3/8 [==========>...................] - ETA: 4s - loss: 1.3994 - accuracy: 0.2667
4/8 [==============>...............] - ETA: 3s - loss: 1.3527 - accuracy: 0.3250
6/8 [=====================>........] - ETA: 1s - loss: 1.3042 - accuracy: 0.3333
WARNING:tensorflow:Can save best model only with val_acc available, skipping.
8/8 [==============================] - 4s 482ms/step - loss: 1.2846 - accuracy: 0.3375 - val_loss: 1.3512 - val_accuracy: 0.5000

Epoch 2/30
1/8 [==>...........................] - ETA: 0s - loss: 1.0098 - accuracy: 0.5000
3/8 [==========>...................] - ETA: 0s - loss: 0.8916 - accuracy: 0.5333
5/8 [=================>............] - ETA: 0s - loss: 0.9533 - accuracy: 0.5600
6/8 [=====================>........] - ETA: 0s - loss: 0.9523 - accuracy: 0.5667
7/8 [=========================>....] - ETA: 0s - loss: 0.9377 - accuracy: 0.5714
WARNING:tensorflow:Can save best model only with val_acc available, skipping.
8/8 [==============================] - 1s 98ms/step - loss: 0.9229 - accuracy: 0.5750 - val_loss: 1.2507 - val_accuracy: 0.5000

这是我训练 CNN 的代码。

callbacks = [
        TensorBoard(log_dir=r'C:\Users\reda\Desktop\logs\{}'.format(Name),
                    histogram_freq=1),
        ModelCheckpoint(filepath=r"C:\Users\reda\Desktop\checkpoints\{}".format(Name), monitor='val_acc',
                        verbose=2, save_best_only=True, mode='max')]
history = model.fit_generator(
        train_data_gen, 
        steps_per_epoch=total_train // batch_size,
        epochs=epochs,
        validation_data=val_data_gen,
        validation_steps=total_val // batch_size,
        callbacks=callbacks)

【问题讨论】:

  • 将monitor 的值从'val_acc' 更改为'val_accuracy'。
  • 这是用于 Tensorflow 2.x 的吗?在 tensorflow 1.x 中也有这个问题,改成 'val_accuracy' 并不能解决问题。

标签: python tensorflow machine-learning keras deep-learning


【解决方案1】:

我知道这些事情有时会令人沮丧。但 TensorFlow 要求您明确写出要计算的指标的名称

您实际上需要说“val_accuracy”

metric = 'val_accuracy'
ModelCheckpoint(filepath=r"C:\Users\reda.elhail\Desktop\checkpoints\{}".format(Name), monitor=metric,
                    verbose=2, save_best_only=True, mode='max')]

希望这会有所帮助 =)

【讨论】:

  • 是的。谢谢!
【解决方案2】:

添加到已接受的答案中,因为我只是在为此苦苦挣扎。您不仅必须使用完整的指标名称,它还必须与您的 model.compile、ModelCheckpoint 和 EarlyStopping 匹配。我将一组设置为accuracy,另外两组设置为val_accuracy,但它不起作用。

【讨论】:

  • 好点。就我而言,对于 ModelCheckpoint 中的“监视器”参数,我必须通过“损失”。我在编译中的损失参数是“'mean_squared_error'”,并且对于监视器参数具有相同的值,我有相同的警告。当我将其更改为 ModelCheckpoint 的“损失”时,它可以工作。
【解决方案3】:

即使在提到metric=val_accuracy 之后,我也遇到了同样的问题,但它不起作用。所以我只是把它改成了metric=val_acc,它就起作用了。

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 2021-12-29
    • 2018-06-27
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2019-07-27
    • 2020-12-03
    相关资源
    最近更新 更多