2016-11-01 4 views
1

私のネットワークを使用して、出力の入力の勾配を評価しようとしています。ネットワークは、前方の小道具の間に完全に正常に動作するので、問題はありません。グラデーションのコードは次のようになります。tf.gradientsの結果を評価するときにTensorflowがスタックする

images, labels = inputs(train_dir, 
         True, 
         batch_size, 
         num_batches, 
         one_hot_labels=True) 
predictions = InterpolNet(images) 
restorer = tf.train.Saver() 
with tf.Session() as sess: 
    restorer.restore(sess, checkpoint_dir) 
    print 'Get grads' 
    grad_output = np.zeros((1,h,w,3), dtype=np.float32) 
    grad_output[0,0,0,0] = 1 
    grad = tf.gradients(predictions, images, grad_output) 
    print grad[0] 
    res = grad[0].eval() 

だから、基本的に、私はinputs機能で自分のネットへの入力を宣言し、私はInterpolNetに呼び出して、私のモデルを取得し、私は、最新のトレーニングの重みでチェックポイントを復元します。 feed_dictで入力を入れたところ、すべてが問題なく、実行の出力はネットの予想される出力です。sess.run(predictions, feed_dict=feed_dict)

代わりに(上記のコードで)グラデーションを取得しようとすると、プログラムは明らかにres = grad[0].eval()行(GPU使用率0%、顕著なCPU使用率)で止まってしまいます。正しいテンソルどのように見えるかprint grad[0]プリントは:

Tensor("gradients/conv1/conv1_1/Conv2D_grad/Conv2DBackpropInput:0", shape=(1, 128, 384, 6), dtype=float32)

が、コードは次の行に到達しません。私は何か間違っているのですか? grad_outputを使用しても問題には影響しないようです。ちょうど参考として、私はhttps://arxiv.org/pdf/1603.06041v2.pdfから

からペーパーを再実装しようとしていますありがとう!

+2

キューがありますか?通常のハングは、空のキューからデキューするときです。診断する方法は、[ここ](https://github.com/tensorflow/tensorflow/issues/2130#issuecomment-215180165) –

+0

で説明されているように、operation_timeout_in_msを有効にすることです。実際にはい、私はそうです、あなたは正しいです、タイムアウトを設定してくださいそれが明らかに問題であることを示しています。私は入力をネットに与える方法を変更しようとするので、キューに詰まることはありません。ありがとう! – powder

答えて

0

ヤロスラブのコメントから分かりましたように、私はinputsの機能の中にあるデータ生成キューにこだわっていました。

私がしたのは、変数imagesをキューの出力からプレースホルダー:images = tf.placeholder(tf.float32, shape=(1, h, w, 6))に変更することでした。

これは(私が訓練に使用されるものである)私はtf.gradientsでシンボリック勾配を計算し、その後、numpyの配列は、データを含む代わりにキューを使用してネットを供給するためにgrad[0].eval()feed_dictを使用することを許可しました。

すべてが機能します。

関連する問題