Saltar al contenido

¿Cuál es la diferencia entre las funciones MaxPooling1D y GlobalMaxPooling1D de Keras?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *