pytorch张量常用操作

目录

1. 获取张量大小(size & shape)
2. 统计张量的元素个数(prod & numel)
3. 重塑张量的大小(reshape)
4. 张量的压缩(squeeze & flatten)
5. 张量的拼接(cat)
6. 广播(broadcast_to)
7. 求最大值和下标(max & argmax)


1. 获取张量大小

首先,创建一个张量(创建张量的函数区分可见pytorch张量创建:区分Tensor & tensor & as_tensor & from_numpy)

import torch
p = torch.tensor([[1,1,1,1],[2,2,2,2],[3,3,3,3]],dtype=torch.float32)

(1) 张量的各个轴长

输入:

p.size()
p.shape

输出:

torch.Size([3,4])
torch.Size([3,4])

注:shape后面没有括号,size后面有括号

(2) 张量的维度(rank)

输入:

len(p.shape)

输出:

2

维度为2的张量其实是矩阵。

2. 统计张量的元素个数

仍然使用1中的p,即:

import torch
p = torch.tensor([[1,1,1,1],[2,2,2,2],[3,3,3,3]],dtype=torch.float32)

输入:

torch.tensor(p.shape).prod()
p.numel()

第一行是创建一个p.shape作为输入的张量,然后将张量中的元素进行相乘,即可得到一个张量,其存储的是p中的元素个数。

输出:

tensor(12)
12

3. 重塑张量的大小

仍然使用2中的张量p。

输入:

p.reshape(2,6)

输出:

tensor([[1.,1.,1.,1.,2.,2.],
	   [2.,2.,3.,3.,3.,3.]])

4. 张量的压缩

仍然使用2中的张量p。利用squeeze函数将一个张量中轴长为1的维度进行压缩,如果有多个轴长为1的维度,则可以使用squeeze(i)指定压缩第i维。

输入:

print(p.reshape(1,12).squeeze().shape)

输出:

torch.Size([12])

利用压缩和重塑,可以实现flatten操作,这是由卷积层过渡到全连接层常用的过渡方法

def flatten(p):
	p = p.reshape(1,-1) #-1表示由计算获得,也就是张量在第一维的轴长是1,第2维由计算机计算决定
	p = p.squeeze() #去除所有的轴,只剩下一维
	return p

5. 张量的拼接

输入:

A = torch.ones(2,2)
B = torch.ones(1,2)
torch.cat((A,B),dim=0) #dim表示按照第0维(列)进行拼接

输出:

tensor([[1,1],
		[1,1],
		[1,1]])

6. 广播

输入:

A = torch.ones(2,2)
B = torch.tensor([1,3],dtype=float32)
np.broadcast_to(B.numpy(),A.shape)

输出:

array([[1.,3.],
	   [1.,3.]],dtype=float32)

7. 求最大值和下标

输入:

A = torch.tensor([[1,0,0,2],
				  [2,4,5,7],
				  [3,0,3,10]],dtype=torch.float32)
t.max()
t.argmax()

输出:

tensor(10.)
tensor(11) #返回的是张量在flatten之后的下标(下标从0开始)

你可能感兴趣的:(pytorch学习笔记,pytorch,深度学习,机器学习)