学习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

相关文章

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四