我在练习视频分类时,正在构建一个小的CNN LSTM模型。我的数据输入维度是(1, 5, 30, 10, 3)(批量大小,时间步长,宽度,高度,通道)。我曾尝试使用ConvLSTM2D取得了一些成功,但我希望构建一个使用TimeDistributed的模型,以便比较LSTM和GRU的性能表现。
模型成功训练了(尽管准确率有些奇怪),
https://i.sstatic.net/UwfTY.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%准确率的训练集中的图像,也会发生这种情况。
我对机器学习还很新手,很可能是我忽略了一些简单的东西,但经过一天在stackoverflow和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'])
期望的输入形状不应该与我在训练中使用的第一个输入层相同吗?
回答:
我比你还新手,可能给出的建议是错误的。如果我理解正确的话,如果我是你,我会尝试
frame = frame [None, …]
用于需要预测的内容。这曾经帮了我一次。
如果我不是在做类似的任务,我是不会写这些的。我对你的经验非常感兴趣,我也愿意分享我的经验。你想讨论这个问题吗?