Theano.Tensor.Sum函数有什么问题?

时间:2017-10-16 10:50:43

标签: python numpy theano

我试图在Theano中实现一个新节点,为了测试每一步,我要将所有内容都放在一边并测试输出结果。其中一个步骤是在二维中测试求和函数。输出对第一维有利,但是当我应用第二维时它会得到奇怪的结果。我将输出与Numpy进行了比较。请参阅下面的代码和结果。

我做了另一个experminet,所以我将它分成两个问题:

  1. 第一个问题:

    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...................
    
  2. 第二个问题

    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]
    
  3. 您可以看到轴= 2的第一个维度得到的结果是正确的,但是当我在第一个轴上求和时,结果并不是任何数字。我测试了两次乘以2然后乘以1并通过给出两个轴(2,1)来测试函数。

    更新

    第一个问题,结果并不代表实际值

    第二个问题,当使用keepdims=True顺序执行求和函数时,结果总结得很好但是当使用One函数给出两个轴(1,2)时,即使用keepdims=True,结果也是错误的。

1 个答案:

答案 0 :(得分:0)

这个问题与Theano.0.10下面的版本有关,一旦更新,这个问题就解决了。万一有人面临同样的问题。