我一直在学习Keras ConvLSTM2D: ValueError on output layer
我想使用相同的代码,但我想进行回归(单一值)。 我不知道该怎么做。而且我也不了解此邮政编码的最后几层。为什么要使用averagepolling3d?
链接的代码为
model = Sequential()
model.add(ConvLSTM2D(
filters=40,
kernel_size=(3, 3),
input_shape=(None, 135, 240, 1),
padding='same',
return_sequences=True))
model.add(BatchNormalization())
model.add(ConvLSTM2D(
filters=40,
kernel_size=(3, 3),
padding='same',
return_sequences=True))
model.add(BatchNormalization())
model.add(ConvLSTM2D(
filters=40,
kernel_size=(3, 3),
padding='same',
return_sequences=True))
model.add(BatchNormalization())
model.add(AveragePooling3D((1, 135, 240)))
model.add(Reshape((-1, 40)))
model.add(Dense(
units=9,
activation='sigmoid'))
model.compile(
loss='categorical_crossentropy',
optimizer='adadelta'
)
答案 0 :(得分:0)
AveragePooling3D
用于将序列中的每个帧减少为单个值+以减少密集层中的#parameters。因此,维度变为(None, 40 , 1 , 1 ,1 )
。然后,使用Reshape
允许它用于完全连接的零件。
此外,如Keras ConvLSTM2D: ValueError on output layer一样,使用AveragePooling3D
代替GlobalMaxPooling2D
,因为数据是5D且Global
操作仅留下(batch_size, channels)
,这在您的情况。