【问题标题】:Backpropagation in python: cannot understand a line of codepython中的反向传播:无法理解一行代码
【发布时间】:2018-06-15 23:20:40
【问题描述】:

我正在尝试阅读以下代码以在 python 中进行反向传播

probs = exp_scores /np.sum(exp_scores, axis=1, keepdims=True) 
#Backpropagation
delta3 = probs
delta3[range(num_examples), y] -= 1
dW2 = (a1.T).dot(delta3)
....

但我无法理解以下代码行:

delta3[range(num_examples), y] -= 1

你能告诉我这是做什么的吗?

非常感谢您的帮助!

【问题讨论】:

    标签: python numpy neural-network deep-learning backpropagation


    【解决方案1】:

    如果你有兴趣,为什么它是这样计算的,它是通过交叉熵损失的反向传播:

    • probs 是类概率向量(通过 softmax 在前向传递中计算)。
    • delta3 是损失函数的误差信号。
    • y 持有 mini-batch 的 ground truth classes。

    其他一切都只是数学,this post 对此进行了很好的解释,它们最终得到相同的 numpy 表达式。

    【讨论】:

      【解决方案2】:

      这里有两件事。首先,它使用 numpy 切片仅选择 delta3 的一小部分。其次,它将矩阵的这一部分的每个元素都删除 1。

      更准确地说,delta3[range(num_example), y] 正在选择矩阵 delta3 的行,范围从 0 到 num_examples,但只选择列 y

      【讨论】:

        猜你喜欢
        • 2018-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-05
        • 2015-02-01
        相关资源
        最近更新 更多