2017-02-16 49 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