【问题标题】:Keras input data formatKeras 输入数据格式
【发布时间】:2017-11-26 23:33:23
【问题描述】:

我正在尝试将自己的数据结构传递到 Keras 中的 LSTM 层,但模型的训练很早就失败了。

我打算创建一个固定长度的序列并接收相同大小的输出序列。目前顺序如下:

[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3]

这是一个列表,然后我使用 np.array() 将其转换为 np 数组。标签序列的构建方式类似。我总共有 8000 个这样的序列,它们的长度都是 12。

在我的 Keras 模型中,LSTM 是第一层。这需要我将数据的输入形状传递给模型。我尝试填充几种形状,但无济于事。为了完整起见,这些是我模型的前两行:

model = Sequential()
model.add(LSTM(100, input_shape=(8000, 12)))
model.add(Dense(nb_classes))
model.add(Activation('softmax'))

在训练期间我遇到了一些麻烦,我发现了this 的帖子。这似乎与我正在尝试做的非常相似。我已经尝试过提供的解决方案,但不知何故,配件仍然崩溃。我收到以下错误:

ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (8000, 12)

有什么想法吗?

更新: 对于 Parthosarathi Mukherjee,我添加了网络的其余部分。

【问题讨论】:

    标签: python machine-learning deep-learning keras


    【解决方案1】:
    model.add(LSTM(100, input_shape(8000, 12)))
    

    改为使用

    model.add(LSTM(100, input_shape(12,1)))
    

    确保在 fit 之前,您的输入数据的形状为 8000 x 12 x 1 而不是 8000 x 12

    【讨论】:

    • 感谢您的快速回复!如果我这样做我仍然得到一个错误: ValueError: Error when checks target: expected activation_1 to have shape (None, 1) but got array with shape (96000, 2)
    • 请在您创建网络的位置发布更多代码。我不确定activation_1 来自哪里。
    • 我已经添加了模型的其余部分。
    • 在我看来,您的网络在每个时间步都需要一个值,因此您应该将输入数组准备为 8000 x 12 x1。标签顺序也应该相同。也许你把它做成了 96000 x 2。如果你想要一个相同大小的输出序列,那么最后一层应该是TimeDistributed(Dense(1,activation='sigmoid'))。此外,您的 LSTM 层必须有一个参数为 return_sequences=True。这似乎不是分类问题,因此您不需要softmax
    猜你喜欢
    • 2017-09-05
    • 2017-12-12
    • 2021-12-16
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    相关资源
    最近更新 更多