Keras ConvLSTM2D: mengapa menggunakan averagepooling3d dan bagaimana melakukan regresi

saya telah mempelajari Keras ConvLSTM2D: ValueError pada lapisan keluaran

saya ingin menggunakan kode yang sama tetapi saya ingin melakukan regresi (nilai tunggal). Saya tidak tahu bagaimana melakukan ini. Dan saya juga tidak mengerti penggunaan lapisan terakhir kode pos ini. Mengapa rata-ratapolling3d digunakan?

kode dari tautan adalah

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 sumber


Jawaban (1)


AveragePooling3D digunakan untuk mengurangi setiap frame secara berurutan menjadi satu nilai + untuk mengurangi #parameter di Lapisan Padat. Jadi dimensinya menjadi (None, 40 , 1 , 1 ,1 ). Kemudian, menggunakan Reshape memungkinkannya digunakan untuk bagian yang terhubung sepenuhnya.

Selain itu, seperti pada Keras ConvLSTM2D: ValueError pada lapisan keluaran, AveragePooling3D digunakan sebagai gantinya dari GlobalMaxPooling2D karena datanya adalah operasi 5D dan Global hanya menyisakan (batch_size, channels) yang tidak diinginkan dalam kasus Anda.

person Emir Ceyani    schedule 07.08.2019