Keras ConvLSTM2D: зачем использовать средний пул3d и как регрессировать

я изучал Keras ConvLSTM2D: ValueError на выходном слое

я хочу использовать тот же код, но я хочу сделать регрессию (одно значение). Я не знаю, как это сделать. И я также не понимаю использование последних слоев этого почтового индекса. Почему используется mediumpolling3d?

код по ссылке есть

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'
)

person sotiraw    schedule 23.03.2019    source источник


Ответы (1)


AveragePooling3D используется для сокращения каждого кадра в последовательности до одного значения + для уменьшения #parameters в плотном слое. Итак, размерность становится (None, 40 , 1 , 1 ,1 ). Затем использование Reshape позволяет использовать его для полносвязной части.

Кроме того, как и в Keras ConvLSTM2D: ValueError на выходном слое, вместо этого используется AveragePooling3D из GlobalMaxPooling2D, так как данные 5D, а Global операции оставляют только (batch_size, channels), что в вашем случае нежелательно.

person Emir Ceyani    schedule 07.08.2019