1

可能很多人已经看过谷歌研究的这篇文章:

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

它描述了 Google 团队如何制作神经网络来实际绘制图片,就像人工艺术家一样 :)

我想做一些类似的事情,只是为了看看它是如何工作的,并可能在将来使用它来更好地了解是什么导致我的网络失败。问题是 - 如何使用 nolearn\lasagne (或者可能是 pybrain - 它也可以工作,但我更喜欢 nolearn)来实现它。

更具体地说,谷歌的人已经用一些架构训练了一个人工神经网络来对图像进行分类(例如,对照片上的鱼进行分类)。好吧,假设我在 nolearn 中构建了一个具有某种架构的 ANN,并且我已经接受了一定程度的训练。但是……接下来该怎么办?我没有从他们的文章中得到它。他们似乎并不只是可视化某些特定层的权重。在我看来(也许我错了)就像他们做两件事之一:

1) 将一些现有图像或纯粹的随机噪声馈送到经过训练的网络,并可视化其中一个神经元层的激活。但是 - 看起来并不完全正确,因为如果他们使用卷积神经网络,层的维度可能低于原始图像的维度

2)或者他们将随机噪声提供给经过训练的 ANN,从其中一个中间层获取其中间输出并将其反馈回网络 - 以获得某种循环并检查神经网络层认为可能存在的随机噪音。但同样,由于与#1中相同的维度问题,我可能是错的

所以......对此有什么想法吗?我们如何使用 nolearn 或 pybrain 做与 Google 在原始文章中所做的类似的事情?

4

2 回答 2

3

从他们在 github 上的 ipython 笔记本

制作“梦想”图像非常简单。本质上,它只是一个梯度上升过程,试图最大化特定 DNN 层激活的 L2 范数。以下是我们发现对获得优质图像有用的一些简单技巧:

  • 通过随机抖动偏移图像
  • 标准化梯度的大小
  • 上升步骤适用于多个音阶(八度音阶)的上升
于 2015-07-03T07:19:25.413 回答
1

它是使用卷积神经网络完成的,您是正确的,激活的维度将小于原始图像,但这不是问题。

您可以通过前向/后向传播的迭代来更改图像,就像您通常训练网络的方式一样。在前向通道中,您只需要一直走到您想要使用的特定层。然后在反向传播中,您将传播回网络的输入而不是权重。

因此,您不是找到关于损失函数的权重梯度,而是找到关于一组激活的 l2 归一化的输入梯度。

于 2016-01-17T21:56:54.553 回答