为什么 RNN 有输入形状错误?

数据挖掘 机器学习 神经网络 深度学习 喀拉斯 rnn
2022-03-15 03:27:03

我的x_train形状是 (798,3),y_train输入形状是 (798, 1)。我正在创建这样的 RNN

def create_rnn_model():
    model = Sequential()
    model.add(SimpleRNN(20,return_sequences=False,stateful=stateful,activation='relu',batch_input_shape=(1,3,1)))
    model.add(Activation('relu'))
    adam = optimizers.Adam(lr=0.001)
    model.compile(loss='mean_squared_error', optimizer=adam, metrics=[root_mean_squared_error])

    return model

但这会返回错误

ValueError:检查输入时出错:预期 simple_rnn_1_input 有 3 个维度,但得到了形状为 (798, 3) 的数组

我的批量大小 =1,我的时间步长是 3 和dat_dim=1。那我在哪里做错了?任何帮助表示赞赏。

编辑

我将 x_train 更改为 shape (798,3,1) 并将 y_train shape 更改为 (798,) 并运行模型,但它引发了错误

ValueError: Error when checking target: expected activation_1 to have shape (20,) but got array with shape (1,)

但我可以用 1 个单元运行模型。如何指定模型以 20 个单位而不是一个单位运行。

2个回答

首先对于 RNN 部分,您应该考虑阅读有关input_shapebatch_input_shape的文档。

然后您的激活层似乎没用,因为您已经在 RNN 层中应用了 relu 激活。

最后,您的网络返回(20,)的输出形状(RNN 返回(20,)并且激活不会改变形状)并将其与(1,)y_train的形状进行比较形状不匹配,因此返回此错误

编辑:您可以打印 model.summary() 来监控 input/output 的形状

所以从研究中我发现对于 RNN te 输入必须是 3D 格式,所以我需要将 2D 数据重塑为 3D 数据。然后您需要指定数据的批量大小、时间步长和 data_dim。希望它对任何人都有帮助。