Deep Learning with Python

这篇文章是我学习《Deep Learning with Python》(第二版,François Chollet 著) 时写的系列笔记之一。文章的内容是从 Jupyter notebooks 转成 Markdown 的,你可以去 GitHub 或 Gitee 找到原始的 .ipynb 笔记本。

你可以去这个网站在线阅读这本书的正版原文(英文)。这本书的作者也给出了配套的 Jupyter notebooks。

本文为 第8章 生成式深度学习 (Chapter 8. Generative deep learning) 的笔记之一。

文章目录

  • Deep Learning with Python
    • 8.2 DeepDream
      • 用 Keras 实现 DeepDream

8.2 DeepDream

DeepDream

DeepDream 是一种让机器修改图像技术,它利用卷积神经网络,可以作出很迷幻的图像:

由于 DeepDream 用的 CNN 是在 ImageNet 上训练的,而 ImageNet 里有大量的动物图片,所以,DeepDream 生成的图像里有很多动物、动物的一部分的伪影。

DeepDream 使用的算法与卷积神经网络过滤器可视化技术很类似。回忆一下,卷积神经网络过滤器可视化所做的操作是:反向运行卷积神经网络,从一张带随机噪点的空白图像输入,做梯度上升,使某过滤器激活最大化。

DeepDream 与过滤器可视化的主要区别在于:

  • 在 DeepDream 中,我们尝试将所有层的激活最大化,而不只是某一层,这样,会有大量的可视化特征混合在一起——生成更加迷幻的图像。
  • 从一张现有的图像开始,而不是从随机噪点的输入开始,这样生成的图像中会包含输入图像中已存在的视觉模式,并以将其中的一些元素扭曲——生成更加迷幻的图像。
  • 输入图像会在不同的尺度上进行处理——这些尺度称为「八度」(octave),这可以提高输出的质量。

用 Keras 实现 DeepDream

首先,我们需要选定一个在 ImageNet 上预训练的卷积神经网络:VGG16、Inception、ResNet50 等等都可以。实践证明,Inception 可以生成的比较好,所以这里我们使用 Keras 内置的 Inception V3 模型。

# 不使用及时执行模式
# See https://github.com/tensorflow/tensorflow/issues/33135import tensorflow as tftf.compat.v1.disable_eager_execution()
# 加载预训练的 Inception V3 模型from tensorflow.keras.applications import inception_v3
from tensorflow.keras import backend as KK.set_learning_phase(0)model = inception_v3.InceptionV3(weights='imagenet', include_top=False)
WARNING:tensorflow:From <ipython-input-3-aa9be14f7cc2>:6: set_learning_phase (from tensorflow.python.keras.backend) is deprecated and will be removed after 2020-10-11.
Instructions for updating:
Simply pass a True/False value to the `training` argument of the `__call__` method of your layer or model.

接下来定义损失——需要用梯度上升最大化的量。DeepDream 中,我们要同时将多个层的所有过滤器激活最大化。具体的实现是:对一组靠近顶部的层激活的 L2 范数进行加权求和,然后求出这个值的最大化。层的选择、以及权重分配对生成的结果影响很大:

  • 靠近底部的层会生成基本的几何图案;
  • 靠近顶部的层会生成能够看出某些物品的图像(ImageNet 中的图案,比如鸟或狗)

这里就随便选几个了:

# 输出 Inception V3 模型的结构,在其中选择层import tensorflow as tftf.keras.utils.plot_model(model)

# DeepDream 配置layer_contributions = {'mixed4': 0.0,'mixed5': 3.0,'mixed6': 2.0,'mixed7': 1.5,
}

求对于这些被选中层的损失:

# 定义需要最大化的损失layer_dict = dict([(layer.name, layer) for layer in model.layers])loss = K.variable(0.)for layer_name in layer_contributions:coeff = layer_contributions[layer_name]activation = layer_dict[layer_name].outputscaling = K.prod(K.cast(K.shape(activation), 'float32'))# loss += coeff * K.sum(K.square(activation[:, 2: -2, :])) / scaling# 应该用下面的代码												

