2017-03-02 16 views
0

通常の実行オプティマイザopが、我々はいくつかのモデルのトレーニング可能パラメータを更新するための入力として、オプティマイザの操作を実行コマンドを呼び出しますGPUメモリに収まらない。 このタスクを分割して、大きなバッチサイズを処理するにはどうすればよいですか?tensorflow大きなバッチ

答えて

0

これは主にGPUのメモリサイズに依存します。ただし、モデルとその必要な操作(つまり確率の予測)とともにデータセット全体を合わせるのは難しいです。したがって、異なる視点でバッチ処理を考える必要があります。代わりにtrain_stepへのごfeed_dictとしてXyを使用しての

# Model Definition  
X = tf.placeholder(tf.float32, shape=[None, DIM,DIM,3], name='X') 
y = tf.placeholder(tf.float32, shape=[None, N_CLASSES], name='y') 

... 

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) 

... 

# Training your model 
sess.run([train_step], feed_dict={X: X_batch, y: y_batch}) 

:私はあなたのコードは、これらの線に沿って行くと仮定します。すべてのバッチ(つまり、データセット全体)に対してcross_entropyを蓄積するだけです。その後、train_stepを1回実行することができます。例:

cross_entropy_all = [] 
for X_batch, y_batch in batches_generator(): 
    cross_entropy_all += sess.run([cross_entropy], feed_dict={X: X_batch, y: y_batch}) 

# Numpy or Tensorflow equivalent for `vstack` 
cross_entropy_all = np.vstack(cross_entropy_all) 

# Run the optimizer on the entire dataset (not just on a specific batch) 
sess.run([train_step], feed_dict={cross_entropy: cross_entropy_all}) 

これは、GPUをメモリから使い果たすことなく目標を達成する必要があります。提案されたアプローチは、すべてのクロスエントロピーに対して最適化ステップを実行する。したがって、XとY(これはすでに最適化ステップに供給されているため、cross_entropyを生成するために使用/必要です)を送る必要はありません。

関連する問題