TensorFlow --- 保存和载入模型

1.保存模型
文本生成模拟数据之后,加入对图变量的重置,在session创建之前定义saver及保存路径,在session中训练结束后,保存模型

# -*-coding:utf-8 -*-

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

# np.linspace()函数。在指定的间隔内返回均匀间隔的数字
train_X = np.linspace(-1, 1, 100)
# Y的值。 
# np.random.randn(*train_X.shape) 等价与np.random.randn(100)
train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.3

# 重置图
tf.reset_default_graph()

# x和y为占位符,一个代表x的输入;另一个代表对应的真实值y
X = tf.placeholder('float')
Y = tf.placeholder('float')

# 模型参数。w被初始化程[-1,1]的随机数,b的初始化为0,都是一维的数字
W = tf.Variable(tf.random_normal([1]), name='weight')

b = tf.Variable(tf.zeros([1]), name='bias')

# 前向结构
# tf.multiply()函数。两个数相乘
z = tf.multiply(X, W) + b

# 反向优化
# 定义一个cost,等于生成值与真实值的平方差
cost = tf.reduce_mean(tf.square(Y - z))
# 定义一个学习率,代表调整参数的速度
# 值越大,表示调整的速度越快,但不精确;值越小,表示调整的速度越慢,但精度高
learning_rate = 0.01
# GradientDescentOptimizer()。是一个封装好的梯度下降函数
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

# 初始化所有变量
init = tf.global_variables_initializer()
# 定义参数
training_epochs = 20
display_step = 2

# 定义saver以及保存路径
saver = tf.train.Saver()
savedir = 'log/'

# 启动session
with tf.Session() as sess:
    sess.run(init)
    # 存放批次值和损失值
    plotdata = {"batchsize":[], "loss":[]}
    for epoch in range(training_epochs):
        for(x, y) in zip(train_X, train_Y):
            sess.run(optimizer, feed_dict={X:x, Y:y})

        # 显示训练中的详细信息
        if epoch % display_step == 0:
            loss = sess.run(cost, feed_dict={X:train_X, Y:train_Y})
            print("Epoch:", epoch+1, "cost=", loss, "W=", sess.run(W), "b=", sess.run(b))
            if not (loss == "NA"):
                plotdata["batchsize"].append(epoch)
                plotdata["loss"].append(loss)
    print("Finished!")
    # 保存模型
    saver.save(sess, savedir + 'linermodel.cpkt')
    print("cost=", sess.run(cost, feed_dict={X:train_X, Y:train_Y}), "w=", sess.run(W), "b=", sess.run(b))

2.载入模型
再创建一个session,代码里通过使用saver的restore函数将模型引用

with tf.Session() as sess2:
    sess2.run(tf.global_variables_initializer())
    saver.restore(sess2, savedir + 'linermodel.cpkt')
    print('x=0.2, z=', sess2.run(z, feed_dict={X:0.2}))

3.模型内容
以下代码可以将模型里的内容打印出来

from tensorflow.python.tools.inspect_checkpoint import print_tensors_in_checkpoint_file
savedir = 'log/'
print_tensors_in_checkpoint_file(savedir+'linermodel.cpkt', None, True)
结果为:
# tensor_name:后面跟的就是创建的变量名,接着就是它的数值
tensor_name:  bias
[-0.00609985]
tensor_name:  weight
[1.9867887]

4.保存模型的其他方法
tf.train.Saver函数。可以指定存储变量名字与变量的对应关系

saver = tf.train.Saver()

# 给b和W分别指定一个固定值,并将它们颠倒放置
import tensorflow as tf

W = tf.Variable(1.0, name="weight")
b = tf.Variable(2.0, name='bias')

saver = tf.train.Saver({'weight': b, 'bias': W})

 with tf.Session() as sess:
     tf.global_variables_initializer().run()
     saver.save(sess, savedir+'linermodel.cpkt')
print_tensors_in_checkpoint_file(savedir+'linemodel.cpkt', None, True)
结果为:
tensor_name:  bias
1.0
tensor_name:  weight
2.0

猜你喜欢

转载自blog.csdn.net/jian15093532273/article/details/80751860