Python深度学习之DeepDream相关推荐

  1. Python深度学习(DeepDream)--学习笔记(十九)

    8.2 DeepDream DeepDream是一种艺术性的图像修改技术,它用到了卷积神经网络学到的表示.DeepDream由Google于2015年夏天首次发布,使用Caffe深度学习库编写实现.它 ...

  2. 《python深度学习》代码中文注释

    <python深度学习>由Keras之父.现任Google人工智能研究员的弗朗索瓦•肖莱(François Chollet)执笔,详尽介绍了用Python和Keras进行深度学习的探索实 ...

  3. 《python深度学习》学习笔记与代码实现(第八章:8.1,8.2,8.3)

    <python深度学习>第八章:生成式深度学习 8.1 使用LSTM生成文本 给定一个序列,预测下一个或多个标记的概率,从而生成之后的序列 给定前面的标记,能够对下一个标记的概率进行建模的 ...

  4. 粗读《Python 深度学习》(7)

    粗读<Python 深度学习>(7) 第八章 生成式深度学习 8.1 使用 LSTM 生成文本 8.1.1 生成式循环网络简史(略) 8.1.2 如何生成序列数据 8.1.3 采样策略的重 ...

  5. 【深度学习】DeepDream的实现

    问题描述: 用keras实现DeepDream.我们将从一个在 ImageNet 上预训练的卷积神经网络开始.本次选择的模型是Inception模型 实现步骤: 下载数据集和设置DeepDream配置 ...

  6. Python深度学习:基于TensorFlow

    作者:吴茂贵,王冬,李涛,杨本法 出版社:机械工业出版社 品牌:机工出版 出版时间:2018-10-01 Python深度学习:基于TensorFlow

  7. Python深度学习:基于PyTorch [Deep Learning with Python and PyTorch]

    作者:吴茂贵,郁明敏,杨本法,李涛,张粤磊 著 出版社:机械工业出版社 品牌:机工出版 出版时间:2019-11-01 Python深度学习:基于PyTorch [Deep Learning with ...

  8. python神经结构二层_《python深度学习》笔记---8.3、神经风格迁移

    <python深度学习>笔记---8.3.神经风格迁移 一.总结 一句话总结: 神经风格迁移是指将参考图像的风格应用于目标图像,同时保留目标图像的内容. 1."神经风格迁移是指将 ...

  9. Python深度学习之搭建小型卷积神经网络(Kaggle网站Dogs-vs-Cats数据集)

    完全来源与<Python深度学习>中的例子,仅供学习只用. Cats vs. Dogs(猫狗大战)是Kaggle大数据竞赛的数据集,数据集由训练数据和测试数据组成,训练数据包含猫和狗各12 ...

最新文章

  1. Storm和MR及Spark Streaming的区别
  2. centos solr 部署到 tomcat 上
  3. eclipse 修改maven项目的jdk版本
  4. 前端学习(2948):webpack创建简单项目
  5. 34营销的三要素:真实诚信、诱饵引入、合理宣传
  6. Java基本数据类型和String类型的转化
  7. 95-10-130-启动-TransactionCoordinator
  8. 编程练习赛11B 物品价值(装压dp)
  9. 我购买了一台acer笔记本
  10. innodb 关键特性、缓冲池、插入缓冲、两次写
  11. html5兼容包,webpack4搭建现代Hybird-h5工程
  12. java国际时间转换为北京时间
  13. 计算机 上的图片怎样加密码,高手加密法之利用图片给电脑加密新招
  14. MTK平台前后摄使用PMIC供电无法设置不同的DVDD电压
  15. 新闻字幕条制作,一款不错的ae字幕模板
  16. JSP-----JSP简介
  17. android清理存储工具,(安卓)CCleaner Pro — 手机垃圾文件清理工具
  18. 计算机启动的四种方式,电脑有几种开机方式
  19. laravel安装的几种方法总结
  20. 微软官方原版win7(64位/32位)旗舰版系统下载

热门文章

  1. matlab滤波器 代码,自适应滤波器设计及Matlab实现附程序代码整理版.doc
  2. 各种nvidia显卡nvlink之后深度学习效率对比、各种显卡功耗、温度对比
  3. 多数满意比不上少数狂热
  4. 用计算机如何算瓷砖菱形加工,瓷砖菱形怎么计算公式
  5. 【开发日记】Deep Speaker 开发日记之Triplet选择
  6. 【Python】日期时间类型格式与时间戳转换
  7. mac电脑忘记密码后强制更改登陆密码
  8. 认识SCI、EI、SSCI、IEEE、CSSCI、CSCD
  9. 弱网下的极限实时视频通信
  10. 深入浅出图解CNN-卷积神经网络