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

2024-05-07 16:08

本文主要是介绍学习TensorFlow,保存学习到的网络结构参数并调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在深度学习中,不管使用那种学习框架,我们会遇到一个很重要的问题,那就是在训练完之后,如何存储学习到的深度网络的参数?在测试时,如何调用这些网络参数?针对这两个问题,本篇博文主要探索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

这篇关于学习TensorFlow,保存学习到的网络结构参数并调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967818

相关文章

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

详解Spring Boot接收参数的19种方式

《详解SpringBoot接收参数的19种方式》SpringBoot提供了多种注解来接收不同类型的参数,本文给大家介绍SpringBoot接收参数的19种方式,感兴趣的朋友跟随小编一起看看吧... 目录SpringBoot接受参数相关@PathVariable注解@RequestHeader注解@Reque

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

spring 参数校验Validation示例详解

《spring参数校验Validation示例详解》Spring提供了Validation工具类来实现对客户端传来的请求参数的有效校验,本文给大家介绍spring参数校验Validation示例详... 目录前言一、Validation常见的校验注解二、Validation的简单应用三、分组校验四、自定义校

SpringBoot中Get请求和POST请求接收参数示例详解

《SpringBoot中Get请求和POST请求接收参数示例详解》文章详细介绍了SpringBoot中Get请求和POST请求的参数接收方式,包括方法形参接收参数、实体类接收参数、HttpServle... 目录1、Get请求1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;