为何在Softmax交叉熵损失的反向传播中要除以batch_size?
SoftmaxWithLoss反向传播梯度除以batch_size的疑问
我在实现SoftmaxWithLoss层时,注意到反向传播过程中的梯度会除以batch_size,以下是参考代码:
class SoftmaxWithLoss: def __init__(self): self.loss = None # 存储损失值 self.y = None # 存储softmax函数的输出 self.t = None # 存储目标(标签)数据,要求是one-hot向量 def forward(self, x, t): self.t = t # 保存目标数据 self.y = softmax(x) # 对输入x应用softmax得到概率分布 self.loss = cross_entropy_error(self.y, self.t) # 计算交叉熵损失 return self.loss # 返回损失值 def backward(self, dout=1): batch_size = self.t.shape[0] # 获取批量大小 dx = (self.y - self.t) / batch_size # 计算损失对输入x的梯度 return dx # 返回梯度
我对照计算图推导后,认为应该直接返回y - t即可。
内容的提问来源于stack exchange,提问作者Shower Hu
相关产品推荐
相关产品推荐

