Чтобы узнать, к чему чувствителен определенный фильтр в сверточном слое в сверточной нейронной сети, можно применить визуализацию на основе градиентных фильтров.
Идея состоит в том, чтобы передать случайное изображение в сеть, а затем найти градиенты, которые максимизируют активацию карты характеристик фильтра. Добавьте эти градиенты к изображению и выполните итерацию.
Пусть:
conv_node be a convolutional layer in a neural network
filter_index be the index of the filter we want to visualize
Предлагаемый подход можно найти здесь: https://github.com/penny4860/cnn-visualizer/blob/master/src/utils.py
Мы можем реализовать предложенный подход в TensorFlow, используя следующий псевдокод:
loss = average(get_feature_map(conv_node, filter_index))
gradients = gradients(loss, input_image)
gradients = normalize(gradients)
Использование сеанса TensorFlow:
gradients_values = session.run(gradients)
random_input_image + = gradients_values
Мой вопрос:
Как реализовать ту же процедуру с помощью API while_loop TensorFlow?