这是一段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
的先前值,因此我想要做的是将这些向量和矩阵的计算并行化。如果这些阵列变得相当大,这将导致更好的性能。
有人能告诉我怎么做吗?
答案 0 :(得分:0)
此票据因为不在线而被关闭,所以我在评论中回答了这个问题。所以我的答案就是帖子。
我的回答是通用的,适用于所有系统,而不仅仅是Theano。由于循环的每次迭代都依赖于前一次迭代,因此无法完全对您的迭代进行并行处理。您可以并行化u=data[t]
,因为它不依赖于之前的x。出于同样的原因,您可以并行dot( Win, vstack((1,u)) )
。但是你不能并行化dot(W,x)
和依赖它的东西,比如tanh和后面的线。
如果要优化它,可以在循环外移动所有不依赖于x的计算。这将允许同时处理更多数据,因此可以更快。所以dot(win, ...)
可以加快速度。但这会增加内存使用量。