《TensorFlow实战》第四章-TensorFlow实现自编码器及多层感知机

自编码器

可以使用自身的高阶特征编码自己,也是一种神经网络。

特征

  1. 希望输入和输出是一致的
  2. 希望使用高阶特征来重构自己,而不只是复制像素点

自编码器通常希望使用少量稀疏的高阶特征来重构输入,所以加入以下限制:

  1. 限制中间隐含层节点的数量,比如让中间隐含层节点的数量小于输入/输出节点的数量
  2. 如果给数据加噪声,那么就是Denoising AutoEncoder(去燥自编码器),我们可以从噪声中学习出数据的特征。

下面我们将实现最具代表性的去燥自编码器。

第一步:导入各种库

# 1. 导入各种库
import numpy as np
import sklearn.preprocessing as prep  # Scikit-learn中的preprocessing是对数据进行预处理的常用模块
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

第二步:定义参数初始化方法:xavier initialization

自编码器中会使用到一种参数初始化方法xavier initialization,它会根据根据某一层网络的输入、输出节点数量自动调整最合适的分布。

  • 深度学习模型的权重初始化得太小,那信号将在每层间传递时逐渐缩小而难以产生作用
  • 深度学习模型的权重初始化得太大,那信号将在每层间传递时逐渐放大并导致发散和实效

xavier initialization满足:

  • 均值为0
  • 方差为 2/(nin+nout)

以下代码创建一个范围为(-根号(6/(nin+nout)),根号(6/(nin+nout)))的均匀分布,其中fan_in是输入节点的数量,fan_out是输出节点的数量。

# 2.定义参数初始化方法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)
    # 返回fan_in * fan_out的矩阵,产生于low和high之间,产生的值是均匀分布的

第三步:定义一个去燥自编码的class

__init__函数包含这样几个输入:

  1. n_input:输入变量数
  2. n_hidden:隐藏层节点数
  3. transfer_function:隐含层激活函数,默认为softplus
  4. optimizer:优化器,默认为Adam
  5. scale:高斯噪声系数,默认为0.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值