Pytorch实战-01Tensor

Pytorch初见

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

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

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

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

image-20211115163915270

Why Pytorch?

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

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

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

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

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

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

  • 背靠大树 FaceBook 维护开发

Pytorch的张量

张量是什么?

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

image-20211115165546673

张量的创建

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)

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

计算图与梯度求导

image-20211115192458532

动态图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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yuetianw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值