首页 > 编程知识 正文

squeeze的用法,pytorch clamp

时间:2023-05-06 14:53:21 阅读:111751 作者:4796

目录

1. torch.unsqueeze详细信息

2.unsqueeze_和unsqueeze的区别

3. torch.squeeze详细信息

1.torch.unsqueezetorch.un squeeze (input,dim,out=None )详细信息

作用:扩展维以返回新的wldhm,并在输入的默认位置插入维1

返回33558www.Sina.com/wldhm与输入wldhm共享内存,因此更改其中一个内容将更改另一个。 如果dim为负,则转换为dim input.dim (1http://www.Sina.com/tensor (tensor ) )。 键入wldhmdim(int ),然后插入维索引输出(tensor )。 可选(结果wldhmimporttorchx=torch.tensor ([ 1,2,3,4 ] ) # torch.Tensor是默认的tensor类型) torch.FlaotTensor ) print(x('-'*50 ) print (x ) ) #tensor ) [1.2 .3 .4.] (print (x.size () torch.size ) )4) ) 4.](print(torch.unsqueeze ) x,0 ).size ) torch.size ([ 1,4 ] ) print (torch.un squeeze ),x, size ) ) torch.unsqueeze )0).numpy () ([1.2.3.4.] ) print ) (-'*50 ) print ) torch.unsqueeze ) ) x,1 #[4.](print(torch.unsqueeze ) x,-1).size ) ) torch.size ) ) print (torch.un squeze ) x,1 ) ) torch

#说明: adimvaluewithintherange [-input.dim (-1,input.dim ) )1) )左闭右开) can be used。

#print('-'*50 ) )

#print(Torch.UNsqueeze,-3) ) ) ) ) ) ) )。

# index error : dimensionoutofrange (expectedtobeinrangeof (-2,1 )、but got -3 ) ) ) ) ) ) )。

#print('-'*50 ) )

#print(Torch.UNsqueeze(x,2 ) ) ) ) ) ) ) ) )。

# index error : dimensionoutofrange (expectedtobeinrangeof (-2,1 )、but got 2() ) ) ) ) ) ) )。

#为什么要这样设计值的范围?

#理由:容易操作

#0(-2 ) -行扩展

#1(-1 ) -列扩展

(正向)我们在0,1的位置扩张

#相反:我们在-2、-1的位置扩张

#维扩展:一维-二维、二维-gt

;3维,...,n维->n+1维
# 维度降低:n维->n-1维,n-1维->n-2维,...,2维->1维

# 以 1维->2维 为例,

# 从【正向】的角度思考:

# torch.Size([4])
# 最初的 tensor([1., 2., 3., 4.]) 是 1维,我们想让它扩展成 2维,那么,可以有两种扩展方式:

# 一种是:扩展成 1行4列 ,即 tensor([[1., 2., 3., 4.]])
# 针对第一种,扩展成 [1, 4]的形式,那么,在 dim=0 的位置上添加 1

# 另一种是:扩展成 4行1列,即
# tensor([[1.],
#         [2.],
#         [3.],
#         [4.]])
# 针对第二种,扩展成 [4, 1]的形式,那么,在dim=1的位置上添加 1

# 从【逆向】的角度思考:
# 原则:一般情况下, "-1" 是代表的是【最后一个元素】
# 在上述的原则下,
# 扩展成[1, 4]的形式,就变成了,在 dim=-2 的的位置上添加 1
# 扩展成[4, 1]的形式,就变成了,在 dim=-1 的的位置上添加 1

2. unsqueeze_和 unsqueeze 的区别

PyTorch中的 XXX_ 和 XXX 实现的功能都是相同的,唯一不同的是前者进行的是 in_place 操作。

unsqueeze_ 和 unsqueeze 实现一样的功能,区别在于 unsqueeze_ 是 in_place 操作,即 unsqueeze 不会对使用 unsqueeze 的 tensor 进行改变,想要获取 unsqueeze 后的值必须赋予个新值, unsqueeze_ 则会对自己改变。

print("-" * 50)a = torch.Tensor([1, 2, 3, 4])print(a)# tensor([1., 2., 3., 4.])b = torch.unsqueeze(a, 1)print(b)# tensor([[1.],# [2.],# [3.],# [4.]])print(a)# tensor([1., 2., 3., 4.])print("-" * 50)a = torch.Tensor([1, 2, 3, 4])print(a)# tensor([1., 2., 3., 4.])print(a.unsqueeze_(1))# tensor([[1.],# [2.],# [3.],# [4.]])print(a)# tensor([[1.],# [2.],# [3.],# [4.]]) 3. torch.squeeze 详解 作用:降维

torch.squeeze(input, dim=None, out=None)

将输入wldhm形状中的1 去除并返回。 如果输入是形如(A×1×B×1×C×1×D),那么输出形状就为: (A×B×C×D)

当给定dim时,那么挤压操作只在给定维度上。例如,输入形状为: (A×1×B), squeeze(input, 0) 将会保持wldhm不变,只有用 squeeze(input, 1),形状会变成 (A×B)。

注意: 返回wldhm与输入wldhm共享内存,所以改变其中一个的内容会改变另一个。参数:input (Tensor) – 输入wldhmdim (int, optional) – 如果给定,则input只会在给定维度挤压out (Tensor, optional) – 输出wldhm 为何只去掉 1 呢?

多维wldhm本质上就是一个变换,如果维度是 1 ,那么,1 仅仅起到扩充维度的作用,而没有其他用途,因而,在进行降维操作时,为了加快计算,是可以去掉这些 1 的维度。

print("*" * 50)m = torch.zeros(2, 1, 2, 1, 2)print(m.size()) # torch.Size([2, 1, 2, 1, 2])n = torch.squeeze(m)print(n.size()) # torch.Size([2, 2, 2])n = torch.squeeze(m, 0) # 当给定dim时,那么挤压操作只在给定维度上print(n.size()) # torch.Size([2, 1, 2, 1, 2])n = torch.squeeze(m, 1)print(n.size()) # torch.Size([2, 2, 1, 2])n = torch.squeeze(m, 2)print(n.size()) # torch.Size([2, 1, 2, 1, 2])n = torch.squeeze(m, 3)print(n.size()) # torch.Size([2, 1, 2, 2])print("@" * 50)p = torch.zeros(2, 1, 1)print(p)# tensor([[[0.]],# [[0.]]])print(p.numpy())# [[[0.]]# [[0.]]]print(p.size())# torch.Size([2, 1, 1])q = torch.squeeze(p)print(q)# tensor([0., 0.])print(q.numpy())# [0. 0.]print(q.size())# torch.Size([2])print(torch.zeros(3, 2).numpy())# [[0. 0.]# [0. 0.]# [0. 0.]]

torch.unsqueeze() 和 torch.squeeze() - 知乎

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。