为什么我的 Keras TimeDistributed CNN + LSTM 模型期望形状不完整

Why does my Keras TimeDistributed CNN + LSTM model expect an incomplete shape

我正在 Keras 中构建一个小型 CNN LSTM 模型,用于练习视频分类。我的数据的输入维度是 (1, 5, 30, 10, 3)(批量大小、时间步长、宽度、高度、通道)。我发现 ConvLSTM2D 取得了一些成功,但我想使用 TimeDistributed 制作模型,因为我想比较 LSTM 与 GRU 的性能。

模型训练成功(尽管有一些非常奇怪的准确度),

https://i.imgur.com/5uAbPkR.png

但是当我将它保存到我的计算机并在维度数组(1、5、30、10、3)上调用 model.predict 时,我收到此错误:

ValueError: Input 0 is incompatible with layer sequential_12: expected shape=(None, None, 10, 30, 3), found shape=(1, 5, 30, 10, 3)

即使使用训练集中的图像也会发生这种情况,据说它可以达到 100% 的准确率。

我对机器学习还很陌生,所以我可能忽略了一些简单的事情,但是在搜索 Whosebug 和 Google 一整天后,我一无所获。

模型看起来像这样。

model = Sequential()
model.add(Input((5,10,30,3)))

model.add(TimeDistributed(Conv2D(filters=2,  
                                 kernel_size=(3,3), 
                                 padding='same', 
                                 activation='relu')))
model.add(TimeDistributed(Flatten()))

model.add(LSTM(4))

model.add(Dense(16, activation='sigmoid'))
model.add(Dense(2, activation='softmax'))

sgd = SGD(learning_rate=0.01)

model.compile(optimizer=sgd,
              loss='binary_crossentropy',
              metrics=['accuracy'])

预期的输入形状不应该与我在训练中使用的第一个输入层相同吗?

我比你还菜鸟,可能给出了错误的建议。 如果我没理解错,如果我是你,我会尝试

帧 = 帧 [None, ...]

对于需要预测的内容。帮了我一次。

如果我没有做过类似的任务,我就不会写这篇文章。我对你的经历很感兴趣,我可以分享我的经历。你想讨论这个问题吗?