代码:
import numpy as np
import sklearn.preprocessing as prep
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
##均匀分布的Xaiver初始化器
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
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_wegihts = self._initialize_weights()
self.weights =network_wegihts
#接下来开始定义网络结构
#为输入x创建一个维度为n_input的placeholder
self.x = tf.placeholder(tf.float32,[None,self.n_input])
#简历一个能提取特征的隐含层
self.hidden = self.transfer(tf.add(tf.matmul(
# 将x加上 噪声
self.x+scale * tf.random_normal((n_input,)),
self.