最小可重复的例子在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没有帮助 .