最小可重复的示例在此github gist中。问题是内存使用量过大。
我修改了带有tensorflow的cifar10示例,使用3个向量的外积作为卷积层的权重。此更改可在此part of the code中看到。
为简单起见,我删除了所有参数训练操作甚至丢失计算。当前模型只反复计算logits(正向传递)。
未修改的代码(可以通过将use_outerp
标志设置为False
来执行)使用大约.4 GB RAM
而修改后的代码(使用向量的外积作为卷积权重张量)使用了不成比例的高5.6 GB RAM。
知道为什么会这样吗? 我对于为什么会发生这种情况的直觉是,可能每次需要转换滤波器时都会执行外部产品操作,而不是在每次前向传递中只执行一次。这是真的吗?有办法解决这个问题吗?
重现的步骤:
运行默认版本的代码(内存不足):
python train.py --use_outerp='False'
运行修改后的代码版本(内存占用率高):
python train.py --use_outerp='True'
操作系统:
Ubuntu 14.04
已安装的CUDA和cuDNN版本:
没有,我正在使用TF的CPU版本。
python -c "import tensorflow; print(tensorflow.__version__)"
的输出:
0.10.0rc0
建议使用tcmalloc here没有帮助。