最近使用PyTorch编写程序,经常会遇到tensor_data.contiguous().view(-1)
,以此记录下其用法。
首先,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.])
从结果可以看出,其一行一行拼接在一起。
在实际操作中,我们常会看到这个用法,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