tensor.view(*shape) 函数

最近使用PyTorch编写程序,经常会遇到tensor_data.contiguous().view(-1),以此记录下其用法。


view()函数用法示例及其参数详解

首先,view( ) 是对 PyTorch 中的 Tensor 操作的,若非 Tensor 类型,可使用 data = torch.tensor(data)来进行转换。

(1) 作用:该函数返回一个有__相同数据__但不同大小的 Tensor。通俗一点,就是__改变矩阵维度__,相当于 Numpy 中的 resize() 或者 Tensorflow 中的 reshape() 。

(2) 参数:view( *shape )

x = torch.randn(4, 4)
print(x.size())
y = x.view(16)
print(y.size())
z = x.view(-1, 8)  # -1表示该维度取决于其它维度大小,即(4*4)/ 8
print(z.size())
m = x.view(2, 2, 4) # 也可以变为更多维度
print(m.size())

其输出结果依次为:

torch.Size([4, 4])
torch.Size([16])
torch.Size([2, 8])
torch.Size([2, 2, 4])

(3) view( -1 )

若我们需要转换维度为一维,有一种简单的方式,即参数为 -1 。我们具体举个例子:

a = torch.Tensor([[1, 2, 3], [4, 5, 6]]) # 定义一个 2*3 的 Tensor
a = a.view(-1)
print(a)

结果如下:

tensor([1., 2., 3., 4., 5., 6.])

从结果可以看出,其一行一行拼接在一起。

data.contiguous().view(-1)

在实际操作中,我们常会看到这个用法,contiguous()就是为了保证一个Tensor是连续的,这样才能被 view() 处理。

 

view_as(other) → Tensor

返回被视作与给定的tensor相同大小的原tensor。 等效于:self.view(tensor.size())

a = t.arange(0, 6)
   ...: a.view(2, 3)
Out[32]: 
tensor([[0, 1, 2],
        [3, 4, 5]])

b.view_as(a)
Out[35]: tensor([1., 2., 3., 4., 5., 6.])
a
Out[36]: tensor([0, 1, 2, 3, 4, 5])

详细解释可以阅读知乎这篇: https://zhuanlan.zhihu.com/p/64551412

你可能感兴趣的:(deep,learning,Tensor,view,view_as)