文章目录
一、自编码器
(1)基本原理
自编码器(Autoencoder)是一种旨在将它们的输入复制到的输出的神经网络。他们通过将输入压缩成一种隐藏空间表示(latent-space representation),然后这种重构这种表示的输出进行工作。这种网络由两部分组成:
编码器:将输入压缩为潜在空间表示。可以用编码函数h = f(x)表示。
解码器:这部分旨在重构来自隐藏空间表示的输入。可以用解码函数r = g(h)表示。
搭建一个自动编码器需要完成下面三样工作:搭建编码器,搭建解码器,设定一个损失函数,用以衡量由于压缩而损失掉的信息。编码器和解码器一般都是参数化的方程,并关于损失函数可导,典型情况是使用神经网络。编码器和解码器的参数可以通过最小化损失函数而优化,例如SGD。
(2)四种基本的自编码器
实现代码及基本原理1(keras实现)
实现代码及基本原理2(keras实现)
实现代码及基本原理3(keras实现)
- 普通的自编码器
- 多层自编码器
- 卷积自编码器
- 正则化自编码器
(3)处理技巧
- 参数初始化权重不宜过大,不宜过小,权重应满足方差,均值为0,分布为高斯分布或均匀分布,一般用Xaiver初始化器,对于每一层网络的输入以及节点调整最适合的分布。
- 数据预处理,transform直接处理,fit_transform先拟合(fit)再transform,小策略: 先在训练数据集fit出一个处理器preprocessor,然后用这个处理器处理训练数据和测试数据,训练集和测试集处理保持一致。
- 数据获取时,随机取数据,随机一个数,以这个数为起点,取一个batch_size的数据,不放回抽样,不会用到所有数据
(4)Tensorflow代码实现
import numpy as np
import sklearn.preprocessing as prep
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
def xavier_init(fan_in, fan_out, constant = 1):
low = -constant * np.sqrt(6.0 / (fan_in + fan_out))
high = constant * np.sqrt(6.0 / (fan_in + fan_out))
return tf.random_uniform((fan_in, fan_out),
minval = low, maxval = high,
dtype = tf.float32)
#自编码函数类,包括一些参数设置以及函数实现
class AdditiveGaussianNoiseAutoencoder(object):
def __init__(self, n_input, n_hidden, transfer_function = tf.nn.softplus, optimizer = tf.train.AdamOptimizer(),
scale = 0.1):
self.n_input = n_input
self.n_hidden = n_hidden
self.transfer = transfer_function
self.scale = tf.placeholder(tf.float32)
self.training_scale = scale
network_weights = self._initialize_weights()
self.weights = network_weights
# model
self.x = tf.placeholder(tf.float32, [N