You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用scikeras.wrappers.KerasRegressor调用cross_val_score时出现AttributeError错误

问题原因

你这段代码的核心问题是提前手动编译了Keras模型,再传给KerasRegressor。Scikeras的KerasRegressor会自动处理模型的构建与编译流程,提前编译会导致优化器对象状态异常,触发'Adam' object has no attribute 'build'错误。另外代码里用了plt但没导入matplotlib.pyplot,运行时也会报错。

修正后的代码
from tensorflow import keras
from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_regression
from scikeras.wrappers import KerasRegressor
import matplotlib.pyplot as plt  # 补上缺失的导入

def build_model(input_shape):
    model = keras.Sequential([
        keras.layers.Dense(100, activation='relu', input_dim=input_shape),
        keras.layers.Dense(200, activation='relu'),
        keras.layers.Dense(200, activation='relu'),
        keras.layers.Dense(1, activation='linear')
    ])
    model.compile(optimizer=keras.optimizers.Adam(), loss='mse')
    return model

X, y = make_regression(n_samples=10_000)
input_shape = X.shape[1]

# 传入模型构建函数,而非预编译好的模型
model = KerasRegressor(model=build_model, model__input_shape=input_shape, 
                       batch_size=256, verbose=1, epochs=10)

val_score = cross_val_score(model, X, y, cv=5)
plt.plot(val_score)
plt.show()  # 加上显示图像的代码
另一种写法(在KerasRegressor中指定编译参数)

如果不想在构建函数里编译,也可以把优化器、损失等作为参数传给KerasRegressor:

from tensorflow import keras
from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_regression
from scikeras.wrappers import KerasRegressor
import matplotlib.pyplot as plt

def build_model(input_shape):
    return keras.Sequential([
        keras.layers.Dense(100, activation='relu', input_dim=input_shape),
        keras.layers.Dense(200, activation='relu'),
        keras.layers.Dense(200, activation='relu'),
        keras.layers.Dense(1, activation='linear')
    ])

X, y = make_regression(n_samples=10_000)
input_shape = X.shape[1]

model = KerasRegressor(model=build_model, model__input_shape=input_shape,
                       optimizer=keras.optimizers.Adam(), loss='mse',
                       batch_size=256, verbose=1, epochs=10)

val_score = cross_val_score(model, X, y, cv=5)
plt.plot(val_score)
plt.show()

内容的提问来源于stack exchange,提问作者fares rs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:40:27