特征是可以不断转化为高一级的特征,加入有很多标注的数据,则可以训练一个深层的神经网络。
如果没有标注的数据,可以使用无监督的自编码器来提取特征。
自编码器,即可以使用自身的高阶特征编码自己。输入和输出也是一致的,借助稀疏编码的思想,目标是使用稀疏的一些高阶特征重新组合来重构自己。
特点是:第一,希望输入/输出保持一致;
第二,希望使用少量字数的高阶特征来重构自己,而不只是复制像素点。
1>限制中间隐含层节点的数量,让中间隐含层节点的数量小于输入/输出节点的数量,相当于降维的过程;
2>如果给数据加入噪声,就是Denoising AutoEncoder(去噪自编码器),将从噪声中学习出数据的特征。
去噪自编码器中最常用的噪声是加性高斯噪声(Additive Gaussian Noise,AGN)
#实现自编码器
import numpy as np
import sklearn.preprocessing as prep
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
Xavier初始化器让权重被初始化得不大不小,正好合适。tf.random_uniform创建一个均匀分布的数据范围。
#定义参数初始化方法xavier initialization
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,包含一个构建函数init()和其他常用函数。
#定义去噪自编码的class
class AdditiveGaussianNoiseAutoencoder(object):
def __init__(self,
n_input,
n_hidden,
transfer_function=tf.nn.softplus,
optimizer=tf.train.AdamOptimizer(),
scale=