需要训练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}$任何帮助都是非常感谢的。谢谢!在
LSTM
层用于“时间序列”。Conv
层用于“静态图像”。在一种需要形状如
(batch, steps, features)
另一个要求:
(batch, witdh, height, features)
现在,
ConvLSTM2D
混合了这两者,并且需要(batch, steps, width, height, features)
离开
ConvLSTM2D
时,Conv2D
不支持额外的steps
维度。在如果要保留此维度,请使用带
TimeDistributed
包装的卷积:请注意,您仍将拥有所有5个维度,这与您的另一个只有3个维度的模型相反。在
您应该使用某种形式的整形或其他操作使其适合您的培训数据。在
既然你的问题没有说明任何问题,我们现在只能回答这些问题了。在
错误消息暗示您的输入数据将以5维而不是4维到达conv2d层。该模型应接收形状为
假设您使用的是最后一个通道后端(tensorflow)。然后,
(time,rows,cols,channels)
的每一个片段逐个通过conv2d层发送。但是,错误消息暗示传递的维度是5,而不是预期的4。验证输入数据的形状,如有必要,可以修改答案。在相关问题 更多 >
编程相关推荐