<>维度转换

<>改变维度view

view 可以改变维度,合并拆分都可
#创建tensor变量 a=torch.rand(4,1,28,28)#4张图,1灰度图片,图片大小28*28 a.shape
#torch.Size([4, 1, 28, 28]) #将后面三个维度合并在一起,1*28*28 a.view(4,28*28).shape
#torch.Size([4, 784]) #前3个维度合并在一起 a.view(4*1*28,28).shape #out:torch.Size([112,
28]) b=a.view(4,784) b.view(4,28,28,1).shape#1维转4维,但此转变没有物理意义
#out:torch.Size([4, 28, 28, 1])
<>squeeze/unsqueeze

增加维度unsqueeze
#创建tensor变量 a=torch.rand(4,1,28,28)#4张图,1灰度图片,图片大小28*28 #在0的位置插入一个维度 a.
unsqueeze(0).shape#0之前插入 #out:torch.Size([1, 4, 1, 28, 28]) a.unsqueeze(-1).
shape#-1之后插入 #out:torch.Size([4, 1, 28, 28, 1])
删减维度squeeze
b=torch.rand(1,32,1,1)#32个channel,每个Chanel上有一个点 b.squeeze().shape#挤压维度维1的
#out:torch.Size([32]) b.squeeze(0).shape#删减第一位 #out:torch.Size([32, 1, 1]) b.
squeeze(-1).shape#删减倒数第一位 #out:torch.Size([1, 32, 1])
<>expand/repeat

expand()函数可以将张量广播到新的形状,但是切记以下两点:

* 只能对维度值为1的维度进行扩展,且扩展的Tensor不会分配新的内存,只是原来的基础上创建新的视图并返回;
* 无需扩展的维度请保持维度值不变。 a=torch.rand(1,32,14,14) a.expand(4,32,14,14).shape
#expand维度与之前一致, #out:torch.Size([4, 32, 14, 14]) a.expand(4,32,-1,-1).shape
#-1代表保持原来的维度不变 #out:torch.Size([4, 32, 14, 14])
repeat(),这个函数如函数名一样,是复制函数,参数表示把这个tensor复制成多少个,参数以1,2,3位来解释:
b=torch.rand(1,32,1,1) a.repeat(4,1,1,1).shape#数字代表重复的字数 b.repeat(4,1,32,32).
shape#重复4次,保持不变,重复32,。。32
<>转置操作
a=torch.randn(3,4) a.t().shape
<>transpose维度交换

torch.transpose(Tensor, a,b):transpose只能操作2D矩阵的转置
a=torch.rand([4,3,32,32]) #transpose(1,3),代表交换的维度,1和3维度。 a1=a.transpose(1,3).
view(4,3*32*32).view(4,3,32,32) #[abcd]变成[adcb]在变成[abdc] #注意数据不可用view随意变换 a2=a.
transpose(1,3).contiguous().view(4,3*32*32).view(4,32,32,3).transpose(1,3)
#[abcd]-[adcb]-[abcd] #比较a和a1,会发现 torch.all(torch.eq(a,a1)) #False torch.all(
torch.eq(a,a2)) #True
<>permute

Tensor.permute(a,b,c,d, …):permute函数可以对任意高维矩阵进行转置,但没有 torch.permute() 这个调用方式,
只能 Tensor.permute():
a=torch.rand(4,3,28,28) a.transpose(1,3).shape b=torch.rand(4,3,28,32) b.
transpose(1,3).shape #所有维度可以随意变换 b.permute(0,2,3,1).shape #torch.Size([4, 28,
32, 3])

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信