第六章 PyTorch工具库

01.PyTorch工具库简介

1.1 从torch到PyTorch

torch

  • 利用LuaJIT编译器——提高了性能
  • 基于C的NVIDIA CUDA扩展使得Torch能够利用GPU加速
    PyTorch
  • PyTorch = Python + Torch,Torch的Python版,并增加了很多功能
  • Python的应用比Lua更加广
  • 保留了基于GPU的硬件加速,提高最大灵活度和速度
  • Python编写代码时用import torch引入

1.2 为什么要用PyTorch

1>动态计算图,可以根据计算需要实时改变计算图
2>动态计算机制使得调试更加容易
3>动态计算更加适用于自然语言处理
4>传统的面向对象编程风格

1.3 静态图计算与动态图计算

静态图计算——程序在编译执行时将先生成神经网络的结构,然后再执行相应的操作,类似于“惰性计算”。
动态图计算——程序按照编写命令的顺序进行执行
同等情况下,静态可以更好的优化,而动态更加容易调试

02.张量、梯度和自动求导

2.1 定义张量

PyTorch 0.4.0之前只能用Variable包装器的方法定义张量:

a = Variable(torch.randn(5,5))

PyTorch 0.4.0之后保留原始定义方法外,还可用torch.tensor方法定义张量。

a = torch.tensor([1,2,3])
a = Variable(torch.randn(5,5))

2.2 张量计算加速

张量计算可通过GPU加速,提供自动求导机制,且PyTorch可以将张量存放于CPU或GPU中,可以大幅加速计算。

2.3 自动求导机制

每个变量都有一个标记 (梯度请求)requires_grad。它允许从梯度计算中排除子图,提高效率;

a = Variable(torch.randn(5,5),requires_grad = True)  # requires_grad默认是False

当表达式的所有输入都不需要梯度计算时,表达式结果不会输出梯度

x = Variable(torch.randn(5,5)) # 默认不请求梯度计算
y = Variable(torch.randn(5,5)) # 默认不请求梯度计算
x = Variable(torch.randn(5,5),requires_grad = True)

a = x + y # x,y都不请求梯度计算,a也不请求
a.requires_grad # 输出False

b = a + z # z请求梯度计算,b也请求
a.requires_grad # 输出True

当想要冻结部分模型,做模型优化微调finetuning时,这个参数十分实用。
PyTorch 0.4.0之前用volatile自动求导,现已被弃用。
PyTorch 0.4.0之后,用torch.no_grad()/torch.set_grad_enabled(grad_mode)表示是否求导,不再考虑递推,已经换成了一套更加灵活的上下文管理方式。代码如下:

x = torch.zeros(1,requires_grad = True)
with torch.no_grad():      # 通过with限定不可求导 的范围
    y = x * 2
    y.requires_grad        # 输出False

is_train = False
with torch.set_grad_enabled(is_train):       # 设置这一部分要不要放到计算图
    y = x * 2
    y.requires_grad        # 输出False

torch.set_grad_enabled(True):       # 不要with,也可直接使用
y = x * 2
y.requires_grad        # 输出True

torch.set_grad_enabled(False):       # 不要with,也可直接使用
y = x * 2
y.requires_grad        # 输出False

2.4 PyTorch基础

可以参考我上传的资源pytorch模型基本代码.tar.gz中的PyTorch基础.ipynb文件

03.基于PyTorch的基础模型搭建

可以参考我上传的资源pytorch模型基本代码.tar.gz中的线性回归和逻辑回归文件

04.基于PyTorch的多层感知器搭建

可以参考我上传的资源pytorch模型基本代码.tar.gz中的多层感知器文件

05.基于PyTorch的神经网络搭建

可以参考我上传的资源pytorch模型基本代码.tar.gz的CNN和RNN文件

注明:学习参考网易云课堂《深度学习工程师(实战)》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值