Keras二分类模型报错:'History'对象无'predict'属性求助
解决Keras中
AttributeError: 'History' object has no attribute 'predict'的问题 问题根源
你在代码中犯了一个关键错误:将model.fit()的返回值重新赋值给了model变量。model.fit()方法返回的是History对象(用于记录训练过程的损失、精度等指标),而非训练后的模型本身。这会导致原本的Sequential模型实例被覆盖,后续调用model.predict()时,实际是在History对象上调用该方法,而History没有predict属性,因此触发报错。
修正方案
只需要避免用model变量接收fit()的返回值即可,改用其他变量名(比如history)存储训练历史,或者直接调用model.fit()不赋值。
修正后的完整代码
#hyperparameters hidden_units=100 learning_rate=0.01 hidden_layer_act='tanh' output_layer_act='sigmoid' no_epochs=100 #model model = Sequential() model.add(Dense(hidden_units, input_dim=len(X_train.columns), activation=hidden_layer_act)) model.add(Dense(hidden_units, activation=hidden_layer_act)) model.add(Dense(1, activation=output_layer_act)) #model.summary() sgd=optimizers.SGD(lr=learning_rate) model.compile(loss='binary_crossentropy',optimizer=sgd, metrics=['accuracy']) es = EarlyStopping(monitor='val_accuracy', mode='max', # don't minimize the accuracy! patience=10, restore_best_weights=True) # 修改点:用history变量接收训练历史,而非覆盖model history = model.fit(X_train, y_train, epochs=no_epochs, callbacks=[es], batch_size=5, verbose=1, shuffle=True) y_pred = model.predict(X_test)
额外说明
- 如果你不需要查看训练历史,也可以直接调用
model.fit(...)不赋值,效果相同。 History对象可以用来绘制训练曲线,比如history.history['accuracy']可以获取训练集精度变化,history.history['val_accuracy']获取验证集精度变化。
内容的提问来源于stack exchange,提问作者drashti bhatt
相关产品推荐
相关产品推荐

