python 中的反向传播:无法理解一行代码
Backpropagation in python: cannot understand a line of code
我正在尝试阅读以下代码以在 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 切片 select 只是 delta3
的一小部分。其次,它正在为矩阵的这一部分的每个元素删除 1。
更准确地说,delta3[range(num_example), y]
是 select 矩阵 delta3
的行,范围从 0 到 num_examples
但只有 select 列 y
.
感兴趣的话,为什么是这样计算的,就是通过交叉熵损失的反向传播:
probs
是 class 概率的向量(通过 softmax 在前向传递中计算)。
delta3
是损失函数的误差信号。
y
持有小批量的基本事实 classes。
其他一切都只是数学,在 this post 中有很好的解释,它们以相同的 numpy 表达式结束。
我正在尝试阅读以下代码以在 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 切片 select 只是 delta3
的一小部分。其次,它正在为矩阵的这一部分的每个元素删除 1。
更准确地说,delta3[range(num_example), y]
是 select 矩阵 delta3
的行,范围从 0 到 num_examples
但只有 select 列 y
.
感兴趣的话,为什么是这样计算的,就是通过交叉熵损失的反向传播:
probs
是 class 概率的向量(通过 softmax 在前向传递中计算)。delta3
是损失函数的误差信号。y
持有小批量的基本事实 classes。
其他一切都只是数学,在 this post 中有很好的解释,它们以相同的 numpy 表达式结束。