2016-06-12 15 views
3

私はテンソルフローが初めてで、CIFAR 10データセットを訓練しようとしています。私は自分のNVIDIAコントロールパネルに応じてバッチサイズをどのように使用しても、私のGPUメモリの97%を使用していることに気付きました。私はバッチサイズを100から2にしようとしましたが、どちらの場合でも私のGPUメモリ使用量は常に97%です。それはなぜこれをするのだろうか?Tensorflowは、バッチサイズに関係なく、同じ量のgpuメモリを使用します。

def batchGenerator(batch_size = 32): 
    bi = 0 
    random.shuffle(train_data) 
    while bi + batch_size < len(train_data): 
     x = np.zeros((batch_size, 32, 32, 3)) 
     y = np.zeros((batch_size, 10)) 
     for b in range(batch_size): 
      x[b] = train_data[bi + b][0] 
      if random.choice((True, False)): 
       img = cv2.flip(x[b], 0) 
      if random.choice((True, False)): 
       img = cv2.flip(x[b], 1) 
      y[b][train_data[bi + b][1]] = 1 
     bi += batch_size 
     yield(x, y) 

with tf.Session() as s: 
    s.run(tf.initialize_all_variables()) 
    for epoch in range(100): 
     a = 0.0 
     i = 0 
     for x_train, y_train in batchGenerator(2): 
      outs = s.run([opt, accuracy], feed_dict = {x: x_train, y_exp: y_train, p_keep: 0.5}) 
      a += outs[-1] 
      i += 1 
     print('Epoch', epoch, 'Accuracy', a/i) 

答えて

7

この問題はHow to prevent tensorflow from allocating the totality of a GPU memory?


に関連しているTensorFlowはデフォルトであなたのGPUのすべてのメモリを使用していますが、これは正常な動作です。チュートリアルUsing GPUsから:

デフォルトでは、TensorFlowは、プロセスに表示されるすべてのGPUのほぼすべてのGPUメモリをマップします。これは、メモリ断片化を低減することによって、デバイス上の比較的貴重なGPUメモリリソースをより効率的に使用するために行われます。


彼らはまた、あなたのような、TensorFlowで撮影したメモリを削減する必要がある場合は、さまざまなオプションを提供します(リンクドキュメントから)

config = tf.ConfigProto() 
config.gpu_options.per_process_gpu_memory_fraction = 0.4 
session = tf.Session(config=config, ...) 

、40%にメモリの使用を制限しますGPUの使用可能メモリの

関連する問題