1. view()

tensor.view()方法可以调整tensor的形状,但必须保证调整前后元素总数一致。view不会修改自身的数据,返回的新tensor与原tensor共享内存,即更改一个,另一个也随之改变。

如:

import torch as t
a=t.arange(0,6).view(2,3)
print(a)

b=a.view(-1,2)  #当某一维是-1时,会自动计算它的大小
print(b)

#输出
tensor([[0, 1, 2],
        [3, 4, 5]])
tensor([[0, 1],
        [2, 3],
        [4, 5]])

在实际应用中,可能经常需要添加或者减少某一维度,这是sequeeze()和unsequeeze()这两个方法就派上了用场。

2. unsequeeze()和sequeeze()

unsequeeze(dim)用来在维度dim上增加1维;sequeeze(dim)用来在dim上减少维度。

如:

import torch as t
a=t.arange(0,6).view(2,3)
print(a)

b=a.view(-1,2)  #当某一维是-1时,会自动计算它的大小
print(b)
c=b.unsqueeze(1)    #在第1维上,增加1
print(c.size())

d=c.squeeze(-2)   #在倒数第二维上,减少1维
print(d.size())


#输出
tensor([[0, 1, 2],
        [3, 4, 5]])
tensor([[0, 1],
        [2, 3],
        [4, 5]])
torch.Size([3, 1, 2])
torch.Size([3, 2])

3.resize()

resize是另一种可用来调整size的方法,但与view不同,它可以修改tensor的尺寸。如果新尺寸超过了原尺寸,会自动分配新的内存空间,而如果新尺寸小于原尺寸,则之前的数据依旧会被保存下来。

如:

import torch as t
a=t.arange(0,6).view(2,3)
print(a)

b=a.resize_(1,3)
print(b)

c=b.resize_(3,3)
print(c)

#结果
tensor([[0, 1, 2],
        [3, 4, 5]])
tensor([[0, 1, 2]])
tensor([[                  0,                   1,                   2],
        [                  3,                   4,                   5],
        [                  0,                  15, 3184145383629680499]])

可以看到c的结果,最后一行是随机填充的数据。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