我一直很难理解此错误消息的含义。我看了很多帖子,比如
4D input in LSTM layer in Keras
ValueError: Input 0 is incompatible with layer lstm_13: expected ndim=3, found ndim=4
但它们似乎都没有解决我的问题。
我有
batch_train_dataset = tf.data.Dataset.from_tensor_slices((train_features, train_labels)).shuffle(512).batch(batch_size)
for i,x in enumerate(batch_train_dataset):
print("x[0].ndim: ", x[0].ndim)
print("x[0].shape: ", x[0].shape)
print("x[1].shape: ", x[1].shape)
if i==0:
break
##########OUTPUT###########
x[0].ndim: 3
x[0].shape: (64, 32, 1000)
x[1].shape: (64,)
我的个人数据有一个形状(64,32,1000)
,其中 64
是批量大小,32
是时间步长,1000
是一些特征。
这是我的模型。
num_classes = len(index_to_label)
lstm_model = tf.keras.Sequential([
tf.keras.layers.Masking(mask_value=0.0), # DO NOT REMOVE THIS LAYER
# TODO: Define a recurrent neural network to recognize one of `num_classes` actions from the given video
### START CODE HERE ###
tf.keras.layers.LSTM(64, input_shape=(batch_size,32,1000)),
tf.keras.layers.LSTM(32),
tf.keras.layers.Dense(32, activation='relu'),
tf.keras.layers.Dense(32, activation='relu'),
tf.keras.layers.Dense(num_classes, activation='softmax')
### END CODE HERE ###
])
我认为我的 input_shape
设置正确,但根据我上面列出的问题,我不知道要解决什么问题。每当我尝试拟合模型时,它仍然会打印错误
ValueError: Input 0 of layer lstm_1 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: (None, 64)
谁能帮我解决这个问题。
====================编辑==================
感谢一些评论,我已将 input_shape 更改为 (32,1000) 但它仍然打印出完全相同的错误。我仍然想知道原因可能是什么,所以任何其他想法将不胜感激。
答案 0 :(得分:0)
在堆叠的 LSTM 层中,LSTM 层不会返回序列,即它们将返回 2D 输出。这意味着第二个 LSTM 层将没有它需要的 3D 输入。 为了解决这个问题,你需要设置 return_sequences=True:
tf.keras.layers.LSTM(64, input_shape=(32,1000),return_sequences=True),
tf.keras.layers.LSTM(32),