2016-10-09 7 views
4

TensorFlowモデルを訓練して保存した後、別のモデルを使用していると仮定し、保存されたモデルのいくつかのレイヤー私のモデルでは(彼らは同じ形をしています)。特定のTensorFlow変数を特定のレイヤーに復元する(名前でリストアする)

モデルから特定の変数を特定の名前で保存する方法を見つけることができましたが、これらの変数を名前でリストアする例は見つかりませんでした。

たとえば、私の保存したモデルでは、 "v1"という重みのテンソル(いくつかの形状)を保存したとします。今私の新しいモデルでは、 "v1"テンソルと同じ形をしている "v2"という重みテンソルがあります。今私は、 "v1"の保存された変数を私の "v2"重みテンソルにロードしたい、あるいはこの "v1"ウェイトを私の新しいグラフの複数のテンソルにうまくロードしたいと思います。

これは可能ですか?もしそうなら、どうすればいいですか?

答えて

0

この問題を解決するための回避策が見つかりました。

あなたができることは、変数値をテンソルの名前と値としてキーを持つ値または辞書として直接ディスクに保存することです。たとえば :

vars_dict = {} 
for tensor in (list_of_tensors_you_want_to_save): 
    vars_dict[tensor.name] = sess.run(tensor) 

次にあなたが望む任意の他の変数に、この辞書から任意の変数を読み込むことができます。私の例では

は、オリジナルのテンソルは「V1」と呼ばれ、私がロードする2つのテンソルは「V2」と「V3」していると仮定し、以下を行うことができます。

tensor_to_load_1 = tf.get_default_graph().get_tensor_by_name("v2") 
tensor_to_load_2 = tf.get_default_graph().get_tensor_by_name("v3") 

assign_op_1 = tf.assign(tensor_to_load_1, vars_dict["v1"]) 
assign_op_1 = tf.assign(tensor_to_load_2, vars_dict["v1"]) 

sess.run([assign_op_1, assign_op_2]) 

これ、のもちろん、「v1」、「v2」、および「v3」は同じ形状でなければなりません。

このサンプルコードを使用すると、任意の変数を保存して、元のグラフが現在のグラフと一致することなく、必要な他の変数にロードすることができます。

関連する問題