Calcular la prominencia de la imagen a través del clasificador de redes neuronales

Supongamos que tenemos una red neuronal convolucional capacitada para clasificar (w.l.o.g. en escala de grises) imágenes, enTensor de flujo.

Dada la red entrenada y una imagen de prueba, se puede rastrear qué píxeles son destacados, o "equivalentemente" qué píxeles son los más responsables de la clasificación de salida de la imagen. En este se dan detalles agradables, explicativos y de implementación en Theano.artículo.

Suponga que para la primera capa de convoluciones que está directamente vinculada con la imagen de entrada, tenemos el gradiente para los parámetros de cada kernel-wrt convolucional. La función de clasificación.

¿Cómo se puede propagar el gradiente de nuevo a la capa de entrada, para calcular una derivada parcial en cada píxel de la imagen?

Propagar y acumular el gradiente nos daría los píxeles más destacados (son aquellos con gran derivada en magnitud).

Para encontrar el gradiente wrt. los núcleos de la primera capa, hasta ahora lo hice:

Reemplazó el operador de pérdida habitual con el operador de capa de salida.Usó la función "compute_gradient",

En general, se ve así:

opt = tf.train.GradientDescentOptimizer (1)graduados = opt.compute_gradients (salida)grad_var = [(grad1) para graduados en graduados]g1 = sess.run ([grad_var [0]])

Donde, la "salida" es el máximo de la capa de salida del NN. Y g1, es un tensor (k, k, 1, M), ya que usé M: k x k núcleos convolucionales en la primera capa.

Ahora, necesito encontrar la forma correcta de propagar g1 en cada píxel de entrada, para calcular su derivada wrt. La salida.

Respuestas a la pregunta(1)

Su respuesta a la pregunta