简介:自动编码器是一种可以进行无监督学习的神经网络模型。一般而言,一个完整的自动编码器主要由两部分组成,分别是用于核心特征提取的编码部分和可以实现数据重构的解码部分。
1.自动编码器入门
在自动编码器中负责编码的部分也叫做编码器(Encoder),而负责解码的部分也叫作解码器(Decoder)。编码器主要负责对原始的输入数据进行压缩并提取数据中的核心特征,而解码器主要是对在编码器中提取的核心特征进行展开并重新构造出之前的输入数据。

如图就是一个简化的自动编码器模型,它的主要结构是神经网络,该模型的最左边是用于数据输入的输入层,在输入数据通过神经网络的层层传递之后得到了中间输入数据的核心特征,这就完成了在自编码器中输入数据的编码过程。
然后,将输入数据的核心特征再传递到一个逆向的神经网络中,核心特征会被解压并重构,最后得到了一个和输入数据相近的输出数据,这就是自动编码器中的解码过程。
输入数据通过自动编码器模型的处理后又被重新还原了。
自动编码器模型的最大用途就是实现输入数据的清洗,比如去除输入数据中的噪声数据、对输入数据的某些关键特征进行增强和放大,等等。
2.PyTorch之自动编码实战
本节的自动编码器模型解决的是一个去除图片马赛克的问题。要训练出这个模型,首先需要生成一部分有马赛克的图片。我们知道图片是由像素点构成的,而像素点其实就是一个个的数字,我们使用的MNIST数据集中的手写图片的像素点数字的范围是0-1,所以处理马赛克的一种简单方式就是对原始图片中的像素点进行扰乱,我们在这里通过对输入的原始图片加上一个维度相同的随机数字来达到了处理马赛克的目的。
下面就可以搭建自动编码模型了,搭建自动编码模型最常用的两种方式分别是使用线性变换来构建模型中的神经网络和使用卷积变换来构建模型中的神经网络。
(1)通过线性变换实现自动编码器模型
线性变换方式仅使用线性映射和激活函数作为神经网络结构的主要组成部分。
代码中的self.encoder对应的是自动编码器中的编码部分,在这个过程中实现了输入数据的数据量从224个到128个再到64个最后到32个的压缩过程,这32个数据就是我们提取到的核心特征。
self.decoder对应的是自动编码器中的解码部分,这个过程实现了从32个到64个再到224个的逆向解压过程。
然后对定义好的模型进行训练;
因为这里我们需要衡量图片在去码之后和原始图片之间的误差,所以选择均方误差这类损失函数作为度量。
总体的训练流程是我们首先获取一个批次的图片,然后对这个批次的图片进行打码处理并裁剪到指定的像素值范围内,因为之前说过,在MNIST数据集使用的图片中每个像素点的数字值在0-1之间。在得到了经过打码处理的图片后,将其输入搭建好的自动编码器模型中,经过模型处理后输出一个预测图片,用这个预测图片和原始图片进行损失值计算,通过这个损失值对模型进行后向传播,最后就能得到去除图片马赛克效果的模型了。
(2)通过卷积变换实现自动编码器模型
卷积变换的方式仅使用卷积层、最大池化层、上采样层和激活函数作为神经网络结构的主要组成部分。
上采样层:即torch.nn.Upsample类,这个类的作用就是对我们提取到的核心特征进行解压,实现图片的重写构建,传递给它的参数一共又两个,分别是scale_factor和mode:前者用于确定解压的倍数;后者用于定义图片重构的模式,可以选择的模式有:nearset(最邻近法)、linear(线性插值法)、bilinear(双线性插值法)和trilinear(三线性插值法)。
然后对定义好的模型进行训练;
最后,我们通过使用一部分测试数据集中的图片来验证我们的模型能否正常工作。
结果显示:首先,在结果的可视性上没有问题;其次,去码效果更好,还原出来的图片内容更清晰。

