Pytorch学习笔记-01Tensor

Pytorch学习笔记-01Tensor,第1张

Pytorch学习笔记-01Tensor Pytorch初见

文章目录
  • Pytorch初见
    • 简介:深度之眼Pytorch框架班学习笔记
    • Why Pytorch?
    • Pytorch的张量
      • 张量是什么?
      • 张量的创建
        • 1 直接创建:
        • 2 依据数值创建
        • 3 依概率分布创建张量
      • 张量 *** 作
        • 张量拼接与切分
        • 张量索引
        • 张量变换
      • 张量数学运算
    • 计算图
      • autograd-自动求导系统
  • autograd-自动求导系统

简介:深度之眼Pytorch框架班学习笔记

2017年 1 月, FAIR( FacebookAI Research )发布 PyTorch

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

Torch是采用 Lua 语言为接口的机器学习框架,但因 Lua 语言较为小众,导致 Torch 知名度不高

Why Pytorch?
  • 上手快 :掌握 Numpy 和基本深度学习概念即可上手

  • 代码简洁灵活 :用 nn.module 封装使网络搭建更方便;基于动态图机制,更灵活

  • Debug 方便 :调试 PyTorch 就像调试 Python 代码一样简单

  • 文档规范 https://pytorch.org/docs/ 可查各版本文档

  • 资源多 arXiv 中的新算法大多有 PyTorch 实现

  • 开发者多 GitHub 上贡献者已超过 1100+

  • 背靠大树 FaceBook 维护开发

Pytorch的张量 张量是什么?

张量是一个多维数组 ,它是标量、向量、矩阵的高维拓展

张量的创建 1 直接创建:

torch.tensor()
功能:从data 创建 tensor

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

torch.zeros
功能:依size 创建全 0 张量

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

torch.zeros_like()

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

2.3 torch.ones()
2.4 torch.ones_like()

2.5 torch.full()
2.6 torch.full_like()

2.7 torch.arange()
功能:创建等差的1维张量
注意事项:数值区间为[start, end)

2.8 torch.linspace()
功能:创建均分的1维张量
注意事项:数值区间为[start, end]

2.9 torch.logspace()
功能:创建对数均分的1维张量
注意事项:长度为steps, 底为base

2.10 torch.eye()
功能:创建单位对角矩阵( 2维张量)
注意事项:默认为方阵

3 依概率分布创建张量

3.1 torch.normal()
功能:生成正态分布(高斯分布)

  • mean : 均值
  • std : 标准差

四种模式:

mean为标量,std为标量
mean为标量,std为张量
mean为张量,std为标量
mean为张量,std为张量

3.2 torch.randn()
3.3 torch.randn_like()
功能:生成标准正态分布

3.4 torch.rand()
3.5 torch.rand_like()
功能:在区间[0, 1)上,生成均匀分布

3.6 torch.randint()
3.7 torch.randint_like()
功能:区间[low, high)生成整数均匀分布

3.8 torch.randperm()
功能:生成生成从0到n-1的随机排列

3.9 torch.bernoulli()
功能:以input为概率,生成伯努力分布
(0-1分布,两点分布)

张量 *** 作 张量拼接与切分

1.1 torch.cat()
功能:将张量按维度dim进行拼接

1.2 torch.stack()
功能:在新创建的维度dim上进行拼接

1.3 torch.chunk()
功能:将张量按维度dim进行平均切分
返回值:张量列表
注意事项:若不能整除,最后一份张量小于
其他张量

1.4 torch.split()
功能:将张量按维度dim进行切分
返回值:张量列表

张量索引

2.1 torch.index_select()
功能:在维度dim上,按index索引数据
返回值:依index索引数据拼接的张量

2.2 torch.masked_select()
功能:按mask中的True进行索引
返回值:一维张量

张量变换

3.1 torch.reshape()
功能:变换张量形状
注意事项:当张量在内存中是连续时,新张
量与input共享数据内存

3.2 torch.transpose()
功能:交换张量的两个维度

3.4 torch.squeeze()
功能:压缩长度为1的维度(轴)

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

3.5 torch.unsqueeze()
功能:依据dim扩展维度

张量数学运算

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tVkG4ica-1636977797700)(https://i.loli.net/2021/11/15/2VHtkSMmdP36cOs.png)]

计算图

计算图是用来描述运算的有向无环图

计算图有两个主要元素:结点(Node)和边(Edge)

结点表示数据,如向量,矩阵,张量
边表示运算,如加减乘除卷积等

计算图与梯度求导

动态图vs 静态图
Dynamic VS Static Computational Graphs

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

动态图:先搭建图,后运算

灵活 易调节

静态图:

运算与搭建同时进行

autograd-自动求导系统

torch.autograd.backward()

功能:自动求取梯度

  • tensors: 用于求导的张量,如 loss
  • retain_graph : 保存计算图
  • create_graph : 创建导数计算图,用于高阶求导
  • grad_tensors:多梯度权重

autograd小贴士:

  1. 梯度不自动清零
  2. 依赖于叶子结点的结点,requires_grad默认为True
autograd-自动求导系统

torch.autograd.backward()

功能:自动求取梯度

  • tensors: 用于求导的张量,如 loss
  • retain_graph : 保存计算图
  • create_graph : 创建导数计算图,用于高阶求导
  • grad_tensors:多梯度权重

autograd小贴士:

  1. 梯度不自动清零
  2. 依赖于叶子结点的结点,requires_grad默认为True
  3. 叶子结点不可执行in-place

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5495776.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存