Keras中的图像序列处理ConvLSTM与LSTM体系结构

时间:2018-07-13 13:26:55

标签: python tensorflow keras lstm keras-layer

我需要训练基于序列的10x10图像分割。以下是我要使用的lstm和convlstm模型:

Error in xts(rowSums(data, na.rm = TRUE), index(data)) : 
  order.by requires an appropriate time-based object
我为10个随机10x10图像序列的序列训练模型。 LSTM模型似乎对我来说很好,但是ConvLSTM模型显示了Conv2D层的尺寸不匹配:

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

我们非常感谢您的帮助。谢谢!

2 个答案:

答案 0 :(得分:4)

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

一个需要(batch, steps, features)之类的形状
另一个要求:(batch, witdh, height, features)

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

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

如果要保持此尺寸,请使用带有TimeDistributed包装器的卷积:

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

请注意,与其他只有3个尺寸的模型相反,您仍将拥有全部5个尺寸。

您应该使用某种重塑或其他操作使其适合您的训练数据。

由于您的问题没有显示任何内容,因此我们现在可以回答这些。

答案 1 :(得分:0)

错误消息表示您输入的数据以5维而不是4维的形式进入conv2d层。模型应接收形状为

的输入
(samples, time, rows, cols, channels)

假设您使用的是通道最后的后端(tensorflow)。然后,(time,rows,cols,channels)的每个切片将通过conv2d层一一发送。但是,错误消息表示传递的尺寸是5,而不是预期的4。请验证输入数据的形状,并在必要时修改答案。