【问题标题】:Can Keras LSTM layer automatically convert 2D arrays?Keras LSTM 层可以自动转换二维数组吗?
【发布时间】:2022-01-04 02:31:11
【问题描述】:

我的模型看起来像这样:

model = keras.Sequential()
model.add(keras.layers.LSTM(64, input_shape=(None, 1), return_sequences=True))
model.add(keras.layers.LSTM(32, return_sequences=False))
model.add(keras.layers.Dense(6))

然后我输入形状为 (10000, 30) 的输入。在我的工作笔记本电脑上一切都很好,它使用了 3.9 版的 Python。后来我回家用我的个人笔记本电脑运行相同的程序,该程序使用 Python 3.7 版本,我收到了类似expected to have 3 dimensions, but got array with (10000, 30) 的错误。我必须将网络修改为:

model = keras.Sequential()
model.add(keras.layers.LSTM(64, input_shape=(6, 5), return_sequences=True)
model.add(keras.layers.LSTM(32, return_sequences=False)
model.add(keras.layers.Dense(6))

并将我的输入重塑为 (10000, 6, 5) 的形状。我想知道为什么会这样?是不是因为新版Keras可以自动转换输入的shape?

有些人不相信第一个输入有效。下面是一个最小的可重现示例。试试看!

import tensorflow as tf
from tensorflow import keras
import pandas as pd
import numpy as np
model = keras.Sequential()
model.add(keras.layers.LSTM(64, input_shape=(None, 1), return_sequences=True))
model.add(keras.layers.LSTM(32, return_sequences=False))
model.add(keras.layers.Dense(6))
train_seq = np.array([i for i in range(100)]).reshape(10, 10)
valid_seq = np.array([i for i in range(60)]).reshape(10, 6)
model.compile(loss="mse",optimizer='adam')
model.fit(
    train_seq,
    valid_seq,
    epochs=3)

Screenshot

【问题讨论】:

  • 不,Keras 不进行任何转换,鉴于您提供的输入形状,您的第一个示例将无法工作。
  • @Dr.Snoopy 在尝试之前不要太自大。我不会问它是否不起作用。在你给我否定之前你真的试过了吗?请参阅我刚刚添加的可重现示例。

标签: python tensorflow keras deep-learning lstm


【解决方案1】:

如果您的数据是二维形状,我认为版本 2.X 后端 Keras 的 TensorFlow 会将您的 LSTM 层输入转换为 data[:, :, np.newaxis]。我没有找到任何关于此的文档,这只是根据我的经验进行的推断。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 2018-01-11
  • 1970-01-01
  • 2019-01-21
  • 2010-10-13
相关资源
最近更新 更多