学习TensorFlow,保存学习到的网络结构参数并调用

来源:互联网 发布:淘宝微淘电脑版 编辑:程序博客网 时间:2024/03/29 23:45

在深度学习中,不管使用那种学习框架,我们会遇到一个很重要的问题,那就是在训练完之后,如何存储学习到的深度网络的参数?在测试时,如何调用这些网络参数?针对这两个问题,本篇博文主要探索TensorFlow如何解决他们?本篇博文分为三个部分,第一是讲解tensorflow相关的函数,第二是代码例程,第三是运行结果。

一 tensorflow相关的函数

我们说的这两个功能主要由一个类来完成,class tf.train.Saver

[plain] view plain copy 在CODE上查看代码片派生到我的代码片
  1. saver = tf.train.Saver()  
  2. save_path = saver.save(sess, model_path)  
  3. load_path = saver.restore(sess, model_path)  
saver = tf.train.Saver() 由类创建对象saver,用于保存和调用学习到的网络参数,参数保存在checkpoints里

save_path = saver.save(sess, model_path) 保存学习到的网络参数到model_path路径中

load_path = saver.restore(sess, model_path) 调用model_path路径中的保存的网络参数到graph中


二 代码例程

[python] view plain copy 在CODE上查看代码片派生到我的代码片
  1. ''''' 
  2. Save and Restore a model using TensorFlow. 
  3. This example is using the MNIST database of handwritten digits 
  4. (http://yann.lecun.com/exdb/mnist/) 
  5.  
  6. Author: Aymeric Damien 
  7. Project: https://github.com/aymericdamien/TensorFlow-Examples/ 
  8. '''  
  9.   
  10. # Import MINST data  
  11. from tensorflow.examples.tutorials.mnist import input_data  
  12. mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)  
  13.   
  14. import tensorflow as tf  
  15.   
  16. # Parameters  
  17. learning_rate = 0.001  
  18. batch_size = 100  
  19. display_step = 1  
  20. model_path = "/home/lei/TensorFlow-Examples-master/examples/4_Utils/model.ckpt"  
  21.   
  22. # Network Parameters  
  23. n_hidden_1 = 256 # 1st layer number of features  
  24. n_hidden_2 = 256 # 2nd layer number of features  
  25. n_input = 784 # MNIST data input (img shape: 28*28)  
  26. n_classes = 10 # MNIST total classes (0-9 digits)  
  27.   
  28. # tf Graph input  
  29. x = tf.placeholder("float", [None, n_input])  
  30. y = tf.placeholder("float", [None, n_classes])  
  31.   
  32.   
  33. # Create model  
  34. def multilayer_perceptron(x, weights, biases):  
  35.     # Hidden layer with RELU activation  
  36.     layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])  
  37.     layer_1 = tf.nn.relu(layer_1)  
  38.     # Hidden layer with RELU activation  
  39.     layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])  
  40.     layer_2 = tf.nn.relu(layer_2)  
  41.     # Output layer with linear activation  
  42.     out_layer = tf.matmul(layer_2, weights['out']) + biases['out']  
  43.     return out_layer  
  44.   
  45. # Store layers weight & bias  
  46. weights = {  
  47.     'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),  
  48.     'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),  
  49.     'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))  
  50. }  
  51. biases = {  
  52.     'b1': tf.Variable(tf.random_normal([n_hidden_1])),  
  53.     'b2': tf.Variable(tf.random_normal([n_hidden_2])),  
  54.     'out': tf.Variable(tf.random_normal([n_classes]))  
  55. }  
  56.   
  57. # Construct model  
  58. pred = multilayer_perceptron(x, weights, biases)  
  59.   
  60. # Define loss and optimizer  
  61. cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))  
  62. optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)  
  63.   
  64. # Initializing the variables  
  65. init = tf.initialize_all_variables()  
  66.   
  67. # 'Saver' op to save and restore all the variables  
  68. saver = tf.train.Saver()  
  69.   
  70. # Running first session  
  71. print "Starting 1st session..."  
  72. with tf.Session() as sess:  
  73.     # Initialize variables  
  74.     sess.run(init)  
  75.   
  76.     # Training cycle  
  77.     for epoch in range(3):  
  78.         avg_cost = 0.  
  79.         total_batch = int(mnist.train.num_examples/batch_size)  
  80.         # Loop over all batches  
  81.         for i in range(total_batch):  
  82.             batch_x, batch_y = mnist.train.next_batch(batch_size)  
  83.             # Run optimization op (backprop) and cost op (to get loss value)  
  84.             _, c = sess.run([optimizer, cost], feed_dict={x: batch_x,  
  85.                                                           y: batch_y})  
  86.             # Compute average loss  
  87.             avg_cost += c / total_batch  
  88.         # Display logs per epoch step  
  89.         if epoch % display_step == 0:  
  90.             print "Epoch:"'%04d' % (epoch+1), "cost=", \  
  91.                 "{:.9f}".format(avg_cost)  
  92.     print "First Optimization Finished!"  
  93.   
  94.     # Test model  
  95.     correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))  
  96.     # Calculate accuracy  
  97.     accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))  
  98.     print "Accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels})  
  99.   
  100.     # Save model weights to disk  
  101.     save_path = saver.save(sess, model_path)  
  102.     print "Model saved in file: %s" % save_path  
  103.   
  104. # Running a new session  
  105. print "Starting 2nd session..."  
  106. with tf.Session() as sess:  
  107.     # Initialize variables  
  108.     sess.run(init)  
  109.   
  110.     # Restore model weights from previously saved model  
  111.     load_path = saver.restore(sess, model_path)  
  112.     print "Model restored from file: %s" % save_path  
  113.   
  114.     # Resume training  
  115.     for epoch in range(7):  
  116.         avg_cost = 0.  
  117.         total_batch = int(mnist.train.num_examples / batch_size)  
  118.         # Loop over all batches  
  119.         for i in range(total_batch):  
  120.             batch_x, batch_y = mnist.train.next_batch(batch_size)  
  121.             # Run optimization op (backprop) and cost op (to get loss value)  
  122.             _, c = sess.run([optimizer, cost], feed_dict={x: batch_x,  
  123.                                                           y: batch_y})  
  124.             # Compute average loss  
  125.             avg_cost += c / total_batch  
  126.         # Display logs per epoch step  
  127.         if epoch % display_step == 0:  
  128.             print "Epoch:"'%04d' % (epoch + 1), "cost=", \  
  129.                 "{:.9f}".format(avg_cost)  
  130.     print "Second Optimization Finished!"  
  131.   
  132.     # Test model  
  133.     correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))  
  134.     # Calculate accuracy  
  135.     accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))  
  136.     print "Accuracy:", accuracy.eval(  
  137.         {x: mnist.test.images, y: mnist.test.labels})  


三 运行结果



参考资料:

https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/4_Utils/save_restore_model.py

https://www.tensorflow.org/versions/r0.9/api_docs/python/state_ops.html#Saver
0 0
原创粉丝点击