Tensorflow - Визуализация изученных фильтров предварительно обученной сети - PullRequest
0 голосов
/ 05 июля 2018

В настоящее время я пытаюсь визуализировать изученные фильтры моего CNN с помощью тензорного потока в python. Я нашел много версий, работающих с набором данных mnist при обучении новой сети, но не смог применить его к моему приложению. Я обучил объект Estimator, который хранится на моем диске, с помощью специального набора данных. Модель содержит слои, такие как

conv1 = tf.layers.conv2d(inputs=input_layer, filters=32, kernel_size=[5, 5], padding="same", activation=tf.nn.sigmoid)

и хотите визуализировать прогноз только на одном изображении с размерами (28,28,3). В тензорной доске этот слой называется просто «conv2d», в то время как остальные называются «conv2d_2» и т. Д., Он в основном имеет ту же структуру, что и сеть MNIST по умолчанию, за исключением того, что он использует функцию sigmoid.

Я не знаю, как это реализовать - я думал о получении весов и смещений и пересчете каждого слоя в зависимости от шага и размера фильтра, но я уже не смог получить весы и думаю, что есть более простое решение.

1 Ответ

0 голосов
/ 05 июля 2018

В настоящее время я пытаюсь визуализировать изученные фильтры моего CNN с помощью тензорного потока в python.

Я думаю, что вы подразумеваете под визуализацией активаций определенного слоя? Если это так, вам просто нужно запустить тензор этого слоя для изображения, которое вы хотите, например, так:

import matplotlib.pyplot as plt

# Model definition
...
conv1 = tf.layers.conv2d(inputs=input_layer, filters=32, kernel_size=[5, 5], padding="same", activation=tf.nn.sigmoid)
...

# Getting activations
acts = sess.run(conv1, {input_layer: your_image})

# Visualizing every filters
for i in range(acts.shape[3]):
  plt.imshow(acts[:,:,:,i].squeeze())
  plt.show()

Если вы используете Estimator, вы можете непосредственно визуализировать эволюцию своих активаций, используя tf.summary.image () в вашей model_fn:

# In model_fn
...
conv1 = tf.layers.conv2d(inputs=input_layer, filters=32, kernel_size=[5, 5], padding="same", activation=tf.nn.sigmoid)
acts_filters = tf.unstack(conv1, axis=3)
for i, filter in enumerate(acts_filters):
    tf.summary.image('filter' + str(i), tf.expand_dims(filter, axis=3))
...