pytorch


pytorch是在 Torch 基础上用python 语言重新打造的一款深度学习框架。

pytorch与tensorflow的比较

  1. tensorflow是静态图机制,需要先定义图结构,高效但不灵活。pytorch是动态图机制,边计算边搭建图结构,灵活易调节。
  2. pytorch调试更方便。
  3. pytorch用nn.module封装,是网络搭建更方便。
  4. pytorch会自动计算梯度。

pytorch基础

  1. 张量是多维数组。torch.autograd.variable用于封装张量,进行自动求导。
  2. 张量的创建方式:
    2.1 torch.tensor(), torch.from_numpy
    ndarray()
    2.2 torch.zeros(), torch.zeros_like(), torch.ones(), torch.ones_like(), torch.full(), torch.full_like(), torch.arange(), torch.linspace(), torch.logspace(), torch.eye()
    2.3 torch.normal(), torch.randn(), torch.randn_like(), torch.rand(), torch.rand_like(), torch.randint(), torch.randint_like(), torch.randperm(), torch.bernoulli()
  3. 张量的操作:
    3.1 torch.cat(), torch.stack(), torch.chunk(), torch.split()
    3.2 torch.index_select(), torch.masked_select()
    3.3 torch.reshape(), torch.transpose(), torch.t(), torch.squeeze(), torch.unsqueeze()
  4. 张量的运算:
    4.1 torch.add(), torch.addcdiv(), torch.cmul(), torch.sub(), torch.div(), torch.mul()
    4.2 torch.log(), torch.log10(), torch.log2(), torch.exp(), torch.pow()
    4.3 torch.abs(), torch.acos(), torch.cosh(), torch.cos(), torch.asin(), torch.atan(), torch.atan2()
  5. 自动求梯度:torch.autograd.backward()
  • 梯度不自动清零
  • 依赖于叶子结点的结点, requires_grad 默认为 True
  • 叶子结点不可执行 inplace。因为如果叶子结点进行inplace,依赖它的中间结点会发生错误。
  1. 数据读取:
  • torch.utils.data.DataLoader() —— 构建可迭代的数据加载器
  • torch.utils.data.Dataset —— Dataset抽象类,所有自定义的Dataset需要继承它,并且复写__getitem__()
  1. torch.nn:
  • nn.Parameter: 可学习的参数
  • nn.Module: 所有网络层基类,管理网络属性
  • nn.functional: 函数的具体实现
  • nn.init: 参数初始化方法
  1. nn.Module:
  • 一个 module 可以包含多个子 module
  • 一个 module 相当于一个运算,必须实现 forward() 函数
  • 每个 module 都有 8 个字典管理它的属性
  1. 容器Containers:
  • nn.Sequetial: 顺序性 ,各网络层之间严格按顺序执行,常用于 block 构建
  • nn.ModuleList: 迭代性 ,常用于大量重复网构建,通过 for 循环实现重复构建
  • nn.ModuleDict: 索引性 ,常用于可选择的网络层
  1. 参数初始化准则:方差一致性。初始化方法:Xavier 均匀分布,Xavier 正态分布,Kaiming 均匀分布,Kaiming 正态分布,均匀分布,正态分布,常数分布,正交矩阵初始化,单位矩阵初始化,稀疏矩阵初始化
  2. 损失函数:
  • nn.CrossEntropyLoss(): nn.LogSoftmax 与 nn.NLLLoss 结合 ,进行交叉熵计算
  • nn.NLLLoss(): 实现负对数似然函数中的 负号功能
  • nn.BCELoss(): 二分类交叉熵
  • nn.BCEWithLogistsLoss(): 结合Sigmoid 与 二分类交叉熵
  • nn.L1Loss(): 计算 inputs 与 target 之差的绝对值
  • nn.MSELoss(): 计算 inputs 与 target 之差的平方
  • nn.SmoothL1Loss():
  • nn.PoissonNLLLoss(): 泊松分布的负对数似然损失函数
  • nn.KLDivLoss(): 计算KL 散度,相对熵
  • nn.MarginRankingLoss(): 计算两个向量之间的相似度 ,用于排序任务
  • nn.MultiLabelMarginLoss()
  • nn.SoftMarginLoss(): 计算二分类的 logistic 损失
  • nn.MultiLabelSoftMarginLoss(): SoftMarginLoss 多标签
  • nn.MultiLabelMarginLoss(): 计算多分类的折页损失
  • nn.HingeEmbeddingLoss(): 计算两个输入的相似性,常用于非线性embedding 和半监督学习
  • nn.CosineEmbeddingLoss(): 采用余弦相似度计算两个输入的相似性
  • nn.CTCLoss(): 计算 CTC 损失,解决时序类数据的分类
  1. 优化器:
  • optim.SGD :随机梯度下降法
  • optim.Adagrad :自适应学习率梯度下降法
  • optim.RMSprop Adagrad 的改进
  • optim.Adadelta Adagrad 的改进
  • optim.Adam RMSprop 结合 Momentum
  • optim.Adamax Adam 增加学习率上限
  • optim.SparseAdam :稀疏版的 Adam
  • optim.ASGD :随机平均梯度下降
  • optim.Rprop :弹性反向传播
  • optim.LBFGS BFGS 的改进
  1. 优化器属性和方法:
  • defaults :优化器超参数
  • state :参数的缓存
  • params_groups :管理的参数组
  • _step_count :记录更新次数,学习率调整中使用
  • zero_grad():清空所管理参数的梯度
  • step(): 执行一步更新
  • add_param_group():添加参数组
  • state_dict():获取优化器当前状态信息 字典
  • load_state_dict(): 加载状态信息字典
  1. 学习率调整:
  • lr_scheduler.StepLR(): 等间隔调整学习率
  • lr_scheduler.MultiStepLR(): 按给定间隔调整学习率
  • lr_scheduler.ExponentialLR(): 按指数衰减调整学习率
  • lr_scheduler.CosineAnnealingLR(): 余弦周期调整学习率
  • lr_scheduler.ReduceLRonPlateau(): 监控指标,当指标不再变化则调整
  • lr_scheduler.LambdaLR(): 自定义调整策略
  1. 模型的保存与加载:torch.save(), torch.load()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值