pytorch数学运算与统计属性入门
1、Broadcasting (维度)自动扩展,具有以下两个重要特征:
(1)expand
(2)without copying data
重点的核心实现功能是:
(1)在前面增加缺失的维度
(2)将其中新增加的维度的size扩展到需要相互运算的tensor维度的same size

图1
2、broadcasting自动扩展=unsqueeze(增加维度)+expand(维度扩展)

图2
3、tensor的合并与分割:
(1)合并API
1)Cat:对数据进行维度上的合并,不增加属性
2)Stack:增加一个维度,增加一个属性进行数据分类,不对数据进行简单的合并
(2)拆分API
1)Split:根据数据维度的长度来进行拆分(by len([1,2,3...]) or len(1))
2)Chunk:根据所需数据维度的数量来进行拆分(by num)
4、数学运算
(1)基本的加减乘除
1)运算符形式(+-*/)
2)add/sub/mul/div-pytorch的运算名称
(2)高次次方函数power(a,n)表示a的n次方、指数exp和对数函数log函数
(3)矩阵的运算函数-矩阵相乘-torch.mm(仅仅适用于dim=2的情况)/torch.matmul()/@(三种形式)
(4)近似值函数:
a=torch.tensor(3.14)
print(a.floor()) #向下取整函数
print(a.ceil()) #向上取整函数
print(a.trunc()) #数据的整数部分
print(a.frac()) #数据的小数部分
print(a.round())
(5)clamp裁剪函数(梯度裁剪比较常用)
5、统计属性函数


(1)范数函数norm
(2)其他常用属性的计算与统计
a=torch.randn(4,10)
print(a[0])
print(a.min())
print(a.max())
print(a.mean())
print(a.prod())
print(a.std())
print(a.sum())
print(a.argmax(dim=0))
print(a.argsort())
print(a.argmin(dim=1))
(3)dim/keepdim函数的作用:主要用来结果输出维度的变换
(4)topk函数(求取某一维度数据上前n大的数据及其索引)/kthvalue(求取第n小的数据及其索引)
(5)常见比较函数(< > >= <= != torch.gt(),torch.eq(a,b),torch.equal(a,b))
6、其他的高阶操作
(1)where
where(condition,A,B):函数原型:拼接和组装功能


(2)gather
gather(input,dim,index):查表和搜索的功能

