1.View函数
import torch a=torch.Tensor([[[1,2,3],[4,5,6]]]) b=torch.Tensor([1,2,3,4,5,6]) print(a.view(1,6)) print(b.view(1,6)) #得到的结果都是tensor([[1., 2., 3., 4., 5., 6.]]) #再看一个例子: a=torch.Tensor([[[1,2,3],[4,5,6]]]) print(a.view(3,2))
控制台输出:
import torch a = torch.randn(3,3) print(a)#返回生成的随机tensor(3*3) print(torch.max(a,0))#返回每一列中最大值的那个元素,且返回索引(返回最大元素在这一列的行索引) print(torch.max(a,1))#返回每一行中最大值的那个元素,且返回其索引(返回最大元素在这一行的列索引) print(torch.max(a))#返回tensor a 中的最大值 print(torch.max(a,0)[0] )# 只返回最大值的每个数 print(torch.max(a,0)[1])#只返回最大值的每个索引
控制台输出:
D:\softwaretools\anaconda\python.exe D:/pycharmprojects/hoteltest01/hoteltest01/testpy/test16.py tensor([[ 1.6294, 0.2568, 0.2093], [ 0.4974, -2.1175, 0.1659], [ 0.0640, 1.4387, -0.5895]]) torch.return_types.max( values=tensor([1.6294, 1.4387, 0.2093]), indices=tensor([0, 2, 0])) torch.return_types.max( values=tensor([1.6294, 0.4974, 1.4387]), indices=tensor([0, 0, 1])) tensor(1.6294) tensor([1.6294, 1.4387, 0.2093]) tensor([0, 2, 0]) Process finished with exit code 0
max函数用法总结:
torch.max(a) 返回输入tensor a中所有元素的最大值
torch.max(a,0) 返回每一列中最大值的那个元素,且返回索引(返回最大元素在这一列的行索引)
torch.max(a,1) 返回每一行中最大值的那个元素,且返回其索引(返回最大元素在这一行的列索引)
torch.max()[0], 只返回最大值的每个数
troch.max()[1], 只返回最大值的每个索引
torch.max()[1].data 只返回variable中的数据部分(去掉Variable containing:)
torch.max()[1].data.numpy() 把数据转化成numpy ndarry
torch.max()[1].data.numpy().squeeze() 把数据条目中维度为1 的删除掉
torch.max(tensor1,tensor2) element-wise 比较tensor1 和tensor2 中的元素,返回较大的那个值
3.squeeze()函数
torch.unsqueeze(input, dim, out=None)
作用:扩展维度
返回一个新的张量,对输入的既定位置插入维度 1
如果dim为负,则将会被转化dim+input.dim()+1
参数:
tensor (Tensor)
– 输入张量
dim (int)
– 插入维度的索引
out (Tensor, optional)
– 结果张量
import torch x = torch.Tensor([1, 2, 3, 4]) # torch.Tensor是默认的tensor类型(torch.FlaotTensor)的简称。 print('-' * 50) print(x) # tensor([1., 2., 3., 4.]) print(x.size()) # torch.Size([4]) print(x.dim()) # 1 print(x.numpy()) # [1. 2. 3. 4.] print('-' * 50) print(torch.unsqueeze(x, 0)) # tensor([[1., 2., 3., 4.]]) print(torch.unsqueeze(x, 0).size()) # torch.Size([1, 4]) print(torch.unsqueeze(x, 0).dim()) # 2 print(torch.unsqueeze(x, 0).numpy()) # [[1. 2. 3. 4.]] print('-' * 50) print(torch.unsqueeze(x, 1)) # tensor([[1.], # [2.], # [3.], # [4.]]) print(torch.unsqueeze(x, 1).size()) # torch.Size([4, 1]) print(torch.unsqueeze(x, 1).dim()) # 2 print('-' * 50) print(torch.unsqueeze(x, -1)) # tensor([[1.], # [2.], # [3.], # [4.]]) print(torch.unsqueeze(x, -1).size()) # torch.Size([4, 1]) print(torch.unsqueeze(x, -1).dim()) # 2 print('-' * 50) print(torch.unsqueeze(x, -2)) # tensor([[1., 2., 3., 4.]]) print(torch.unsqueeze(x, -2).size()) # torch.Size([1, 4]) print(torch.unsqueeze(x, -2).dim()) # 2
控制台输出:
D:\softwaretools\anaconda\python.exe D:/pycharmprojects/hoteltest01/hoteltest01/testpy/test16.py -------------------------------------------------- tensor([1., 2., 3., 4.]) torch.Size([4]) 1 [1. 2. 3. 4.] -------------------------------------------------- tensor([[1., 2., 3., 4.]]) torch.Size([1, 4]) 2 [[1. 2. 3. 4.]] -------------------------------------------------- tensor([[1.], [2.], [3.], [4.]]) torch.Size([4, 1]) 2 -------------------------------------------------- tensor([[1.], [2.], [3.], [4.]]) torch.Size([4, 1]) 2 -------------------------------------------------- tensor([[1., 2., 3., 4.]]) torch.Size([1, 4]) 2 Process finished with exit code 0
4.torch.squeeze 详解
torch.squeeze(input, dim=None, out=None)
作用:降维
将输入张量形状中的1 去除并返回。 如果输入是形如(A×1×B×1×C×1×D),那么输出形状就为: (A×B×C×D)
当给定dim时,那么挤压操作只在给定维度上。例如,输入形状为: (A×1×B), squeeze(input, 0)
将会保持张量不变,只有用 squeeze(input, 1)
,形状会变成 (A×B)。
参数:
input (Tensor) – 输入张量
dim (int, optional) – 如果给定,则input只会在给定维度挤压
out (Tensor, optional) – 输出张量
案例:
import torch 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])
控制台输出:
torch.cat(inputs, dimension=0) → Tensor
cat是concatnate的意思:拼接,联系在一起。
参数:
- inputs (sequence of Tensors) – 可以是任意相同Tensor 类型的python 序列
- dimension (int, optional) – 沿着此维连接张量序列
注意:输入数据必须是序列,序列中数据是任意相同的shape
的同类型tensor
按维数0拼接(竖着拼)
C = torch.cat( (A,B),0 )
按维数1拼接(横着拼)
C = torch.cat( (A,B),1 )
案例:
import torch A=torch.ones(2,3) #2x3的张量(矩阵) print("A:\n",A,"\nA.shape:\n",A.shape,"\n") B=2*torch.ones(4,3) #4x3的张量(矩阵) print("B:\n",B,"\nB.shape:\n",B.shape,"\n") C=torch.cat((A,B),0) #按维数0(行)拼接 print("C:\n",C,"\nC.shape:\n",C.shape,"\n")
控制台输出:
D:\softwaretools\anaconda\python.exe D:/pycharmprojects/hoteltest01/hoteltest01/testpy/test16.py A: tensor([[1., 1., 1.], [1., 1., 1.]]) A.shape: torch.Size([2, 3]) B: tensor([[2., 2., 2.], [2., 2., 2.], [2., 2., 2.], [2., 2., 2.]]) B.shape: torch.Size([4, 3]) C: tensor([[1., 1., 1.], [1., 1., 1.], [2., 2., 2.], [2., 2., 2.], [2., 2., 2.], [2., 2., 2.]]) C.shape: torch.Size([6, 3]) Process finished with exit code 0
6.permute()函数
torch.Tensor.permute (Python method, in torch.Tensor)
作用:将tensor的维度换位。
permute是更灵活的transpose,可以灵活的对原数据的维度进行调换,而数据本身不变。
import torch x = torch.randn(2,3,4) print(x.size()) x_p = x.permute(1,0,2) # 将原来第1维变为0维,同理,0→1,2→2 print(x_p.size()) print(x_p.size())
控制台输出:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pytorch学习笔记14—-torch中相关函数使用:view函数、max()函数、squeeze()函数 - Python技术站