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