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())
, die eine große Erklärung ist. Danke vielmals! – KayBay
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