自编码器(AutoEncoder)
来源:互联网 发布:数据结构搜索算法 编辑:程序博客网 时间:2024/04/26 01:01
本文讲述自编码器(Auto Encoder,下文简称AE),将按照以下的思路展开讲解,力图使得初学者能看懂其中要义。目录如下:
1.AE的基本原理
2.AE的用途
3.基于MNIST数据集的AE的简单python实现
1.AE的基本原理
AE,是神经网络模型的一种,是一种全连接网络模型,而且进行无监督学习,下图是简单的AE结构。
从上图可以看出AE模型主要由以下构建组成:
1)编码器,即为输入层和第一个隐层之间的部分,主要进行特征提取,也称编码过程
2)解码器,隐层到输出层之间部分,把隐层提取到的特征重新还原输出
AE是相对简单的全连接模型,因为AE模型往往是对称的,也就是说编码过程和解码过程的网络组织是一样的,举个简单的例子:现有一5层的AE模型,若输入层神经元个数为200个,那么输出层神经元个数也是200个,第一个隐层有100个神经元,那么输出层的前一层也有100个神经元。AE模型的训练过程和全连接网络模型的训练过程是一样的。
2.AE的应用场景
我们学习一种算法,要明白算法的原理精髓,还要知道该算法的应用场景。AE的主要用途概括主要有两个: A.特征提取,去燥,降维,信息补全; B.为深层网络确定相对合理的网络初始化参数。下面对这两种用途做详细介绍。
首先,AE是非常有效的数据降维模型,降维和信息补全对应了两种不同的网络架构,不严格的讲,隐层神经元个数少于输入层神经元个数,就认为该AE模型可以进行数据降维,AE的降维效果和著名的PCA(principal component analysis,主成分分析)降维算法有过之而无不及,PCA只能进行线性特征降维,而AE的范围就不仅局限于此了。隐层神经元个数若大于输入层神经元个数,这种AE模型是可以进行缺失信息填补的,至于去燥,现有的Denoising Autoencoder 模型就能够对原始数据进行去燥处理。
再次,AE的另一个主要作用是为深层网络确定相对合理的网络初始化参数,了解深度学习的博友都知道,深层网络由于其网络层次往往较深,如果我们用随机化参数进行模型的训练,很多情况下会出现梯度消失或者梯度爆炸这样的情形,因此,如果能在深层模型训练之前给每一层的权值赋予相对合理对的权值,就能有效避免梯度消失和梯度爆炸问题。
3.基于MNIST数据集的AE的python实现
import osimport numpy as npimport tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_dataimport matplotlib.pyplot as pltos.environ['TF_CPP_MIN_LOG_LEVEL']='2'#读取mnist数据集mnist=input_data.read_data_sets("MNIST_data",one_hot=True)input_num=784hidden_num=256learning_rate=0.01epoch=50batch_size=550example_to_show=5#权重字典weights={'encode_weight':tf.Variable(tf.truncated_normal([input_num,hidden_num])), 'decode_weight':tf.Variable(tf.truncated_normal([hidden_num,input_num]))}#偏置字典biases={'encode_bias':tf.Variable(tf.truncated_normal([hidden_num])), 'decode_bias':tf.Variable(tf.truncated_normal([input_num]))}input=tf.placeholder(tf.float32,[None,input_num])def encode(input): return tf.nn.sigmoid(tf.add(tf.matmul(input, weights['encode_weight']), biases['encode_bias']))def decode(input): return tf.nn.sigmoid(tf.add(tf.matmul(input,weights['decode_weight']), biases['decode_bias']))#定义误差output=decode(encode(input))cost = tf.reduce_mean(tf.pow(input - output, 2)) # 最小二乘法optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost)#训练模型with tf.Session() as sess: init=tf.global_variables_initializer() sess.run(init) total_batch = int(mnist.train.num_examples / batch_size) print(total_batch) for time in range(epoch): for batch in range(total_batch): batch_xs, batch_ys = mnist.train.next_batch(batch_size) #获取需要用到的数据,y_batch不会用到 _, c = sess.run([optimizer, cost], feed_dict={input: batch_xs}) print("Epoch:",(time + 1), "cost=", round(c,6)) encode_decode = sess.run( output, feed_dict={input: mnist.test.images[:example_to_show]}) f, a = plt.subplots(2, 5, figsize=(5, 2)) for i in range(example_to_show): a[0][i].imshow(np.reshape(mnist.test.images[i], (28, 28))) a[1][i].imshow(np.reshape(encode_decode[i], (28, 28))) plt.show()
才疏学浅,不正确之处,欢迎指正!
参考:http://blog.csdn.net/u013719780/article/details/53788061
- 自编码器(autoencoder)
- Autoencoder(自编码器)
- tensorflow自编码器autoencoder
- 自编码器(AutoEncoder)
- Sparse Autoencoder(稀疏自编码器)
- Deep Learning模型之:AutoEncoder自编码器
- Keras上实现AutoEncoder自编码器
- TensorFlow上实现AutoEncoder自编码器
- TensorFlow上实现AutoEncoder自编码器
- 变分自编码器(Variational Autoencoder)
- 深度学习之自编码器AutoEncoder
- TensorFlow上实现AutoEncoder自编码器
- Keras 自编码器AutoEncoder(五)
- tensorflow 实现基本AutoEncoder,降噪自编码器
- 变分自编码器(Variational Autoencoder, VAE)通俗教程
- 自编码器(autoencoder)在协同过滤中的应用
- autoencoder自动编码器
- 自动编码器(Autoencoder)
- 数据结构实验之排序二:交换排序
- Win10激活方法
- 使用Azure customvision api
- [WMS]系统选型与实施体会
- 分布式协调服务zookeeper总结
- 自编码器(AutoEncoder)
- mybatis入门(一)
- js格式化时间
- ORM框架(Mybatis与Hibernate)学习笔记
- classDemo
- 截取mysql查询结果字符串
- Yii2数据库操作
- AutoCad 设置绘图环境
- PyCharm 如何安装python第三方库及插件(mongodb)