图像序列处理ConvLSTM与LSTM架构在Keras中

2024-04-20 14:03:03 发布

您现在位置:Python中文网/ 问答频道 /正文

需要训练10×10的图像序列。以下是我要使用的lstm和convlsm模型:

def lstmModel():
    # Model definition
    model = Sequential()
    model.add(LSTM(50, batch_input_shape=(1, None, inp.shape[1]*inp.shape[2]), return_sequences=True, stateful=True))
    model.add(Dense(out.shape[1]*out.shape[2], activation='softmax'))
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    model.summary()
    return model


def convlstmModel():
    # Model definition
    model = Sequential()
    model.add(ConvLSTM2D(12, kernel_size=5, padding = "same", batch_input_shape=(1, None, inp.shape[1], inp.shape[2], 1), return_sequences=True, stateful=True))
    model.add(Conv2D(20, 3, padding='same', activation='softmax'))
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    model.summary()
    return model

我训练了10个随机10x10图像序列的模型。LSTM模型对我来说似乎很好,但是convlsm模型显示Conv2D层的尺寸不匹配:

^{pr2}$

任何帮助都是非常感谢的。谢谢!在


Tags: 模型图像addtruemodelreturndef序列
2条回答

LSTM层用于“时间序列”。
Conv层用于“静态图像”。在

一种需要形状如(batch, steps, features)
另一个要求:(batch, witdh, height, features)

现在,ConvLSTM2D混合了这两者,并且需要(batch, steps, width, height, features)

离开ConvLSTM2D时,Conv2D不支持额外的steps维度。在

如果要保留此维度,请使用带TimeDistributed包装的卷积:

model.add(TimeDistributed(Conv2D(...))

请注意,您仍将拥有所有5个维度,这与您的另一个只有3个维度的模型相反。在

您应该使用某种形式的整形或其他操作使其适合您的培训数据。在

既然你的问题没有说明任何问题,我们现在只能回答这些问题了。在

错误消息暗示您的输入数据将以5维而不是4维到达conv2d层。该模型应接收形状为

(samples, time, rows, cols, channels)

假设您使用的是最后一个通道后端(tensorflow)。然后,(time,rows,cols,channels)的每一个片段逐个通过conv2d层发送。但是,错误消息暗示传递的维度是5,而不是预期的4。验证输入数据的形状,如有必要,可以修改答案。在

相关问题 更多 >