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

RNN模型报‘Input 0 of layer与层不兼容’错误的排查求助

解决RNN输入形状不兼容问题

错误核心原因

报错expected shape=(None, 90, 3), found shape=(None, 3)的本质问题:

  • RNN层要求输入为3维张量:(批次大小, 时间步长, 特征数)
  • 你的X_train是2维张量(样本数, 3),缺少关键的「时间步」维度;同时input_shape里写的90无意义,既不匹配数据集规模,也和你定义的sequence_length=10矛盾
  • 代码中定义了sequence_length=10但未用来构造时序样本,等于无效设置

具体修复步骤

1. 构造时序数据集

将2维特征数据转换为RNN需要的3维时序格式:用过去sequence_length个时间步的特征,预测当前目标值PDB。添加以下函数生成时序样本:

def create_sequences(data, target, sequence_length):
    X, y = [], []
    for i in range(len(data) - sequence_length):
        # 取连续sequence_length个时间步的特征
        X.append(data[i:i+sequence_length])
        # 取对应时间步的目标值
        y.append(target[i+sequence_length])
    return np.array(X), np.array(y)

用该函数处理训练、测试数据:

# 将DataFrame转为numpy数组
X_train_np = X_train.values
y_train_np = y_train.values
X_test_np = X_test.values
y_test_np = y_test.values

# 生成时序样本
X_train_seq, y_train_seq = create_sequences(X_train_np, y_train_np, sequence_length)
X_test_seq, y_test_seq = create_sequences(X_test_np, y_test_np, sequence_length)

2. 修正模型输入形状

将input_shape改为实际使用的时间步长和特征数,同时删除重复的编译代码:

model = Sequential()
# input_shape对应(时间步长, 特征数),批次维度由框架自动处理(即None)
# 若当前RNN层后不再堆叠其他循环层,建议将return_sequences设为False,避免维度冗余
model.add(SimpleRNN(units=3, activation='relu', input_shape=(sequence_length, input_dim), return_sequences=False))

# 仅保留一次编译操作
adam = Adam(learning_rate=0.01)
model.compile(optimizer=adam, loss='mean_squared_error')

3. 用时序样本训练模型

传入构造好的时序数据启动训练:

model.fit(X_train_seq, y_train_seq, epochs=10, batch_size=30)

额外注意事项

  • return_sequences=True仅在当前循环层后还堆叠其他循环层时需要开启,否则会导致输出维度冗余,引发后续层输入不兼容
  • 构造时序样本后,有效样本数会变为原样本数 - sequence_length,若原数据集样本量过小,需适当调小sequence_length值

内容的提问来源于stack exchange,提问作者Alwan Rahmana Subian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:45:22