人工智能从入门到精通(12)

平均滑动模型存储:

import tensorflow as tf

v=tf.Variable(0,dtype=tf.float32,name="v")
for variables in tf.all_variables():
    print(variables.name)
ema=tf.train.ExponentialMovingAverage(0.99)
maintain_averages_op=ema.apply(tf.all_variables())
for variables in tf.all_variables():
    print (variables.name)
saver=tf.train.Saver()
with tf.Session() as sess:
    init_op=tf.initialize_all_variables()
    sess.run(init_op)
    sess.run(tf.assign(v,10))
    sess.run(maintain_averages_op)
    saver.save(sess,"/path/to/model/model.ckpt")
    print(sess.run([v,ema.average(v)]))

下面就可以通过变量名重命名读取变量的滑动平均值:

import tensorflow as tf

v=tf.Variable(0,dtype=tf.float32,name="v")
saver=tf.train.Saver({"v/ExponentialMovingAverage":v})
with tf.Session() as sess:
    saver.restore(sess,"/path/to/model/model.ckpt")
    print(sess.run(v))

为了方便加载重命名滑动平均模型,可以用ema.variables_to_restore()来代替生成的变量

import tensorflow as tf

v=tf.Variable(0,dtype=tf.float32,name="v")
ema=tf.train.ExponentialMovingAverage(0.99)
print(ema.variables_to_restore())
saver=tf.train.Saver(ema.variables_to_restore())
with tf.Session() as sess:
    saver.restore(sess,"/path/to/model/model.ckpt")
    print(sess.run(v))

tensorflow还提供convert_variables_to_constants函数,可以将整个tensorflow计算图统一存放在一个文件中

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.initialize_all_variables()
with tf.Session() as sess:
    sess.run(init_op)
    graph_def=tf.get_default_graph().as_graph_def()
    output_graph_def=graph_util.convert_variables_to_constants(sess,graph_def,['add'])
    with tf.gfile.GFile("/path/to/model/combined_model.pb","wb") as f:
        f.write(output_graph_def.SerializeToString())

从计算图中取值

import tensorflow as tf
from tensorflow.python.platform import gfile

with tf.Session() as sess:
    model_filename="/path/to/model/combined_model.pb"
    with gfile.FastGFile(model_filename,'rb') as f:
        graph_def=tf.GraphDef()
        graph_def.ParseFromString(f.read())
    result=tf.import_graph_def(graph_def,return_elements=["add:0"])
    print(sess.run(result))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值