【问题标题】:Shape error for Vanilla RNN's dense layer in Keras?Keras 中 Vanilla RNN 密集层的形状错误?
【发布时间】:2020-05-22 04:37:10
【问题描述】:

我正在尝试使用 Vanilla RNN(无 LSTM)进行时间序列预测。

检查目标时出错:预期dense_2 的形状为(2,),但得到的数组的形状为(1,)

我从链接here 学习了 LSTM 时间预测。我使用自己的数据集进行了尝试和测试。现在我想使用 RNN 实现时间序列来学习自己(并比较 LSTM 和 Vanilaa RNN 之间的差异)。但我面临上述错误。

通过对网络的研究,我发现问题在于选择正确的错误函数(我想)。但我不确定。以下是我的代码 sn-p。

注意,由于是时间序列预测 Y(t) = X(T-1)

#X_train.shape = (7141, 1)
#y_train.shape = (7141, 1)
model = Sequential()
model.add(Dense(5, activation='relu'))
model.add(Dense(2))
model.compile(loss='mean_absolute_error', optimizer = 'adam')
history = model.fit(X_train, y_train, epochs=10, batch_size=64, verbose=1, shuffle=False)

【问题讨论】:

    标签: python tensorflow keras recurrent-neural-network shapes


    【解决方案1】:

    问题是,您的输出具有 - 就像错误状态一样 - 形状为 (2,),因为它是由 Dense(2) 层生成的。如果将其替换为 Dense(1),形状将匹配。

    但请注意,目前还没有任何重复出现,您只是将 y(t_i) 建模为 x(t_i) 的函数,即一个先前的样本。

    【讨论】:

    • 天哪……我尝试了很多不同的东西,但没有尝试过这个愚蠢的小东西。非常感谢您抽出时间。如果您说的情况属实,为什么人们使用 LSTM 来预测时间序列或预测?我正在尝试训练我的模型,以便以后可以预测未来。不正确吗?
    • 因为 LSTM(像所有 RNN 一样)将一些隐藏状态传递到下一个时间步,有效地表示 /something/ 关于过去可用于给定时间步。 RNN 具有 ((input, hidden from previous time) -> (output, new hidden)) 的通用 API。您所拥有的仅由前馈层(输入->输出)组成。这实际上是一个很好的基线!但也许你想要SimpleRNN(5) 代替第一个Dense(5)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2019-01-08
    • 2022-01-15
    相关资源
    最近更新 更多