69580


ゼロから作るdeep learning 2のサンプルコードに関しての質問です。  
<https://github.com/oreilly-japan/deep-learning-from-
scratch-2/blob/master/common/layers.py>

下記のコードに `W, = self.params` という箇所がありますが、`W,`
のカンマの意味がわかりません。複数代入する以外の使い方があるのでしょうか？

[code]

    class MatMul:
    def __init__(self, W):
        self.params = [W]
        self.grads = [np.zeros_like(W)]
        self.x = None
    
    def forward(self, x):
        W, = self.params　　　#この部分
        out = np.dot(x, W)
        self.x = x
        return out
    
    def backward(self, dout):
        W, = self.params　　　　#この部分
        dx = np.dot(dout, W.T)
        dW = np.dot(self.x.T, dout)
        self.grads[0][...] = dW
        return dx
    
[/code]


CC BY-SA 4.0
2020-08-15T10:02:15.667
69578
2020-08-15T11:59:21.877
2020-08-15T11:59:21.877
3060
41507
question
python
代入時のカンマの意味


これはスライス表記というやつで、以下のように(タプルのような)シーケンスの要素に代入するという意味です:

[code]

    (W,) = self.params
    
[/code]

質問の例だと以下と同義です:

[code]

    W = self.params[0]
    
[/code]

ただし↑との挙動の違いとして「代入文の左辺と右辺の要素数が同じでなければならない(この場合1個でなければならない)」という条件があります。  
この要素数が増えると、以下のような(よく目にする)表記になります:

[code]

    a, b, c = 1, 2, 3
    
[/code]


CC BY-SA 4.0
2020-08-15T10:53:27.413
69580
2020-08-15T10:53:27.413
13227
69578
answer