使用Theano并行化迭代计算

时间:2014-03-23 13:55:34

标签: python performance optimization parallel-processing theano

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

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的先前值,因此我想要做的是将这些向量和矩阵的计算并行化。如果这些阵列变得相当大,这将导致更好的性能。

有人能告诉我怎么做吗?

1 个答案:

答案 0 :(得分:0)

此票据因为不在线而被关闭,所以我在评论中回答了这个问题。所以我的答案就是帖子。

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

如果要优化它,可以在循环外移动所有不依赖于x的计算。这将允许同时处理更多数据,因此可以更快。所以dot(win, ...)可以加快速度。但这会增加内存使用量。