Keras LSTM层可以自动转换2D阵列吗



我的模型看起来像这样:

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。后来我回家用我的个人笔记本电脑运行了同样的程序,它使用了3.7版本的Python,我得到了一个类似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可以自动转换输入形状吗?

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

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)

屏幕截图

我认为如果你的数据是2D形状的,2.X后端Keras的TensorFlow会将你的LSTM层输入转换为data[:, :, np.newaxis]。我没有找到任何关于这方面的文件,这只是根据我的经验推断出来的。

最新更新