Python实现softmax反向传播的示例代码
作者:SugerOO 发布时间:2021-02-24 10:54:02
标签:Python,softmax,反向传播
概念
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


猜你喜欢
- (1)Flush的内容至少要有256字节经过反复的测试,我得出一个结论。就是flush的内容至少要有256字节。也就是只有编译产生了至少25
- 什么是组播点对点连接可以处理很多通信需求,不过随着直接连接数的增加,在多对通信方之间传递相同的消息会变得越来越困难。单独地向各个接收方发送消
- 之前总结过flask里的基础知识,现在来总结下flask里的前后端数据交互的知识,这里用的是Ajax一、 post方法1、post方法的位置
- 前言最近 GitHub 上有个基于 ChatGPT API 的浏览器脚本,openai-translator, 短时间内 star 冲到了
- 写了几年代码,很少谈到javascript程序的执行效率问题,今天就举几个例子看看,让大家看看程序优化是多么重要。这节来看看createEl
- 1 conda介绍conda是一个python的包管理器,用来管理、安装、更新python的包和相关的依赖。另外,conda可以为特定任务创
- <html> <head> <title>获取ACCESS数据库表名 -&
- 为了方便使用分类,我定义了一个分类表category,里面字段是id(自动编号) cat_name(分类名) pare
- Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)
- 本文实例为大家分享了PHP实现统计代码行数小工具,供大家参考,具体内容如下为了方面统计编程代码行数,做了一个小工具。自动统计指定目录以及目录
- 翻看自己以前写的程序,发现写过一个爬取盘多多百度云资源的东西,完全是当时想看变形金刚才自己写的,而且当时第一次接触python大概写了有2天
- 前言本文将使用pytorch框架的目标识别技术实现滑块验证码的破解。我们这里选择了yolov5算法例:输入图像输出图像可以看到经过检测之后,
- 随机漫步是这样行走得到的途径:每次行走都是完全随机的,没有明确的方向,结果是由一系列随机决策决定的。random_walk.py#rando
- 配置了好多天都报错…我真的含泪写下这篇文章1. 首先我们打开sql sever2. 打开sql配置管理器将IP1和IP
- 1 装饰器背景知识1.1 基本概念装饰器(Decorator)是 Python 中一种函数或类,用来修饰其他函数或类。装饰器可以改变被装饰函
- 前言thinkphp3.1.2 需要使用cli方法运行脚本折腾了一天才搞定3.1.2的版本真的很古老解决增加cli.php入口文件defin
- 目录解析器和预处理器查询优化器MySQL查询优化需要经过解析、预处理和优化三个步骤。在这些过程中,都有可能发生错误。本篇文章不会深入讨论错误
- 前言:经过一段时间的测试验证,决定使用RPM来做Golang服务的部署方式. 我们组关于代码的部署方式主要有这么几种,Python直接使用v
- 背景:有时候我们需要在服务器上同时运行多个程式,但是却需要一个一个的打开,比较费时间,而且一旦服务器重启后,不懂程式运行的人受限于环境及代码
- CREATE INDEX Syntax CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name