在no中,可以选择使用repeat函数T.repeat(A,B)
并提供一对向量,这样A[i]
的每个元素都被重复B[i]
次。在
不幸的是,这个操作没有定义渐变(它抛出一个notimplemented异常),这是一个问题,因为我正试图将它用于Pymc3
的基于梯度的采样器。在
我想我可以使用scan
函数并递归地为两个向量的每个元素调用repeat来解决这个问题,但是我的代码不能正常工作,可能是因为我错误地调用了scan
。有谁能帮我理解为什么下面的代码不起作用?在
A = T.dvector('A')
B = T.ivector('B')
A.tag.test_value = np.array(np.random.rand(2), dtype = "float32")
B.tag.test_value = np.array(np.random.rand(2), dtype = "int32")
th.config.compute_test_value = 'warn'
results, updates = th.scan(fn = lambda prior_result, A, B: A.repeat(B),
sequences = [A, B],
outputs_info = T.constant([1,4,4,4]))
b = th.function(inputs=[A,B], outputs=results.flatten())
b([1],[4])
我希望它返回[1,1,1,1],但它返回以下错误。在
^{pr2}$我已经在pymc3github上提出了一个issue来看看这是否是一个应该更永久性地解决的问题,但是我认为这是一个很好的机会来了解我更多关于Theano的信息,如果我能解决这个问题,也许我可以为这个项目做出贡献。在
我看到两件事:
快速修复:只需从scan的参数中删除输出信息(和lambda中的先验结果),就可以得到[1,1,1,1]。在
相关问题 更多 >
编程相关推荐