TensorFlow创建DeepDream网络

Google 于 2014 年在 ImageNet 大型视觉识别竞赛(ILSVRC)训练了一个神经网络,并于 2015 年 7 月开放源代码。



该网络学习了每张图片的表示。低层学习低级特征,比如线条和边缘,而高层学习更复杂的模式,比如眼睛、鼻子、嘴巴等。因此,如果试图在网络中表示更高层次的特征,会看到从原始 ImageNet 中提取的不同特征的组合,例如鸟的眼睛和狗的嘴巴。



考虑到这一点,如果拍摄一张新的图片,并尝试最大化与网络高层的相似性,那么结果会得到一张新的视觉体验的图片。在这张新视觉体验的图片中,由高层学习的一些模式如同是原始图像的梦境一般。下图是一张想象图片的例子:

图 1 Google Deep Dreams 的示例

准备工作

从网上下载预训练的 Inception 模型(https://github.com/martinwicke/tensorflow-tutorial/blob/master/tensorflow_inception_graph.pb)。

具体做法

  1. 导入 numpy 进行数值计算,functools 定义一个或多个参数已经填充的偏函数,Pillow 用于图像处理,matplotlib 用于产生图像:

  1. 设置内容图像和预训练模型的路径。从随机噪声的种子图像开始:

  1. 以 graph 的形式加载从网上下载的 Inception 网络。初始化一个 TensorFlow 会话,用 FastGFile(..) 加载这个 graph,并用 ParseFromstring(..) 解析该 graph。之后,使用 placeholder(..) 方法创建一个占位符作为输入。 imagenet_mean
    是预先计算的常数,这里的内容图像减去该值以实现数据标准化。事实上,这是训练得到的平均值,规范化使得收敛更快。该值将从输入中减去并存储在 t_preprocessed 变量中,然后用于加载 graph 定义:

  1. 定义一些 util 函数来可视化图像,并将 TF-graph 生成函数转换为常规 Python 函数(请参阅下面的示例):

  1. 计算图像的梯度上升值。为了提高效率,应用平铺计算,其中在不同的图块上计算单独的梯度上升。通过多次迭代对图像应用随机偏移以模糊图块的边界:

  1. 定义用来减少输入层均值的优化对象。通过考虑输入张量,该梯度函数可以计算优化张量的符号梯度。为了提高效率,图像被分割成几块,然后调整大小并添加到块数组中。对于每个块,使用 calc_grad_tiled 函数:

  1. 加载特定的内容图像,并开始想象。在这个例子中,作者的脸被转化成类似于狼的模样:

图 2 深度转换的例子,其中一个作者变成了狼

解读分析

神经网络存储训练图像的抽象描述:较低层存储线条和边缘等特征,较高层存储较复杂的图像特征,如眼睛、脸部和鼻子。通过应用梯度上升过程,这里使损失函数最大化并促使发现类似于由较高层记忆的图案的内容图片模式。这样网络就生成了令人致幻的图片。

TensorFlow创建DeepDream网络的更多相关文章

  1. tensorflow创建cnn网络进行中文手写文字识别

    数据集下载地址:http://www.nlpr.ia.ac.cn/databases/handwriting/download.html chinese_write_detection.py # -* ...

  2. Tensorflow创建和读取17flowers数据集

    http://blog.csdn.net/sinat_16823063/article/details/53946549 Tensorflow创建和读取17flowers数据集 标签: tensorf ...

  3. nova-network创建初始化网络

    nova-network创建初始化网络

  4. Azure 基础:使用 powershell 创建虚拟网络

    什么是虚拟网络 虚拟网络是您的网络在 Azure 云上的表示形式.您可以完全控制虚拟网络的 IP 地址.DNS 的设置.安全策略和路由表.您还可以更进一步,把虚拟网络划分为多个子网.然后用它们连接您的 ...

  5. 创建 overlay 网络 - 每天5分钟玩转 Docker 容器技术(50)

    上一节我们搭建好实验环境,配置并运行了consul,今天开始创建 overlay 网络. 在 host1 中创建 overlay 网络 ov_net1: -d overlay 指定 driver 为 ...

  6. 创建 macvlan 网络 - 每天5分钟玩转 Docker 容器技术(55)

    上一节我们准备好了 macvlan 的实验环境,今天在 host1 和 host2 中创建 macvlan 网络 mac_net1: 注意:在 host2 中也要执行相同的命令. ① -d macvl ...

  7. openstack pike 创建vxlan网络

    #openstack pike 创建vxlan网络 openstack pike 集群高可用  安装部署 汇总 http://www.cnblogs.com/elvi/p/7613861.html # ...

  8. 055、创建macvlan网络 (2019-03-22 周五)

    参考https://www.cnblogs.com/CloudMan6/p/7364332.html     创建macvlan网络,需要指定使用哪块物理网卡进行通信   -o parent=ens1 ...

  9. 050、创建overlay网络(2019-03-15 周五)

    参考https://www.cnblogs.com/CloudMan6/p/7280787.html   在host01中创建overlay网络 ov_net1   在下面的例子中可以看到,我们在ho ...

随机推荐

  1. PHP 导出 CSV 0开头数据丢失问题处理

    PHP导出csv格式时,0开头会被office软件省略,如何处理?比如:033736 导出csv时会被excel转换成 33736 展示,不符合业务需求.处理方案: 微信支付的导出是这么处理的,加个反 ...

  2. 关于Oracle 数据库使用dba_tables或者all_tables或者user_tables统计数据时,与直接查询表统计时数据不一致的记录

    1. 今天写代码发现这个问题,这里记录一下, 不一致的原因是因为  dba_tables .all_tables.user_tables 不是实时的反应表的数据的,所以需要在查询统计之前对表进行手动分 ...

  3. C#-播放器相关

    axWindowsMediaPlayer1.URL= 设置路径 axWindowsMediaPlayer1.Ctlcontrols.play();开始 axWindowsMediaPlayer1.Ct ...

  4. 使用Github+Picgo搭建图床

    虽然我的大部分博客使用的腾讯云的对象存储(COS)作为图床,但是腾讯云的免费对象存储空间结束了,购买资源西南地区大致存储资源包50元/12月+下行流量9元/3月,价格较为高昂,而使用GitHub或者G ...

  5. sqlyog报错2058

    报错描述 SQLyog连接mysql8.0时,SQLyog Ultimate显示报错信息并附带乱码 "错误号码2058,Plugin caching--sha2_passward could ...

  6. 【opencv】Java实现的opencv3.x版本后Highhui报错

    随笔为博主原创,如需转载,请注明出处. opencv3.x以后Highgui不再使用,用Imgcodecs代替,引入import org.opencv.imgcodecs.Imgcodecs;即可. ...

  7. GitBash管理代码

    一.Git是什么? Git是目前世界上最先进的分布式版本控制系统. 1.Git和SVN的区别 SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中 ...

  8. Elasticsearch入门,看这一篇就够了

    目录 前言 可视化工具 kibana kibana 的安装 kibana 配置 kibana 的启动 Elasticsearch 入门操作 操作 index 创建 index 索引别名有什么用 删除索 ...

  9. 转: inline关键字使用

    1.inline用在函数声明时,还是函数定义时?还是两边都加? 首先,内联函数声明和定义最好在同一个文件中,其它的情况没有实用上的意义. 只要在同一个文件中,声明和定义至少其一加"inlin ...

  10. 【BUAA软工】团队项目选择

    项目 内容 班级:北航2020春软件工程 博客园班级博客 作业:团队项目选择与NABCD分析 团队项目选择 项目介绍 项目简介 项目名称:Visual Lab Online 项目简介:一款面向学生和个 ...