¿Cuáles son / son los filtros predeterminados utilizados por Keras Convolution2d ()?

18

Soy bastante nuevo en las redes neuronales, pero entiendo bastante bien el álgebra lineal y las matemáticas de la convolución.

Estoy tratando de entender el código de ejemplo que encuentro en varios lugares de la red para entrenar un NN convolucional Keras con datos MNIST para reconocer dígitos. Mi expectativa sería que cuando creara una capa convolucional, tendría que especificar un filtro o conjunto de filtros para aplicar a la entrada. Pero las tres muestras que he encontrado crean una capa convolucional como esta:

model.add(Convolution2D(nb_filter = 32, nb_row = 3, nb_col = 3,
                        border_mode='valid',
                        input_shape=input_shape))

Esto parece estar aplicando un total de 32 filtros 3x3 a las imágenes procesadas por la CNN. ¿Pero qué son esos filtros? ¿Cómo los describiría matemáticamente? La documentación de Keras no es de ayuda.

Gracias por adelantado,

ChrisFal
fuente
2
Esto viene de entender la parte de convolución de CNN. Puede leer aquí: cs231n.github.io/convolutional-networks
Christian Safka

Respuestas:

15

De manera predeterminada, los filtros se inicializan aleatoriamente utilizando el método, que extrae valores de una distribución uniforme con límites positivos y negativos descritos así: Wglorot_uniform

WU(6nin+nout,6nin+nout),

donde es el número de unidades que alimentan a esta unidad, y es el número de unidades a las que se alimenta este resultado.ninnout

Cuando utiliza la red para hacer una predicción, estos filtros se aplican en cada capa de la red. Es decir, se realiza una convolución discreta para cada filtro en cada imagen de entrada, y los resultados de estas convoluciones se envían a la siguiente capa de convoluciones (o capa totalmente conectada, o cualquier otra cosa que pueda tener).

Durante el entrenamiento, los valores en los filtros se optimizan con retropropagación con respecto a una función de pérdida. Para tareas de clasificación como el reconocimiento de dígitos, generalmente se usa la pérdida de entropía cruzada. Aquí hay una visualización de algunos filtros aprendidos en la primera capa (arriba) y los filtros aprendidos en la segunda capa (abajo) de una red convolucional:

visualización de filtros de red de conv

Como puede ver, los filtros de la primera capa básicamente actúan como detectores de borde simples, mientras que los filtros de la segunda capa son más complejos. A medida que profundiza en una red, los filtros pueden detectar formas más complejas. Sin embargo, se vuelve un poco difícil de visualizar, ya que estos filtros actúan sobre imágenes que ya han sido convolucionadas muchas veces, y probablemente no se parecen mucho a la imagen natural original.

Timleathart
fuente
55
glorot_uniformNo utiliza la distribución normal. Creo que lo estás describiendo glorot_normal. No creo que eso sea muy importante para la respuesta: los puntos clave son la inicialización aleatoria seguida de los efectos del entrenamiento. Podría valer la pena explicar cómo los filtros entrenados terminan pareciéndose a los filtros de borde / esquina, etc.
Neil Slater el
Tim, gracias por proporcionar las matemáticas. @Neil Slater: su idea de que los filtros, después de entrenar con propagación hacia atrás, podrían terminar pareciendo detección de bordes, etc., fue bastante útil. Si tuviera más reputación, haría +1 en tus dos contribuciones.
ChrisFal
@NeilSlater Gracias por tu comentario: tienes razón, me había confundido glorot_normaly glorot_uniformhe actualizado la respuesta para reflejar esto. También agregué un poco de información adicional sobre cómo terminan los filtros, como usted sugirió.
timleathart
6

Son núcleos de convolución. Por ejemplo, su imagen es 5x5, tiene 32 núcleos de convolución 3x3 . El border_mode es 'válido', lo que significa que no hay relleno alrededor de la entrada, por lo que se pierden los píxeles (i, 0), (0, j), (i, 4), (4, j). Por lo tanto, sus resultados son 32 imágenes 3x3 , (i = 1,2,3, j = 1,2,3), cada imagen de resultado está definida por la convolución: F k B k ( i , j ) B k ( i , j ) = ( F kA ) ( i , j ) = l = 0 , 1 , 2 m = 0 , 1 , 2 F k ( l , m ) A ( i - l , j -AFkBk(i,j)

Bk(i,j)=(FkA)(i,j)=l=0,1,2m=0,1,2Fk(l,m)A(il,jm)

ingrese la descripción de la imagen aquí

El modelo trazado entrenará los núcleos de acuerdo con su función de costo, y al final estos núcleos son los filtros de su modelo.

lucky6qi
fuente
Entendí estas matemáticas, pero estoy seguro de que muchos lectores de este hilo encontrarán útil el diagrama. ¡Así que gracias!
ChrisFal
imghost.in/images/2018/03/06/XvatD.jpg ¿ tal vez la imagen debe estar con coords (0,0) en B?
vinnitu
@vinnitu sí, de hecho. En realidad, también necesito modificar B en Bk (i, j), (i = 0,1,2, j = 0,1,2).
lucky6qi