ResNet50训练时val_accuracy与val_loss仅首轮可见问题求助
问题解决:ResNet50训练仅首epoch显示验证指标
问题现象
训练ResNet50进行新冠感染/正常图像二分类时,仅第一个epoch能看到val_accuracy和val_loss,后续epoch无验证指标输出,已传入验证数据但问题持续。
代码问题分析
validation_steps参数冗余:当validation_data传入numpy数组格式的验证集时,Keras会自动计算验证所需步数,手动设置validation_steps=len(X_valid)//bs会导致验证流程异常——若验证集样本数不是batch size的整数倍,后续epoch无法正常触发验证逻辑。- ModelCheckpoint监控指标错误:当前
monitor="accuracy"监控的是训练集准确率,无法基于验证集表现保存最优模型,虽不直接导致指标不显示,但不符合分类任务的常规需求。
修正后的代码
数据划分代码(无问题,可直接保留)
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2) print('The train Data Shape ', X_train.shape[0]) X_test, X_valid, y_test, y_valid = train_test_split(X_test,y_test, test_size = 0.5) print('The validation Data Shape ', X_valid.shape[0]) print('The test Data Shape ', X_test.shape[0])
模型训练代码(修正关键问题)
lr = 1e-3 epochs = 100 bs = 8 optimizer = Adam(learning_rate=lr, decay=lr/epochs) model.compile(optimizer, loss='binary_crossentropy', metrics=['accuracy']) # 初始化训练数据增强器 train_datagen = ImageDataGenerator( rotation_range=15, fill_mode="nearest") # 修正监控指标为验证集准确率,确保保存最优验证模型 checkpointer = ModelCheckpoint(filepath="./Model/CDX_Best_RestNet50.h5", save_best_only=True, monitor="val_accuracy", verbose=1) start = time.time() # 移除validation_steps参数,由Keras自动计算验证步数 history=model.fit(train_datagen.flow(X_train, y_train, batch_size=bs), steps_per_epoch=len(X_train)//bs, validation_data=(X_valid, y_valid), epochs=epochs, callbacks=[checkpointer]) end = time.time() duration = end - start print(f'\n This Model took {duration:.2f} seconds ({duration/60:.1f} minutes) to train for {epochs} epochs')
额外注意事项
- 确认
X_train、X_valid的形状为(样本数量, 224, 224, 3),若缺少样本数维度,需调整数据格式。 - 若需更详细的训练日志,确保
model.fit中verbose参数设置为1(默认值)。
内容的提问来源于stack exchange,提问作者Raghav Kavimandan
相关产品推荐
相关产品推荐

