我有一个形状如下的序列输入: (6000, 64, 100, 50)
的6000是样本的序列只是数量。每个序列64的长度。
我计划使用Keras将这个输入适合LSTM。
我以这种方式设置输入:
input = Input(shape=(64, 100, 50))
Run Code Online (Sandbox Code Playgroud)
这给了我一个输入形状 (?, 64, 100, 50)
但是,当我input像这样放入LSTM时:
x = LSTM(256, return_sequences=True)(input)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
输入0与lstm_37层不兼容:预期ndim = 3,找到的ndim = 4
如果我的输入形状像(?, 64, 100),这将是可行的,但是当我具有第4维时,则不会。
这是否意味着LSTM只能接受3维输入?如何使用Keras将4维甚至更高维的输入输入LSTM?
我一直很难理解这个错误消息的含义。我看过很多帖子,比如
ValueError: 层顺序的输入 0 与层不兼容: : 预期 min_ndim=4, 发现 ndim=3
ValueError:输入 0 与层 lstm_13 不兼容:预期 ndim=3,发现 ndim=4
层顺序的输入0与期望ndim=3的层不兼容,发现ndim=2。收到完整形状:[无,1]
但他们似乎都没有解决我的问题。
我有
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,)
Run Code Online (Sandbox Code Playgroud)
我的个人数据具有一个形状,(64,32,1000)其中64是batch_size,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 …Run Code Online (Sandbox Code Playgroud)