2017-10-12 12 views
0

私はTensorflowで畳み込みニューラルネットワークを訓練しています。私のコードはエラーなく完了まで実行されます。つまり、NNが知っている重みと偏りをどうやって節約できているのかを正確に理解することができませんでした(サーバーでトレーニングをしていて、ローカルで簡単に視覚化することが重要です)。Tensorflowで訓練された重みとバイアスを保存/復元するのに混乱します

私は以下のようなものを私の重みとバイアスを初期化します。

weights = { 
'wConv1': tf.Variable(tf.random_normal([5, 5, 1, 3],0,0.25), name='wC1'), 
'wConv2': tf.Variable(tf.random_normal([5, 5, 3, 32],0,0.25), name='wC2'), 
'wConv3': tf.Variable(tf.random_normal([5, 5, 32, 64],0,0.25), name='wC3'), 
'wConv4': tf.Variable(tf.random_normal([5, 5, 64, 128],0,0.25), name='wC4'), 
'wConv5': tf.Variable(tf.random_normal([5, 5, 128, 64],0,0.25), name='wC5'), 
'wConv6': tf.Variable(tf.random_normal([5, 5, 64, 32],0,0.25), name='wC6'), 
'wConv7': tf.Variable(tf.random_normal([5, 5, 32, 16],0,0.25), name='wC7'), 
'wOUT' : tf.Variable(tf.random_normal([5, 5, 16, 1],0,0.25),   name='wCOUT') 
} 

biases = { 
'bConv1': tf.Variable(tf.random_normal([3]), name='bC1'), 
'bConv2': tf.Variable(tf.random_normal([32]), name='bC2'), 
'bConv3': tf.Variable(tf.random_normal([64]), name='bC3'), 
'bConv4': tf.Variable(tf.random_normal([128]), name='bC4'), 
'bConv5': tf.Variable(tf.random_normal([64]), name='bC5'), 
'bConv6': tf.Variable(tf.random_normal([32]), name='bC6'), 
'bConv7': tf.Variable(tf.random_normal([16]), name='bC7'), 
'bOUT': tf.Variable(tf.random_normal([1]),  name='bCOUT') 
} 

その後、私は実行かつてしかし、多くのエポックが完了し、私は以下を使用して、すべてを保存します。今すぐ

saver = tf.train.Saver({"weights": weights, "biases": biases}) 
save_path = saver.save(sess, "./output/trained.ckpt")  

、自分でマシン私は重みをロードしようとする評価スクリプトを持っています:

with sess.as_default(): 
      saver = tf.train.import_meta_graph('output.ckpt.meta') 
      saver.restore(sess,tf.train.latest_checkpoint('./')) 
      a= tf.all_variables() 
      sess.run(tf.global_variables_initializer()) 
      b=sess.run(pred,feed_dict={x: input[:,:,:,30,:]}) 

今、問題 は、私の質問は、私は訓練された重みとバイアスのみで保存することができますどのように、ある

