AttributeError:'NoneType'对象无fit_generator属性问题求助
解决Keras中
'NoneType' object has no attribute 'fit_generator'错误 嘿,我一眼就揪出你代码里的问题根源了!这个错误的本质其实特别简单——你不小心把model变量给覆盖成None了。
问题核心原因
看你代码里的这一行:
model = model.compile(optimizer=adam(lr=0.0005), loss="mae")
Keras的compile()方法不会返回模型对象(实际返回None),当你把它的返回值重新赋值给model时,原来创建的Sequential模型实例就被覆盖成None了。这就导致后面调用model.fit_generator()甚至model.fit()时,本质是在对None调用方法,自然会抛出AttributeError。
快速解决方案
只需要把那行代码改成直接调用compile,不要赋值回model:
model.compile(optimizer=adam(lr=0.0005), loss="mae")
这样model变量依然指向你创建的Sequential模型,后续的fit_generator、summary、predict等方法就能正常工作了。
额外优化建议
除了这个核心问题,还有几个小细节可以让你的代码更规范:
- 你重复导入了不少库(比如
keras.models.Sequential、matplotlib.pyplot),可以清理掉重复的导入语句,让代码更整洁。 - 新版本Keras中,优化器推荐使用大写的
Adam(而非小写adam),修改导入和调用方式:from keras.optimizers import Adam # 编译时改为 model.compile(optimizer=Adam(lr=0.0005), loss="mae")
修正后的关键代码段示例:
# Define model from keras.models import Sequential from keras.layers import Dense from keras.optimizers import Adam from keras.callbacks import ModelCheckpoint model = Sequential() model.add(Dense(10, activation='relu')) model.add(Dense(1)) cb = [ModelCheckpoint("model.hdf5", save_best_only=True, period=3)] # Compile and fit model model.compile(optimizer=Adam(lr=0.0005), loss="mae") # 不要赋值回model history = model.fit_generator(train_gen, steps_per_epoch=1000, epochs=30, verbose=0, callbacks=cb, validation_data=valid_gen, validation_steps=200) model.summary()
这样修改后,你的模型训练流程就能正常运行了!
内容的提问来源于stack exchange,提问作者Sai Krishnadas
相关产品推荐
相关产品推荐

