【问题标题】:How to define input_dim for Keras recurrent layers properly如何正确定义 Keras 循环层的 input_dim
【发布时间】:2020-01-04 14:12:29
【问题描述】:

我正在尝试训练一些神经网络来预测时间序列。我正在使用 Sequentional 模型来定义我的 NN 结构。它看起来像:

from keras.models import Sequential
from keras.layers import Dense, Activation, SimpleRNN, Embedding
from keras import optimizers
from keras import losses
model = Sequential()
#model.add(Dense(units=5, input_dim=3, activation = 'tanh'))
model.add(SimpleRNN(units=5, input_dim = 3, activation = 'tanh'))
model.add(Dense(units=16, activation='tanh'))
model.add(Dense(1, activation='linear'))
prop = optimizers.rmsprop(lr=0.01)
sgd = optimizers.sgd(lr=0.01, nesterov=True, momentum=0.005)
model.compile(optimizer=prop, loss='mean_squared_error')

不执行,返回错误为:

ValueError: Error when checking input: expected simple_rnn_9_input to have 3 dimensions, but got array with shape (221079, 3)

当我使用注释掉的Dense 层时,一切都很好。我阅读了 Keras 文档,发现他们正在使用Embedding 层。虽然,我真的不明白为什么Embedding 层对于使用像SimpleRNNLSTM 这样的循环层是必要的。

train_set 是 4 列的二维数组 - 第 4 列是目标列,其余的是输入。

有没有什么简单的方法可以将 Keras 的循环层与传统的Dense 层一起使用?我将不胜感激解释和一些代码示例。

最好的问候, 马克斯

【问题讨论】:

    标签: python machine-learning keras neural-network recurrent-neural-network


    【解决方案1】:

    我不是这方面的专家,但这可能会有所帮助

    import numpy as  np
    import numpy as  np
    
    data = np.zeros((10,4))
    X = data[:,0:3].reshape(-1,1,3)
    y = data[:,3].reshape(-1,1)
    print(X.shape)
    print(y.shape)
    

    打印:

    (10, 1, 3)
    (10, 1)
    

    然后:

    model.fit(X, y)
    

    【讨论】:

    • 谢谢,它有效!您能否解释一下为什么需要将输入重新整形为 3 维数组?
    • 我不能给你一个很好的解释。 (我知道的还不够)。参见例如datatechnotes.com/2018/12/…,注意:我的回答只是您可能必须执行的操作。仍然必须完成数据组织以具有滚动序列(步骤)。在某些由嵌入层完成的问题中。我将删除此答案,因为它可能具有误导性
    猜你喜欢
    • 2020-03-27
    • 2018-07-21
    • 2021-09-02
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 2015-11-02
    • 1970-01-01
    相关资源
    最近更新 更多