目录
一、什么时pytorch
PyTorch是一个基于python的科学计算框架,有以下特点:
(1)类似于Numpy(做矩阵及高维矩阵运算的库),但可以使用GPU
(2)可以用它定义深度学习模型,剋灵活的进行深度学习模型的训练和使用
二、tensor(张量)
1、定义
Tensor实际上就是一个多维数组(multidimensional array),其目的是能够创造更高维度的矩阵、向量。
2、tensor的维度(秩)rank/order
Rank为0、1、2时分别称为标量、向量和矩阵,Rank为3时是3阶张量,Rank大于3时是N阶张量。这些标量、向量、矩阵和张量里每一个元素被称为tensor element(张量的元素),且同一个张量里元素的类型是保持一样的。
3、tensor的属性
1.数据类型dtype d是data的首字母,type是类型的意思。tensor里每一个元素的数据类型是一样的。类似于Numpy中ndarray.dtype。pytorch里的数据类型可以有很多种,比方说torch.float32就是32位的浮点数,torch.int8就是8位的整型,torch.unit8就是8位的无符号整型,torch.string为字符串等等。
2.形状Shape 类似于Numpy中ndarray.shape,比方说一个2行3列的二维矩阵,他的形状就是2行3列。
3.其他属性 device是tensor在哪个设备上被计算出来的,graph是tensor所属的图,name是tensor的名字 ,op是operation的缩写是产生这个tensor的操作运算,对应图上的结点,这些结点接收一些tensor作为输入并输出一些tensor。还有等等属性,可以查阅官网。
4、创建tensor并更改数据类型
Jupyter->tensor.py
***************加载包:import torch********************
********默认数据类型为float32,用.dtype查看********
1、随机创建
(1)x=torch.empty(5,3):创建5行3列的张量,2维,数字为极小/极大的随机数
(2)x=torch.rand(5,3,2):创建3为维张量,为[0,1)之间的随机数(即从均匀分布中取数)
(3)x=torch.rand(5,3):返回一个张量,包含了从标准正态分布(均值为0,方差为1,即高斯白噪声)中抽取的一组随机数。张量的形状由参数sizes定义。
(4)y=torch.rand_like(x):生成与x形状相同的随机数。
2、全0的tensor
(1)x=torch.zeros(5,3):创建2维矩阵,数据为0,x.dtype查看数据类型
(2)x=x.new.zeros(5,3):创建一个与x相似的,用0 填充的tensor,shape/size自己定义。
(3)y=torch.zeros_like(x):生成与x形状相同,且都为0填充的tensor
3、全1的tensor
(1)x=torch.ones(5,3):创建2维矩阵,数据全为1,x.dtype查看数据类型
(2)x=x.new.ones(5,3):创建一个与x相似的,用1 填充的tensor,shape/size自己定义。
(3)y=torch.ones_like(x):生成与x形状相同,且都为1填充的tensor
4、自定义数值和维度
(1)x=torch.tensor([5,3]):自定义一个数值为5和3,形状1行2列的2维矩阵
(2)a=torch.tensor([[5,3],[4,2]]):自定义形状维(2,1,2)的3阶tensor
5、tensor中的方法和变量
1、查看定义的tensor有哪些操作
dir(x)
2、查看tensor和查看具体数据
(1)查看tensor:print(x)/print(x.data) 返回:tensor( )
(2)查看tensor具体数值(当tensor中只有一个数据的时候才能用):print(x.item()) 返回:数据或者一个n阶矩阵
3、查看梯度和梯度方法
x.grad
x.grad_fn
4、查看形状/修改/大小
(1) 查看形状:x.shape;x.size
(2)重新定义/修改形状:x=x.zeros(4,4) y=x.view(16)#将x变为一个具有16个数据的向量,并赋值给y;重新定义的尺寸大小乘积必须和元次村大小乘积相同。即4*4(x的尺寸大小乘积)=16(y的尺寸大小乘积)
5、查看并修改数据类型
(1)查看数据类型:x.dtype,默认为float32
(2)修改数据类型:x=torch.randn(5,3,dtype=int)
x=torch.randn(5,3).long()//修改成long数据类型
6、四则运算
(1)加法:x+y;torch.add(x,y);y.add(x)#此运算改变是在y上做修改,不再额外开辟内存空间存放加和后的数据。必须是同尺寸的tensor才可以做加法运算。
********各种类似numpy的indexing都可以在pytorch tensor上使用*********
7、切片操作
x[:,1:]:所有行都留下,从第1列向后都留下
8、tensor和numpy之间的数据类型转换
********a和b在这期间是共享内存的,改变a的值,b的值也会发生改变********
(1)将tensor转化维numpy array类型:用a中的numpy()方法即可
a=torch.ones(5,3)
b=a.numpy()
(2)将numoy转为tensor类型:
import numpy as np
a=np.ones(5,3)
b=torch.from_numpy(a)
三、GPU和CPU之间的转换
1、转化到GPU上操作
(1)device直接定义
(2).to("GPU")方法
(3)把整个模型都变成cuda model=model.cuda()
if torch.cuda.is_available():
d=torch.device("cuda")#定义GPU设备
y=torch.ones_like(x,device=d)#device直接定义设备维GPU
x=x.to(d)#使用.to("GPU")方法
z=x+y
print(z.to("CPU",torch.double))
2、转化到CPU上
********numpy类型的数据只能在CPU上做运算,所以如果想做numpy有关的方法必须先转化到CPU上*********
(1).to("CPU)