为什么我在Theano的辍学功能大大减慢了卷积?

时间:2015-04-09 13:57:04

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

我正在学习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.5ms增加到大约2.5ms!有谁知道这种剧烈减速的原因是什么?

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

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:0)

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