我试图在Theano中实现一个新节点,为了测试每一步,我要将所有内容都放在一边并测试输出结果。其中一个步骤是在二维中测试求和函数。输出对第一维有利,但是当我应用第二维时它会得到奇怪的结果。我将输出与Numpy进行了比较。请参阅下面的代码和结果。
我做了另一个experminet,所以我将它分成两个问题:
第一个问题:
arr = np.ones((2, 100, 100)).astype(np.float32)
x = T.ftensor3('x')
tester = T.sum(x)
tester2k = T.sum(x, axis=2)
s1 = theano.function([x], tester)
s2k = theano.function([x], tester2k)
print s1(arr)
print s2k(arr)
The first gives 5625 instead of 20000
The second gives 30 instead of 100
[30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30.
30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30.
30...................
第二个问题
arr = np.array([[[.1,.2],[.3,.4]],[[.2,.5],[.6,.7]],[[.2,.6],[.7,.4]]]).astype(np.float32)
x = T.ftensor3('x')
y = T.max(x)
z2 = T.sum(T.exp(x), axis=(2,1))
tester1 = T.exp(x)
tester2 = T.sum(tester1, axis=2)
tester3 = T.sum(tester2, axis=1)
s1 = theano.function([x], tester1)
s2 = theano.function([x], tester2)
s3 = theano.function([x], tester3)
final = theano.function([x], z2)
firstValue = s1(arr)
print firstValue
print "\n"
secValue = s2(arr)
print secValue
print "\n"
thirdValue = s3(arr)
print thirdValue
print '\n'
print final(arr)
print "-----------------\n"
print firstValue[0,:,:]
print "\n"
# print firstValue[0,:,:].sum()
firstSum = np.sum(firstValue, axis=2)
print firstSum
print np.sum(firstSum, axis=1)
这是输出。
[[[ 1.10517097 1.22140276]
[ 1.34985888 1.49182475]]
[[ 1.22140276 1.64872122]
[ 1.82211888 2.01375294]]
[[ 1.22140276 1.82211888]
[ 2.01375294 1.49182475]]]
[[ 2.32657385 2.84168363]
[ 2.87012386 3.8358717 ]
[ 3.04352164 3.50557756]]
[ 3.67643261 4.69224262 5.05727482]
[ 3.67643261 4.69224262 5.05727482]
-----------------
[[ 1.10517097 1.22140276]
[ 1.34985888 1.49182475]]
[[ 2.32657385 2.84168363]
[ 2.87012386 3.8358717 ]
[ 3.04352164 3.50557756]]
[ 5.16825771 6.70599556 6.54909897]
您可以看到轴= 2的第一个维度得到的结果是正确的,但是当我在第一个轴上求和时,结果并不是任何数字。我测试了两次乘以2然后乘以1并通过给出两个轴(2,1)来测试函数。
更新
第一个问题,结果并不代表实际值
第二个问题,当使用keepdims=True
顺序执行求和函数时,结果总结得很好但是当使用One函数给出两个轴(1,2)时,即使用keepdims=True
,结果也是错误的。
答案 0 :(得分:0)
这个问题与Theano.0.10下面的版本有关,一旦更新,这个问题就解决了。万一有人面临同样的问题。