Google DeepDream Разработано

12

На этом сайте я видел несколько вопросов о Deep Dream, однако ни один из них, по-видимому, фактически не говорит о том, что конкретно делает DeepDream. Насколько я понял, они, похоже, изменили целевую функцию, а также изменили обратное распространение, так что вместо обновления весов они обновляют входное изображение.

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

Тем не менее, интересная часть глубокого сна заключается в том, что он делает это для каждого слоя, и в этом отношении я не совсем уверен, как он подчеркивает детали для каждого слоя.

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

Ссылки: Здесь vzn ответил на аналогичный вопрос: /cs//a/44857/49671

По этой ссылке есть реализация Deepdream, здесь: http://auduno.com/post/125362849838/visualizing-googlenet-classes

Кроме этого , не предлагают преувеличения функций , как обсуждалось здесь: http://googleresearch.blogspot.com/2015/06/inceptionism-going-deeper-into-neural.html

Где они оба показывают визуализацию отдельных классов и отдельных слоев и говорят:

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

боб
источник
2
Возможный дубликат Google Deep Dreamer
Манлио

Ответы:

7

Идея DeepDream заключается в следующем: выбрать некоторый слой из сети (обычно сверточный слой), пропустить начальное изображение через сеть, чтобы извлечь объекты на выбранном слое, установить градиент на этом слое, равный самим активациям, а затем выполнить обратное распространение к изображению.

Почему это имеет смысл? Интуитивно он усиливает функции, которые максимально активируются в сети. Распространяя этот градиент, мы сделаем обновление изображения, которое усилит любую из существующих активаций. Если в слое есть детектор, похожий на кошку, и изображение содержит какой-то патч, похожий на кошку, DeepDream усиливает эту активацию, обновляя этот патч, чтобы он стал еще более похожим на кошку. В результате DeepDream пытается найти кошек и собак повсюду на изображении (в наборе данных ImageNet много собак, поэтому в сети много нейронов, связанных с собаками).

objective_L2dИксзнак равноИкс

Максим
источник