可能很多人已经看过Google研究团队的这篇文章:
http://googleresearch.blogspot.ru/2015/06/inceptionism-going-deeper-into-neural.html
文章描述了Google团队如何让神经网络像人工艺术家一样绘制图片 🙂
我想做一些类似的事情,只是为了看看它是如何工作的,并且可能在未来用它来更好地理解我的网络为何失败。问题是 – 如何使用nolearn\lasagne(或者pybrain – 它也可以,但我的首选是nolearn)来实现这一点?
更具体地说,Google的团队训练了一个具有某种架构的人工神经网络来分类图像(例如,识别照片上的哪种鱼)。好吧,假设我已经在nolearn中构建了一个具有某种架构的人工神经网络,并且已经训练到了一定程度。但是……接下来该做什么?我从他们的文章中没有完全理解。看起来他们不仅仅是可视化某些特定层的权重。我觉得(可能我错了)他们做了以下两件事之一:
1)将现有图像或纯粹的随机噪声输入到训练好的网络中,并可视化其中一个神经元层的激活情况。但 – 这似乎并不完全正确,因为如果他们使用了卷积神经网络,层的维度可能低于原始图像的维度
2)或者他们将随机噪声输入到训练好的ANN中,从中间层获取其中间输出,并将其反馈到网络中 – 以获得某种循环,并检查神经网络层认为随机噪声中可能存在什么。但同样,由于与#1中相同的维度问题,我可能错了
那么……对此有何想法?我们如何使用nolearn或pybrain来做与Google在原始文章中所做的事情类似的事情?
回答:
制作“梦想”图像非常简单。本质上,这只是一个试图最大化特定DNN层激活的L2范数的梯度上升过程。以下是我们发现对获取好图像有用的几个简单技巧:
- 通过随机抖动偏移图像
- 归一化梯度的大小
- 上升步骤在多个尺度(八度)上应用上升