PyTorch学习DAY1定义以及张量的操作

PyTorch学习DAY1定义以及张量的操作_第1张图片

Pytorch的定义

PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。它是一个基于Python的可续计算包,提供两个高级功能:

  1. 具有强大的GPU加速的张量计算(如NumPy)
  2. 包含自动求导系统的的深度神经网络。

Tensor和Variable

  1. data:被包装的Tensor
  2. grad:data的梯度
  3. grad_fn:创建Tensor的Function,是自动求导的关键
  4. requires_grad:指示是否需要梯度
  5. is_leaf:指示是否是叶子结点(张量)
  6. dtype:张量的数据类型,如torch.FloatTensor,torch.cuda.FloatTensor
  7. shape:张量的形状,如(64,3,224,224)
  8. device:张量所在设备,GPU/CPU,是加速的关键

PyTorch学习DAY1定义以及张量的操作_第2张图片

张量的创建

一、直接创建

torch.tensor()

功能:从data创建tensor

  • data:数据,可以是list,numpy
  • dtype:数据类型,默认与data一致
  • device:所在设备,cuda/cpu
  • requires_grad:是否需要梯度
  • pin_memory:是否存于锁页内存

torch.from_numpy(ndarray)

功能:从numpy创建tensor

注意事项:从torch.from_numpy创建的tensor于原ndarray共享内存,当修改其中一个的数据,另外一个也将会被改动。

PyTorch学习DAY1定义以及张量的操作_第3张图片

二、依据数值创建

torch.zeros()

功能:依size创建全0张量

  • size:张量的形状,如(3,3)、(3,224,224)
  • out:输出的张量
  • layout:内存中布局形式,有strided,sparse_coo等
  • device:所在设备
  • requires_grad:是否需要梯度

torch.zeros_like()

功能:依input形状创建全0张量

  • input:创建与input同形状的全0张量
  • dtype:数据类型
  • layout:内存中布局形式

torch.ones()

torch.ones_like()

功能:依input创建全1张量

  • size:张量的形状,如(3,3)、(3,224,224)
  • dtype:数据类型
  • layout:内存中布局形式
  • device:所在设备
  • requires_grad:是否需要梯度

torch.full()

torch.full_like()

功能:依input形状创建全0张量

  • size:张量的形状,如(3,3)
  • fill_value:张量的值

torch.arange()

功能:创建等差的1维张量

注意:数值区间为[start, end]

  • start:数列起始值
  • end:数列结束值
  • step:公差,默认为1

torch.linspace()

功能:创建均分的1维张量

注意:数值区间为[start, end]

  • start:数列起始值
  • end:数列结束值
  • step:数列长度

torch.eye()

功能:创建单位对角矩阵(2维张量)

注意:默认为方阵

  • n:矩阵行数
  • m:矩阵列数

三、依概率分布创建张量

torch.normal()

功能:生成正态分布(高斯分布)

注意:数值区间为[start, end]

  • mean:均值
  • std:标准差
  • 四种模式:mean和std是张量标量的排列组合

torch.randn()

torch.randn_like()

功能:生成标准正态分布

  • size:张量的形状

torch.rand_like()

功能:在区间[0, 1)上,生成均匀分布

torch.randperm()

功能:生成从0到n-1的随机排列(经常用来生成索引)

  • n:张量的长度

torch.bernoulli()

功能:以input为概率,生成伯努利分布(0-1分布,两点分布)

  • input:概率值

张量的操作

一、张量拼接与切分

torch.cat()

功能:将张量按维度dim进行拼接

  • tensors:张量序列
  • dim:要拼接的维度

torch.stack()

功能:在新创建的维度dim上进行拼接

  • tensors:张量序列
  • dim:要拼接的维度

torch.chunk()

功能:将张量按维度dim进行平均切分

返回值:张量列表

注意:若不能整除,最后一份张量小于其他张量

  • input:要切分的张量
  • chunks:要切分的份数
  • dim:要切分的维度

torch.split()

功能:将张量按维度dim进行切分

返回值;张量列表

  • tensor:要切分的张量
  • split_size_or_sections:为int时,表示每一份的长度;为list时,按list元素切分
  • dim:要切分的维度

