Keras ConvLSTM2D: เหตุใดจึงต้องใช้ Averagepooling3d และวิธีถดถอย

ฉันกำลังศึกษา Keras ConvLSTM2D: ValueError บนเลเยอร์เอาต์พุต

ฉันต้องการใช้รหัสเดียวกัน แต่ฉันต้องการทำการถดถอย ( single value ) ฉันไม่รู้ว่าต้องทำอย่างไร และฉันก็ไม่เข้าใจการใช้เลเยอร์สุดท้ายของรหัสไปรษณีย์นี้ด้วย เหตุใดจึงใช้ 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'
)

person sotiraw    schedule 23.03.2019    source แหล่งที่มา


คำตอบ (1)


AveragePooling3D ใช้เพื่อลดแต่ละเฟรมในลำดับให้เป็นค่าเดียว + เพื่อลด #parameters ใน Dense Layer ดังนั้น มิติข้อมูลจึงกลายเป็น (None, 40 , 1 , 1 ,1 ) จากนั้น การใช้ Reshape จะอนุญาตให้ใช้สำหรับส่วนที่เชื่อมต่อโดยสมบูรณ์

นอกจากนี้ เช่นเดียวกับใน Keras ConvLSTM2D: ValueError บนเลเยอร์เอาต์พุต จะใช้ AveragePooling3D แทน ของ GlobalMaxPooling2D เนื่องจากข้อมูลเป็น 5D และการดำเนินการ Global เหลือเพียง (batch_size, channels) ซึ่งไม่เป็นที่พึงปรารถนาในกรณีของคุณ

person Emir Ceyani    schedule 07.08.2019