具体的pytorch进阶操作的训练代码如下所示:
#数据的拼接cat函数 对数据进行维度上的合并,不增加属性
import torch
a=torch.rand(4,32,8)
b=torch.rand(5,32,8)
print(torch.cat([a,b],dim=0).shape) #需要合并的数据需要放在list中,另外dim参数是指进行合并的维度
#数据的另外一种拼接方式stack函数:增加一个维度,增加一个属性进行数据分类,不对数据进行合并
a=torch.rand(5,32,8)
b=torch.rand(5,32,8)
print(torch.stack([a,b],dim=2).shape)
a=torch.rand(32,8)
b=torch.rand(32,8)
print(torch.stack([a,b],dim=0).shape)
#数据拆分函数split(by len)和chunk(by num)
#数据拆分spit可以根据数据维度的长度来进行拆分(len([1,2,3...]))
c=torch.rand(3,32,8)
a,b,d=c.split(1,dim=0)
print(a.shape,b.shape)
a,b=c.split([2,1],dim=0)
print(a.shape,b.shape)
c=torch.rand(2,32,8)
a,b=c.split(1,dim=0)
print(a.shape)
#数据拆分根据数据的数量来进行拆分(by num(1)/,函数为Chunk函数
x=torch.rand(4,32,8)
a,b,c,d=x.split(1,dim=0)
print(a.shape)
a,b,c,d=x.chunk(4,dim=0)
print(a.shape)
#tensor数据的数学运算
#基本的加减乘除(1)运算符形式(+-*/)(2)add/sub/mul/div运算名称形式均可
a=torch.rand(4,3)
b=torch.rand(3)
print(a+b)
print(a*b)
print(a-b)
print(a/b)
print(torch.add(a,b)) #与上面是等效的
print(torch.mul(a,b))
print(torch.sub(a,b))
print(torch.div(a,b))
#矩阵的运算函数-矩阵相乘-torch.mm(仅仅适用于dim=2的情况)/torch.matmul()/@(三种形式)
a=torch.ones(2,2)
b=torch.tensor([[1.,2.],[3.,4.]])
print(b)
print(a)
print(torch.mm(a,b))
print(torch.matmul(a,b))
print(a@b) #三种运算等效
#矩阵的降维
a=torch.rand(4,784)
w=torch.rand(512,784)
b=a@w.t()
print(b.shape)
#高次次方函数power(a,n)表示a的n次方、指数和对数函数
a=torch.tensor([[1,3],[2,4]],dtype=float)
print(a)
print(pow(a,3)) #a的三次方
print(a.sqrt()) #a的平方根
print(a.rsqrt()) #a的平方根的倒数
print(torch.exp(a)) #指数函数log
print(torch.log(torch.exp(a))) #对数函数exp
print(torch.log(a))
#近似值函数
a=torch.tensor(3.14)
print(a.floor()) #向下取整函数
print(a.ceil()) #向上取整函数
print(a.trunc()) #数据的整数部分
print(a.frac()) #数据的小数部分
print(a.round()) #求取数据的四舍五入的数据
#clamp裁剪函数(梯度裁剪比较常用)
a=torch.rand(2,3)*15
print(a)
print(a.clamp(10)) #取10以上的数据,小于10的数据代替为10
print(a.clamp(1,10)) #取1-10的数据,将大于10的数据代替为10
#求取数据的统计属性
#1数据的范数norm函数
a=torch.full([8],1)
print(a)
b=a.view(2,4)
c=a.view(2,2,2)
print(a.view(2,4))
print(a.view(2,2,2))
print(a.norm(1),b.norm(1),c.norm(1))
print(b.norm(2,dim=1)) #求取数据的n范数,在dim=x的维度上
print(c.norm(2,dim=2))
#其他常用属性的计算与统计
a=torch.randn(4,10)
print(a[0])
print(a.min())
print(a.max())
print(a.mean())
print(a.prod())
print(a.std())
print(a.sum())
print(a.argmax(dim=0))
print(a.argsort())
print(a.argmin(dim=1))
#dim/keepdim函数的作用
print(a.argmax(dim=1))
print(a.argmax(dim=1,keepdim=True)) #主要用来数据的维度变换[4],转换[4,1]
#topk函数(求取某一维度数据上前n大的数据及其索引)/kthvalue(求取第n小的数据及其索引)
a=torch.rand(4,10)
print(a.topk(3,dim=1))
x,y=a.topk(3,dim=1,largest=False)
print(a.topk(3,dim=1,largest=False))
print(x)
print(a.kthvalue(8,dim=1))
#常用比较函数compare
a=torch.rand(4,10)
print(a>0)
print(a!=0)
print(torch.gt(a,0))
b=torch.rand(4,10)
print(torch.eq(a,b)) #输出每个元素对应位置上的相同与否
print(torch.equal(a,b)) #表示是否完全一样
#高阶操作函数where和gather
#where函数相比for循环来说可以实现GPUU高度并行进行,可以提高数数据处理的速度
cond=torch.tensor([[0.4,0.1],[0.7,0.8]])
print(cond)
A=torch.rand(2,2)
B=torch.rand(2,2)
print(A,B)
print(cond)
print(torch.where(cond>0.5,A,B))
#gather函数-查表操作,可以在GPU上实现,从而提高数据的处理速度,在前沿的一些数据查询和加速方面比较常用
input1=torch.rand(4,10)
print(input1.topk(3,dim=1)[1])
label=torch.tensor(range(100,110))
print(label)
print(label.shape)
print(torch.gather(label.expand(4,10),dim=1,index=input1.topk(3,dim=1)[1])) #gather函数的经典案例帮助理解

