theano batched_dot出乎意料

时间:2017-02-16 21:06:47

标签: python numpy theano

通过使用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})

1 个答案:

答案 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()是否有效?