本文最后更新于:14 天前

PyTorch概述

官网

网址pytorchhttps://pytorch.org/

简介

​ PyTorch是一个非常有可能改变深度学习领域前景的Python库。PyTorch是一个较新的深度学习框架。从名字可以看出,其和Torch不同之处在于PyTorch使用了Python作为开发语言,所谓“Python first”。一方面,使用者可以将其作为加入了GPU支持的numpy,另一方面,PyTorch也是强大的深度学习框架。

​ 目前有很多深度学习框架,PyTorch主推的功能是动态网络模型。例如在TensorFlow中,使用者通过预先编写网络结构,网络结构是不能变化的(但是TensorFlow2.0加入了动态网络的支持)。而PyTorch中的网络结构不再只能是一成不变的。同时PyTorch实现了多达上百种op的自动求导(AutoGrad)。

​ 在我使用过的各种深度学习库中,PyTorch是最灵活、最容易掌握的。

发展路线

  • 002年发布Torch
  • 2011年发布Torch7

最开始的torch框架是使用lua语言开发的,代码的可读性和实现起来都挺麻烦,所以热度一直就不高。

torch.Tensor{1,2,3}

function gradUpdate(mlp,x,y,learningRate)
  local criterion = nn.ClassNLLCriterion()
  pred = mlp:forward(x)
  local err = criterion:forward(pred, y); 
  mlp:zeroGradParameters();
  local t = criterion:backward(pred, y);
  mlp:backward(x, t);
  mlp:updateParameters(learningRate);
end
  • 2016年10月发布0.1,后端还是基于原来的torch的Python接口发布的的PyTorch
  • 2018年12月发布1.0,后端改为了caffe2的pytorch稳定版1.0

框架

评分

招聘描述

github情况

综合来说,pytorch也是一个非常热门的趋势。

PyTorch环境配置

GPU环境配置

Pycharm-Python环境配置

Python版本:3.6.x

cuda版本:9.0

torch版本:1.0

pycharm:commit

测试

>>> import torch
>>> torch.__version__
'1.0.1'
>>> torch.cuda.is_available()
True

输出为true,则表示环境配置成功并可以支持GPU运算。

PyTorch功能简介

PyTorch动态图

每一步都是构建图的过程

  • 适合debug

tensorflow静态图

先建好图,然后计算图

  • 不需要中间修改
  • 自建命名体系
  • 自建时序控制
  • 很难debug
  • 2.0支持动态图优先

深度学习计算库

  • GPU加速

    代码实例:

    import torch
    import time
    
    print(torch.__version__)
    print(torch.cuda.is_available())  # 判断是否支持GPU运算
    
    # 初始化计算变量
    a = torch.randn(10000, 1000)
    b = torch.randn(1000, 2000)
    
    start = time.time()
    # 计算矩阵的乘法
    c = torch.matmul(a, b)
    
    end = time.time()
    
    print("cpu计算时间及结果", a.device, end-start, c.norm(2))
    
    device = torch.device('cuda')
    a = a.to(device)
    b = b.to(device)
    
    
    start = time.time()
    c = torch.matmul(a, b)
    
    end = time.time()
    print("GPU初始化", a.device, end-start, c.norm(2))
    
    start = time.time()
    c = torch.matmul(a, b)
    
    end = time.time()
    print("GPU计算时间及结果", a.device, end-start, c.norm(2))

    运行结果:

    1.0.1
    True
    cpu计算时间及结果 cpu 0.21739435195922852 tensor(141500.7031)
    GPU初始化 cuda:0 1.1588668823242188 tensor(141500.7188, device='cuda:0')
    GPU计算时间及结果 cuda:0 0.009351253509521484 tensor(141500.7188, device='cuda:0')

    使用GPU运算,在我的电脑上运算速度快了20多倍。

  • 自动求导

    代码实例:

    公式:$y = a^2x+bx+c$

    数学计算结果:2a、1、1

    import torch
    import time
    from torch import autograd
    print(torch.__version__)
    print(torch.cuda.is_available())  # 判断是否支持GPU运算
    x = torch.tensor(1.)
    a = torch.tensor(1., requires_grad=True)
    b = torch.tensor(2., requires_grad=True)
    c = torch.tensor(3., requires_grad=True)
    
    y = a**2 * x + b * x + c
    
    print('before:', a.grad, b.grad, c.grad)
    grads = autograd.grad(y, [a, b, c])
    print('after :', grads[0], grads[1], grads[2])

    运行结果

    1.0.1
    True
    before: None None None
    after : tensor(2.) tensor(1.) tensor(1.)
  • 常用网络层API


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

pytorch基本数据类型和常用的操作 上一篇
图片拼接 下一篇