Tensorflow Keras(tf后端)内存分配问题

Tensorflow Keras(tf后端)内存分配问题,tensorflow,memory-management,keras,Tensorflow,Memory Management,Keras,我将Keras与Tensorflow后端一起使用。 由于内存使用率高,我面临批量大小限制 我的数据由4个1D信号组成,每个通道的样本大小为801。全球样本量为3204 输入数据: 4路长度为7003的N 1D信号 通过在1D信号上应用滑动窗口生成的输入 给出输入数据形状(N*6203、801、4) N是用于构建一个批次的信号数 My Model: Input 801 x 4 Conv2D 5 x 1, 20 channels MaxPooling 2 x 1 Conv2D

我将Keras与Tensorflow后端一起使用。 由于内存使用率高,我面临批量大小限制

我的数据由4个1D信号组成,每个通道的样本大小为801。全球样本量为3204

输入数据: 4路长度为7003的N 1D信号 通过在1D信号上应用滑动窗口生成的输入 给出输入数据形状(N*6203、801、4)

N是用于构建一个批次的信号数

My Model:
Input     801 x 4
Conv2D     5  x 1, 20 channels
MaxPooling 2  x 1
Conv2D     5  x 1, 20 channels
MaxPooling 2  x 1
Conv2D     5  x 1, 20 channels
MaxPooling 2  x 1
Conv2D     5  x 1, 20 channels
Flatten
Dense      2000
Dense      5

With my GPU (Quadro K6000, 12189 MiB) i can fit only N=2 without warning
With N=3 I get a ran out of memory warning
With N=4 I get a ran out of memory error
听起来好像批量大小受到所有张量使用的空间的限制

Input      801 x 4 x 1
Conv       797 x 4 x 20
MaxPooling 398 x 4 x 20
Conv       394 x 4 x 20
MaxPooling 197 x 4 x 20
Conv       193 x 4 x 20
MaxPooling 96  x 4 x 20
Conv       92  x 4 x 20
Dense      2000
Dense      5
1D信号为7001,有4个通道->6201个样本

Total = N*4224 MiB.
N=2 -> 8448 MiB fit in GPU
N=3 -> 12672 MiB work but warning: failed to allocate 1.10 GiB then 3.00 GiB
N=4 -> 16896 MiB fail, only one message: failed to allocate 5.89 GiB
它是这样工作的吗?有没有办法减少内存使用? 给出一个时间估计:在40秒内运行34个批,我得到N总计=10^6

谢谢你的帮助:)


python2.7的示例:

那么N=1的一个示例是2000万个浮点数?然后你把它卷起,得到20倍多?您想知道为什么需要将它们放入GPU RAM中?第一个想法是以某种方式切割第一个滑动窗口,将数据乘以800x(或6200x?)。实际上,滑动窗口执行x800,内存消耗确实很大,但我想知道的是,没有任何内存优化方法像只分配两个最大张量(N*2262 MiB)那样用这两个张量进行计算。窗口大小是固定的,我的导师告诉我不要改变它。理论上,也许,人们会指出在计算过程中卸载数据的方法。一般来说,这种乘法是奇怪的。难道你没有得到像[a,b,c,…],然后[b,c,d,…],[c,d,e,…]这样的数据吗。。。?即,800份副本中的每一份都略有不同。另一个想法是,如果您需要使用大N处理所有数据,则添加零件切割步骤(net=net[partNum*1000:(partNum+1)*1000,:,:,:,:]),并在多个过程中处理数据