由 Hinton 提出的标准自动编码机(标准自编码器)只有一个隐藏层,隐藏层中神经元的数量少于输入(和输出)层中神经元的数量,这会压缩网络中的信息,因此可以将隐藏层看作是一个压缩层,限定保留的信息。

自动编码机的学习包括在隐藏层上对输入信号进行压缩表示,然后在输出层尽可能地复现原始输入:
 
图 1 单隐藏层的自动编码机
 
本节利用自动编码机进行图像重构,将利用 MNIST 数据训练自动编码机,并使用它来重构测试图像。
具体做法
  1. 导入所有必要的模块:
 
  1. TensorFlow 中获取 MNIST 数据,这里要注意的一点是,标签并没有进行独热编码,因为并没有使用标签来训练网络。自动编码机是通过无监督学习进行训练的:
 
  1. 声明 AutoEncoder 类,使用 init 方法初始化自动编码机的权重、偏置和占位符,也可以在 init 方法中构建全部的计算图。还需要定义编码器、解码器,set_session(会话建立)和 fit 方法。此处构建的自动编码机使用简单的均方误差作为损失函数,使用 AdamOptimizer 进行优化:
为便于使用,此处还定义了两个辅助函数,reduced_dimension 给出编码器网络的输出,reconstruct 给出重构的测试图像的输出。
  1. 训练时将输入数据转换为 float 型,初始化所有变量并运行会话。在计算时,目前只是测试自动编码机的重构能力:
 
  1. 绘制误差在训练周期中的变化图,验证网络的均方误差在训练时是否得到优化,对于一个好的训练,误差应该随着训练周期的增加而减少:
图示如下:
可以看到,随着网络的学习,损失/成本是下降的,当训练周期达到 5000 时,几乎是在一条线上振荡,这意味着进一步增加训练周期将不再有用。如果现在还想要改进模型,应该调整学习率、批量大小和优化器等超参数。
  1. 观察重构的图像,对比原始图像和自动编码机生成的重构图像:
得到以下结果:
 
解读分析
有意思的是,在前面的代码中,维数从输入的 784 降到了 256,但是网络仍然可以重构原始图像。将自动编码机性能与 RBM 进行对比,其中隐藏层维数相等:
 
 
 可以看到,由自动编码机重构的图像比 RBM 重构的图像要清晰得多。原因在于自动编码机中有更多的权重(从隐藏层到解码器输出层的权重)被训练。自动编码机学到的细节更多,即使两者都将信息压缩到相同的尺寸,其性能也优于 RBM。
知识扩展
像 PCA 一样,自动编码机也可以用于降维,但 PCA 只能进行线性变换,而自动编码机可以使用非线性激活函数,从而在其中引入非线性变换。
下图是 Hinton 的论文“Reducing the dimensionality of data with Neural Networks”复现的结果,图 A 显示 PCA 的结果,图 B 是由 RBM 堆叠的自动编码机(每层节点为 784-1000-500-250-2)的结果:
 
 
正如稍后会看到的,使用堆叠自动编码机时,每个自动编码机最初会独立进行预训练,然后会对整个网络进行微调以获得更好的性能。
 
 
 
 

标准自编码器(TensorFlow实现)的更多相关文章

  1. HEVC(H.265)标准的编码器(x265,DivX265)试用

    基于HEVC(H.265)的的应用级别的编码器发展的速度很快.所说的应用级别,就是指速度比较快的,有实际应用价值的编码器.目前可以直接使用的有两个:x265,DivX265. DivX265 DivX ...

  2. 7 Recursive AutoEncoder结构递归自编码器(tensorflow)不能调用GPU进行计算的问题(非机器配置,而是网络结构的问题)

    一.源代码下载 代码最初来源于Github:https://github.com/vijayvee/Recursive-neural-networks-TensorFlow,代码介绍如下:“This ...

  3. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)如何修改标准驱动器编码器分辨率

    在某个轴的Enc上双击,可以修改Scaling Factor Numerator     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetao ...

  4. TensorFlow文档翻译-01-TensorFlow入门

    版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/junyang/p/7429771.html TensorFlow入门 英文原文地址:https://w ...

  5. Simotion 绝对值编码器使用外部开关回零

    问题来源: 西门子的1FK7二代电机,目前已经没有增量编码器.标准的编码器选项是单圈绝对值,或多圈绝对值. 在某些应用中,如印刷机的版辊.模切轴.飞剪电机等,需要使用外部开关来回零.下文描述了使用外部 ...

  6. tensorflow数据加载、模型训练及预测

    数据集 DNN 依赖于大量的数据.可以收集或生成数据,也可以使用可用的标准数据集.TensorFlow 支持三种主要的读取数据的方法,可以在不同的数据集中使用:本教程中用来训练建立模型的一些数据集介绍 ...

  7. tensorflow批量读取数据

    Tensorflow 数据读取有三种方式: Preloaded data: 预加载数据,在TensorFlow图中定义常量或变量来保存所有数据(仅适用于数据量比较小的情况). Feeding: Pyt ...

  8. tensorflow实现验证码识别案例

    1.知识点 """ 验证码分析: 对图片进行分析: 1.分割识别 2.整体识别 输出:[3,5,7] -->softmax转为概率[0.04,0.16,0.8] - ...

  9. TensorFlow从0到1之浅谈深度学习(10)

    DNN(深度神经网络算法)现在是AI社区的流行词.最近,DNN 在许多数据科学竞赛/Kaggle 竞赛中获得了多次冠军. 自从 1962 年 Rosenblat 提出感知机(Perceptron)以来 ...

随机推荐

  1. 【Java】说说你对ThreadLocal的理解

    思路: 0.ThreadLocal是什么?有什么用? 1.ThreadLocal用在什么地方? 2.ThreadLocal的一些细节 3.ThreadLocal的最佳实践 一.ThreadLocal用 ...

  2. 【工具类】Stream流构建指定长度的时间集合

    package com.gabriel.stage.utils; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.Dat ...

  3. hdu3035 最小割转换成最短路

    题意:       给你一个平面图,要求从求出从左上角到右下角的最小割. 思路:       如果大意的可能直接上来一遍最大流,然后就会各种悲剧的MLE,TLE,其实这个题目可以用到有个论文里面的那个 ...

  4. hdu2438 三分

    题意:       给你个90度的转弯,和一辆标准矩形的车,问你这台车能不能拐过去.. 思路:      求出靠近最里侧的那条边所在的直线(这个图形右下角为坐标原点)       y = x * ta ...

  5. (Py练习)日期格式转换

    #将日期转换为易读的格式 #使用dateuti包 from dateutil import parser dt = parser.parse("Mar 6 2019 12:00AM" ...

  6. PHP 读取文件夹(比如某共享文件夹)中的图片并显示

    1.获取文件夹下图片public function albumList(){ $share_url = input('path'); $files = getImgList($share_url); ...

  7. big data-1

  8. pyhive的基本使用

    安装 yum -y install cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib  # 解决报错:sasl/sasl.h: No such file or di ...

  9. java集合-数组ArrayList

    1.简介 ArrayList是java集合框架常用的集合类之一,底层是基于数组来实现容量大小动态变化的. 2.类图(JDK 1.8) 下图是ArrayList实现的接口和继承的类关系图: public ...

  10. 运维常用shell脚本一(系统指标巡检、自动创建用户、跳板机)

    一.系统指标巡检脚本 #!/bin/bash menu(){ cat <<EOF +---------------------------------------------+ | 日常巡 ...