我需要训练基于序列的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
我们非常感谢您的帮助。谢谢!
答案 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。请验证输入数据的形状,并在必要时修改答案。