0
在Theano中,可以選擇使用重複函數T.repeat(A,B)
並提供一對向量,使得A[i]
的每個元素重複B[i]
次。Theano掃描和重複
不幸的是,這個操作沒有定義的漸變(它引發了一個未實現的異常),這是一個問題,因爲我試圖在Pymc3
的基於漸變的採樣器中使用它。
我想我可以在此使用scan
函數和調用重複遞歸兩個向量中的每個元素地址,但我的代碼不能正常工作,可能是因爲我打電話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],但它會返回下面的錯誤。
395 except AttributeError:
396 return _wrapit(a, 'repeat', repeats, axis)
--> 397 return repeat(repeats, axis)
398
399
ValueError: operands could not be broadcast together with shape (1,) (4,)
我已經提高了對Pymc3 github上的issue,看看這是什麼,應該更永久固定的,但我想它的一個很好的機會更多地瞭解Theano對我來說,無論如何,如果我能解決問題,也許我可以回饋項目。