Keras CNN模型报错:'History'对象无'predict'属性的解决方法
解决AttributeError: 'History' object has no attribute 'predict'错误
这个问题的根源很简单——你不小心把模型训练的历史记录对象覆盖了原本的模型实例!
看你代码里的这一行:
model = model.fit( X , Y , epochs=50, batch_size=10 , validation_split= 0.25 , verbose=1, shuffle=True)
Keras的model.fit()方法返回的是一个History对象,它只用来存储训练过程中的损失、指标变化等日志信息,并没有predict()方法。你把这个对象赋值给了原本存储模型的model变量,自然在调用model.predict(X_test)时会报错。
修复方法
只需要把fit()的结果存到另一个变量里,不要覆盖原始的模型:
# 不要覆盖model变量,用history来存储训练日志 history = model.fit( X , Y , epochs=50, batch_size=10 , validation_split= 0.25 , verbose=1, shuffle=True)
修改后的完整代码示例
# 构建模型(你的原有代码不变) model.add(Conv1D(4,kernel_size=3, activation='relu', input_shape=(tablon_vectores_train.shape[1], tablon_vectores_train.shape[2]) #,padding='same' ) ) model.add(MaxPooling1D(pool_size=4)) model.add(Conv1D(6,kernel_size=2, activation='relu')) model.add(MaxPooling1D(pool_size=2)) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(15, activation='relu')) model.add(Dense(1) ) model.compile(loss='mean_squared_error', optimizer='adam',metrics=['mse']) # 关键修改:用history变量接收fit的返回值,保留model作为模型实例 history = model.fit( X , Y , epochs=50, batch_size=10 , validation_split= 0.25 , verbose=1, shuffle=True) # 现在可以正常调用predict了 predict = model.predict(X_test)
额外说明
训练完成后,你依然可以通过history变量查看训练过程的细节,比如:
history.history['loss']:获取训练集每一轮的损失值history.history['val_loss']:获取验证集每一轮的损失值history.history['mse']:获取训练集每一轮的MSE指标
这样既保留了训练日志的查看能力,又能正常使用模型进行预测啦。
内容的提问来源于stack exchange,提问作者Maite89
相关产品推荐
相关产品推荐

