为啥我的 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 - 为啥“相同”模型和相同权重的结果不同?