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

What is wrong in Theano.Tensor.Sum function?

我正在尝试在 Theano 中实现一个新节点,为了测试每一步,我将所有内容都放在一边并测试输出结果。这些步骤之一是在二维中测试 sum 函数。第一维的输出很好,但是当我应用第二维时,结果很奇怪。我将输出与 Numpy 进行了比较。请查看下面的代码和结果。

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

  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]
    

AS 你可以看到轴 = 2 的第一个维度得到正确求和的结果,但是当我对轴 1 求和时,结果不匹配任何数字。我用 2 然后用 1 测试了两次求和,并通过给出两个轴 (2,1) 来测试函数。

更新:

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

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

该问题与Theano.0.10以下版本有关,更新后问题解决。如果有人面临同样的问题。