我正在训练一个分类模型,其中我正在传递回调的早期停止,最佳保存模型,最佳学习率,这取决于验证损失和精度值计算在每个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
我看了类似的问题,但没有一个对我有效,很少的解决方案是
使用大型数据集,因为我使用了超过2k个样本,这不是问题,我还尝试了不同的分割比率进行验证,如。5 .6,仍然发生了同样的问题,
将validation_loss更改为val_loss,将val_accuracy更改为validation_accuracy,这不起作用
使用validation_frequency,将其保持为1,再次得到相同的警告。
不传递验证数据,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.2
从train_datagen
中移除