Tensorflow - Визуализация изученных фильтров предварительно обученной сети

1

В настоящее время я пытаюсь визуализировать изученные фильтры моего 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 по умолчанию, за исключением использования сигмовидной функции.

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

  • 0
    Добро пожаловать в переполнение стека! Отличная работа с вопросом - очень приятно видеть такой отточенный вопрос с первого вопроса. :-)
Теги:
tensorflow
neural-network
tensorboard
visualization

1 ответ

0
Лучший ответ

В настоящее время я пытаюсь визуализировать изученные фильтры моего 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() в вашей модели_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))
  • 0
    Спасибо, но куда / как я могу импортировать саму мою модель с обученными весами? При использовании моей сети я обычно использовал строку estim = tf.estimator.Estimator(model_fn=model..., model_dir="...") прежде чем указать, что я хочу что-то предсказать, например
  • 0
    Я отредактировал свой ответ.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню