1

Возможно много людей уже видел эту статью исследования Google:Создания нейронной сети, чтобы нарисовать изображение (ака inceptionism от Google), используя nolearn лазанью

http://googleresearch.blogspot.ru/2015/06/inceptionism-going-deeper-into-neural.html

Он описывает, как команда Google сделала нейронные сети на самом деле рисуют картинки, как искусственный художник :)

Я хотел сделать что-то подобное, чтобы увидеть, как он работает и, возможно, использовать его в будущем, чтобы лучше понять, что заставляет мою сеть терпеть неудачу. Вопрос в том, как достичь этого с nolearn \ lasagne (или, может быть, с пирамином - это тоже сработает, но я предпочитаю nolearn).

Чтобы быть более конкретным, ребята из Google обучили ANN с некоторой архитектурой для классификации изображений (например, чтобы классифицировать, какая рыба находится на фотографии). Хорошо, предположим, что у меня есть ANN, построенный в nolearn с некоторой архитектурой, и я в определенной степени обучился. Но ... Что делать дальше? Я не понимаю это из их статьи. Не похоже, что они просто визуализируют весовые коэффициенты некоторых конкретных слоев. Мне кажется (возможно, я ошибаюсь), как будто они делают одну из двух вещей:

1) Подайте некоторое существующее изображение или чисто случайный шум в обученную сеть и визуализируйте активацию одного из нейронных слоев. Но, похоже, это не совсем верно, поскольку, если они используют свернутую нейронную сеть, размерность слоев может быть ниже, чем размерность исходного изображения

2) Или они подают случайный шум на обученный ANN, получают его промежуточные выводят из одного из средних слоев и подают его обратно в сеть - чтобы получить какой-то цикл и проверить, какие слои нейронных сетей могут быть в случайном шуме. Но опять же, я могу ошибаться из-за той же проблемы размерности, что и в # 1

Итак ... Любые мысли по этому поводу? Как мы могли делать подобные вещи, как Google, в оригинальной статье, используя nolearn или pybrain?

+1

https://github.com/google/deepdream –

+0

@ThomasJungblut God. Странно, но я не смог его сначала изначально сделать :) Дайте мне ответ, чтобы я мог принять его? –

ответ

3

From their ipython notebook on github:

Заставить "сон" изображения очень просто. По сути, это всего лишь процесс подъема градиента , который пытается максимизировать норму L2 активаций определенного уровня DNN. Вот несколько простых приемы , которые мы нашли полезными для получения хороших изображений:

  • смещение изображения с помощью случайного джиттера
  • нормализует величину градиента
  • шагов восхождений применяются восхождение по нескольким шкалам (октав)
1

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

Вы изменяете изображение с помощью итераций прямого/обратного распространения, как обычно вы тренируете сеть. На переднем проходе вам нужно идти только до тех пор, пока вы не достигнете определенного слоя, с которым хотите работать. Затем на обратном проходе вы возвращаетесь обратно к входам сети вместо весов.

Таким образом, вместо того, чтобы находить градиенты к весам относительно функции потерь, вы находите градиенты к входам относительно нормализации l2 определенного набора активаций.

 Смежные вопросы

  • Нет связанных вопросов^_^