我正在实施并行回火吉布斯采样使用的。我试图创建一个接受矩阵X
并交换其中一些行的Theano函数。我有一个名为swaps
的符号二进制向量,它表示应该交换哪些行(例如,如果swaps[i] == 1
,那么X[i]
和{
我试图写一个theano.scan
,它穿过swaps
向量,并逐行执行X
的交换。问题是Theano不允许使用符号变量执行X[pos], X[pos + 1] = X[pos + 1], X[pos]
之类的操作。下面是我要做的事情的一个简单的代码片段。在
import numpy as np
import theano
import theano.tensor as T
def swap(swp, pos, idx):
if swp: idx[pos], idx[pos + 1] = idx[pos + 1], idx[pos]
return idx
max_length = 10
swaps = T.ivector('swaps')
idx = T.ivector('idx')
pos = T.iscalar('pos')
new_idx, updates = theano.scan(swap,
sequences=[swaps, T.arange(max_length)],
outputs_info=idx)
do_swaps = theano.function([swaps, idx], new_idx[-1], updates=updates)
idx_swapped = do_swaps(np.array([1, 1, 0, 1]), np.arange(5))
print idx_swapped
有什么办法让我做得对吗?在
好吧,这是我找到的一个非常简单的解决方案。在
然而,我不确定它是最佳的还是不在一个GPU上执行。在
相关问题 更多 >
编程相关推荐