zoukankan      html  css  js  c++  java
  • Tensorflow模型变量保存

    Tensorflow:模型变量保存

    觉得有用的话,欢迎一起讨论相互学习~

    我的微博我的github我的B站

    参考文献Tensorflow实战Google深度学习框架
    实验平台:
    Tensorflow1.4.0
    python3.5.0

    Tensorflow常用保存模型方法

    import tensorflow as tf
    saver = tf.train.Saver()  # 创建保存器
    with tf.Session() as sess:
          saver.save(sess,"/path/model.ckpt")  #保存模型到相应ckpt文件
          saver.restore(sess,"/path/model.ckpt")  #从相应ckpt文件中恢复模型变量
    
    • 使用tf.train.Saver会保存运行Tensorflow程序所需要的全部信息,然而有时并不需要某些信息。比如在测试或离线预测时,只需要知道如何从神经网络的输入层经过前向传播计算得到输出层即可,而不需要类似的变量初始化,模型保存等辅助节点的信息。Tensorflow提供了convert_varibales_to_constants函数,通过这个函数可以将计算图中的变量及其取值通过常量的方式保存,这样整个Tensorflow计算图可以统一存放在一个文件中。

    将变量取值保存为pb文件

    # pb文件保存方法
    import tensorflow as tf
    from tensorflow.python.framework import graph_util
    
    v1 = tf.Variable(tf.constant(1.0, shape=[1]), name="v1")
    v2 = tf.Variable(tf.constant(2.0, shape=[1]), name="v2")
    result = v1 + v2
    
    init_op = tf.global_variables_initializer()
    with tf.Session() as sess:
        sess.run(init_op)  # 初始化所有变量
        # 导出当前计算图的GraphDef部分,只需要这一部分就可以完成从输入层到输出层的计算过程
        graph_def = tf.get_default_graph().as_graph_def()
        # 将需要保存的add节点名称传入参数中,表示将所需的变量转化为常量保存下来。
        output_graph_def = graph_util.convert_variables_to_constants(sess, graph_def, ['add'])
        # 将导出的模型存入文件中
        with tf.gfile.GFile("Saved_model/combined_model.pb", "wb") as f:
            f.write(output_graph_def.SerializeToString())
    
    # 2. 加载pb文件。
    
    from tensorflow.python.platform import gfile
    
    with tf.Session() as sess:
        model_filename = "Saved_model/combined_model.pb"
        # 读取保存的模型文件,并将其解析成对应的GraphDef Protocol Buffer
        with gfile.FastGFile(model_filename, 'rb') as f:
            graph_def = tf.GraphDef()
            graph_def.ParseFromString(f.read())
        # 将graph_def中保存的图加载到当前图中,其中保存的时候保存的是计算节点的名称,为add
        # 但是读取时使用的是张量的名称所以是add:0
        result = tf.import_graph_def(graph_def, return_elements=["add:0"])
        print(sess.run(result))
    # Converted 2 variables to const ops.
    # [array([3.], dtype=float32)]
    
  • 相关阅读:
    SD卡路径问题以及如何获取SDCard 内存
    Android_JarZip压缩和解压文件
    android:imeOptions属性
    JAVA长连接demo
    高吞吐高并发Java NIO服务的架构(NIO架构及应用之一)
    WebSocket 实战
    android开发之应用Crash自动抓取Log_自动保存崩溃日志到本地
    Android屏幕适配全攻略(最权威的官方适配指导)
    Android设计模式系列
    Android开发MVP模式解析
  • 原文地址:https://www.cnblogs.com/cloud-ken/p/9317238.html
Copyright © 2011-2022 走看看