Nuestros desarrolladores estrellas agotaron sus depósitos de café, buscando a tiempo completo por la respuesta, hasta que Arturo halló la contestación en Bitbucket por lo tanto hoy la comparte contigo.
Solución:
Bueno, la agrupación máxima y el aumento monótono de las no linealidades viajan diariamente. Esto significa que MaxPool(Relu(x)) = Relu(MaxPool(x)) para cualquier entrada. Así que el resultado es el mismo en ese caso. Por lo tanto, técnicamente es mejor submuestrear primero a través de la agrupación máxima y luego aplicar la no linealidad (si es costoso, como el sigmoide). En la práctica, a menudo se hace al revés: no parece cambiar mucho el rendimiento.
En cuanto a conv2D, lo hace no voltear el núcleo. Implementa exactamente la definición de convolución. Esta es una operación lineal, por lo que debe agregar la no linealidad usted mismo en el siguiente paso, por ejemplo theano.tensor.nnet.relu
.
En muchos periódicos la gente usa conv -> pooling -> non-linearity
. No significa que no pueda usar otra orden y obtener resultados razonables. En el caso de la capa de agrupación máxima y ReLU, el orden no importa (ambos calculan lo mismo):
Puede probar que este es el caso al recordar que ReLU es una operación de elementos y una función no decreciente, por lo que
Lo mismo ocurre con casi todas las funciones de activación (la mayoría de ellas no decrecientes). Pero no funciona para una capa de agrupación general (agrupación promedio).
Sin embargo, ambas órdenes producen el mismo resultado, Activation(MaxPool(x))
lo hace significativamente más rápido al hacer menos cantidad de operaciones. Para una capa de agrupación de tamaño k
usa k^2
veces menos llamadas a la función de activación.
Lamentablemente, esta optimización es insignificante para CNN, porque la mayoría de las veces se usa en capas convolucionales.
Comentarios y puntuaciones
Si guardas algún preocupación y capacidad de modernizar nuestro artículo eres capaz de dejar una explicación y con deseo lo leeremos.