2017-02-06 12 views
4

私はTensorFlow v0.12を使用してトレーニング分類CNNを使用しており、訓練されたモデルを使用して新しいデータのラベルを作成します。トレーニングスクリプトの終わりにTensorFlow - メタグラフをインポートして変数を使用します

が、私は、コードのこれらの行を追加しました:完成訓練の後

saver = tf.train.Saver() 
save_path = saver.save(sess,'/home/path/to/model/model.ckpt') 

を、フォルダに登場するファイルは、次のとおりです。1. チェックポイント。 2. model.ckpt.data-00000-of-00001; 3. model.ckpt.index; 4. model.ckpt.meta

は、その後、私は.METAファイルを使用してモデルを復元しようとしました。その後、

saver=tf.train.import_meta_graph(savepath+'model.ckpt.meta') #line1 

と::this tutorialに続いて、私は私の分類コードに次の行を追加

saver.restore(sess, save_path=savepath+'model.ckpt') #line2 

その変更の前に、私は再びグラフを構築した後、書き込み(代わりのLINE1)するために必要な:

saver = tf.train.Saver() 

しかし、それを復元するために、グラフの建物を削除し、line1を使用して、エラーが発生しました。

predictions = sess.run(y_conv, feed_dict={x: patches,keep_prob: 1.0}) 

Pythonはy_convパラメータを認識しませんでした:エラーは、私は自分のコード内のグラフから変数を使用し、Pythonはそれを認識していなかったということでした。メタグラフを使用して変数を復元する方法はありますか?そうでなければ、元のグラフの変数を使用できない場合、これは何を助けてくれますか?

私はこの質問があまり明確ではないことを知っていますが、問題を言葉で表現するのは難しかったです。申し訳ありません...

お返事ありがとうございます。 Roi。

答えて

9

可能ですので、ご安心ください。あなたは、グラフを構築し、それらを参照するときに

saver = tf.train.import_meta_graph('model/export/{}.meta'.format(model_name)) 
saver.restore(sess, 'model/export/{}'.format(model_name)) 
graph = tf.get_default_graph()  
y_conv = graph.get_operation_by_name('y_conv').outputs[0] 
predictions = sess.run(y_conv, feed_dict={x: patches,keep_prob: 1.0}) 

好ましい方法は、しかしコレクションにOPSを追加することになります。あなたはもう、グラフに触れることをしたくないと仮定すると、このような何かを行います。

tf.add_to_collection("y_conv", y_conv) 

そして、あなたはメタグラフをインポートし、それを復元した後、その後、あなたが呼び出します:あなたは、グラフを定義するときに、次の行追加し、それが実際の文書で説明されて

y_conv = tf.get_collection("y_conv")[0] 

を - あなたがリンクした正確なページ - しかし、おそらくあなたはそれを逃した。

拡張子.ckptの拡張は必要ありません。モデルを保存する古い方法であるため、混乱を招くことがあります。

+0

'name =" y_conv "'のようなテンソルの名前を付けていないとどうしたらいいですか? – Deepank

3

ジャスト・ロバーツの答えに追加する - メタグラフからセーバーを取得し、現在のセッションで変数を復元するためにそれを使用した後、あなたも使用することができます。

y_conv = graph.get_tensor_by_name('y_conv:0') 

これはあなたの場合は動作しますname="y_conv"引数を明示的に追加してy_convを作成しました(すべてのTF操作者がこれを持っています)。

関連する問題