为什么我不能在每个epoch结束时执行验证测试?



我正在训练一个分类模型,其中我正在传递回调的早期停止,最佳保存模型,最佳学习率,这取决于验证损失和精度值计算在每个epoch结束,但当我尝试计算回调,我得到一个警告,不能执行任何回调

我的代码如下

train_datagen = ImageDataGenerator(rescale = 1/255.0,
rotation_range=30,
zoom_range=0.4,
horizontal_flip=True,
validation_split=0.2)
train_generator = train_datagen.flow_from_directory(Image_folder_path,
batch_size=batch_size,
class_mode='categorical',
target_size=(img_height, img_width),
subset='training')
validation_datagen = ImageDataGenerator(rescale = 1/255.0)
validation_generator = validation_datagen.flow_from_directory(FolderPath,
batch_size=batch_size,
class_mode='categorical',
target_size=(img_height, img_width),
subset='validation'
)
model.compile(optimizer='Adam',
loss='categorical_crossentropy',
metrics =['accuracy'])
EarlyStopping_callback = EarlyStopping(monitor='val_loss', patience=5, verbose=1, mode='auto')
best_model_file = snapshot_outp_dir+'\weights.{epoch:02d}.h5'
best_model = ModelCheckpoint(best_model_file, monitor='val_accuracy', verbose = 1, save_best_only = True,save_weights_only=True)
history = model.fit_generator(train_generator,
epochs=30,
verbose=1,
validation_data=validation_generator,
#validation_freq=1,
callbacks = [LearningRateScheduler(step_decay,verbose=1),
ReduceLROnPlateau(monitor='val_loss',factor=0.2,verbose=1,patience=1,min_lr=0.001),
best_model,
EarlyStopping_callback]
)

当我使用这个,我得到如下警告:

警告:tensorflow:学习率降低取决于度量Validation_loss '不可用。可用的指标有:损失;警告:tensorflow:只能保存最好的模型Val_accuracy可用,跳过。警告:tensorflow:早期停止以度量'validation_loss'为条件,不可用。可用的指标有:损耗、准确性、lr

我看了类似的问题,但没有一个对我有效,很少的解决方案是

  1. 使用大型数据集,因为我使用了超过2k个样本,这不是问题,我还尝试了不同的分割比率进行验证,如。5 .6,仍然发生了同样的问题,

  2. 将validation_loss更改为val_loss,将val_accuracy更改为validation_accuracy,这不起作用

  3. 使用validation_frequency,将其保持为1,再次得到相同的警告。

  4. 不传递验证数据,validation_generator在模型中明确传递。Fit_generator仍然收到相同的警告。

我做错了什么?任何解决这个问题的建议都会很有帮助。

像这样使用图像数据生成器:

train_generator = train_datagen.flow_from_directory(Image_folder_path,
batch_size=64,
class_mode='categorical',
target_size=(img_height, img_width)
)

:

validation_generator = validation_datagen.flow_from_directory(FolderPath,
batch_size=64,
class_mode='categorical',
target_size=(img_height, img_width)
)

validation_split=0.2train_datagen中移除

最新更新