gpt4 book ai didi

python - 使用 Theano 从多项式中抽取样本

转载 作者:太空宇宙 更新时间:2023-11-04 05:40:38 24 4
gpt4 key购买 nike

我目前正在实现卷积 RBM,为此我正在使用 Theano。

我目前的实现似乎相当缓慢,分析表明这主要是由于 Gibbs 采样步骤。事实上,我正在使用 Theano 的 shared randomstreams生成多项样本。

不过,我发现了Theano的随机流的改进版here这满足了我所有的性能需求。

不幸的是,这个实验性随机生成器只支持二维矩阵,我必须将它用于 tensor4-object (4D-Matrix),因为这是 Theano 的 nnet conv2d 操作的结果。

你知道是否有一种有效的方法可以从具有以下结构的 4D 矩阵中抽取样本:

样本量 x 1 x N x M

我想从其中一列(三维)绘制的地方,给我这样的代码:

    for sample in range(numSamples):
for col in range(numCols):
drawMultinomial(n=1, pvals=data[sample,0,col,:])

但是这段代码真的很慢,我想在 GPU 上高效地完成它。

因此,我们将不胜感激。

最佳答案

因此,我找到了适合我的解决方案,使用一个相当简单的 dimshuffle/reshape 组合,在采样后撤消。

def sampleVisibleLayer (self, V):
reshaped = V.dimshuffle(0, 1, 3, 2).reshape((V.shape[0]*V.shape[3], V.shape[2]))
S_reshaped = self.theano_rng.multinomial(n=1,pvals=reshaped)
S = S_reshaped.reshape((V.shape[0], 1, V.shape[3], V.shape[2])).dimshuffle(0, 1, 3, 2)

尽管按照这种方法批量大小有一些限制,但这个解决方案对我来说效果很好。由于 reshape 后的矩阵可能变得非常大,我们可能会遇到随机生成器引发错误消息的情况,即使文档中没有提及。

解决方案也非常快,因为 dimshuffle 和 reshape 是在 O(1) 中执行的。

关于python - 使用 Theano 从多项式中抽取样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34048833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com