【写在前面】:此专栏为本人在系统复习pytorch基础时写下的笔记,复习内容与进度参考一位在B站讲深度学习的up主(deep_thoughts),此笔记旨在帮助小伙伴快速入门和复习pytorch相关知识,写得不好的地方多担待,可直接移步up主的视频学习。此专栏全程无盈利性质。
up主(deep_thoughts)个人主页:
https://space.bilibili.com/373596439spm_id_from=333.788.b_765f7570696e666f.2
一般创建tensor时可以把ndarray传入torch.tensor()和torch.from_numpy(),也可以直接在torch.tensor()直接传入一个高维的list
import torch
import numpy as np
data_numpy = np.array([[1, 2],
[3, 4]])
data_tensor = torch.tensor([[1, 2],
[3, 4]])
data_tensor1 = torch.from_numpy(data_numpy)
data_tensor2 = torch.tensor(data_numpy)
print(data_tensor,data_tensor1,data_tensor2)
传入shape,随机生成自定义shape的tensor,数据是从[0,1)均匀分布抽的。
data = torch.rand(1,3,224,224)
print(data)
传入shape,torch.ones()生成全1的tensor,torch.zeros()生成全0的tensor。
data1 = torch.ones(3,3)
data2 = torch.zeros(2,2,2)
print(data1,data2)
传入一个tensor,生成和这个tensor的形状一样的tensor,rand_like就是从[0,1)均匀分布去取数,另外一个全1tensor一个全0tensor。
data2 = torch.zeros(2,2,2)
data3 = torch.rand_like(data2)
data4 = torch.ones_like(data2)
data5 = torch.zeros_like(data2)
print(data5,data5.shape)
这些属于tensor的属性,dtype可查看tensor内数据的属性,创建tensor时可指定其数据类型。
data_tensor = torch.tensor([[1, 2],
[3, 4]])
print(data_tensor.dtype) # torch.int64
data_tensor = torch.tensor([[1, 2],
[3, 4]],dtype=torch.float64)
print(data_tensor.dtype) # torch.float64
shape:查看tensor形状。
print(data_tensor.shape)
device:查看tensor在哪上面运行,创建tensor时可指定其数据在cpu还是gpu上,但一般我们不在创建tensor时指定它的device,所以这里就不讲了。
print(data_tensor.device)
前提是你的电脑有N卡,torch是gpu版本的,而且cuda和cudnn是配置好的,配置完整的过程不多说了,都是泪。
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(device)
data = torch.ones(3,3)
print(data.device)
data = data.to(device)
print(data.device)
传入一个data,判断data是不是tensor。
data_numpy = np.array([[1, 2],
[3, 4]])
data_tensor = torch.tensor([[1, 2],
[3, 4]])
print(torch.is_tensor(data_tensor))
print(torch.is_tensor(data_numpy))
torch.complex():创建一个tensor,里面有复数数据,传入的实部和虚部都必须是tensor类型的数据,看栗子。
data_tensor = torch.tensor([[1, 2],
[3, 4]],dtype=torch.float)
a,b = data_tensor[0],data_tensor[1]
data_tensor_complex = torch.complex(a,b)
print(data_tensor_complex) #tensor([1.+3.j, 2.+4.j])
torch.is_complex()不多说了。
查看tensor中单个元素是否为0,如果传入的data不是单个数据则会报错。
data_tensor = torch.tensor([[1, 0],
[3, 4]])
print(torch.is_nonzero(data_tensor[0][0]))
print(torch.is_nonzero(data_tensor[0][1]))
传入一个tensor,查看此tensor所有元素的数目。其实也就是shape各个元素相乘
data_tensor = torch.rand(1,3,224,224)
print(torch.numel(data_tensor)) # 150528 = 1*3*224*224
按照起点、终点、步长输出一组数据,有numpy基础的很好理解,注意输出是前闭后开的。
data_tensor1 = torch.arange(0,10,2)
data_tensor2 = torch.arange(0,10)
print(data_tensor1)
print(data_tensor2)
传入一个shape,生成主对角线为1,其余位置为0的2维的tensor,你也可以输入非方阵的shape,那么输出的tensor。
data_tensor1 = torch.eye(3)
print(data_tensor1.shape)
print(data_tensor1)
data_tensor2 = torch.eye(3,2)
print(data_tensor2.shape)
print(data_tensor2)