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

ent*_*ron 2 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
Run Code Online (Sandbox Code Playgroud)

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

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

ent*_*ron 8

RandomStream仅适用于CPU.因此mask,每次调用drop都必须从CPU复制到GPU,这是急剧减速的原因.为了避免这种情况,我现在使用可在GPU上运行的随机流实现.