PyTorch-softmax,argmax,soft-argmax
softmax
Softmax函数是一个非线性转换函数,通常用在网络输出的最后一层,输出的是概率分布(比如在多分类问题中,Softmax输出的是每个类别对应的概率),计算方式如下:
得到的是第i个位置对应的概率,每个位置的概率之和为1(可以看出Softmax仅进行计算,没有需要学习的参数)。
Pytorch softmax API
torch.nn.functional.softmax(input, dim=None, _stacklevel=3, dtype=None)
input是我们输入的数据,dim是在哪个维度进行Softmax操作(如果没有指定,默认dim=1)
softmax code example
- numpy 实现
import numpy as np
data = np.array([0.1, 0.3, 0.6, 2.1 ,0.55])
a = np.exp(data)/np.sum(np.exp(data))
print(a)
print(sum(a))
'''输出
[0.07795756 0.09521758 0.12853029 0.57603278 0.12226179]
0.9999999999999999
'''
向量中的参数被归一化,总和为1
- pytorch 实现
import torch
import torch.nn.functional as F
t_data = torch.from_numpy(data)
print(t_data)
print(t_data.shape)
print(t_data.type())prob = F.softmax(t_data,dim=0) # dim = 0,在列上进行Softmax;dim=1,在行上进行Softmax
print(prob)
print(prob.shape)
print(prob.type())'''output
tensor([0.1000, 0.3000, 0.6000, 2.1000, 0.5500], dtype=torch.float64)
torch.Size([5])
torch.DoubleTensor
tensor([0.0780, 0.0952, 0.1285, 0.5760, 0.1223], dtype=torch.float64)
torch.Size([5])
torch.DoubleTensor
'''
argmax
寻找参数最大值的索引,但是该过程不可导
soft-argmax
为了得到一个向量中最大值所处的位置,我们利用此函数。但是这个函数不可导,所以无法计算其梯度。然而我们可以利用软化的max函数来计算,就是softmax。利用softmax,我们可以得到每个元素正则化后的值。此向量()分布)的
np.sum(np.exp(data)/np.sum(np.exp(data)) * np.array([0,1,2,3,4])) # E = p*index
'''output:
2.5694236670240085
'''
而最大之所在的位置应该是3。
从上面看到位置计算不够准确,一个原因就是最大值的概率不够大,或者说增大相对最大值而减弱其他值的影响就可以得到更加准确的位置坐标
可以看到,上式与softmax的期望只有一个差别,即给向量的每个元素乘以beta。
输出的坐标为2.99,即为3,且这种寻找极值所在位置(坐标)的方法是可微的。常用于图像特征点位置的提取。
此外,LIFT原文3.5节提到:softargmax作为非极大值抑制NMS的可微分版本。就是说可以利用softargmax来替代NMS。
参考文档
IFT6266 PROJECT
关于softmax、argmax、softargmax
pytorch softmax
PyTorch-softmax,argmax,soft-argmax相关推荐
- softmax,argmax,soft-argmax
softmax,argmax,soft-argmax 理解_道长的博客-CSDN博客 1)softmax: 定义:就相当于密度函数. 特点:面积加起来等于1. 成效:向量中的参数被归一化,总和为1. ...
- numpy 和tensorflow中argmax(),argmin()函数使用讲解
在使用argmax()函数时,比如在深度学习里面计算acc经常要用到这个参数,这个参数返回的是沿轴axis最大值的索引值,对于,tensorflow和numpy用法是一样的,此处我就用numpy来举例 ...
- python中argmin函数_numpy 和tensorflow中argmax(),argmin()函数使用讲解
在使用argmax()函数时,比如在深度学习里面计算acc经常要用到这个参数,这个参数返回的是沿轴axis最大值的索引值,对于,tensorflow和numpy用法是一样的,此处我就用numpy来举例 ...
- PyTorch:数据加载,数学原理,猫鱼分类,CNN,预训练,迁移学习
1,数据加载 PyTorch开发了与数据交互的标准约定,所以能一致地处理数据,而不论处理图像.文本还是音频.与数据交互的两个主要约定是数据集(dataset)和数据加载器(dataloader).数据 ...
- 深度学习:神经网络,softmax + cross entropy,非tensorflow方式
文章目录 softmax softmax 的损失函数:交叉熵 交叉熵求偏导 代码实现 代码测试: 附录:交叉熵求偏导推导: softmax softmax函数所表示的可以看成为对分类结果的概率分布. ...
- PyTorch:RNN,TensorBoard,部署PyTorch,数据增强
1,循环神经网络(RNN) 1.1,基本概述 大脑区别于机器的一个最大的特征就是有记忆,并且能够根据自己的记忆对未知的事务进行推导,思想拥有持久性的.由于传统的神经网络没有设计记忆结构,因此在处理序列 ...
- 一大波PyTorch图像分割模型来袭,俄罗斯程序员出品新model zoo
鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一个新的图像分割model zoo来啦! 一大波基于PyTorch的图像分割模型整理好了就等你来用~ 这个新集合由俄罗斯的程序员小哥Pave ...
- PyTorch二分类时BCELoss,CrossEntropyLoss,Sigmoid等的选择和使用
这两天我们有一篇顶会的论文需要Minor Revision,reviewer说让我们在网络图中把fully connected layer画出来.对到底应该画图.画到多详细有点疑问,所以简单总结一下. ...
- 激活函数(Relu,sigmoid,Tanh,softmax)详解
目录 1 激活函数的定义 2 激活函数在深度学习中的作用 3 选取合适的激活函数对于神经网络有什么样的重要意义 4 常用激活函数 4.1 Relu 激活函数 4.2 sigmoid 激活函数 4.3 ...
最新文章
- for vue 一行2列_vue常见面试题汇总
- Java编程入门(2.1):基础Java应用程序
- leetcode-有效的括号(三种语言不同思路)
- java快递下单模块,Java开发快递物流项目(7)
- Redis源码剖析(七)监视功能
- openjdk(HOTSPOT)垃圾回收源码解读
- 如何用SAP Cloud for Customer的手机App创建销售订单
- ipv6地址格式_IPV6与IPV4的差异
- mugen4g补丁如何使用_CAD如何去除教育版戳记?
- 【转】C++中的inline用法
- flink源码分析_Flink源码分析之深度解读流式数据写入hive
- centos7.6 安装nginx-1.14.2
- tcpdump抓SQL[转]
- 黑苹果efi安装_黑苹果新姿势~在线安装macOS
- 基于STM32-ESP8266-阿里云-微信小程序的智慧舒适家庭控制系统项目
- 1、系统需求分析与可行性分析(System Requirement Analysis and Feasibility Analysis)
- 解决双屏显示不一致的问题
- 魔兽世界3.35+mysql_新魔兽世界3.35兔子王版本商业 一键启动服务端
- 再谈微服务负载均衡器:Ribbon均衡器和SpringCloud自带LoadBalancer均衡器
- 23种设计模式 -----Day01:简单工厂模式