【发布时间】: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)
【问题讨论】:
-
不,Keras 不进行任何转换,鉴于您提供的输入形状,您的第一个示例将无法工作。
-
@Dr.Snoopy 在尝试之前不要太自大。我不会问它是否不起作用。在你给我否定之前你真的试过了吗?请参阅我刚刚添加的可重现示例。
标签: python tensorflow keras deep-learning lstm