2017-05-02 1 views
11

Sowohl MaxPooling1D als auch GlobalMaxPooling1D werden als Max-Pooling-Operation für temporäre Daten beschrieben.Was ist der Unterschied zwischen den MaxPooling1D- und GlobalMaxPooling1D-Funktionen von Keras?

keras.layers.pooling.MaxPooling1D(pool_size=2, strides=None, padding='valid')

Ich verstehe, dass GlobalMaxPooling1D keine Eingabeparameter nimmt. keras.layers.pooling.GlobalMaxPooling1D()

Ich möchte nur visuell verstehen, wie sich die beiden in ihrer Arbeitsweise unterscheiden?

Antwort

21

Td; lrGlobalPooling1D für temporale Daten bringt den max Vektor über die Dimension Schritte. Ein Tensor mit der Form [10, 4, 10] wird also zu einem Tensor mit der Form [10, 10] nach dem globalen Pooling. MaxPooling1D nimmt das Maximum auch über die Schritte hinweg, ist jedoch auf eine pool_size für jeden Schritt beschränkt. So ein [10, 4, 10] Tensor mit pooling_size=2 und stride=1 ist ein [10, 3, 10] Tensor nach MaxPooling(pooling_size=2, stride=1)

Langer Antwort mit grafischer Hilfe

Können sagen, wir haben einen einfachen Satz mit 3 Wörter und wir haben einige Vektor-Codierung für die Wörter (wie word2vec Einbettungen). Natürlich werden Sie normalerweise nicht über Max und Tensor einbetten, aber dies sollte für ein Beispiel tun. Auch das globale Pooling funktioniert kanalübergreifend, aber das lasse ich aus dieser Illustration heraus. Schließlich werden die Dinge mit Padding etwas komplizierter, aber das brauchen wir auch nicht.

Angenommen, wir haben maxPooling1D(pool_size=2, strides=1). Dann

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. 

dass also in einem führen [1, 3, 3] Tensor mit dem jedem Zeitschritt der max über einen Pool 2D zu sein. Und da wir 3 Pools hatten, haben wir unsere Zeitschritte von 4 auf 3 reduziert.

Wenn wir jedoch GlobalPooling1D verwenden, nehmen wir einfach den maximalen Vektor dieses Satzes (Tensor), der wahrscheinlich die Vektordarstellung des Wortes ist. Leben'.

Tat hier die wie GlobalMaxPooling1D in keras definiert ist

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, channels)` 
    """ 

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

Hoffentlich, bitte hilft fragen für mich etwas zu klären.

Zusätzlich ist hier ein Beispiel, das Sie mit spielen können:

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

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 MaxGlobalPooling1D 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()) 
+0

, die eine große Erklärung ist. Danke vielmals! – KayBay

+0

Was ist ein [x, y, z] Tensor? Ich bin neu bei Tensoren. Ich verstehe, dass es ein dreidimensionales lineares Beziehungsobjekt ist. Und was sind Pools? Ist es die Anzahl der Wörter, die es in diesem Fall liest? Zögern Sie nicht, mich auf einen Link oder ein Tutorial umzuleiten, wenn es zu lange ist, es zu erklären – Marine1

Verwandte Themen