机器学习 - 使用nolearn\lasagne制作神经网络来绘制图像(又名Google的初始主义)



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

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

它描述了谷歌团队是如何制造神经网络来实际绘画的,就像一个人造艺术家:(

我想做一些类似的事情,看看它是如何工作的,也许将来会用它来更好地了解是什么让我的网络失败。问题是——如何用nolearn \千层面(或者pybrain——它也会起作用,但我更喜欢nolearn(来实现它。

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

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

2( 或者,他们将随机噪声输入到经过训练的神经网络,从其中一个中间层获得其中间输出,并将其反馈到网络中——以获得某种循环,并检查神经网络层认为随机噪声中可能存在什么。但同样,由于与#1 中相同的维度问题,我可能错了

所以。。。对此有什么想法吗?我们怎么能用nolearn或pybrain做谷歌在原文章中做的类似的事情呢?

从github:上的ipython笔记本

制作"梦想"图像非常简单。本质上它只是一个梯度上升过程,试图最大化特定DNN层的激活。这里有几个简单的技巧我们发现有助于获得好的图像:

  • 通过随机抖动偏移图像
  • 归一化梯度的大小
  • 上升阶梯适用于跨越多个音阶(八度音阶(的上升

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

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

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

相关内容

最新更新