- 我有一个简单的 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