TensorFlow 模型保存/载入的两种方法

https://blog.csdn.net/thriving_fcl/article/details/71423039

1.保存模型

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
import os
# os.environ["TF_CPP_MIN_LOG_LEVEL"]='1' # 这是默认的显示等级,显示所有信息
# os.environ["TF_CPP_MIN_LOG_LEVEL"]='2' # 只显示 warning 和 Error
os.environ["TF_CPP_MIN_LOG_LEVEL"]='3' # 只显示 Error


# 产生随机数据
np.random.seed(5)
# 正向传播公式 y = 2*x+b
x = np.linspace( -1,1 , 100 ).astype(np.float_)
y = 2*x+3+np.random.randn(*x.shape)*0.4
x_b = np.c_[np.ones(100),x]
# x_c = np.concatenate( (np.ones( 100 ).reshape(100,1) , x.reshape(100,1) ),axis=1)

learning_rate = 0.001
x_train = tf.placeholder(dtype=tf.float32,name='x_train')
y_train = tf.placeholder( dtype=tf.float32 ,name='y_train')

b = tf.Variable( [1.0], dtype=tf.float32,name='b')
w = tf.Variable( [1.0], dtype=tf.float32 ,name='w')
linear_mode = w * x_train + b

loss = tf.reduce_mean(tf.square( linear_mode - y_train ),name='train_loss')
optimizer = tf.train.GradientDescentOptimizer( learning_rate )
train = optimizer.minimize(loss,name='optimizer_loss')

tf.add_to_collection( 'pred_value_y',linear_mode)

saver = tf.train.Saver()
with tf.Session( ) as s :
s.run( tf.global_variables_initializer( ))
saver.restore(s , 'Model/5000-linearmode-weights.ckpt')

for i in range( 10000 ):
s.run(train, feed_dict={x_train:x, y_train:y})
print("w:",s.run(w))
print("b:" , s.run(b))
if i == 5000:
saver.save(s ,('./Model/%d-linearmode-weights.ckpt' % i) )

# for i in range( 100 ):
# res = s.run(linear_mode ,feed_dict={x_train:x } )
# print(res)

plt.plot( x,y ,'go')
plt.plot( x , 2*x + 3 , 'r-' )
plt.show()

2.使用模型
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import os
# os.environ["TF_CPP_MIN_LOG_LEVEL"]='1' # 这是默认的显示等级,显示所有信息
# os.environ["TF_CPP_MIN_LOG_LEVEL"]='2' # 只显示 warning 和 Error
os.environ["TF_CPP_MIN_LOG_LEVEL"]='3' # 只显示 Error

# 产生随机数据
np.random.seed(5)
# 正向传播公式 y = 2*x+b
x = np.linspace( -1,1 , 100 ).astype(np.float_)
y = 2*x+3+np.random.randn(*x.shape)*0.4
x_b = np.c_[np.ones(100),x]


# 若不希望重复定义计算图上的运算,可直接加载已经持久化的图
with tf.Session() as s:
saver = tf.train.import_meta_graph('Model/5000-linearmode-weights.ckpt.meta')
# saver.restore(s, "./Model/5000-linearmode-weights.ckpt")

graph = tf.get_default_graph( )

x_train = graph.get_operation_by_name('x_train').outputs[0]
y_train = graph.get_operation_by_name('y_train').outputs[ 0 ]
b = graph.get_operation_by_name('b').outputs[0]
w = graph.get_operation_by_name('w').outputs[0]
optimizer_loss = graph.get_operation_by_name('optimizer_loss')

pred_y = tf.get_collection('pred_value_y')[ 0 ]


for _ in range( 100 ):
s.run( tf.global_variables_initializer() )
loss ,p_y = s.run([optimizer_loss, pred_y] , feed_dict={x_train:x , y_train:y} )
print('w:' , s.run(w) )
print('b:' , s.run( b ) )
print('p_y:', p_y )
print('loss:', loss )
posted @ 2020-08-21 15:18  zhg_john  阅读(202)  评论(0)    收藏  举报