<tf.Variable 'wC1:0' shape=(5, 5, 1, 3) dtype=float32_ref>, 
<tf.Variable 'wC2:0' shape=(5, 5, 3, 32) dtype=float32_ref>, 
<tf.Variable 'wC3:0' shape=(5, 5, 32, 64) dtype=float32_ref>, 
<tf.Variable 'wC4:0' shape=(5, 5, 64, 128) dtype=float32_ref>, 
<tf.Variable 'wC5:0' shape=(5, 5, 128, 64) dtype=float32_ref>, 
<tf.Variable 'wC6:0' shape=(5, 5, 64, 32) dtype=float32_ref>, 
<tf.Variable 'wC7:0' shape=(5, 5, 32, 16) dtype=float32_ref>, 
<tf.Variable 'wCOUT:0' shape=(5, 5, 16, 1) dtype=float32_ref>, 
<tf.Variable 'bC1:0' shape=(3,) dtype=float32_ref>, 
<tf.Variable 'bC2:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC3:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC4:0' shape=(128,) dtype=float32_ref>, 
<tf.Variable 'bC5:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC6:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC7:0' shape=(16,) dtype=float32_ref>, 
<tf.Variable 'bCOUT:0' shape=(1,) dtype=float32_ref>, 
<tf.Variable 'beta1_power:0' shape=() dtype=float32_ref>, 
<tf.Variable 'beta2_power:0' shape=() dtype=float32_ref>, 
<tf.Variable 'wC1/Adam:0' shape=(5, 5, 1, 3) dtype=float32_ref>, 
<tf.Variable 'wC1/Adam_1:0' shape=(5, 5, 1, 3) dtype=float32_ref>, 
<tf.Variable 'wC2/Adam:0' shape=(5, 5, 3, 32) dtype=float32_ref>, 
<tf.Variable 'wC2/Adam_1:0' shape=(5, 5, 3, 32) dtype=float32_ref>, 
<tf.Variable 'wC3/Adam:0' shape=(5, 5, 32, 64) dtype=float32_ref>, 
<tf.Variable 'wC3/Adam_1:0' shape=(5, 5, 32, 64) dtype=float32_ref>, 
<tf.Variable 'wC4/Adam:0' shape=(5, 5, 64, 128) dtype=float32_ref>, 
<tf.Variable 'wC4/Adam_1:0' shape=(5, 5, 64, 128) dtype=float32_ref>, 
<tf.Variable 'wC5/Adam:0' shape=(5, 5, 128, 64) dtype=float32_ref>, 
<tf.Variable 'wC5/Adam_1:0' shape=(5, 5, 128, 64) dtype=float32_ref>, 
<tf.Variable 'wC6/Adam:0' shape=(5, 5, 64, 32) dtype=float32_ref>, 
<tf.Variable 'wC6/Adam_1:0' shape=(5, 5, 64, 32) dtype=float32_ref>, 
<tf.Variable 'wC7/Adam:0' shape=(5, 5, 32, 16) dtype=float32_ref>, 
<tf.Variable 'wC7/Adam_1:0' shape=(5, 5, 32, 16) dtype=float32_ref>, 
<tf.Variable 'wCOUT/Adam:0' shape=(5, 5, 16, 1) dtype=float32_ref>, 
<tf.Variable 'wCOUT/Adam_1:0' shape=(5, 5, 16, 1) dtype=float32_ref>, 
<tf.Variable 'bC1/Adam:0' shape=(3,) dtype=float32_ref>, 
<tf.Variable 'bC1/Adam_1:0' shape=(3,) dtype=float32_ref>, 
<tf.Variable 'bC2/Adam:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC2/Adam_1:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC3/Adam:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC3/Adam_1:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC4/Adam:0' shape=(128,) dtype=float32_ref>, 
<tf.Variable 'bC4/Adam_1:0' shape=(128,) dtype=float32_ref>, 
<tf.Variable 'bC5/Adam:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC5/Adam_1:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC6/Adam:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC6/Adam_1:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC7/Adam:0' shape=(16,) dtype=float32_ref>, 
<tf.Variable 'bC7/Adam_1:0' shape=(16,) dtype=float32_ref>, 
<tf.Variable 'bCOUT/Adam:0' shape=(1,) dtype=float32_ref>, 
<tf.Variable 'bCOUT/Adam_1:0' shape=(1,) dtype=float32_ref>, 
<tf.Variable 'wC1:0' shape=(5, 5, 1, 3) dtype=float32_ref>, 
<tf.Variable 'wC2:0' shape=(5, 5, 3, 32) dtype=float32_ref>, 
<tf.Variable 'wC3:0' shape=(5, 5, 32, 64) dtype=float32_ref>, 
<tf.Variable 'wC4:0' shape=(5, 5, 64, 128) dtype=float32_ref>, 
<tf.Variable 'wC5:0' shape=(5, 5, 128, 64) dtype=float32_ref>, 
<tf.Variable 'wC6:0' shape=(5, 5, 64, 32) dtype=float32_ref>, 
<tf.Variable 'wC7:0' shape=(5, 5, 32, 16) dtype=float32_ref>, 
<tf.Variable 'wCOUT:0' shape=(5, 5, 16, 1) dtype=float32_ref>, 
<tf.Variable 'bC1:0' shape=(3,) dtype=float32_ref>, 
<tf.Variable 'bC2:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC3:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC4:0' shape=(128,) dtype=float32_ref>, 
<tf.Variable 'bC5:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC6:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC7:0' shape=(16,) dtype=float32_ref>, 
<tf.Variable 'bCOUT:0' shape=(1,) dtype=float32_ref>, 
<tf.Variable 'beta1_power:0' shape=() dtype=float32_ref>, 
<tf.Variable 'beta2_power:0' shape=() dtype=float32_ref>, 
<tf.Variable 'wC1/Adam:0' shape=(5, 5, 1, 3) dtype=float32_ref>, 
<tf.Variable 'wC1/Adam_1:0' shape=(5, 5, 1, 3) dtype=float32_ref>, 
<tf.Variable 'wC2/Adam:0' shape=(5, 5, 3, 32) dtype=float32_ref>, 
<tf.Variable 'wC2/Adam_1:0' shape=(5, 5, 3, 32) dtype=float32_ref>, 
<tf.Variable 'wC3/Adam:0' shape=(5, 5, 32, 64) dtype=float32_ref>, 
<tf.Variable 'wC3/Adam_1:0' shape=(5, 5, 32, 64) dtype=float32_ref>, 
<tf.Variable 'wC4/Adam:0' shape=(5, 5, 64, 128) dtype=float32_ref>, 
<tf.Variable 'wC4/Adam_1:0' shape=(5, 5, 64, 128) dtype=float32_ref>, 
<tf.Variable 'wC5/Adam:0' shape=(5, 5, 128, 64) dtype=float32_ref>, 
<tf.Variable 'wC5/Adam_1:0' shape=(5, 5, 128, 64) dtype=float32_ref>, 
<tf.Variable 'wC6/Adam:0' shape=(5, 5, 64, 32) dtype=float32_ref>, 
<tf.Variable 'wC6/Adam_1:0' shape=(5, 5, 64, 32) dtype=float32_ref>, 
<tf.Variable 'wC7/Adam:0' shape=(5, 5, 32, 16) dtype=float32_ref>, 
<tf.Variable 'wC7/Adam_1:0' shape=(5, 5, 32, 16) dtype=float32_ref>, 
<tf.Variable 'wCOUT/Adam:0' shape=(5, 5, 16, 1) dtype=float32_ref>, 
<tf.Variable 'wCOUT/Adam_1:0' shape=(5, 5, 16, 1) dtype=float32_ref>, 
<tf.Variable 'bC1/Adam:0' shape=(3,) dtype=float32_ref>, 
<tf.Variable 'bC1/Adam_1:0' shape=(3,) dtype=float32_ref>, 
<tf.Variable 'bC2/Adam:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC2/Adam_1:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC3/Adam:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC3/Adam_1:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC4/Adam:0' shape=(128,) dtype=float32_ref>, 
<tf.Variable 'bC4/Adam_1:0' shape=(128,) dtype=float32_ref>, 
<tf.Variable 'bC5/Adam:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC5/Adam_1:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC6/Adam:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC6/Adam_1:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC7/Adam:0' shape=(16,) dtype=float32_ref>, 
<tf.Variable 'bC7/Adam_1:0' shape=(16,) dtype=float32_ref>, 
<tf.Variable 'bCOUT/Adam:0' shape=(1,) dtype=float32_ref>, 
<tf.Variable 'bCOUT/Adam_1:0' shape=(1,) dtype=float32_ref>, 
<tf.Variable 'wC1:0' shape=(5, 5, 1, 3) dtype=float32_ref>, 
<tf.Variable 'wC2:0' shape=(5, 5, 3, 32) dtype=float32_ref>, 
<tf.Variable 'wC3:0' shape=(5, 5, 32, 64) dtype=float32_ref>, 
<tf.Variable 'wC4:0' shape=(5, 5, 64, 128) dtype=float32_ref>, 
<tf.Variable 'wC5:0' shape=(5, 5, 128, 64) dtype=float32_ref>, 
<tf.Variable 'wC6:0' shape=(5, 5, 64, 32) dtype=float32_ref>, 
<tf.Variable 'wC7:0' shape=(5, 5, 32, 16) dtype=float32_ref>, 
<tf.Variable 'wCOUT:0' shape=(5, 5, 16, 1) dtype=float32_ref>, 
<tf.Variable 'bC1:0' shape=(3,) dtype=float32_ref>, 
<tf.Variable 'bC2:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC3:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC4:0' shape=(128,) dtype=float32_ref>, 
<tf.Variable 'bC5:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC6:0' shape=(32,) dtype=float32_ref>, 


