我正在尝试阅读以下用于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
你可以告诉我这是做什么的吗?
非常感谢你的帮助!
答案 0 :(得分:1)
这里有两件事。首先,它使用numpy切片来仅选择delta3
的一小部分。其次,它将矩阵的这一部分的每个元素移除1。
更准确地说,delta3[range(num_example), y]
正在选择矩阵delta3
的行,范围从0到num_examples
,但只选择列y
。
答案 1 :(得分:0)
如果您感兴趣,为什么以这种方式计算,它是通过交叉熵损失的反向传播:
probs
是类概率的向量(通过softmax在前向传递中计算)。delta3
是来自损失函数的错误信号。y
拥有小批量的基本真值课程。其他所有东西都只是一个数学,在this post中得到了很好的解释,它们最终得到了同样的numpy表达式。