DeepDream过程和原理概要

文章目录

    • 1.过程
        • 1.1 输入准备和输出
        • 1.2 选定输入的模型的某个(些)层,构造目标函数L
        • 1.3 计算目标函数L关于图片每个像素的梯度grad(L,image)
        • 1.4 根据梯度更新image
        • 1.5 重复1.3~1.4直到达到给定的步数
    • 2. 原理理解
    • 3.参考资料

1.过程

1.1 输入准备和输出

输入:训练好的神经网络模型,例如Inception-V3模型;
   一张需要加工的图片,记做original_image,如下图所示;
DeepDream过程和原理概要_第1张图片

输出:经过DeepDream加工之后的图片,如下图所示,记做image。image初始值设置为original_image。
DeepDream过程和原理概要_第2张图片

1.2 选定输入的模型的某个(些)层,构造目标函数L

目标函数L是对选定的所有的层的输出(官方文档说‘activation’说的稍微有点不明白,其实就是每层的输出),每层求均值,对这些均值再求和。

1.3 计算目标函数L关于图片每个像素的梯度grad(L,image)

计算得到的梯度的维度和图片的维度是相同的。

1.4 根据梯度更新image

image=image+grad(L,image)*learning_rate,普通的SGD是‘减’梯度,这里是‘加’;所以可以理解这里的方向是增加目标函数L。

1.5 重复1.3~1.4直到达到给定的步数

例如100步

2. 原理理解

可以看到上述过程主要步骤是:计算目标函数L对于输入图片的梯度,然后用这个梯度来更新image,更新的方向是使目标函数L增大。

我理解的DeepDream就是根据某个(些)层的输出对于输入(输入的图片)的敏感度(导数的含义)来更新原图片,就是原图片加上模型中提取的某些特征,造成很多奇怪同时看上去有些规律的图片,就像做梦一样(人做梦也是奇怪又有些规律)。

3.参考资料

DeepDeam参考资料

你可能感兴趣的:(#,《Hands,On,ML》笔记)