pytorch数学运算与统计属性入门(非常易懂)的更多相关文章

  1. 6 让我们的C#程序开始做点数学运算

    请相信我你只需要懂得最基本的数学运算,就可以从事大多数的软件项目的开发工作.千万不要一提编程,就让数学把你吓跑了.大多数的程序开发人员从事的编程工作是应用系统的开发.这些系统的绝大多数功能,只需要最基 ...

  2. css3 calc():css简单的数学运算-加减乘除

    css3 calc():css简单的数学运算–加减乘除 多好的东西啊,不用js,一个css就解决了. .box{ border:1px solid #ddd; width:calc(100% - 10 ...

  3. JAVA之旅(二十三)——System,RunTime,Date,Calendar,Math的数学运算

    JAVA之旅(二十三)--System,RunTime,Date,Calendar,Math的数学运算 map实在是太难写了,整理得我都晕都转向了,以后看来需要开一个专题来讲这个了,现在我们来时来学习 ...

  4. linux学习:特殊符号,数学运算,图像与数组与部分终端命令用法整理

    指令:let.expr.array.convert.tput.date.read.md5.ln.apt.系统信息 一:特殊符号用法整理 系统变量 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $ ...

  5. 6.Python3标准库--数学运算

    ''' 作为一种通用的变成语言,Python经常用来解决数学问题.它包含一些用于管理整数和浮点数的内置类型,这很适合完成一般应用中可能出现的基本数学运算. 而标准库中包含一些用于满足更高级需求的模块. ...

  6. Stream流的基本介绍以及在工作中的常用操作(去重、排序以及数学运算等)

    平时工作中,我在处理集合的时候,总是会用到各种流操作,但是往往在处理一些较为复杂的集合时,还是会出现无法灵活运用api的场景,这篇文章的目的,主要是为介绍一些工作中使用流时的常用操作,例如去重.排序和 ...

  7. java字符串类型数学运算表达式以及精度丢失问题

    字符串类型数学运算精度丢失问题 方式一:ScriptEngine 会精度丢失,可执行连续双括号 方式二:hutool ScriptUtil 会精度丢失,可执行连续双括号 方式三:hutool Scri ...

  8. Java学习笔记 06 数字格式化及数学运算

    一.数字格式化 DecimalFormat类 >>DecimalFormat是NumberFormat的子类,用于格式化十进制数,可以将一些数字格式化为整数.浮点数.百分数等.通过使用该类 ...

  9. 从零开始学习Node.js例子四 多页面实现数学运算 续二(client端和server端)

    1.server端 支持数学运算的服务器,服务器的返回结果用json对象表示. math-server.js //通过监听3000端口使其作为Math Wizard的后台程序 var math = r ...

随机推荐

  1. 疫情下的传统商企自救|4个Tips搭建销量过亿直播间

    新冠肺炎爆发以来,线下商企遭受巨大冲击.出于疫情防控需要,不少门店选择暂时停业:而消费者们更是响应号召.足不出户.这场疫情促使消费者的消费习惯和方式进一步转向线上订购转变,直播.短视频等领域逆势而起, ...

  2. [Agc005D/At2060] Minimum Sum - 单调栈

    鉴于早上那题让我怀疑单调栈白学,特意来复习下单调栈 题意 考虑按照每个元素对答案的贡献来统计,那么我们只需要找到每个元素左边右边第一个比它小的就可 这题给的又是排列,简直不能再良心 #include ...

  3. 多个iframe,删除详情页时刷新同级iframe的table list

    说明:在使用iframe开发时,经常遇到多个iframe之间的操作. 下面就是一个需求:在一个iframe中关闭时,刷新指定的iframe: 添加需要刷新的标识reload=true //添加npi2 ...

  4. [SUCTF 2019]EasySQL(堆叠注入配合sql_mode)

    考点:1.堆叠注入 2.set sql_mode=PIPES_AS_CONCAT;将||视为字符串的连接操作符而非或运算符 意外:注入* 复现: 1;set sql_mode=PIPES_AS_CON ...

  5. lnmp1.5一键安装包安装lnmpa后,添加站点

    lnmp1.5一键安装包安装lnmpa后,添加站点 (1)添加站点 (2)配置apache配置文件 在/usr/local/apache/conf/vhost文件夹下,修改webApp站点配置文件ap ...

  6. vue组件中的data为什么是函数?

    一.vue组件中的data为什么是函数 为了保证组件的独立性 和 可 复用性,data 是一个函数,组件实例化的时候这个函数将会被调用,返回一个对象,计算机会给这个对象分配一个内存地址,你实例化几次, ...

  7. CI系列之配置sonar

    基于GO项目 1.在jenkins新建sonar任务,设置2个变量用于接收代码分支和pipline的workspace[两个变量的作用在CI之Jenkinsfile中会讲到] A.添加构建参数 B.选 ...

  8. OWASP安装

    下载网址:https://sourceforge.net/projects/owaspbwa/files/1.0rc2/ 下载完之后解压 解压之后 打开虚拟机 然后 虚拟机中菜单栏 文件---打开-- ...

  9. Docker(二)Image 与网络

    Docker Image 我们介绍一下如何构造一个自定义的 Docker  Image.在Docker 中,我们使用Dokcerfile 构建一个docker的描述. 首先我们定义一下需要启动一个什么 ...

  10. 题解【AcWing274】移动服务

    题面 非常好的优化 \(\text{DP}\) 状态表示的题目. 首先可以设 \(dp_{i,x,y,z}\) 表示已经做完了前 \(i\) 个请求,现在的 \(3\) 名服务员分别在 \(x\) . ...