TensorFlow人工智能入门教程之十四 自动编码机AutoEncoder 网络
好久没有更新了,最近 想在空余时间 之外 ,对以前创业人工智能平台进行封装,想做一个人工智能顶层框架,我是实战派,不是理论派,什么BP FF 什么 SGD 等等 一大堆优化 optimation 知道偏微分 怎么最后推导一个完整公式 用代码表示出来 过程 不怎么看得懂 很复杂。国外很多科学家真是了不起 ,所以使用 组合 能够 理解思想才是最重要的,如果你想成为科学家 ,可以忽略这句话,当然成为科学家的 也不会在做程序员。随意 大家 了解思想 怎么训练 怎么使用 就足够了 ,怎么研发 一种新的网络 ,交给麻省理工 加州伯克利 斯坦福吧。每天aviar 有很多新的网络被提交,理解构造,就可以直接来初步实现了,但是内部原理 内部数学公式推导,这些 也很难看懂。 建议 读研究生 或者 计算机博士的 可以去研究研究底层 的网络原理 为什么可以做到这样的实现。其实 我讲的都是我知道的 怎么训练 怎么做的网络,还有很多有名的网络,3DCNN 3DRCNN 空间感知的卷积神经网络,还有M2M 图灵机 等等比LSTM BLSTM 好很多的网络 ,但是这些网络 至今 我还不知道怎么训练,也没有数据 格式参考,论文里面也没有提到 数据生成 构造的过程。 很遗憾 ,这是非常强大的网络之一 。 我也无能为力。
这一章我来讲一下 AutoEncoder 自动编码机。本来想忽略的 但是不讲的 感觉挺遗憾的,
AutoEncoder 的网络结构如下
在浅层 学习 到深度学习 中 ,由于深度学习 W 的 bp 偏微分 过程中,如果w 为0 或者 其他情况导致深度学习 多层网络 overfiting ,而不能很好地保证梯度下降,怎么初始化多层网络 无数个w 是一个很重要的工作,2006年 深度学习 加拿大多伦多大学 科学家 提出了使用xavier方式 pre-training 预先训练 方式 逐层初始化 ,但是怎么保证 每一层 一层训练中 能得到好的w呢 ,有很多种方式 ,autoEncoder 是其中一种方式,当然现在有很多种方式,麻省理工 还有 斯坦福 也每年发表了一些初始化w的方法,都是一大堆的数学原理 证明,这里我来讲一下 autoEncdoer 自动编码机, 就是 如果 我们输入的一大堆的X 如果经过一层w 网络训练得到的特征 ,作为输入 可以 反推得到 原来的数据的过程,说明这个 这个网络的w 是比较不错的w
autoEncdoer 有一个叫做降噪AutoEncoder 常用 它 ,他就是如果 数据有一定的噪音 误差 也能保证 得到一些好的w 能拟合 真实的数据,
所以 AutoEncoder 是一种很多的初始化w的方式, 所以 顾名思义 就是 编码 解码 过程,
也是一种形态特征 转换的过程 ,把数据特征 变成 一种新的特征 ,这种新的特征 可以替代原来的特征 ,所以AutoEncoder 可以用来降维 可以用来无监督算法 降噪 过滤 特征转换,
如果把AutoEncoder 的 kercer函数 使用线性的话 ,其实等同于PCA 主程分析
PCA 如果 使用SVD 奇异值分解 的话 ,其实PCA 本质等同于 使用平面来进行投影 ,
最后剩上 矩阵 有可以转换回来,所以 这叫做编码 解码,
AutoEncoder 用于 有监督里面 可以用来 数据压缩 数据降维 过滤 降噪
AutoEncoder用于 无监督算法 里面可以用来进行 数据的转换 数据的自学习
自学习网络
可以通过 AutoEncoder 结合 FF层 来实现,对于通过少量 有标签的数据来 处理无标签的数据。 当然深度学习 是多层 结合,可以来做到AutoEncoder 来无监督 结合 全连接其它层 来实现监督算法 。可以自行google
本质就是 一个层wx+b 以及 相应的**函数
我表示 Oschina 这个换了个蛋疼的 编辑器 ,换成这样 都不知道怎么 粘贴代码 高亮格式化。
其实 WX+B 然后 得到输出 作为输入 然后Wx+b
self.h = tf.nn.tanh(tf.add(tf.matmul(self.x_noisy, self.W), self.b_encode))
self.output = tf.nn.tanh(tf.add(tf.matmul(self.h, tf.transpose(self.W)),b_decode))
self.sess = tf.InteractiveSession() | |
self.network_architecture = network_architecture | |
self.learning_rate = learning_rate | |
self.batch_size = batch_size | |
# tf Graph input | |
self.x = tf.placeholder(tf.float32, [None, network_architecture["n_input"]]) | |
self.x_noisy = tf.placeholder(tf.float32, [None, network_architecture["n_input"]]) | |
#self.W = tf.Variable(tf.random_uniform((network_architecture["n_input"], network_architecture["n_hidden"]))) | |
self.W = tf.Variable(xavier_init(network_architecture["n_input"], network_architecture["n_hidden"])) | |
self.b_encode = tf.Variable(tf.ones([network_architecture["n_hidden"]], dtype=tf.float32)) | |
b_decode = tf.Variable(tf.ones([network_architecture["n_input"]], dtype=tf.float32)) | |
#encode | |
#activation function - softmax, softplus, or tanh? | |
self.h = tf.nn.tanh(tf.add(tf.matmul(self.x_noisy, self.W), self.b_encode)) | |
#decode | |
self.output = tf.nn.tanh(tf.add(tf.matmul(self.h, tf.transpose(self.W)),b_decode)) | |
Oschian 这个编辑器 烂透了,下次 自己来做个博客。转移博客来写吧。这个怎么高亮怎么代码 格式化 ?
转载于:https://my.oschina.net/yilian/blog/687364