學習TensorFlow,儲存學習到的網路結構參數並調用

來源:互聯網
上載者:User

在深度學習中,不管使用那種學習架構,我們會遇到一個很重要的問題,那就是在訓練完之後,如何儲存學習到的深度網路的參數。在測試時,如何調用這些網路參數。針對這兩個問題,本篇博文主要探索TensorFlow如何解決他們。本篇博文分為三個部分,第一是講解tensorflow相關的函數,第二是代碼常式,第三是運行結果。

一 tensorflow相關的函數

我們說的這兩個功能主要由一個類來完成,class tf.train.Saver

[plain] view plain copy saver = tf.train.Saver()   save_path = saver.save(sess, model_path)   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 '''''  Save and Restore a model using TensorFlow.  This example is using the MNIST database of handwritten digits  (http://yann.lecun.com/exdb/mnist/)    Author: Aymeric Damien  Project: https://github.com/aymericdamien/TensorFlow-Examples/  '''      # Import MINST data   from tensorflow.examples.tutorials.mnist import input_data   mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)      import tensorflow as tf      # Parameters   learning_rate = 0.001   batch_size = 100   display_step = 1   model_path = "/home/lei/TensorFlow-Examples-master/examples/4_Utils/model.ckpt"      # Network Parameters   n_hidden_1 = 256 # 1st layer number of features   n_hidden_2 = 256 # 2nd layer number of features   n_input = 784 # MNIST data input (img shape: 28*28)   n_classes = 10 # MNIST total classes (0-9 digits)      # tf Graph input   x = tf.placeholder("float", [None, n_input])   y = tf.placeholder("float", [None, n_classes])         # Create model   def multilayer_perceptron(x, weights, biases):       # Hidden layer with RELU activation       layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])       layer_1 = tf.nn.relu(layer_1)       # Hidden layer with RELU activation       layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])       layer_2 = tf.nn.relu(layer_2)       # Output layer with linear activation       out_layer = tf.matmul(layer_2, weights['out']) + biases['out']       return out_layer      # Store layers weight & bias   weights = {       'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),       'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),       'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))   }   biases = {       'b1': tf.Variable(tf.random_normal([n_hidden_1])),       'b2': tf.Variable(tf.random_normal([n_hidden_2])),       'out': tf.Variable(tf.random_normal([n_classes]))   }      # Construct model   pred = multilayer_perceptron(x, weights, biases)      # Define loss and optimizer   cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))   optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)      # Initializing the variables   init = tf.initialize_all_variables()      # 'Saver' op to save and restore all the variables   saver = tf.train.Saver()      # Running first session   print "Starting 1st session..."   with tf.Session() as sess:       # Initialize variables       sess.run(init)          # Training cycle       for epoch in range(3):           avg_cost = 0.           total_batch = int(mnist.train.num_examples/batch_size)           # Loop over all batches           for i in range(total_batch):               batch_x, batch_y = mnist.train.next_batch(batch_size)               # Run optimization op (backprop) and cost op (to get loss value)               _, c = sess.run([optimizer, cost], feed_dict={x: batch_x,                                                             y: batch_y})               # Compute average loss               avg_cost += c / total_batch           # Display logs per epoch step           if epoch % display_step == 0:               print "Epoch:", '%04d' % (epoch+1), "cost=", \                   "{:.9f}".format(avg_cost)       print "First Optimization Finished!"          # Test model       correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))       # Calculate accuracy       accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))       print "Accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels})          # Save model weights to disk       save_path = saver.save(sess, model_path)       print "Model saved in file: %s" % save_path      # Running a new session   print "Starting 2nd session..."   with tf.Session() as sess:       # Initialize variables       sess.run(init)          # Restore model weights from previously saved model       load_path = saver.restore(sess, model_path)       print "Model restored from file: %s" % save_path          # Resume training       for epoch in range(7):           avg_cost = 0.           total_batch = int(mnist.train.num_examples / batch_size)           # Loop over all batches           for i in range(total_batch):               batch_x, batch_y = mnist.train.next_batch(batch_size)               # Run optimization op (backprop) and cost op (to get loss value)               _, c = sess.run([optimizer, cost], feed_dict={x: batch_x,                                                             y: batch_y})               # Compute average loss               avg_cost += c / total_batch           # Display logs per epoch step           if epoch % display_step == 0:               print "Epoch:", '%04d' % (epoch + 1), "cost=", \                   "{:.9f}".format(avg_cost)       print "Second Optimization Finished!"          # Test model       correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))       # Calculate accuracy       accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))       print "Accuracy:", accuracy.eval(           {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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.