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

Posted

技术标签:

【中文标题】为啥我的 Keras TimeDistributed CNN + LSTM 模型期望形状不完整【英文标题】:Why does my Keras TimeDistributed CNN + LSTM model expect an incomplete shape为什么我的 Keras TimeDistributed CNN + LSTM 模型期望形状不完整 【发布时间】:2021-10-25 04:09:22 【问题描述】:

我正在 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% 的准确率。

我对机器学习很陌生,所以很可能我忽略了一些简单的事情,但是在整天搜索 *** 和 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'])

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

【问题讨论】:

【参考方案1】:

我比你还新手,可能会给出错误的建议。 如果我理解正确,如果我是你,我会尝试

帧 = 帧 [无,...]

对于需要预测的内容。它曾经帮助过我。

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

【讨论】:

成功了!虽然我不知道为什么???我最初使用numpy.reshape(1, 5, 30, 10, 3) 在我的输入帧上添加批处理维度。这适用于 ConvLSTM2D,所以我认为它也可以在这里工作。使用你的方法,我得到了与重塑完全相同的尺寸,但这次它起作用了……我很乐意分享更多关于我的经验。什么/哪里是这样做的最佳地点? 很高兴能帮到你。我也很高兴获得您通过这些联系人对视频进行分类的经验:“kykjiobod1@mail.ru”是我的电子邮件和 Skype 登录名,“kykji”是我的电报昵称) 我还有其他的联系方式可以沟通,如果以上对您不便。在这种情况下,只写适合你的地方

以上是关于为啥我的 Keras TimeDistributed CNN + LSTM 模型期望形状不完整的主要内容,如果未能解决你的问题,请参考以下文章

Keras ImageDataGenerator:为啥我的 CNN 的输出反转了?

为啥 keras 测试生成器只返回批量大小作为数组形状的长度?

Keras LSTM - 为啥“相同”模型和相同权重的结果不同?

为啥 fit_generator 的准确性与 Keras 中的 evaluate_generator 的准确性不同?

为啥keras安装以后导入失败?

为啥我得到 Keras 形状不匹配?