我正在训练一个分类模型,其中我传入了提前停止、保存最佳模型和最佳学习率的回调,这些回调依赖于每个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] )
当我使用这个代码时,我收到了如下警告:
WARNING:tensorflow:学习率降低取决于指标’validation_loss’,但该指标不可用。可用的指标有:loss,accuracy,lr WARNING:tensorflow:只能在’val_accuracy’可用时保存最佳模型,跳过。 WARNING:tensorflow:提前停止取决于指标’validation_loss’,但该指标不可用。可用的指标有:loss,accuracy,lr
我查看了类似的问题,但对我没有用,其中一些解决方案包括:
-
使用大型数据集,因为我使用了超过2000个样本,所以这不是问题,我也尝试了不同的验证分割比例如0.5和0.6,但仍然出现了相同的问题,
-
将validation_loss改为val_loss,将val_accuracy改为validation_accuracy,这也没用。
-
使用validation_frequency,将其设置为1,仍然得到了相同的警告。
-
不传递验证数据,validation_generator在model.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) )
并从train_datagen
中移除validation_split=0.2