2017-09-25 15 views
0

私はこのCNN built for MNISTをCIFAR10に適合させようとしています。私はCIFAR画像(32x32)のサイズに合わせて構造を変更しました。私のGPU上の鉄道模型が、私は、テストデータのための評価関数(test_eval)を実行するたびに、私は最初のコンボリューション(hconv1)のためのメモリエラーの出る -TFモデルの重みをCPUに格納しますか?

ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[10000,32,32,32] 
    [[Node: Conv2D = Conv2D[T=DT_FLOAT, data_format="NHWC", padding="SAME", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true, _device="/job:localhost/replica:0/task:0/gpu:0"](Reshape, W_conv1/read/_79)]] 

を今私は上の同じコードを実行してみました私のCPU(export CUDA_VISIBLE_DEVICES=""を使用)とtest_eval関数は正常に実行されます。だから私は明らかに自分の体重変数だけを自分のCPUに明示的に保存すればそれが機能するかもしれないと考えました。だから私はからweight_variable機能を修正 -

def weight_variable(self, shape): 
    initial = tf.truncated_normal(shape, stddev=0.1) 
    return tf.Variable(initial) 

def weight_variable(self, shape): 
    with tf.device('/cpu:0'): 
     initial = tf.Variable(tf.truncated_normal(shape, stddev=0.1))    
    return initial 

まだ私は test_eval機能を実行すると、私はまだOOMエラーを取得しています。上記のコードは実際に変数をCPUに格納していますか?これをどうすれば解決できますか?

私のGPUはGeForce GTX 950M、2GBです。また、私が上に投稿したMNIST CNNのコードは、this

答えて

0

から取り込まれました。たとえば、最初のコンバレイヤーの重さは3.2Kですが、アクティブ化では32x28x28x10000x4 = 1.003GBです。これに続いてブロードキャストが追加されるため、最初のレイヤーを通過するには2GB以上のRAMが必要です。プロファイリングメモリの例については、thisを参照してください。

関連する問題