<tf.Variable 'bC7:0' shape=(16,) dtype=float32_ref>, 
<tf.Variable 'bCOUT:0' shape=(1,) dtype=float32_ref>, 
<tf.Variable 'beta1_power:0' shape=() dtype=float32_ref>, 
<tf.Variable 'beta2_power:0' shape=() dtype=float32_ref>, 
<tf.Variable 'wC1/Adam:0' shape=(5, 5, 1, 3) dtype=float32_ref>, 
<tf.Variable 'wC1/Adam_1:0' shape=(5, 5, 1, 3) dtype=float32_ref>, 
<tf.Variable 'wC2/Adam:0' shape=(5, 5, 3, 32) dtype=float32_ref>, 
<tf.Variable 'wC2/Adam_1:0' shape=(5, 5, 3, 32) dtype=float32_ref>, 
<tf.Variable 'wC3/Adam:0' shape=(5, 5, 32, 64) dtype=float32_ref>, 
<tf.Variable 'wC3/Adam_1:0' shape=(5, 5, 32, 64) dtype=float32_ref>, 
<tf.Variable 'wC4/Adam:0' shape=(5, 5, 64, 128) dtype=float32_ref>, 
<tf.Variable 'wC4/Adam_1:0' shape=(5, 5, 64, 128) dtype=float32_ref>, 
<tf.Variable 'wC5/Adam:0' shape=(5, 5, 128, 64) dtype=float32_ref>, 
<tf.Variable 'wC5/Adam_1:0' shape=(5, 5, 128, 64) dtype=float32_ref>, 
<tf.Variable 'wC6/Adam:0' shape=(5, 5, 64, 32) dtype=float32_ref>, 
<tf.Variable 'wC6/Adam_1:0' shape=(5, 5, 64, 32) dtype=float32_ref>, 
<tf.Variable 'wC7/Adam:0' shape=(5, 5, 32, 16) dtype=float32_ref>, 
<tf.Variable 'wC7/Adam_1:0' shape=(5, 5, 32, 16) dtype=float32_ref>, 
<tf.Variable 'wCOUT/Adam:0' shape=(5, 5, 16, 1) dtype=float32_ref>, 
<tf.Variable 'wCOUT/Adam_1:0' shape=(5, 5, 16, 1) dtype=float32_ref>, 
<tf.Variable 'bC1/Adam:0' shape=(3,) dtype=float32_ref>, 
<tf.Variable 'bC1/Adam_1:0' shape=(3,) dtype=float32_ref>, 
<tf.Variable 'bC2/Adam:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC2/Adam_1:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC3/Adam:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC3/Adam_1:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC4/Adam:0' shape=(128,) dtype=float32_ref>, 
<tf.Variable 'bC4/Adam_1:0' shape=(128,) dtype=float32_ref>, 
<tf.Variable 'bC5/Adam:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC5/Adam_1:0' shape=(64,) dtype=float32_ref>, 
<tf.Variable 'bC6/Adam:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC6/Adam_1:0' shape=(32,) dtype=float32_ref>, 
<tf.Variable 'bC7/Adam:0' shape=(16,) dtype=float32_ref>, 
<tf.Variable 'bC7/Adam_1:0' shape=(16,) dtype=float32_ref>, 
<tf.Variable 'bCOUT/Adam:0' shape=(1,) dtype=float32_ref>, 
<tf.Variable 'bCOUT/Adam_1:0' shape=(1,) dtype=float32_ref>] 
:私は「」私は私のバイアスと重み変数の多くのコピーと思われるもので、混乱を得るに読み込むときに、 Tensorflowをテストして後でロードしますか?

