您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

如何在Python中实现softmax反向传播

2025/12/2 4:43:46发布18次查看
反向传播求导可以看到,softmax 计算了多个神经元的输入,在反向传播求导时,需要考虑对不同神经元的参数求导。
分两种情况考虑:
当求导的参数位于分子时
当求导的参数位于分母时
当求导的参数位于分子时:
当求导的参数位于分母时(ez2 or ez3这两个是对称的,求导结果是一样的):
代码import torchimport mathdef my_softmax(features): _sum = 0 for i in features: _sum += math.e ** i return torch.tensor([ math.e ** i / _sum for i in features ])def my_softmax_grad(outputs): n = len(outputs) grad = [] for i in range(n): temp = [] for j in range(n): if i == j: temp.append(outputs[i] * (1- outputs[i])) else: temp.append(-outputs[j] * outputs[i]) grad.append(torch.tensor(temp)) return gradif __name__ == '__main__': features = torch.randn(10) features.requires_grad_() torch_softmax = torch.nn.functional.softmax p1 = torch_softmax(features,dim=0) p2 = my_softmax(features) print(torch.allclose(p1,p2)) n = len(p1) p2_grad = my_softmax_grad(p2) for i in range(n): p1_grad = torch.autograd.grad(p1[i],features, retain_graph=true) print(torch.allclose(p1_grad[0], p2_grad[i]))
以上就是如何在python中实现softmax反向传播。的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product