Tensorflow实现MNIST数据自编码(1)

自编码网络能够自学习样本特征的网络,属于无监督学习模型的网络,可以从无标注的数据中学习特征,它可以给出比原始数据更好的特征描述,具有较强的特征学习能力。

主要的网络结构就是高维特征样本---》编码成---》低维特征---》解码回---》高维特征,下面以MNIST数据集为示例进行演示:

  1. import tensorflow as tf  
  2.   
  3. #导入数据集合  
  4. from tensorflow.examples.tutorials.mnist import input_data  
  5. mnist = input_data.read_data_sets('/data/',one_hot=True)  
  6.   
  7. #整体流程,原始图片像素28*28-784  
  8. #784-》256-》128-》128-》256-》784  
  9.   
  10. learning_rate = 0.01  
  11. n_hidden_1 = 256     #第一层256个结点  
  12. n_hidden_2 = 128     #第二层128个结点  
  13. n_input = 784  
  14.   
  15. x = tf.placeholder('float',[None,n_input])  
  16. y = x  
  17.   
  18. weights = {  
  19.     'encoder_h1':tf.Variable(tf.random_normal([n_input,n_hidden_1])),  
  20.     'encoder_h2':tf.Variable(tf.random_normal([n_hidden_1,n_hidden_2])),  
  21.     'decoder_h1':tf.Variable(tf.random_normal([n_hidden_2,n_hidden_1])),  
  22.     'decoder_h2':tf.Variable(tf.random_normal([n_hidden_1,n_input])),  
  23. }  
  24. biases = {  
  25.     'encoder_b1':tf.Variable(tf.zeros([n_hidden_1])),  
  26.     'encoder_b2':tf.Variable(tf.zeros([n_hidden_2])),  
  27.     'decoder_b1':tf.Variable(tf.zeros([n_hidden_1])),  
  28.     'decoder_b2':tf.Variable(tf.zeros([n_input])),  
  29. }  
  30.   
  31. def encoder(x):  
  32.     layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x,weights['encoder_h1']),biases['encoder_b1']))  
  33.     layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1,weights['encoder_h2']),biases['encoder_b2']))  
  34.     return layer_2  
  35. def decoder(x):  
  36.     layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x,weights['decoder_h1']),biases['decoder_b1']))  
  37.     layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1,weights['decoder_h2']),biases['decoder_b2']))  
  38.     return layer_2  
  39.   
  40. pred = decoder(encoder(x))  
  41. cost = tf.reduce_mean(tf.pow(y-pred,2))  
  42. optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)  
  43.   
  44. training_epochs = 20  #共迭代20次  
  45. batch_size = 256      #每次取256个样本  
  46. display_step = 5      #迭代5次输出一次信息  
  47.   
  48. #启动会话  
  49. with tf.Session() as sess:  
  50.     sess.run(tf.global_variables_initializer())  
  51.     total_batch = int(mnist.train.num_examples/batch_size)  
  52.     #开始训练  
  53.     for epoch in range(training_epochs):  
  54.         for i in range(total_batch):  
  55.             batch_xs,batch_ys = mnist.train.next_batch(batch_size)#取数据  
  56.             _,c = sess.run([optimizer,cost],feed_dict={x:batch_xs})#训练模型  
  57.   
  58.             if epoch % display_step == 0:#输出日志信息  
  59.                 print("Epoch:",'%4d' % (epoch+1),'cost=',"{:.9f}".format(c))  
  60.     print('Training Finished!')  
  61.   
  62.     correct_prediction = tf.equal(tf.argmax(pred,1),tf.argmax(y,1))  
  63.     accuracy = tf.reduce_mean(tf.cast(correct_prediction,'float'))  
  64.     print('Accuracy:',1-accuracy.eval({x:mnist.test.images,y:mnist.test.images}))  


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页