Python实现softmax反向传播的示例代码
作者:SugerOO 时间:2021-02-24 10:54:02
概念
softmax函数是常用的输出层函数,常用来解决互斥标签的多分类问题。当然由于他是非线性函数,也可以作为隐藏层函数使用
反向传播求导
可以看到,softmax 计算了多个神经元的输入,在反向传播求导时,需要考虑对不同神经元的参数求导。
分两种情况考虑:
当求导的参数位于分子时
当求导的参数位于分母时
当求导的参数位于分子时:
当求导的参数位于分母时(ez2 or ez3这两个是对称的,求导结果是一样的):
代码
import torch
import math
def 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 grad
if __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]))
来源:https://blog.csdn.net/SugerOO/article/details/130032515
标签:Python,softmax,反向传播


猜你喜欢
python实现百度关键词排名查询
2023-01-19 12:26:58
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2023-06-04 19:17:50
python Django编写接口并用Jmeter测试的方法
2021-12-07 21:47:09

opencv-python 开发环境的安装、配置教程详解
2022-04-25 22:14:58

Python3实现的字典、列表和json对象互转功能示例
2022-11-10 11:04:51
使用python制作游戏下载进度条的代码(程序说明见注释)
2023-06-15 00:39:52

解析python的局部变量和全局变量
2023-08-23 18:17:01
python调用百度语音识别api
2023-02-13 10:23:48

vue实现购物车加减
2023-07-02 17:10:04

python 提高开发效率的5个小技巧
2022-05-11 00:55:09
python实现简单聊天应用 python群聊和点对点均实现
2023-01-16 08:35:55

vue使用element-resize-detector监听元素宽度变化方式
2024-05-29 22:29:26

vue实现评论列表功能
2023-07-02 17:05:29

使用Python写一个贪吃蛇游戏实例代码
2023-07-05 18:25:02
ASP XML编程objXML.async = False
2011-04-21 10:55:00
详解Docker创建Mysql容器并通过命令行连接到容器
2024-01-24 22:25:18
菜鸟大讲堂:如何查看mysql版本的四种方法
2009-09-05 09:54:00
JS不同加载方式下的window.onload
2009-05-21 18:09:00

Python利用FlashText算法实现替换字符串
2023-05-17 06:18:11

asp如何在本地机器上创建缓存?
2010-06-18 19:27:00