为什么tensorflow消耗这么多内存?

时间:2018-04-30 03:33:55

标签: python memory tensorflow convolutional-neural-network

我有一个简单的CNN(4个conv-pool-lrelu层和2个完全连接的层)。 我只在CPU上使用TensorFlow(没有gpu)。 我有大约6GB的可用内存。 我的批次由640个640x640像素(<100 MB)的图像组成。 并且TensorFlow消耗的可用内存更多(导致程序崩溃,显然)。 我的问题是:为什么TensorFlow需要这么多内存来运行我的网络?我不明白是什么占用了这么多空间(可能需要多次缓存数据来优化卷积计算?保存所有隐藏的输出以用于反向传播目的?)。有没有办法防止TensorFlow消耗这么多内存? 附注: 我无法减小批量的大小,我正在尝试进行一些多实例学习,因此我需要在一次运行中计算所有补丁。 我正在使用AdamOptimizer 我的所有卷积都是5x5窗口,1x1步幅,(从第一个到最后一个)32,64,128和256个功能。我使用泄漏的ReLU和2x2最大池。 FC层由64个和3个神经元组成。 使用Ubuntu 16.4 / Python 3.6.4 / TensorFlow 1.6.0

1 个答案:

答案 0 :(得分:3)

如你所说:

  

我的所有卷积都是5x5窗口,1x1步幅,(从第1个到第1个)   最后一个)32,64,128和256个功能。我使用的是泄漏的ReLU和2x2   最大池。 FC层由64个和3个神经元组成。

因此,网络的内存消耗如下:

Input: 640x640x3 = 1200(以KB为单位)

C1: 636x636x32 = 12.5 MB(步幅= 1工作)

P1: 635x635x32 = 12.3 MB(步幅= 1工作)

C2: 631x631x64 = 24.3 MB

P2: 630x630x64 = 24.2 MB

C3: 626x626x128 = 47.83 MB

P3: 625x625x128 = 47.68 MB

C4: 621x621x256 = 94.15 MB

P4: 620x620x256 = 93.84 MB

FC1: 64 = 0.0625 KB(可忽略不计)

FC2: 3 = 0.003 KB(可忽略不计)

Total for one image = ~358 MB

For batch of 56 image = 56 x 358~19.6 GB

这就是为什么您的网络无法在6 GB上运行的原因。尝试使用某些higher stridelower sized image将其调整为6 GB空间。 它应该工作。

您可以参考this以更好地了解内存消耗计算。