pytorch教程龙曲良21-25

21合并与分割2

split
按照长度/单元长度拆分

 c的shape是[2,32,8]
 aa,bb=c.split(1,dim=0)#操作单元是在0维度上操作,拆分单元长度是1
  aa,bb=c.split(2,dim=0)#报错 dim=0长度才是2,但是拆分长度要求2,拆不开,split必须拆分

c的shape是[3,32,8]
  aa,bb=c.split([2,1],dim=0)#操作单元是在0维度上操作,拆分单元长度是2和1
import torch
a=torch.rand(32,8)
b=torch.rand(32,8)
c=torch.stack([a,b],dim=0)
print(c.shape)#torch.Size([2, 32, 8])
c=torch.rand(5,32,8)
aa,bb=c.split([4,1],dim=0)#在dim=0上 把5分成4,1
print(aa.shape)#torch.Size([4, 32, 8])
print(bb.shape)#torch.Size([1, 32, 8])

aa,bb,cc=c.split([2,2,1],dim=0)#在dim=0上 把5分成2,2,1
print(aa.shape)#torch.Size([2, 32, 8])
print(bb.shape)#torch.Size([2, 32, 8])
print(cc.shape)#torch.Size([1, 32, 8])

chunk 要拆分几个单位,split是拆分的单位多长
在这里插入图片描述
22数学运算
Math operation
▪ Add/minus/multiply/divide
▪ Matmul
▪ Pow
▪ Sqrt/rsqrt
▪ Round

basic
加减乘数可以直接用±*/ 其中//表示整除
也可用add sub mul div
在这里插入图片描述
matmul
矩阵乘法中
.*是相同位置相乘
.matmul是矩阵乘法
可以用@或者.matmul,.mm只用在2d
在这里插入图片描述
例子
(4,784)降维成(4,512) 所以(4,784)@(784,512),但是一般用于变换的矩阵w是写成(ch-out,ch-in)所以784是in,512是out,所以要乘以w的转置,w.t(),.t只用于二维的,其他要用transpose
在这里插入图片描述
大于2d的均值乘法

a[4,3,28,64]
b[4,3,64,32]
torch.matmul(a,b)
#前两维不变,后面(28,64)@(64,32)所以最终是[4,3,28,32]


a[4,3,28,64]
b[4,1,64,32]
torch.matmul(a,b)
#b中的1可以通过broadcast变成3,保持前两维度相同,后面(28,64)@(64,32)所以最终是[4,3,28,32]


a[4,3,28,64]
b[4,64,32]
torch.matmul(a,b)
#b中的4不可以还是a中的3都不是1不能通过broadcast,所以报错

在这里插入图片描述
power

求幂运算
a.pow(2)#平方
a2#平方
aa.sqrt()#平方根
aa.rsqrt()#平方根的导数
a
(0.5)#开方

在这里插入图片描述
exp log
log默认以e为底,e=2.7183
改变底直接写log2.(a)或者log10.(a)

在这里插入图片描述

a=torch.exp(torch.ones(2,2))
print(a)
b=torch.log(a)
c=torch.log2(a)
d=torch.log10(a)
print(b,c,d)
'''
tensor([[2.7183, 2.7183],
        [2.7183, 2.7183]])
tensor([[1., 1.],
        [1., 1.]]) tensor([[1.4427, 1.4427],
        [1.4427, 1.4427]]) tensor([[0.4343, 0.4343],
        [0.4343, 0.4343]])


'''

Approximation
近似值
▪ .floor() #下限 往小的取
▪ .ceil()#上限 天花板 往大的取
▪ .round()#四舍五入
▪ .trunc()#裁剪成整数部分
▪ .frac()#裁剪成小数部分

在这里插入图片描述
clamp
裁剪梯度
梯度离散 梯度很小趋近于0
梯度爆炸 梯度很大大于10,可以打印w.grad.norm(2)看这个数值

a=torch.rand(2,3)#0-1分布
print(a)
grad=a*15#15倍放大
print(grad)

print(grad.max())
print(grad.median())
print(grad.clamp(10))#(min)小于10的位置补成10

print(grad)

print(grad.clamp(0,10))#大于10的位置补成10 (min,max)


'''
tensor([[0.0980, 0.3470, 0.5863],
        [0.7546, 0.1118, 0.9067]])
tensor([[ 1.4703,  5.2043,  8.7948],
        [11.3190,  1.6768, 13.6002]])
tensor(13.6002)
tensor(5.2043)
tensor([[10.0000, 10.0000, 10.0000],
        [11.3190, 10.0000, 13.6002]])
tensor([[ 1.4703,  5.2043,  8.7948],
        [11.3190,  1.6768, 13.6002]])
tensor([[ 1.4703,  5.2043,  8.7948],
        [10.0000,  1.6768, 10.0000]])
'''

23统计属性1

statistics
▪ norm
▪ mean sum
▪ prod
▪ max, min, argmin, argmax
▪ kthvalue, topk

norm
这里的norm是范数的意思,不是normalize正则化
在这里插入图片描述
在这里插入图片描述
norm-p
在这里插入图片描述

b.norm(1,dim=1)#在dim=1上进行1的norm,是第二行的求和 shape是[2] 维度是1
b.norm(2,dim=0)#在dim=0上进行2的norm,是第二行的求和结果再开方 shape是[2] 维度是1
在这里插入图片描述 对于c而言 dim=0是最外层的维度,取哪个维度的范数那个维度就消掉
在这里插入图片描述
mean, sum, min, max, prod(累乘)
argmax就是将整个tensor打平后max的索引值
argmin就是将整个tensor打平后min的索引值
在这里插入图片描述

a.argmax(dim=1)在每一行中找最大值的索引,可以理解为在手写数字中找每张图片中概率最大的那个label,dim=1是在10上做索引,返回的shape是[4]
如果在dim=0是在4上做索引,返回的shape是[10]
在这里插入图片描述

24属性统计2

dim keepdim
keepdim是让max之后的索引维度(本来是1维度 只有一行就是每张图片最大值的索引值)和原来a的维度(本来是2维度 4行10列)保持一致
在这里插入图片描述

top-k k-th
top-k默认返回最大的k个,找最小的k个largest设置为false
k-th返回第k小的value
在这里插入图片描述

compare

equal就是整体比
eq就是比每个内容单独比
在这里插入图片描述

25高阶操作

where
适用于分布采样,就是不规则的赋值,完成逻辑时序控制,这样可以运行在gpu上
在这里插入图片描述
概率p越大越可能取a ,概率越小越可能取b,
p=0.5大于0.5取a,a值是0,小于0.5取b ,b值是1

gather
在这里插入图片描述
在这里插入图片描述
实现从reletive到global的一个映射
7,4,9到107,104,109
long是类型转换
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值