Apa perbedaan antara Keras' MaxPooling1D dan GlobalMaxPooling1D fungsi?

Kedua MaxPooling1D dan GlobalMaxPooling1D dijelaskan sebagai max penggabungan operasi untuk sementara data.

keras.lapisan-lapisan.pooling.MaxPooling1D(pool_size=2, langkah=Tidak ada, padding='valid')

Saya memahami bahwa GlobalMaxPooling1D tidak mengambil parameter input. keras.lapisan-lapisan.pooling.GlobalMaxPooling1D()

Aku hanya ingin visual memahami bagaimana mereka berbeda dalam cara mereka bekerja?

Larutan

Td;lr GlobalMaxPooling1D untuk sementara data-data yang diperlukan max vektor atas langkah-langkah dimensi. Sehingga tensor dengan bentuk [10, 4, 10] menjadi tensor dengan bentuk [10, 10] setelah global pooling. MaxPooling1D membawa max ke langkah-langkah juga, tapi dibatasi untuk pool_size untuk setiap langkahnya. Jadi [10, 4, 10] tensor dengan pooling_size=2 dan langkah=1 adalah [10, 3, 10] tensor setelah MaxPooling(pooling_size=2, langkah=1)

Jawaban panjang dengan grafis bantuan

Katakanlah kita memiliki kalimat sederhana dengan 4 kata-kata dan kami memiliki beberapa vektor pengkodean untuk kata-kata (seperti word2vec embeddings). Tentu saja anda tidak biasanya max renang di atas dan embedding Tensor tapi ini harus dilakukan untuk contoh. Juga global pooling bekerja di saluran tapi aku'll meninggalkan yang keluar dari ilustrasi ini. Akhirnya, hal-hal yang sedikit lebih rumit dengan padding tapi kita tidak perlu bahwa di sini juga.

Misalkan kita memiliki MaxPooling1D(pool_size=2, langkah-langkah=1). Kemudian

the  [[.7, -0.2, .1]   | pool size is two                  
boy   [.8, -.3,  .2]   | so look at two words at a time    | stride=1 will
will  [.2, -.1,  .4]     and take the max over those       | move the pool down
live  [.4  -.4,  .8]]    2 vectors. Here we looking         1 word. Now we look  
                            'the' and 'boy'.                'boy' and 'will' and 
                                                            take the max.

Sehingga akan mengakibatkan [1, 3, 3] Tensor dengan masing-masing timestep menjadi max over 2D kolam renang. Dan karena kita memiliki 3 kolam renang outdoor kami telah efektif downsampled kami timesteps dari 4 ke 3.

Namun, jika kita menggunakan GlobalMaxPooling1D kita hanya akan mengambil max vektor dari kalimat itu (Tensor) yang mungkin adalah vektor representasi dari kata 'live'.

Memang, di sini bagaimana GlobalMaxPooling1D didefinisikan dalam keras

class GlobalMaxPooling1D(_GlobalPooling1D):
    """Global max pooling operation for temporal data.
    # Input shape
        3D tensor with shape: `(batch_size, steps, features)`.
    # Output shape
        2D tensor with shape:
        `(batch_size, features)`
    """

    def call(self, inputs):
        return K.max(inputs, axis=1)

Mudah-mudahan yang membantu, silakan meminta saya untuk mengklarifikasi apa-apa.

Selain itu berikut adalah contoh bahwa anda dapat bermain dengan:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense, LSTM, GlobalMaxPooling1D, MaxPooling1D

D = np.random.rand(10, 6, 10)

model = Sequential()
model.add(LSTM(16, input_shape=(6, 10), return_sequences=True))
model.add(MaxPooling1D(pool_size=2, strides=1))
model.add(LSTM(10))
model.add(Dense(1))
model.compile(loss='binary_crossentropy', optimizer='sgd')

# print the summary to see how the dimension change after the layers are 
# applied

print(model.summary())

# try a model with GlobalMaxPooling1D now

model = Sequential()
model.add(LSTM(16, input_shape=(6, 10), return_sequences=True))
model.add(GlobalMaxPooling1D())
model.add(Dense(1))
model.compile(loss='binary_crossentropy', optimizer='sgd')

print(model.summary())
Komentar (3)

@ThePassenger [x, y, z] dapat dilihat sebagai bahwa anda memiliki sebuah "para" dengan x elemen, dimana setiap elemen matriks dengan y baris dan kolom z. tapi juga karena anda memiliki matriks aith baris x dan kolom y dan untuk setiap elemen anda memiliki sebuah array dari z elemen.

renang adalah salah satu cara untuk mengurangi tensor misalnya, jika anda memiliki matriks baris x dan kolom y menerapkan penggabungan dapat memberikan anda sebuah matriks x-n baris dan y yang sama-m kolom.

Komentar (0)