Keras深度学习实战——DeepDream模型详解
0. 前言
在《对抗样本生成》一节中,我们通过略微修改输入图像的像素值以改变模型对图像类别的预测。在本节中,我们同样对输入图像略微进行一些修改,但并不以改变图像的标签为目标,本节的目标是令修改后的图像比原始图像更具艺术感,而且能够帮助我们理解卷积神经网络背后的机制。同时,本节所介绍算法也是我们之后将要介绍的神经风格迁移技术的核心。
1. DeepDream 的技术原理
首先,我们先了解 DeepDream 的技术原理。在图像识别相关博文中,我们学习了如何利用卷积神经网络进行图像识别,利用若干卷积操作处理输入图像,输入图像类别标签。在模型训练阶段,使用大量训练图像计算梯度信息,网络根据梯度信息调整和学习最佳参数。
在《对抗攻击》中,我们知道,如果想让一张图像被判断为某一指定类别,可以将输出概率作为优化目标,不断调整输入图像的像素值,让指定类别的输出概率尽可能大。类似的,假设我们想知道神经网络中间的卷积层究竟学到了什么,只需要最大化卷积层某一通道的输出,由于在大多数卷积层中都包含多个通道,因此卷积的一个通道就可以代表一种学习到的“信息”。以某个通道的值作为优化目标,就可以明白这个通道究竟学习到了什么,这也就是 DeepDream 的基本原理。
我们通过预训练的模型传递图像,并使用我们希望获得激活的神经网络层。神经网络会调整输入像素值,直到令所选网络层的激活值最大。同时,我们还需要确保激活的最大值不超过设定的阈值,因为我们不希望生成的图像与原始图像有巨大差异。
2. DeepDream 模型分析
对 DeepDream 有了简单的了解后,接下来,我们制定实现 DeepDream 算法的策略:
选择需要最大化激活的神经网络层,并给这些网络层分配更大的权重以增加它们在总损失中的比重
提取给定神经网络层得到的图像特征,并计算每一层的损失值:
当该层中图像输出的平方和最高时,该图像在该层的激活值最大
提取输入像素值相对于损失的梯度变化
根据提取的梯度变化更新输入图像像素值
为更新的输入图像像素值计算所有选定网络层上的损失值,即网络层激活值的平方和
如果损失值大于预定义的阈值,则停止更新图像
3. DeepDream 算法实现
在本节中,我们使用 keras 实现 DeepDream 算法,生成更具艺术风格的图像。
3.1 数据加载与预处理
导入相关的库,并加载图片:

同样与对抗样本生成一样,如果使用 TensorFlow2
作为 Keras
的后端,需要在代码开头加上以下代码,切换梯度求解的执行模型:
定义图像预处理函数,以便随后可以将其传递给 VGG19
模型:
构建一个对处理后的图像进行逆操作的函数,以进行可视化:
使用以上预处理函数 preprocess_image
,预处理图像,并加载预训练的 VGG19
模型:
3.2 DeepDream 生成模型
定义用于总损失值计算的神经网络层,使用第 2
个和第 5
个池化层用于总损失的计算,并为它们分配权重,使不同层将对总损失值具有不同贡献,可以使用其他的网络层和权重组合,生成不同图片:
初始化损失函数以及模型中各个网络层的字典:
计算激活的总损失值,遍历选定用于计算激活的网络层 (layer_contributions
),并记录分配给每个网络层的权重 (coeff
)。另外,我们计算选定神经网络层的输出 (activation
),并在缩放后使用激活值的平方和来更新损失值:
初始化梯度值,使用 K.gradients
方法可以用于计算损失相对于输入 dream
的梯度变化:
标准化梯度值,以使梯度的变化更加平缓:
创建函数,将输入图像 dream
映射到损失值和损失值相对于输入像素值的梯度变化:
定义函数 eval_loss_and_grads
,使用 fetch_loss_and_grads
函数计算输入图像的损失和梯度变化,并返回:
多次迭代计算的损失和梯度变化更新原始图像,我们循环遍历图像 100
次,首先定义更改学习率以及最大的损失上限,即图像修改的上限:
接下来,计算图像的损失和梯度变化值,如果损失值大于定义的阈值,则停止修改图像:
基于梯度变化修改图像,并对图像进行逆向处理并进行可视化:
代码生成的最终图像如下所示:

从上图可以看到,图像中的包含波浪形的模式,这些模式是由于令各个网络层的激活最大化的结果。
小结
DeepDream 利用训练完成的深度卷积神经网络,仅需要优化模型卷积层某个通道的激活值即可生成令人印象深刻的图像。本节首先介绍了 DeepDream 的基本原理,并使用 Keras 实现了 DeepDream 生成模型,不仅能够生成富有艺术感的图像,同时加深对卷积神经网络的背后运行机制的理解。
这里给大家准备了一些我精心挑选的AI的学习资料。关注VX公众H【咕泡AI】回复【333】即可领取!
①10G教学视频包(附课件+代码)
②AI人工智能:54份行业重磅报告汇总
③能写进简历的企业级项目实战。
④100篇+深度学习论文合集
⑤人工智能必读书籍
⑥专属学习路径规划
⑦不定期大神直播,学习和困惑解答
⑧拿来就能跑通的论文复现代码讲解及数据集
这些资料都比较珍贵,但是对自我的职业发展价值则是无价的!
别慌,这些资料这一次全部免费分享给大家。觉得好,就不要吝啬你的三连哦,这样我才有动力持续更新哦