#这里,以最具代表性的去噪自编码器为例。 导入MNIST数据集
importnumpyasnpimportsklearn.preprocessingasprepimporttensorflowastffromtensorflow.examples.tutorials.mnistimportinput #这里实现的是标准均匀分布的Xaiver初始化器。
defXavier_init(fan_in,fan_out,constant=1) : ' '目的是合理地初始化权重。
参数:
fan_in --行数;
fan_out --列数;
常数- -常数权重、条件初始化范围的倍数。
return初始化后的权重tensor.' ' low=-constant * NP.sqrt (6.0/(fan _ infan _ out ) ) ) ) ) ) ) )
high=constant * NP.sqrt (6.0/(fan_infan_out ) ) returnTF.random_uniform ) ) fan _ in,fan _ out )、
minval=low,maxval=high,
dtype=tf.float32 ) #定义去噪的自编码类
classadditivegaussiannoiseautoencoder (object ) :''__init_ ) :构造函数;
n_input :输入变量数;
n_hidden :隐含层节点数;
transfer_function:隐式层激活函数,默认为softplus;
optimizer :优化程序,默认为Adam;
scale :高斯噪声系数,默认值为0.1; ''''
def_init_(self,n_input,n_hidden,transfer _ function=TF.nn.soft plus,optimizer=TF.train.) )
scale=0.1 ) :
self.n_input=n_input
self.n_hidden=n_hidden
self.transfer=transfer _ function
self.scale=TF.placeholder (TF.float 32 ) )。
self.training_scale=scale
网络_ weights=self._ initialize _ weights (
self.weights=network_weights#定义网络结构,为输入x创建名为n_input的维的placeholder,然后单击
创建可以提取#特征的隐含层。
self.x=TF.placeholder (TF.float 32,[None,self.n_input] ) )。
self.hidden=self.transfer (TF.add ) TF.mat mul (self.xscale * TF.random _ normal ) ) (n_input,) )、
self.weights['w1'] ),
self.weights['b1'] )
self.re construction=TF.add (TF.mat mul ) self.hidden,self.weights['w2'],self.weights['b2']。首先
然后,将训练操作定义为优化程序self.optimizer,以优化丢失self.cost。
#最后,创建Session并初始化自编码器的所有模型参数。
self.cost=0.5 * TF.reduce _ sum (TF.pow ) TF.subtract (self.re construction,self.x ),2.0 ) )
self.optimizer=optimizer.minimize (self.cost ) )。
init=TF.global _ variables _ initializer (
self.sess=tf.Session (
self.sess.run(init ) def_initialize_weights ) self ) :
all_weights=dict (
all _ weights [ ' w1 ' ]=TF.variable (Xavier _ init (self.n _ input,self.n_hidden ) )
all _ weights [ ' B1 ' ]=TF.variable (TF.zeros ([ self.n _ hidden ],dtype=tf.float32 ) )
all _ weights [ ' w2 ' ]=TF.variable (TF.zeros ([ self.n _ hidden,self.n_input],dtype=tf.float32 ) )
all _ weights [ ' B2 ' ]=TF.variable (TF.zeros ([ self.n _ input ],dtype=tf.float32 ) ) ) return all _ weight
cost,opt=self.sess.run((self.cost,self.optimizer ),feed_dict={self.x: X,
self.scale 3360 self.training _ scale } (returncostdefcalc _ total _ cost (self,x ) :returnself.sess.run ) self
self.scale : self.training _ scale } #定义了transform函数,以提供用于检索抽象特征的接口。
deftransform(self,x ) : return self.sess.run self.hidden,feed_dict={self.x: X,
self.scale : self.training _ scale } (def generate ) self,hidden=None ) :if hidden isNone:
hidden=NP.random.normal (size=self.weights [ ' B1 ' ] ) returnself.sess.run ) self.reconstruction,fed _ dded
获取self.scale : self.training _ scale } (defgetweights ) self ) : #隐含层的权重w1。
return self.sess.run (self.weights [ ' w1 ' ] ) defgetbiases (self ) : #获取被抑制层的偏执系数b1。
return self.sess.run (self.weights [ ' B1 ' ] )使用TensorFlow提供的读取示例数据的函数加载MNIST数据集。
Mn ist=input _ data.read _ data _ sets (Mn ist _ data (,one_hot=True ) #定义将训练和测试数据标准化的函数。
defStandard_scale(x_train,X_test ) :
preprocessor=prep.standardscaler ().fit (x _ train ) )。
x _ train=preprocessor.transform (x _ train ) )
x _ test=preprocessor.transform (x _ test ) returnX_train,x _ testdefget _ random _ block _ from _ data )数据
start _ index=NP.random.randint (0,len(data(-batch_size ) return data [ start _ index 3360 ] start _ index bb
X_train,x _ test=standard _ scale (Mn ist.train.images,mnist.test.images ) ) ) ) ) ) ) )。
n _ samples=int (Mn ist.train.num _ examples ) )。
training _ epochs=20 batch _ size=128 display _ step=1自动编码程序=additivegaussiannoiseautoencoder (n _ input=784 )
n_hidden=200,
transfer _ function=TF.nn.soft plus,
optimizer=TF.train.Adam optimizer (learning _ rate=0.001 )、
scale=0.01 ) forepochinrange (training _ epochs ) :
avg_cost=0。
total _ batch=int (n _ samples/batch _ size ) #Loop over all batches
forIinrange(total_batch ) :
batch _ xs=get _ random _ block _ from _ data (x _ train,batch_size ) # fit培训使用基础数据
cost=auto encoder.partial _ fit (batch _ xs ) #计算平均丢失
avg _ cost=cost/n _ samples * batch _ size # displaylogsperepochstep
if epoch % display _ step==0:打印(epoch : )、(d )、(cost=)、(:9f )、(格式) avg
打印(总成本: ) str (auto encoder.calc _ total _ cost ) x_test ) )