+0

これを見てください:https://www.tensorflow。org/api_guides/python/meta_graph – BlooB

答えて

0

正確な質問に答える前に、私が最初にあなたの懸念に対処してみましょう:私は「」私は私のバイアスの 多くのコピーと思われるもので、混乱を取得中にロードするとき

問題は、ありますあなたの評価スクリプトで、体重変数

あなたのトレーニングメタグラフをロード:

saver = tf.train.import_meta_graph('output.ckpt.meta') 

そのグラフ、Dインサイド定義した明示的な重みと偏り変数以外に、最適化プロセスに関連する変数(つまり、接尾辞がadamまたはbeta1_powerの変数)があります。上記で指定した行を実行すると、それらは評価スクリプトで再び定義されますが、推論に必ずしも必要ではないかもしれません。

また、推論に必要な正確なグラフを定義することもできます。これはトレーニングとは少し異なる場合があります。あなたの場合、オプティマイザを定義しないだけです。

今、あなたの質問に対処します

私の質問は、どのように私はONLY Tensorflowで訓練された重みとバイアスを保存することができ、その後、テスト目的のために、後にそれらをロード?

コードからは、本質的にこれを行うようです。あなたが見る他の変数は上記のものに由来します。

1つのことを指摘します。変数を復元した後で変数を初期化しないように注意してください。現在のコードをそのまま使用する場合は、まず初期化してから復元してください。推論グラフを変更し、オプティマイザを含まない場合は、変数を初期化する必要はありません。

+0

私は、予測操作を定義するために、tf.placeholder()の辞書として重みとバイアスを定義する必要があるという問題があります。セッションブロックを実行すると、プレースホルダに値がないというエラーが表示されます。 – Karl

+0

私は理解していない、正確なコードを参照する必要があります.. – amirbar

+0

私はこのサイトに新しいです、それはコードがコメントに入れるには長すぎるように見えます。共有する別の方法がありますか? – Karl

関連する問題