第六章 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文件

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

发布了25 篇原创文章 · 获赞 5 · 访问量 4265
App 阅读领勋章
微信扫码 下载APP
阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览