que example español ejemplo classifier keras max-pooling

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



keras tensorflow (2)

Tanto MaxPooling1D como GlobalMaxPooling1D se describen como una operación de agrupación máxima para datos temporales.

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

Entiendo que GlobalMaxPooling1D no toma parámetros de entrada. keras.layers.pooling.GlobalMaxPooling1D()

¿Me gustaría entender visualmente cómo difieren los dos en la forma en que trabajan?


@ThePassenger [x, y, z] significa que tiene una "matriz" con x elementos donde cada elemento es una matriz con y filas y columnas z.

las agrupaciones son solo una forma de disminuir un tensor, por ejemplo, si tiene una matriz de x filas y las columnas y, la aplicación de la agrupación puede darle una matriz de xn filas y las mismas columnas y.


Td; lr GlobalMaxPooling1D para datos temporales toma el vector máximo sobre la dimensión de pasos. Entonces, un tensor con forma [10, 4, 10] se convierte en un tensor con forma [10, 10] después de la combinación global. MaxPooling1D toma el máximo en los pasos también, pero restringido a un tamaño de pool para cada paso. Entonces, un tensor [10, 4, 10] con pooling_size=2 y stride=1 es un tensor [10, 3, 10] después de MaxPooling(pooling_size=2, stride=1)

Respuesta larga con ayuda gráfica.

Digamos que tenemos una oración simple con 3 palabras y tenemos una codificación vectorial para las palabras (como incrustaciones de word2vec ). Por supuesto, normalmente no se usará el máximo de agrupación e incrustación de 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). Entonces

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.

Así que eso resultará en un [1, 3, 3] Tensor con cada paso de tiempo siendo el máximo sobre un conjunto 2D. Y como hemos tenido 3 grupos, hemos reducido de manera efectiva nuestros pasos de tiempo de 4 a 3.

Sin embargo, si usamos GlobalMaxPooling1D solo tomaremos el vector máximo de esa oración (Tensor), que es probablemente la representación vectorial de la palabra ''live''.

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)

Esperemos que eso ayude, por favor pídeme que aclare algo.

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 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())