第十一章 自动编码器相关推荐

  1. [swift 进阶]读书笔记-第十一章:互用性 C11P1 实践:封装 CommonMark

    第十一章:互用性 Interoperability 前言: swift 的最大优点就是与C 或者 OC 混编的时候稳的一匹 本章主要讲了swift和C之间的一些知识点. 11.1 实践:封装 Comm ...

  2. 【译】 WebSocket 协议第十一章——IANA 注意事项(IANA Considerations)

    概述 本文为 WebSocket 协议的第十一章,本文翻译的主要内容为 WebSocket 的 IANA 相关注意事项. IANA 注意事项(协议正文) 11.1 注册新 URI 协议 11.1.1 ...

  3. java语言仅支持单重继承_java语言程序设计基础篇习题_复习题_第十一章

    java语言程序设计基础篇习题_复习题_第十一章 11.1 下面说法是真是假?一个子类是父类的子集. 11.2 使用什么关键字来定义一个子类 11.3 什么是单一继承?什么是多重继承?java支持多重 ...

  4. 《javascript设计模式》笔记之第十章 和 第十一章:门面模式和适配器模式

    第十章:门面模式 一:门面模式的作用 简化已有的api,使其更加容易使用 解决浏览器的兼容问题 二:门面模式的本质 门面模式的本质就是包装已有的api来简化操作   三:门面模式的两个简单例子 下面这 ...

  5. 计算机网络离不开光缆,九年级物理全册 第二十一章 第四节 越来越宽的信息之路习题课件 新人教版.ppt...

    九年级物理全册 第二十一章 第四节 越来越宽的信息之路习题课件 新人教版.ppt 第二十一章信息的传递,第四节越来越宽的信息之路,1微波的性质更接近光波,大致沿_______传播,需要每隔_____k ...

  6. 开发日记-20190915 关键词 汇编语言王爽版 第十一章

    第十一章 标志寄存器 CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理器,个数和结构都可能不同)具有以下三种作用. (1)用来存储相关的指令的某些执行结果 (2)用来为CPU执行相关的指令提供 ...

  7. 羊皮卷的实践-第二十一章

    第二十一章 高山滑雪是人与环境以及时间的竞赛.每当我看到输赢之间只差极短的时间时,我就不禁摇头同情那些输家. 第一名的时间是一分三十七秒二二. 第二名的时间是一分二十七秒二五. 也就是说,冠军与平庸之 ...

  8. [转]Windows Shell 编程 第十一章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987992】...

    第十一章 探索Shell 我们现在将注意力从API转向Windows Shell本身.从这一章往后,我们的目标主要集中在清晰和全面的揭示探测器的工作原理和Shell 命名空间的构成对象上,最后给出客户 ...

  9. stm32官方例程在哪找_正点原子Linux第十一章模仿STM32驱动开发格式实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第十一章模仿STM32驱动开发格式实验 在上一章使用C语 ...

最新文章

  1. 马云:腾讯不是阿里要打败的对手,是同为社会创造价值的伴侣
  2. 快递信息css3手风琴代码_用纯CSS实现手风琴效果的示例代码
  3. 安卓手机开机键失灵,FASTBOOT模式ADB重启
  4. 视频监控线缆选型须知 转
  5. LEAGUE TABLES【模拟】
  6. Git查看与修改用户名、邮箱(转载)
  7. 智能摄像机的网络安全如何保障?
  8. vbScript: 编号成生不夠位數前面加零
  9. A. Game With Sticks
  10. 计算机组装与配置答案,解答电脑组装配置有哪些
  11. Pycharm安装Markdown插件
  12. js代码跳转页面时的路径问题
  13. 《Python知识手册》V2.1版,高清PDF免费获取
  14. 无 Flash 时代,让直播拥抱 H5
  15. 物联网应用技术竞赛——单片机笔记
  16. 查询mysql并转成json_将数据库SQL查询结果直接转为JSON
  17. vue组件深度传值provide、inject,值类型响应式的方法
  18. windows计算机锁屏的快捷键是什么,win10锁屏快捷键是什么_win10怎么使用快捷键锁屏...
  19. 函数式接口 BiConsumer接口和Consumer接口
  20. MapBoxGL 入门

热门文章

  1. 计算机三级信息安全技术知识点总结
  2. 首个国产细菌检验质谱仪 进入临床应用
  3. VASP6.1.0以上版本中VASPsol的修改及编译方法
  4. 机器学习简单介绍LWS
  5. HTML5+CSS3+JQuery打造自定义视频播放器
  6. 第九章 聚合搜索: Aggregations
  7. WTG下载:制作U盘系统和移动硬盘WTG
  8. rabbitmq知识汇总
  9. 光纤跳线接口_光缆、尾纤、跳线、终端盒的作用与接法
  10. 古诗词学习-常见诗人大全-先秦时期(诗经+屈原+庄周+左丘明+韩非+李耳+列御寇+孔丘+荀况+孙武)