Computação da saliência de imagem via classificador de rede neural

Suponha que tenhamos uma Rede Neural Convolucional treinada para classificar imagens (w.l.o.g. em escala de cinza), emTensor-Flow.

Dada a rede treinada e uma imagem de teste, pode-se rastrear quais pixels são salientes ou "equivalentemente" quais pixels são os maiores responsáveis pela classificação de saída da imagem. Um bom, explicação e detalhes de implementação no Theano, são dados nesteartigo.

Suponha que, para a primeira camada de convoluções, diretamente ligada à imagem de entrada, tenhamos o gradiente para os parâmetros de cada kernel-wrt convolucional. a função de classificação.

Como se pode propagar o gradiente de volta para a camada de Entrada, de modo a calcular uma derivada parcial em cada pixel da imagem?

Propagar e acumular de volta o gradiente nos daria os pixels salientes (são aqueles com grande derivada em magnitude).

Para encontrar o gradiente wrt. os núcleos da primeira camada, até agora eu fiz:

Substituiu o operador de perda usual pelo operador da camada de saída.Usou a função "compute_gradient",

Em suma, parece:

opt = tf.train.GradientDescentOptimizer (1)grads = opt.compute_gradients (output)grad_var = [(grad1) para graduado em graduados]g1 = sess.run ([grad_var [0]])

Onde "saída" é o máximo da camada de saída do NN. E g1, é um tensor (k, k, 1, M), pois usei M: k x k núcleos convolucionais na primeira camada.

Agora, preciso encontrar a maneira correta de propagar g1 em cada pixel de entrada, para calcular sua derivada wrt. a saída.

questionAnswers(1)

yourAnswerToTheQuestion