首页 > 编程知识 正文

编码器解码器神经网络,编码器

时间:2023-05-05 11:13:09 阅读:30864 作者:4556

#这里,以最具代表性的去噪自编码器为例。 导入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 ) )

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。