Presta atención ya que en esta división vas a hallar la contestación que buscas.Este artículo ha sido evaluado por nuestros especialistas para asegurar la calidad y veracidad de nuestro post.
Solución:
Td;lrGlobalMaxPooling1D
para datos temporales toma el vector máximo sobre la dimensión de los pasos. Entonces un tensor con forma [10, 4, 10] se convierte en un tensor con forma [10, 10] después de la puesta en común global. MaxPooling1D
también toma el máximo de los pasos, pero se limita a un pool_size para cada paso. entonces un [10, 4, 10] tensor con pooling_size=2
y stride=1
es un [10, 3, 10] tensor después MaxPooling(pooling_size=2, stride=1)
Respuesta larga con ayuda gráfica
Digamos que tenemos una oración simple con 4 palabras y tenemos alguna codificación vectorial para las palabras (como incrustaciones de word2vec). Por supuesto, normalmente no maximizará la agrupación e incrustará Tensor, pero esto debería servir como ejemplo. También la agrupación global funciona en todos los canales, pero dejaré eso fuera de esta ilustración. Finalmente, las cosas se complican un poco más con el relleno, pero tampoco lo necesitamos aquí.
Supongamos que tenemos MaxPooling1D(pool_size=2, strides=1).
Después
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.
Entonces eso resultará en un [1, 3, 3] Tensor con cada paso de tiempo siendo el máximo sobre un grupo 2D. Y dado que teníamos 3 grupos, hemos reducido efectivamente nuestros intervalos de tiempo de 4 a 3.
Sin embargo, si usamos GlobalMaxPooling1D
simplemente tomaremos el vector máximo de esa oración (Tensor), que probablemente sea la representación vectorial de la palabra ‘en vivo’.
De hecho, aquí se explica cómo se define GlobalMaxPooling1D en 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)
Espero que eso ayude, por favor pídeme que te aclare cualquier cosa.
Además, aquí hay un ejemplo con el que puedes jugar:
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())
Recuerda algo, que tienes la capacidad de valorar esta noticia si diste con el arreglo.