tensorflow之freeze_gragh

freeze_graphの下での使用の主な理解

freeze_graph_testの下に、関連知識のいくつかを理解して(良い学習値を持っていると言わ)

freeze_graph.pyソースリンク:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py

freeze_graph_test.pyソースリンク:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph_test.py

基本的な導入TFモデル

すべての文書形式はプロトコルバッファ、すなわちいるProtobufに基づいていますTensorflow

定義されたデータ構造、いるProtobufツールは、テキスト文書にC、Pythonや他の言語のクラスを生成し、これらのクラスは、読み込み、保存および方位データに配慮することができ

Graphオブジェクト内Tensorflowを基に算出されます

これは、ネットワークノードを格納することができ、各ノードは、入力および出力リンクと相互に作用を表します

クラスがいるProtobuf GraphDefです

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/framework/graph.proto

オブジェクトを定義するための基礎として作成されました。いるProtobufツールは、テキスト文書を解析し、ユーザの負荷を生成する、図に定義されたコードを格納及び操作します。

文書がgrapf_def変数にロードされ、あなたがデータにアクセスすることができます

これらのノードは、実質的に重要な部分がノードに格納されているトラバースするために、次のコードを使用することができます。

1 
2
graph_def = graph_pb2.GraphDef()
のためのノード graph_def.node

各ノードにあるnode_def.proto NodeDefオブジェクト定義は、これらのノードは、図Tensorflowの基本的なビルディングブロックであり、各ビルディングブロックは、その入力接続される操作を定義します。次のようにメンバーNodeDef:

  • ノード名の一意の識別子、識別子は、途中で他のノードによって使用されることはありません
  • opは、このような追加、MATMUL、Conv2Dとして、実行するアクションを定義します
  • 入力文字一覧表、各文字列は、二つの入力として、他のノードの名前である[「INPUT_1:0」、「INPUT_2:0」]
  • デバイスは、分散環境で実行するための位置を定義します
  • attrがキーと値のペアの記憶領域にノードのすべての属性が含まれています

より多くのメンバーがnode.name node.op等によりアクセスすることができます

右の重量でのトレーニング中のTFは、通常の文書形式で保存されますが、別のチェックポイントに格納され、変数の操作図は初期化中に最新の値をロードすることができないためです。

本番環境にデプロイする場合、使用別の文書は、多くの場合、非常に便利ではありませんので、我々は、スクリプトの必要freeze_graph.pyを

これらのチェックポイントは、文書に文書を凍結します。

具体的な操作は、GraphDefを読み込む文書の最新のチェックポイントからすべての変数の値を抽出し、その後(その特性数値データに格納された重みを含む)各操作変数のConstを交換することです。その後、それはすべてのノードが前向き推論のために独立していない解放し、出力ドキュメントに保存されたGraphDefます。

freeze_graph.py

まず、次のパラメータを理解します:

  • input_binaryで区別input_graphモデル文書、テキストまたはバイナリPBメタ、
  • 文書Tensorflowセーバーをロードするinput_saver
  • 復旧モデル変数値のためのチェックポイントファイルinput_checkpoint
  • Checkpoint_version可変文書フォーマット(saver_pb2.SaverDef.V1又はsaver_pb2.SaverDef.V2)
  • 書き込みパスの完了後に冷凍output_graph
  • input_binary入力文書は、バイナリ真か偽か
  • 出力ノード、カンマで区切られた複数のノードをoutput_node_names名前
  • restore_op_name廃止
  • 廃止されたfilename_tensor_name
  • clear_devicesのデフォルトはノードかどうかは明らかでは真、トレーニング機器であります
  • initializer_nodesは、ノードを初期化する必要があります
  • variable_names_whitelist指定された変数は、リストアする必要があります
  • variable_names_blacklist指定されていない変数回復
  • MetaGraphDefをロードするinput_meta_graph
  • SavedModel文書や変数input_saved_model_dirパス
  • MetaGraphDefタググループ、カンマ区切りを(MetaGraphDefタグが異なる算出マップを区別するために使用することができる)をロードsaved_model_tags

まず、チェックポイントバージョンを解決します:

1 
2
3
4
5
6
7
もし flags.checkpoint_versionの== 1
checkpoint_version = saver_pb2.SaverDef.V1
のelif flags.checkpoint_version == 2
checkpoint_version = saver_pb2.SaverDef.V2
上げるとValueError(「無効なチェックポイントのバージョンを( '1'または'2'でなければなりません) :%D」%の flags.checkpoint_version)


次のようにチェックポイントには二つの方法を保存します。

V1 v2の
model.ckpt-0001 model.ckpt-0001.index
model.ckpt-0001.meta model.ckpt-0001.meta
model.ckpt-0001.data-00000-の-00001

そして、graphDef入力を解析:

持続する…

参考:

https://www.tensorflow.org/guide/extend/model_files#freezing

https://blog.csdn.net/czq7511/article/details/72452985

オリジナルリンク大列  https://www.dazhuanlan.com/2019/08/24/5d612ad619bfd/

おすすめ

転載: www.cnblogs.com/chinatrump/p/11415213.html