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

使用GridSearch.fit时出现'Sequential'对象无'compiled'属性错误

问题解决:AttributeError: 'Sequential' object has no attribute 'compiled'

核心原因

这个错误源于Scikeras工作流程与手动编译模型的操作冲突,且版本兼容性存在问题:

  1. 你在自定义模型函数create_model中手动调用cnn.compile(),但Scikeras的KerasClassifier会自行管理模型编译流程,重复编译触发内部检查错误。
  2. 旧版Scikeras会尝试检查模型的compiled属性,但TensorFlow Keras的Sequential对象并没有该属性,直接导致属性错误。

分步解决方案

1. 修改模型构建函数:移除手动编译

将模型构建与编译分离,仅在函数中返回未编译的模型,交给Scikeras负责编译环节:

def create_model(neurons_1, neurons_2, dropout):
    # 构建Sequential模型
    cnn = models.Sequential([
        layers.Conv1D(filters=neurons_1, kernel_size=8, activation='relu', input_shape=(82,1)),
        layers.MaxPooling1D(4),
        layers.BatchNormalization(),
        
        layers.Conv1D(filters=neurons_2, kernel_size=8, activation='relu'),
        layers.MaxPooling1D(4),
        layers.BatchNormalization(),
        
        layers.Flatten(),
        layers.Dense(100, activation='relu'),
        layers.Dropout(dropout),
        layers.Dense(50, activation='relu'),
        layers.Dropout(dropout),
        
        layers.Dense(2, activation='softmax')
    ])
            
    # 移除手动编译代码,交给Scikeras处理
    return cnn

2. 调整KerasClassifier初始化与超参数网格

  • 在KerasClassifier中指定编译所需的损失函数、评估指标。
  • 优化器的学习率需通过optimizer__learning_rate传递(属于Scikeras的编译参数,而非模型参数):
# 用KerasClassifier包装模型,指定编译参数
model = KerasClassifier(
    model=create_model,
    loss=tf.keras.losses.SparseCategoricalCrossentropy(),
    metrics=['accuracy']
)

# 修正超参数网格的参数路径
params={
    'epochs':[20,50,100],
    'model__neurons_1':[16,32,64,128],
    'model__neurons_2':[16,32,64,128],
    'optimizer':['adam','sgd'],  # 使用小写sgd,匹配Scikeras的标准命名
    'optimizer__learning_rate':[0.001, 0.01, 0.1],  # 优化器参数前缀为optimizer__
    'model__dropout':[0.2,0.5]
}

3. 修正输入数据形状

Conv1D要求输入为3D张量(样本数, 时间步长, 特征数),需给标准化后的数据增加一个维度:

# 数据标准化后增加维度,匹配input_shape=(82,1)
transformer = RobustScaler().fit(X_val)
X_r_scaled = transformer.transform(X_val)
X_r_scaled = X_r_scaled.reshape(X_r_scaled.shape[0], X_r_scaled.shape[1], 1)

4. 升级Scikeras解决版本兼容

若上述调整后仍有问题,升级Scikeras到最新版本,修复API兼容性问题:

pip install --upgrade scikeras

最终执行流程

完成上述修改后,重新运行网格搜索代码即可正常执行。

内容的提问来源于stack exchange,提问作者D.S. Parihar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:58:10