二、张量索引

torch.index_select()

功能:在维度dim上,按index索引数据

返回值;依index索引数据拼接的张量

  • input:要索引的张量
  • dim:要索引的维度
  • index:要索引数据的序号

torch.masked_select()

功能:按mask中的True进行索引(通常用来筛选数据)

返回值;一维张量

  • input:要索引的张量
  • mask:与input同形状的布尔类型张量

torch.index_select()

功能:在维度dim上,按index索引数据

返回值;依index索引数据拼接的张量

  • input:要索引的张量
  • dim:要索引的维度
  • index:要索引数据的序号

torch.index_select()

功能:在维度dim上,按index索引数据

返回值;依index索引数据拼接的张量

  • input:要索引的张量
  • dim:要索引的维度
  • index:要索引数据的序号

三、张量变换 

torch.reshape()

功能:变换张量形状

注意:当张量在内存中是连续时,新张量与input共享数据内存

  • input:要变换的张量
  • shape:新张量的形状

torch.transpose()

功能:变换张量的两个维度

注意:交换张量的两个维度

  • input:要变换的张量
  • dim0:要交换的维度
  • dim1:要交换的维度

torch.t()

功能:2维张量转置,对矩阵而言,等价于torch.transpose(input, 0, 1)

torch.squeeze()

功能:压缩长度为1的维度(轴)

  • dim:若为None,移除所有长度为1的轴;若指定维度,并且当且仅当该轴长度为1时,可以被移除;

torch.unsqueeze()

功能:依据dim扩展维度

  • dim:扩展的维度

四、张量数学运算

加减乘除、对数、指数、幂函数、三角函数

PyTorch学习DAY1定义以及张量的操作_第4张图片

torch.add()

功能:逐元素计算input+alpha*other

  • input:第一个张量
  • alpha:乘项因子
  • other:第二个张量

五、线性回归

线性回归是分析一个变量与另外一(多)个变量之间关系的方法。

因变量:y,自变量:x,关系:线性,y = wx + b,分析:求解w,b

求解步骤:

  1. 确定模型
  2. 选择损失函数
  3. 求解梯度并更新w,b

六、计算图

  • 计算图是用来描述运算的有向无环图。
  • 计算图有两个主要元素:结点和边。
  • 结点表示数据,如向量,矩阵,张量。
  • 边表示运算,如加减乘除卷积等。
  • retain_grad()可以保留非叶子结点的梯度。
  • grad_fn:记录创建该张量时所用的方法(函数)。

七、动态图

根据计算图搭建方式,可将计算图分为动态图和静态图

  • 动态图是运算与搭建同时进行(灵活,易调节)。
  • 静态图是先搭建图后运算(高效,不灵活)。

八、自动求导系统(autograd)

torch.autograd.background

  • tensors:用于求导的张量,如loss。

  • tetain_graph:保存计算图(因为pytorch会自动释放计算图)。

  • create_graph:创建导数计算图,用于高阶求导。

  • grad_tensors:多梯度权重

torch.autograd.grad

功能:求取梯度

  • outputs:用于求导的张量,如loss。

  • inputs:需要梯度的张量

  • tetain_graph:保存计算图(因为pytorch会自动释放计算图)。

  • create_graph:创建导数计算图,用于高阶求导(设为true)。

  • grad_tensors:多梯度权重

autograd小贴士:

  1. 梯度不自动清零。(zero_())
  2. 依赖于叶子结点的结点,requires_grad默认为True
  3. 叶子结点不可执行in-place(in-place操作就是在原始内存当中改变这个数据,而不用开辟新的地址块)。

九、逻辑回归

逻辑回归是线性的二分类模型,Sigmoid函数,Logistic函数

PyTorch学习DAY1定义以及张量的操作_第5张图片

线性回归是分析自变量x与因变量y(标量)之间关系的方法,逻辑回归是分析自变量x与因变量y(概率)之间关系的方法。

十、迭代训练(步骤)

  • 数据
  • 模型
  • 损失函数
  • 优化器

 

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