2

我正在学习 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 卡。

4

2 回答 2

8

RandomStream 仅适用于 CPU。因此mask每次调用 drop 时都必须从 CPU 复制到 GPU,这就是速度急剧下降的原因。为避免这种情况,我现在使用适用于 GPU 的随机流实现

于 2015-05-18T09:21:21.447 回答
0

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

于 2015-11-08T13:56:58.903 回答