python中的反向传播:无法理解一行代码

时间:2018-01-06 08:24:55

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

我正在尝试阅读以下用于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
你可以告诉我这是做什么的吗?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果您感兴趣,为什么以这种方式计算,它是通过交叉熵损失的反向传播:

  • probs是类概率的向量(通过softmax在前向传递中计算)。
  • delta3是来自损失函数的错误信号。
  • y拥有小批量的基本真值课程。

其他所有东西都只是一个数学,在this post中得到了很好的解释,它们最终得到了同样的numpy表达式。