- 我有一个简单的 CNN(4 个 conv-pool-lrelu 层和 2 个全连接层)。
- 我只在 CPU 上使用 TensorFlow(没有 gpu)。
- 我有大约 6GB 的可用内存。
- 我的批次由 56 张 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