我目前正在使用具有张量流作为后端的keras训练一系列数据文件的神经网络 . 更具体地说,我有一个生成器函数,它顺序从文件中读取数据并将其提供给keras的fit_generator()函数 . 然而,发生的事情是,经过一段时间后,似乎tensorflow超出了我的机器的作业内存限制 . 我得到的是

name: GeForce GTX TITAN
major: 3 minor: 5 memoryClockRate (GHz) 0.8755
pciBusID 0000:02:00.0
Total memory: 5.94GiB
Free memory: 5.87GiB
2017-08-18 09:05:04.052767: I tensorflow/core/common_runtime/gpu/gpu_device.cc:961] DMA: 0 
2017-08-18 09:05:04.052784: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0:   Y 
2017-08-18 09:05:04.052817: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX TITAN, pci bus id: 0000:02:00.0)
 500/2136 [======>.......................] - ETA: 778s - loss: 21.8780 - acc: 0.0000e+00   
 RAM Usage 1.01 GB 


 706/2136 [========>.....................] - ETA: 679s - loss: 16.7906 - acc: 0.0000e+00as 
 Read File Number 2 

1000/2136 [=============>................] - ETA: 539s - loss: 13.1006 - acc: 0.0000e+00 
 RAM Usage 1.01 GB 


1421/2136 [==================>...........] - ETA: 336s - loss: 10.4089 - acc: 0.0000e+00srun: Exceeded job memory limit

至于现在我使用资源包打印RAM使用情况

print(' \n RAM Usage {:.2f} GB \n \n'.format(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1e6))

我还使用了内存分析器,似乎RAM的使用量根本没有增加 . 我很确定不是fit_generator出现问题,因为问题也发生在我能想到的最简单的发生器上

batch_input = np.zeros((batch_size,20,10,60,1))
batch_out = np.zeros((batch_size,1))
    while True:
        yield (batch_input, batch_out)

任何人都知道我还能检查什么才能解决这个问题?这可能是我正在研究的系统的GPU驱动程序的问题?

请注意,如果我使用Theano后端,相同的代码将顺利运行 .

并且不确定这是否相关:但另一个想法我注意到,如果我减少了要读取的文件数量,我不会超过内存限制,但是在完成一个训练的时间之后,核心只会因为一个分段故障而转储 .

name: GeForce GTX TITAN
major: 3 minor: 5 memoryClockRate (GHz) 0.8755
pciBusID 0000:02:00.0
Total memory: 5.94GiB
Free memory: 5.87GiB
2017-08-18 08:55:45.345022: I tensorflow/core/common_runtime/gpu/gpu_device.cc:961] DMA: 0 
2017-08-18 08:55:45.345039: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0:   Y 
2017-08-18 08:55:45.345062: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX TITAN, pci bus id: 0000:02:00.0)
500/706 [====================>.........] - ETA: 98s - loss: 4.0806 - acc: 0.0000e+00   
 RAM Usage 1.01 GB 


705/706 [============================>.] - ETA: 0s - loss: 3.9775 - acc: 0.0000e+00Segmentation fault (core dumped)

对不起这个问题有点长 . 希望有些人可以给我一些如何为这些类型的内存错误搜索解决方案的提示 .

谢谢 :)