tensorlfow.saved_model的使用
生活随笔
收集整理的這篇文章主要介紹了
tensorlfow.saved_model的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
import tensorflow as tf
from tensorflow import saved_model as sm
model_dir = '/home/test/070807_model'
# 首先定義一個極其簡單的計算圖
X = tf.placeholder(tf.float32, shape=(3, ),name="input")
scale = tf.Variable([10, 11, 12], dtype=tf.float32,name="w")
y = tf.multiply(X, scale,name="output")
#X = tf.placeholder(tf.float32, shape=(3, ))
#scale = tf.Variable([10, 11, 12], dtype=tf.float32)
#y = tf.multiply(X, scale)
# 在會話中運行
with tf.Session() as sess:sess.run(tf.initializers.global_variables())value = sess.run(y, feed_dict={X: [1., 2., 3.]})print(value)# 準備存儲模型path = model_dirbuilder = sm.builder.SavedModelBuilder(path)# 構建需要在新會話中恢復的變量的 TensorInfo protobufX_TensorInfo = sm.utils.build_tensor_info(X)scale_TensorInfo = sm.utils.build_tensor_info(scale)y_TensorInfo = sm.utils.build_tensor_info(y)# 構建 SignatureDef protobufSignatureDef = sm.signature_def_utils.build_signature_def(inputs={'X': X_TensorInfo, 'w': scale_TensorInfo},outputs={'y': y_TensorInfo},method_name='test')# 將 graph 和變量等信息寫入 MetaGraphDef protobuf# 這里的 tags 里面的參數和 signature_def_map 字典里面的鍵都可以是自定義字符串,TensorFlow 為了方便使用,不在新地方將自定義的字符串忘記,可以使用預定義的這些值builder.add_meta_graph_and_variables(sess, tags=[sm.tag_constants.TRAINING], signature_def_map={sm.signature_constants.CLASSIFY_INPUTS: SignatureDef}) # 將 MetaGraphDef 寫入磁盤builder.save()
[10. 22. 36.]
INFO:tensorflow:No assets to save.
INFO:tensorflow:No assets to write.
INFO:tensorflow:SavedModel written to: /home/test/070807_model/saved_model.pb
?
import tensorflow as tf from tensorflow import saved_model as sm# 需要建立一個會話對象,將模型恢復到其中 with tf.Session() as sess:path = model_dirMetaGraphDef = sm.loader.load(sess, tags=[sm.tag_constants.TRAINING], export_dir=path)# 解析得到 SignatureDef protobufSignatureDef_d = MetaGraphDef.signature_defSignatureDef = SignatureDef_d[sm.signature_constants.CLASSIFY_INPUTS]# 解析得到 3 個變量對應的 TensorInfo protobufX_TensorInfo = SignatureDef.inputs['X']scale_TensorInfo = SignatureDef.inputs['w']y_TensorInfo = SignatureDef.outputs['y']# 解析得到具體 Tensor# .get_tensor_from_tensor_info() 函數中可以不傳入 graph 參數,TensorFlow 自動使用默認圖X = sm.utils.get_tensor_from_tensor_info(X_TensorInfo, sess.graph)scale = sm.utils.get_tensor_from_tensor_info(scale_TensorInfo, sess.graph)y = sm.utils.get_tensor_from_tensor_info(y_TensorInfo, sess.graph)print(sess.run(scale))print(sess.run(y, feed_dict={X: [3., 2., 1.]}))INFO:tensorflow:Restoring parameters from /home/test/070807_model/variables/variables
[10. 11. 12.]
[30. 22. 12.]
這里的"x","w","y"需要與build_signature_def定義有關,通過簽名來定義id;與前面訓練推理部分完全獨立;
print(X_TensorInfo.name) print(scale_TensorInfo.name) print(y_TensorInfo.name)input_1:0
w_1:0
output_1:0
轉載自:https://www.cnblogs.com/mbcbyq-2137/p/10044837.html
?
個人使用心得:Input值為placeholder,output即為需要輸出的值;output會保存所有對應的值,包括神經網絡權重等;等同于sess.run需要輸入啥,就Input啥;
總結
以上是生活随笔為你收集整理的tensorlfow.saved_model的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: re.compile与sub
- 下一篇: tf.variable_scope和tf