如何使用model.fit结合生成器?解决Empty logs报错问题
问题分析与解决方法
核心错误原因
你设置的steps_per_epoch和validation_steps计算逻辑错误:
len(train_generator)返回的是训练集总样本数除以batch_size后的步数(比如1000个样本、batch_size=32,len结果就是32)- 你再对其除以32,会导致
steps_per_epoch变成0,训练时没有执行任何迭代步骤,直接触发"Empty logs"错误
正确的model.fit使用方法
1. 修正生成器的规范问题(非报错核心,但更严谨)
你当前的val_generator和test_generator误用了train_datagen,应该改为对应的数据生成器:
val_generator = val_datagen.flow_from_directory( directory=images_valid, target_size=(1024,1024), class_mode='categorical', batch_size=32 ) test_generator = test_datagen.flow_from_directory( directory=images_test, target_size=(1024,1024), class_mode='categorical', batch_size=32 )
2. 修正model.fit的参数
直接使用生成器的长度作为steps_per_epoch和validation_steps,或者省略这两个参数(Keras会自动计算):
# 写法1:手动指定正确步数 model.fit( train_generator, steps_per_epoch=len(train_generator), epochs=20, validation_data=val_generator, validation_steps=len(val_generator) ) # 写法2:省略steps参数,Keras自动计算 model.fit( train_generator, epochs=20, validation_data=val_generator )
3. 额外调试方案
如果修正后仍报错,按照提示开启eager模式,能获得更详细的错误信息:
# 编译模型时开启eager模式 model.compile( optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'], run_eagerly=True )
内容的提问来源于stack exchange,提问作者Deems
相关产品推荐
相关产品推荐

