通过使用theano的batched_dot,但我发现了一些看起来像个bug的东西。 numpy数组的转置使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 :(得分: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()
是否有效?