国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Tensorflow 使用pb文件保存(恢復)模型計算圖和參數實例詳解

2020-02-15 21:15:47
字體:
來源:轉載
供稿:網友

一、保存:

graph_util.convert_variables_to_constants 可以把當前session的計算圖串行化成一個字節流(二進制),這個函數包含三個參數:參數1:當前活動的session,它含有各變量

參數2:GraphDef 對象,它描述了計算網絡

參數3:Graph圖中需要輸出的節點的名稱的列表

返回值:精簡版的GraphDef 對象,包含了原始輸入GraphDef和session的網絡和變量信息,它的成員函數SerializeToString()可以把這些信息串行化為字節流,然后寫入文件里:

constant_graph = graph_util.convert_variables_to_constants( sess, sess.graph_def , ['sum_operation'] )with open( pbName, mode='wb') as f:f.write(constant_graph.SerializeToString())

需要指出的是,如果原始張量(包含在參數1和參數2中的組成部分)不參與參數3指定的輸出節點列表所指定的張量計算的話,這些張量將不會存在返回的GraphDef對象里,也不會被串行化寫入pb文件。

二、恢復:

恢復時,創建一個GraphDef,然后從上述的文件里加載進來,接著輸入到當前的session:

    graph0 = tf.GraphDef()    with open( pbName, mode='rb') as f:      graph0.ParseFromString( f.read() )      tf.import_graph_def( graph0 , name = '' )

三、代碼:

 import tensorflow as tf from tensorflow.python.framework import graph_util pbName = 'graphA.pb'def graphCreate() :  with tf.Session() as sess :    var1 = tf.placeholder ( tf.int32 , name='var1' )     var2 = tf.Variable( 20 , name='var2' )#實參name='var2'指定了操作名,該操作返回的張量名是在                       #'var2'后面:0 ,即var2:0 是返回的張量名,也就是說變量                       # var2的名稱是'var2:0'    var3 = tf.Variable( 30 , name='var3' )    var4 = tf.Variable( 40 , name='var4' )    var4op = tf.assign( var4 , 1000 , name = 'var4op1' )    sum = tf.Variable( 4, name='sum' )    sum = tf.add ( var1 , var2, name = 'var1_var2' )     sum = tf.add( sum , var3 , name='sum_var3' )    sumOps = tf.add( sum , var4 , name='sum_operation' )    oper = tf.get_default_graph().get_operations()    with open( 'operation.csv','wt' ) as f:      s = 'name,type,output/n'      f.write( s )       for o in oper:        s = o.name        s += ','+ o.type         inp = o.inputs        oup = o.outputs        for iip in inp :          s #s += ','+ str(iip)        for iop in oup :          s += ',' + str(iop)        s += '/n'        f.write( s )                for var in tf.global_variables():        print('variable=> ' , var.name) #張量是tf.Variable/tf.Add之類操作的結果,                        #張量的名字使用操作名加:0來表示    init = tf.global_variables_initializer()    sess.run( init )    sess.run( var4op )    print('sum_operation result is Tensor ' , sess.run( sumOps , feed_dict={var1:1}) )     constant_graph = graph_util.convert_variables_to_constants( sess, sess.graph_def , ['sum_operation'] )    with open( pbName, mode='wb') as f:      f.write(constant_graph.SerializeToString()) def graphGet() :  print("start get:" )  with tf.Graph().as_default():    graph0 = tf.GraphDef()    with open( pbName, mode='rb') as f:      graph0.ParseFromString( f.read() )      tf.import_graph_def( graph0 , name = '' )    with tf.Session() as sess :      init = tf.global_variables_initializer()      sess.run(init)      v1 = sess.graph.get_tensor_by_name('var1:0' )      v2 = sess.graph.get_tensor_by_name('var2:0' )      v3 = sess.graph.get_tensor_by_name('var3:0' )      v4 = sess.graph.get_tensor_by_name('var4:0' )            sumTensor = sess.graph.get_tensor_by_name("sum_operation:0")      print('sumTensor is : ' , sumTensor )      print( sess.run( sumTensor , feed_dict={v1:1} ) )   graphCreate()graphGet()              
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 军事| 仁寿县| 密山市| 综艺| 瓦房店市| 甘谷县| 涡阳县| 牙克石市| 蕉岭县| 响水县| 绥棱县| 黄骅市| 柯坪县| 美姑县| 调兵山市| 视频| 金寨县| 营山县| 西丰县| 苍南县| 女性| 大名县| 利辛县| 鹤山市| 柞水县| 墨玉县| 哈巴河县| 闽清县| 金溪县| 威远县| 垫江县| 那坡县| 莱阳市| 沙湾县| 邵东县| 青田县| 黑水县| 峨眉山市| 忻城县| 西林县| 彭阳县|