首页 > 解决方案 > 用于图像序列分类的 CNN 和 LSTM

问题描述

我正在尝试建立一个学习延迟决策任务的模型,该任务可以描述如下:

从一个空网格(4x4 单元格)开始,一个随机形状(正方形、圆形或三角形),大小和颜色随机出现在单元格中。然后,对于随机数量的延迟帧(预定义的最大延迟帧数),网格再次变空。之后,网格上的不同单元格中出现了两个形状,其中一个与前一个形状相对应,但颜色和大小不同。该模型的目标是选择包含先前形状的单元格。单元格从 0 到 15 编号,首先计算行数。

为了实现这个任务,我使用了 pygame。这使我能够生成一组训练数据,其中包含 1000 个图像序列(64x64 像素 x 3 个通道)。

我使用 Keras 构建了模型,但我遇到了一些问题,因为我的模型似乎没有学习。它由 3 个卷积池层、一个 LSTM 层和一个用于输出的密集层组成。此外,为了简单起见,我开始使用恒定数量的延迟帧,以使我的序列具有恒定大小。

这是我的模型代码:

def build_model(shape=(DELAYFRAMES+3, SIZE[0], SIZE[1], 3), nbout=16):
    # Create the model
    model = keras.Sequential()

    # Create the conv-pool layers
    model.add(TimeDistributed(Conv2D(36, (7, 7), input_shape=shape[1:], padding='same', activation='relu'),input_shape=shape))
    model.add(TimeDistributed(MaxPool2D()))
    model.add(TimeDistributed(Conv2D(72, (6, 6), padding='same', activation='relu')))
    model.add(TimeDistributed(MaxPool2D()))
    model.add(TimeDistributed(Conv2D(108, (5, 5), padding='same', activation='relu')))
    model.add(TimeDistributed(MaxPool2D()))
    model.add(TimeDistributed(Flatten()))

    # Add LSTM layer
    model.add(LSTM(64))

    # Add output layer
    model.add(Dense(16,activation='softmax'))
    print(model.summary())
    return model

这里,DELAYFRAMES=1, SIZE[0]= SIZE[1]=64 并且nbout是类(单元格)的数量。我猜这是我对 LSTM 层的理解不足。我不确定 LSTM 的参数(单位数)是什么意思。这可能是我的模型不学习的原因吗?我的训练集的准确率值在 0.025 和 0.10 之间波动,这告诉我这个决定是完全随机的 (1/16 = 0.0625) 跨时期。

标签: tensorflowmachine-learningkerasconv-neural-networklstm

解决方案


推荐阅读