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

python中的反向传播:无法理解一行代码,python,numpy,neural-network,deep-learning,backpropagation,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 你能告诉我这是做什么用的吗 非常感谢

我试图阅读以下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
你能告诉我这是做什么用的吗


非常感谢你的帮助

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

更准确地说,delta3[rangenum_示例,y]正在选择矩阵delta3的行,范围从0到num_示例,但仅选择列y。

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

probs是通过softmax向前传递时计算的类概率向量。 delta3是来自损失函数的错误信号。 y持有小批量的基本真相类。 其他一切都只是一个数学,这在中得到了很好的解释,它们最终得到了相同的numpy表达式