pb格式,可以把訓練好的模型的參數固話,便于調用。
舉個示例:
with tf.Session(graph=tf.Graph()) as sess:x = tf.placeholder(tf.int32, name='x')y = tf.placeholder(tf.int32, name='y')b = tf.Variable(1, name='b')xy = tf.multiply(x, y)# 這里的輸出需要加上name屬性op = tf.add(xy, b, name='op_to_store')sess.run(tf.global_variables_initializer())# convert_variables_to_constants 需要指定output_node_names,list(),可以多個constant_graph = tf.graph_util.convert_variables_to_constants(sess, sess.graph_def, ['op_to_store'])# 測試 OPfeed_dict = {x: 10, y: 3}print(sess.run(op, feed_dict))# 寫入序列化的 PB 文件with tf.gfile.FastGFile('model.pb', mode='wb') as f:f.write(constant_graph.SerializeToString())# 輸出# INFO:tensorflow:Froze 1 variables.# Converted 1 variables to const ops.# 31
tensorflow predict。輸出文件如下:
?這個pb文件如何調用呢?
tensorflow算法?我們再寫個demo
sess = tf.Session()
with tf.gfile.FastGFile('model.pb', 'rb') as f:graph_def = tf.GraphDef()graph_def.ParseFromString(f.read())sess.graph.as_default()tf.import_graph_def(graph_def, name='') # 導入計算圖
# 需要有一個初始化的過程
sess.run(tf.global_variables_initializer())
# 需要先復原變量
print(sess.run('b:0'))
# 1
# 輸入
input_x = sess.graph.get_tensor_by_name('x:0')
input_y = sess.graph.get_tensor_by_name('y:0')
op = sess.graph.get_tensor_by_name('op_to_store:0')
ret = sess.run(op, feed_dict={input_x: 5, input_y: 5})
print(ret)
# 輸出 26
?這里根據名稱獲取張量為什么是x:0而不是x呢?
繼續研究一下:打個斷點發現name確實是x:0,至于為什么,現在還不是太清楚,后續再慢慢體會。
tensorflow 模型文件、
***********************由于我們服務是用C#調用的,所以決定嘗試一下C#調用pb文件**********
http://imlihang.cn/?p=183
參考上面牛人,表示感謝
首先安裝
然后就可以直接調用了
Console.WriteLine("Hello World!");var graph = new TFGraph();var model = File.ReadAllBytes("model.pb");graph.Import(model);using (var session = new TFSession(graph)){var runner = session.GetRunner();TFTensor xTf = new TFTensor(new int[2] { 10,15});TFTensor yTf = new TFTensor(new int[2] { 2, 2 });// 其中的graph["input"][0], graph["output"][0]指的是,input節點的第1個輸出,和 output節點的第1個輸出,等同于python中的input:0 output:0 // 其中Fetch()用于取得輸出變量。 runner.AddInput(graph["x"][0], xTf);runner.AddInput(graph["y"][0], yTf);runner.Fetch(graph["op_to_store"][0]);var output = runner.Run();var result = output[0];var iData = result.GetValue(true);Console.ReadKey();}Console.ReadKey();
?看下運行結果:
?是不是完全符合預期結果。
?
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态