问题描述
通过使用theano的batched_dot,但我发现了一些对我来说似乎是错误的东西。 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楼
我不知道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()
是否起作用?