- 21个项目玩转深度学习:基于TensorFlow的实践详解
- 何之源
- 854字
- 2020-08-28 01:50:41
4.1 Deep Dream的技术原理
在前面的章节中,已经介绍了如何利用深度卷积网络进行图像识别。在卷积网络中,输入一般是一张图像,中间层是若干卷积运算,输出是图像的类别。在训练阶段,会使用大量的训练图片计算梯度,网络根据梯度不断地调整和学习最佳的参数。对此,通常会有一些疑问,例如:(1)卷积层究竟学习到了什么内容?(2)卷积层的参数代表的意义是什么?(3)浅层的卷积和深层的卷积学习到的内容有哪些区别?Deep Dream可以解答上述问题。
设输入网络的图像为x,网络输出的各个类别的概率为t(如ImageNet为1000种分类,在这种情况下,t是一个1000维的向量,代表了1000种类别的概率),以香蕉类别为例,假设它对应的概率输出值为t[100],换句话说,t[100]代表了神经网络认为一张图片是香蕉的概率。设定t[100]为优化目标,不断地让神经网络去调整输入图像x的像素值,让输出t[100]尽可能的大,最后得到如图4-1所示的图像。
图4-1 极大化某一类别(以香蕉为例)的概率得到的图片
在图4-1中,左边是输入x的初始图像,只是一些随机的噪声,经过神经网络不断地调整,得到极大化t[100]对应的图像。这就是在神经网络“眼中”最具备香蕉特点的图像。在图中可以很明显地观察到香蕉基本的颜色和形状特征。
图4-2展示了更多类别物体对应的特征,第一行分别是大羚羊、量杯、蚂蚁、海星,第二行分别是小丑鱼、香蕉、降落伞、螺钉。
图4-2 极大化神经网络各个输出类别概率得到的图片(详见彩插)
通过图4-2可以理解最后的类别概率代表怎样的含义,但读者还想弄清楚神经网络中间的卷积层究竟学到了什么。其实使用的方法是类似的,只需要最大化卷积层某一通道的输出就可以。同样设输入图像为x,中间某个卷积层的输出是y。y的形状应该是h*w*c,其中h为y的高度,w为y的宽度,c则代表“通道数”。原始图像有R、G、B三个通道,而在大多数卷积层中,通道数都远远不止3个。卷积的一个通道就可以代表一种学习到的“信息”。以某一个通道的平均值作为优化目标,就可以弄清楚这个通道究竟学习到了什么,这也是Deep Dream的基本原理。在下面的的小节中,会以程序的形式,更详细地介绍如何生成并优化Deep Dream图像。