2017-02-16 46 views
0

通過使用theano的batched_dot,但我發現了一些看起來像一個bug的東西給我。 numpy數組的轉置會導致batched_dot失敗,即使生成的形狀是正確的。以下是我的好消息。我的問題:最後一行應該工作,這是一個錯誤?theano batched_dot表現出意外

我使用的是當前Theano-0.9.0b1的流血邊緣安裝。 如果需要,我可以在github上解決這個問題。

謝謝。

import theano.tensor as T 
import numpy as np 
a = T.dtensor3('a') 
b = T.dmatrix('b') 

a_np = np.zeros((4,2,2)) 
b_np = np.zeros((4,2)) 

bd = T.batched_dot(a,b) 
ok = bd.eval({a:a_np,b:b_np}) 

a_transposed_np = np.zeros((2,2,4)) 
not_ok = bd.eval({a:a_transposed_np.T,b:b_np}) 

回答

0

我不知道該怎麼batched_dot的作品,但是你換位陣列的步伐可能會扔它關閉

In [128]: a_transposed_np = np.zeros((2,2,4)) 
In [129]: a_transposed_np.shape 
Out[129]: (2, 2, 4) 
In [130]: a_transposed_np.T.shape 
Out[130]: (4, 2, 2) 
In [131]: a_transposed_np.strides 
Out[131]: (64, 32, 8) 
In [132]: a_transposed_np.T.strides 
Out[132]: (8, 32, 64) 
In [133]: np.zeros((4,2,2)).strides 
Out[133]: (32, 16, 8) 

np.transpose創建一個view,改變形狀,進步和訂單(以F ),而不復制數據。

a_transposed_np.T.copy()工作嗎?

+0

謝謝,這的確是大踏步前進。我剛剛發現其他人也有同樣的問題[鏈接](https://github.com/fchollet/keras/issues/2742#issuecomment-219763042) – FBerendsen