首先把原先tensor中的数据按照行优先的顺序排成一个一维的数据(这里应该是因为要求地址是连续存储的),然后按照参数组合成其他维度的tensor。
比如
import torch
import numpy as np
a =np.array([[1,2,3],[4,5,6]])
a = torch.tensor(a)
print(a.size())
构造了一个2*3的tensor
torch.Size([2, 3])
tensor([[1, 2, 3],
[4, 5, 6]], dtype=torch.int32)
但是我们想把这个tensor如下变成3*2的张量,就可以使用view函数
print(a.view(3,2))
先按照行排列,然后才转换成想要的形状
tensor([[1, 2],
[3, 4],
[5, 6]], dtype=torch.int32)
在这里view有一个特殊的参数,那就是-1,view(-1)是什么意思呢?
我们先看一下输出结果,结果变成了一行数据,也就是说不管原来是什么维度的张量,经过view操作之后,行优先的顺序变成了一行数据
print(a.view(-1))
tensor([1, 2, 3, 4, 5, 6], dtype=torch.int32)
-1在这里的意思是让电脑帮我们计算,比如下面的例子,总长度是20,我们不想自己算20/5=4,就可以在不想算的位置放上-1,电脑就会自己计算对应的数字,这个在实际搭建网络的时候是很好用的。
import torch
a = torch.arange(0,20) #此时a的shape是(1,20)
a.view(4,5).shape #输出为(4,5)
a.view(-1,5).shape #输出为(4,5)
a.view(4,-1).shape #输出为(4,5)
permute(dims)
将tensor的维度换位。
参数:参数是一系列的整数,代表原来张量的维度。比如三维就有0,1,2这些dimension。
再比如图片img的size比如是(28,28,3)就可以利用img.permute(2,0,1)得到一个size为(3,28,28)的tensor。就是不改变每一行数据的基本内容,并没有进行重新排列。
import torch
import numpy as np
a =np.array([[1,2,3],[4,5,6]])
a = torch.tensor(a)
print(a.size()) #输出为(2,3)
print(a.permute(1,0)) #输出为(3,2)
tensor([[1, 4],
[2, 5],
[3, 6]], dtype=torch.int32)
函數功能:将tensor的维度换位 参数:参数是一系列的整数,代表原来张量的维度。比如三维就有0,1,2这些dimension。 例: 再比如图片img的size比如是(28,28,3)就可以利用img.permute(2,0,1)得到一个size为(3,28,28)的tensor。 只是操作tensor並不能操作numpy...
作用:调换Tensor中各维度的顺序 输入:数组,用来表示调换后的各维度顺序。一开始没修改的顺序其实就是[0,1,2…] 例子:有一个6×7×8×9的Tensor,我们想将其第2维(8)和第三维(9)给调换顺序 输出:...
permute()函数用于维度变换。在图像处理中经常出现,比如说读取的图片是 numpy格式,是(h,w,c),但是torch处理的数据是(c,h,w)。所以这个函数经常使用...
原始tensor 输出: tensor([[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]]) torch.Size([1, 3, 3]) 1.view() 改变tensor的形状 view() 的具体理解请见文章:pytorch中x = x.view(x.size(0), -1) 的理解 输出 tensor([[1., 2., 3.], [4.,...
一、前言 在进行深度学习的过程中,经常遇到permute函数,transpose函数,view函数,contiguous函数等,他们起什么作用,之间又有什么联系呢? 二、主要内容 2.1、permute函数和transpose函数 Tensor.permute(a,b,c,d, …):可以对任意高维矩阵进行转置。例子见下: torch.transpose(Tensor, a,b):只...
1、transpose与permute transpose() 和 permute() 都是返回转置后矩阵,在pytorch中转置用的函数就只有这两个 ,这两个函数都是交换维度的操作 transpose用法:tensor.transpose(dim0, dim1) → Tensor 只能操作2D矩阵的转置, transpose每次只能交换两个维度, 这是相比于permute的一...
pytorch中view和permute函数改变张量维度方式的不同 说的有点太抽象了。结合代码自己理解一下吧。。 如有错误或意见,欢迎提出。 实验代码: 实验结果: 代码permute(0,2,1)是指将张量第1维度和第二维度换位置。原来维度顺序是(0,1,2),而现在的维度顺序为(0,2,1). 要理解permuted与view两者重组新张量的方式的不同。 permuted()函数是进行的是张量...
transpose和permute 都是进行转置操作,但是有些许区别,permute可以完全替代transpose,transpose不能替代permute。 transpose的基本操作 接收两个维度dim1和dim2,将dim1和dim2调换: permute的基本操作 重组tensor维度,支持高维操作,tensor.permute(dim0, dim1, … dimn),表示...
Pytorch-view的用法 1.torch.view(参数a,参数b,...) 2. 有的时候会出现torch.view(-1)或者torch.view(参数a,-1)这种情况。 在pytorch中view函数的作用为重构张量的维度,相当于numpy中resize()的功能,但是用法可能不太一样。如下例所示 比如 得到的结果一样 再看一个例子: 1.torch.view(参数a,参数b,&he...