Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras MemoryError:alloc在Windows上失败_Python_Numpy_Deep Learning_Keras - Fatal编程技术网

Python Keras MemoryError:alloc在Windows上失败

Python Keras MemoryError:alloc在Windows上失败,python,numpy,deep-learning,keras,Python,Numpy,Deep Learning,Keras,我想训练我的网络(图像分类,不幸的是在CPU上),我有71.000条记录:48x48(灰度)图像。(当我将其保存到numpy阵列时,它是1.4 Gb) 几分钟后,我收到以下错误消息: Epoch 1/50 3200/57419 [>.............................] - ETA: 5381s - loss: 1.9127 - acc: 0.2338Traceback (most recent call last): File "D:/Emotion-

我想训练我的网络(图像分类,不幸的是在CPU上),我有71.000条记录:48x48(灰度)图像。(当我将其保存到numpy阵列时,它是1.4 Gb)

几分钟后,我收到以下错误消息:

Epoch 1/50
   3200/57419 [>.............................] - ETA: 5381s - loss: 1.9127 - acc: 0.2338Traceback (most recent call last):
    File "D:/Emotion-Recognition/trainEmotionRecognizer.py", line 68, in <module>
      verbose=1, callbacks=callbacks)
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\keras\models.py", line 664, in fit
      sample_weight=sample_weight)
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\keras\engine\training.py", line 1143, in fit
      initial_epoch=initial_epoch)
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\keras\engine\training.py", line 843, in _fit_loop
      outs = f(ins_batch)
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\keras\backend\theano_backend.py", line 919, in __call__
      return self.function(*inputs)
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\theano\compile\function_module.py", line 886, in __call__
      storage_map=getattr(self.fn, 'storage_map', None))
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\theano\gof\link.py", line 325, in raise_with_op
      reraise(exc_type, exc_value, exc_trace)
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\theano\compile\function_module.py", line 873, in __call__
      self.fn() if output_subset is None else\
  MemoryError: alloc failed
  Apply node that caused the error: Alloc(TensorConstant{(1L, 1L, 1..1L) of 0.0}, if{shape,inplace}.0, TensorConstant{64}, if{shape,inplace}.2, if{shape,inplace}.3)
  Toposort index: 126
  Inputs types: [TensorType(float32, (True, True, True, True)), TensorType(int64, scalar), TensorType(int64, scalar), TensorType(int64, scalar), TensorType(int64, scalar)]
  Inputs shapes: [(1L, 1L, 1L, 1L), (), (), (), ()]
  Inputs strides: [(4L, 4L, 4L, 4L), (), (), (), ()]
  Inputs values: [array([[[[ 0.]]]], dtype=float32), array(64L, dtype=int64), array(64L, dtype=int64), array(24L, dtype=int64), array(24L, dtype=int64)]
  Outputs clients: [[if{inplace}(keras_learning_phase, Alloc.0, CorrMM_gradInputs{half, (1, 1), (1, 1)}.0), if{inplace}(keras_learning_phase, CorrMM_gradInputs{half, (1, 1), (1, 1)}.0, Alloc.0)]]

  Backtrace when the node is created(use Theano flag traceback.limit=N to make it longer):
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\theano\gradient.py", line 1272, in access_grad_cache
      term = access_term_cache(node)[idx]
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\theano\gradient.py", line 965, in access_term_cache
      output_grads = [access_grad_cache(var) for var in node.outputs]
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\theano\gradient.py", line 1272, in access_grad_cache
      term = access_term_cache(node)[idx]
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\theano\gradient.py", line 965, in access_term_cache
      output_grads = [access_grad_cache(var) for var in node.outputs]
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\theano\gradient.py", line 1272, in access_grad_cache
      term = access_term_cache(node)[idx]
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\theano\gradient.py", line 1106, in access_term_cache
      new_output_grads)
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\theano\gof\op.py", line 700, in L_op
      return self.grad(inputs, output_grads)
    File "C:\Users\Gabor\Anaconda2\lib\site-packages\theano\ifelse.py", line 223, in grad
      for i, t in enumerate(ts)])

  HINT: Use the Theano flag 'exception_verbosity=high' for a debugprint and storage map footprint of this apply node.
我使用的批量大小为64,列车图像大小为
(1,48,48),数据类型为uint8


如何修复此错误并训练我的网络?

要减少内存需求,oyu可以减少模型的大小(辍学也需要与前一个卷积层相同的内存),也可以减少batchsize。无论如何,在cpu上训练这样一个模型可能需要几天甚至几周的时间。如果可能的话,我强烈建议在gpu上进行计算

原来Theano有内存泄漏。当我尝试用Tensorflow作为Keras后端来训练它时,它是成功的


因此,如果您有这样的问题,请更改后端(注意
dim\u排序

尝试使用较小的批。我最近也遇到了这个问题。尝试重新启动python内核并再次运行模型编译和训练。最新版本的TheanoI可能会出现内存泄漏,但不幸的是,我没有一个好的GPU(在Windows上我无法访问它),我无法注册到AWS(因为我没有公认的信用卡)。据我计算,在CPU上训练它需要3天。
model = Sequential()
model.add(Convolution2D(32, 3, 3, border_mode='same', activation='relu', input_shape=(1,48,48)))
model.add(Dropout(0.3))
model.add(Convolution2D(32, 3, 3, border_mode='same', activation='relu'))
model.add(Dropout(0.3))
model.add(Convolution2D(32, 3, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Convolution2D(64, 3, 3, border_mode='same', activation='relu'))
model.add(Dropout(0.3))
model.add(Convolution2D(64, 3, 3, border_mode='same', activation='relu'))
model.add(Dropout(0.3))
model.add(Convolution2D(64, 3, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Convolution2D(128, 3, 3, border_mode='same', activation='relu'))
model.add(Dropout(0.3))
model.add(Convolution2D(128, 3, 3, border_mode='same', activation='relu'))
model.add(Dropout(0.3))
model.add(Convolution2D(128, 3, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(6, activation='softmax'))