1

这是一段 python 代码,基本上只是计算神经网络的激活,然后data[t]根据任意泄漏率更新下一个输入值的新状态a

x = zeros((resSize,1))

for t in range(trainLen):
    u = data[t]

    xUpd = tanh( dot( Win, vstack((1,u)) ) + dot( W, x ) )
    x = (1-a) * x + a * xUpd 

    X[:,t] = vstack((1,u,x))[:,0]

了解这到底在做什么并不重要。我的问题是:我可以使用 GPU 将其并行化Theano吗?您可以看到新的x取决于之前的值,x所以我想要做的是并行化这些向量和矩阵的计算。如果这些数组变得相当大,这将导致更好的性能。

谁能告诉我该怎么做?

4

1 回答 1

0

这张票被关闭为题外话,所以我在评论中回答了它。所以在这里我的回答是一个帖子。

我的回答是通用的,适用于所有系统,而不仅仅是 Theano。由于循环的每次迭代都依赖于前一个迭代,因此您无法完全并行化迭代。您可以并行化它,u=data[t]因为它不依赖于先前的 x。dot( Win, vstack((1,u)) )出于同样的原因,您可以并行化。但是你不能并行化dot(W,x)以及依赖于它的东西,比如 tanh 和后面的行。

如果您想对此进行优化,您可以将所有不依赖于 x 的计算移出循环。这将允许同时处理更多数据,因此可以更快。所以dot(win, ...)可以加快速度。但这会提高内存使用率。

于 2014-04-01T13:43:32.170 回答