CKPT-> PB
tensorflow保存モデルは、2つの形式があります:
1. CKPT:マップを復元した変数は、訓練を行うことを続けることができます
2. PBは:;トレーニングを続けることができない変数のシーケンス図では,,あなただけの推論を行うことができます一定値となります
デモ
1 DEF freeze_graph(input_checkpoint、output_graph): 2 。3 '' ' 4 :PARAMのinput_checkpoint: 5 :PARAMのoutput_graph:PBモデル記憶パス 6 :リターン 7 空隙 8 ' '' 9。 10 #1 =チェックポイント(model_folder)をtf.train.get_checkpoint_state利用可能なディレクトリをチェックし、ファイルの状態かどうか#1 CKPT 。11 ## input_checkpoint = checkpoint.model_checkpoint_path CKPT取得したファイルパス 12は、 13であり、 #は、出力ノード名を指定して、ノードのノード名は、元のモデルに存在しなければならない 14 output_node_names = " InceptionV3 / logits / SpatialSqueeze「#出力ノードの複数場合、 『数』の使用は、間隔をあけ 15 16 ############################ステップ1:図はCKPTからの回復:############# ################################ 。17 セーバー= tf.train.import_meta_graph(input_checkpoint + '.META'、clear_devices =真) 18である グラフ= tf.get_default_graph()図は、得られた#デフォルト、省略してもよい 。19 input_graph_def graph.as_graph_def =() #は、シーケンス図は、図1の電流を表し返す。、省略することができる 20である 21である (tf.Sessionで)セッション数AS :#図現在のデフォルトとして使用される 22は セーバー。リストア(セッション数、input_checkpoint)回復位図のデータを得る。 23である 24 ###################### ##ステップ2:セッション数、図を指定し、永続オブジェクトを作成し、ノード情報出力##############の配列 25 output_graph_def graph_util.convert_variables_to_constants =( #永続性モデルを、変数の固定値 26である セッション数=セッション数、 27 input_graph_def = input_graph_def、 #に等しい:sess.graph_def 28 。output_node_names = output_node_names スプリット( " ")) #出力ノードが複数ある場合カンマで区切られた29 ##############永続モデル:#########################ステップ3 ######################################### 30 tf.gfile.GFile(output_graphと、 " WB F AS"): #は、モデルセーブ31がある 。F 書き込み(output_graph_def.SerializeToString()) #シリアル化された出力32 印刷( "OPS の%D最終グラフ " %のLEN(output_graph_def.node)) #現在の操作は、図1の複数のノードを有し得る。 33である (graph.get_operationsにOPため#): 34は、 35 #プリント(op.name、OP .valuesは()) 36 37 38れる ###########################呼び出さ############# ################### 39 #CKPTモデル入力経路 40 input_checkpoint = 'モデル/ model.ckpt-10000' 41れる パスPB出力モデル# 42は out_pb_path = " モデル/ PB / frozen_model.pb「 43 位freeze_graphがPBにCKPTう呼び出し 44 freeze_graph(input_checkpoint、out_pb_path)
解決
Freeze_graph機能は、最も重要なことは、「出力ノードの名前を」決定することである、ノード名がフリーズするオリジナルモデルのノードに存在する必要があり、我々は、出力ノードの名前を定義する必要があります。
硬化ダウン出力ノードにのみサブピクチャが必要な場合、無関係他方は破棄するフリーズ。私たちはモデルの目的を凍結するので、次の予測を行うことです。だから、output_node_namesノード名は、通常、最後のレイヤネットワークモデルの出力である、またはそれは我々がターゲットを予測するものです。
PBの保存するときは、指定したノード名convert_variables_to_constants機能によって硬化する必要があります。
差分テンソル名とノード名の
図のノード名は、操作及びテンソルの数を含むノードであります
テンソルは、ノードの内部の一部です。
入力には、例えば、「入力:0」は、テンソルの名前であり、「入力」は、ノードの名前を示します
PS:注テンソル名、即ち:ノード名+ ":" + "ID番号"、例えば、 "入力:0"