【问题标题】:Why does my dropout function in Theano slow down convolution greatly?为什么我在 Theano 中的 dropout 函数大大减慢了卷积速度?
【发布时间】:2015-06-14 22:37:07
【问题描述】:

我正在学习 Theano。我写了一个简单的dropout函数如下:

import theano.tensor as T
srng = T.shared_randomstreams.RandomStreams()

def drop(input, dropout=0.0):
    if T.gt(dropout, 0.):
        retain_prob = 1 - dropout.astype('floatX')
        mask = srng.binomial(n=1, p=retain_prob, size=input.shape, dtype='floatX')
        return input * mask / retain_prob
    else:
        return input

当我将此函数应用于前两个卷积层的输入时,在每张图像上花费的平均时间从 0.5 毫秒增加到大约 2.5 毫秒!有谁知道这种急剧放缓的原因是什么?

我正在使用安装了 cuDNN 的 GTX 980 卡。

【问题讨论】:

    标签: cuda neural-network theano deep-learning conv-neural-network


    【解决方案1】:

    RandomStream 仅适用于 CPU。因此,mask 必须在每次调用 drop 时从 CPU 复制到 GPU,这就是急剧减速的原因。为了避免这种情况,我现在使用random stream implementation which works on GPU

    【讨论】:

    • 但是,即使是 MRG 版本也会导致速度急剧下降
    • 刚刚测试过,MRG 版本在应用于全连接层(Maxwell Titan X、CUDA 7.5、Theano 0.9.0dev4)时根本没有导致任何减速。相比之下,T.shared_randomstreams.RandomStreams() 版本导致减速系数为 10!
    【解决方案2】:

    这似乎与我的问题相似(Lasagne dropoutlayer does not utilize GPU efficiently)。 您是否检查过您的代码集 cuda_enabled = True 某处?否则可以在https://github.com/Theano/Theano/blob/master/theano/sandbox/cuda/init.py的第93行手动设置。 我知道这不是一个优雅的解决方案,但它现在解决了我的问题。 :)

    【讨论】:

      猜你喜欢
      • 2020-03-04
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多