【问题标题】:Warning : Tensorflow: can save best model only with val_accuracy available, skipping警告:Tensorflow:只能在 val_accuracy 可用的情况下保存最佳模型,跳过
【发布时间】:2021-11-28 22:17:58
【问题描述】:

我正在使用 keras 构建用于图像分类的 CNN 模型。我无法使用 ModelCheckPoint 保存最佳模型,因为它会引发此警告:

警告:tensorflow:只能使用 val_accuracy 保存最佳模型 可用,跳过。

我已经针对所有相关问题研究了 stackoverflow,但到目前为止还没有任何效果。 [1][2][3][4]等等

这是我的代码:

model.compile(loss='categorical_crossentropy',metrics=['accuracy', Precision(), Recall()],optimizer='adam')

train_datagen = ImageDataGenerator(rescale = 1/255.,
                                rotation_range   =40,
                                width_shift_range=0.2,
                                height_shift_range=0.2,
                                shear_range=0.2,
                                zoom_range =0.2,
                                horizontal_flip=True,
                                fill_mode ='nearest')
test_datagen = ImageDataGenerator(rescale = 1/255.)

train_generator = train_datagen.flow_from_directory(r"./datasetcrop512/train", target_size=(512,512), batch_size=32, class_mode='categorical')
test_generator = test_datagen.flow_from_directory(r"./datasetcrop512/test", target_size=(512,512), batch_size=32, class_mode='categorical')

增强后,模型检查点

from keras.callbacks import ModelCheckpoint
filepath = 'weights_best_model3_6.hdf5'
checkpoint = ModelCheckpoint(filepath,monitor = 'val_accuracy',verbose = 1, save_best_only=True, mode='max')

拟合模型

history = model.fit(train_generator, steps_per_epoch = stepsPerEpoch,
       epochs = 15, validation_data=test_generator, validation_steps = stepsPerEpoch,
       callbacks = [ PlotLossesKeras(),checkpoint])

运行后,计算第 1 个 epoch 的验证准确度,但从第 2 个 epoch 开始,它开始给出上述警告并且不保存最佳模型。

【问题讨论】:

  • 我记得之前看到过类似的问题,这是由于在验证数据不是tf.data.Dataset 类型时使用validation_steps,您可以尝试删除validation_steps 参数并重试吗?
  • @aim97 嘿,这确实有效:D 我会再测试 2-3 次,如果它一直有效,请告诉您。
  • @aim97 请将解决方案作为答案发布,以便 OP 可以接受并对其他人有用

标签: python tensorflow keras deep-learning conv-neural-network


【解决方案1】:

这似乎与我之前看到的另一个issue 相似,仅在docs 中所述的某些条件下才允许使用validation_steps

validation_steps :仅当提供了validation_data 并且是tf.data 数据集时才相关。 ...

您提供的数据不是使其工作所需的类型,以这种方式验证需要给定的数据集非常大或使用repeat 方法重复自身以适应您想要的验证批次数量,我相信这就是为什么验证只在第一次起作用然后在其余时间停止的原因。

还要检查对参数steps_per_epoch and validation_steps 以及何时使用它们的更好解释。

【讨论】:

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