2016-08-25 12 views
2

TensorFlowでは、画像があるとします。同じ畳み込みカーネルを複数回適用したいとします。例えば、私は次のような何かをしたいと思います:TensorFlowで畳み込みRNNを実装する方法は?

for i in range(5): 
    output = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(output, weights, [1,1,1,1]), bias)) 

しかし、これは非常に迅速に、私は多くのループを持っている場合は、メモリが不足します。これは、システムがシーケンス全体を一度に保持するのに十分なメモリを割り当てているためです。

これを行う代替方法は何ですか?

ありがとうございます!次のように

+0

GPUでこれを実行していますか?もしそうなら、どのGPUを実行していますか?また、入力画像の大きさはどれくらいですか?勾配を得るために伝搬を戻すことができるように、シーケンスを周りに保つことが必要です。 – keveman

+0

ご返信ありがとうございます。私はGPU、12GBのタイタンXでそれを実行しています。入力画像は1024x512ですが、私はこれを試すことができます。グラデーションのバックプロパゲーションのためにシーケンスを維持する必要があることは、まさに正しいことです。したがって、これは実際には正しい方法であると考えていますか? – Carl

+0

確かに。あなたのアプローチは大丈夫です。メモリが不足している場合は、実行しようとしている時間とステップの数をピングバックしてください。 – keveman

答えて

0

tensorflowが動作する方法は次のとおりです。

あなたが任意の操作を作成すると、この操作が使用されていない場合でも、それが破壊されることはありません。したがって、各反復を通じて、3つの操作を作成しています。したがって、5回の反復の後、15回の操作で終了します。実際には、入力に同じ畳み込みカーネルを適用する方法ではありません。だから、最初にグラフ全体を作成するべきです。つまり:

x = tf.placeholder(tf.float32, shape=[...], name='input_frames') 
weights: tf.Variable(tf.truncated_normal([5, 5, 3, 128], stddev=1e-1, dtype=tf.float32, name='weights1')) 
output = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(output, weights, [1,1,1,1]), bias)) 

for i in range(5): 
    sess.run(output, feed_dict={x: "your_image"}) 

希望すると便利です。

関連する問題