

ベクトルをスカラで重み付けして総和を取るために、  
numpyとchainerのVariableを用いて、  
以下のようなコードを書きました。

[code]

    import numpy as np
    from chainer import Variable
    import chainer.functions as F
    
    a = np.array([[10], [100], [1000]], dtype=np.float32)  # 重みの集合
    x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=np.float32)   # ベクトルの集合
    print sum(a * x)  # ベクトルの重み付き和
    
    a = Variable(a)
    x = Variable(x)
    print F.sum(a * x)
    
[/code]

Numpyだとちゃんと計算されるのですが、  
Variableに変換するとサイズが合わないと怒られてしまいます。

どのようなコードを書けば、  
numpyとChainerで同じ結果を返すことができるでしょうか？

よろしくお願いします。


CC BY-SA 3.0
2016-08-22T03:00:59.133
28422
2016-08-25T01:10:44.430
2016-08-22T03:08:57.027
12874
12874
question
python chainer
NumpyとChainerで、ベクトルの重み付き線形和の結果を合わせたい


`chainer.functions.batch_matmul`を使います。

[code]

    >>> print(a*x)
    [[   10.    20.    30.]
     [  400.   500.   600.]
     [ 7000.  8000.  9000.]]
    >>> print(sum(a*x))
    [ 7410.  8520.  9630.]
    >>> print(F.batch_matmul(a, x, transb=True).data)
    [[[   10.    20.    30.]]
    
     [[  400.   500.   600.]]
    
     [[ 7000.  8000.  9000.]]]
    >>> print(sum(F.batch_matmul(a, x, transb=True).data))
    [[ 7410.  8520.  9630.]]
    >>> print(F.sum(F.batch_matmul(a, x, transb=True).data), axis=0).data) # sumもchainer側で行うには
    [[ 7410.  8520.  9630.]]
    
[/code]

a*xおよび和のベクトルが計算できていることがわかります。


CC BY-SA 3.0
2016-08-25T01:10:44.430
28476
2016-08-25T01:10:44.430
14418
28422
answer