Pytorch快速入门及在线体验

作者: 蓝桥云课 | 来源:发表于2017-09-29 15:23 被阅读340次

    本文搭配了Pytorch在线环境,可以直接在线体验。

    Pytorch是Facebook 的 AI 研究团队发布了一个基于 Python的科学计算包,旨在服务两类场合: 1.替代numpy发挥GPU潜能 ;2. 一个提供了高度灵活性和效率的深度学习实验性平台。

    在线体验练习地址:Pytorch快速上手/在线实验室

    1.Pytorch简介

    Pytorch是Facebook 的 AI 研究团队发布了一个基于 Python的科学计算包,旨在服务两类场合:

    • 替代numpy发挥GPU潜能(在线环境暂时不支持GPU)
    • 一个提供了高度灵活性和效率的深度学习实验性平台

    2.Pytorch特点及优势

    2.1 Pytorch特点

    • PyTorch 提供了运行在 GPU/CPU 之上、基础的张量操作库;
    • 可以内置的神经网络库;
    • 提供模型训练功能;
    • 支持共享内存的多进程并发(multiprocessing )库等;

    2.2 Pytorch特点

    处于机器学习第一大语言 Python 的生态圈之中,使得开发者能使用广大的 Python 库和软件;如 NumPy、SciPy 和 Cython(为了速度把 Python 编译成 C 语言);

    (最大优势)改进现有的神经网络,提供了更快速的方法——不需要从头重新构建整个网络,这是由于 PyTorch 采用了动态计算图(dynamic computational graph)结构,而不是大多数开源框架(TensorFlow、Caffe、CNTK、Theano 等)采用的静态计算图;

    提供工具包,如torch 、torch.nn、torch.optim等;

    3.Pytorch常用工具包

    • torch :类似 NumPy 的张量库,强 GPU 支持 ;
    • torch.autograd :基于 tape 的自动区别库,支持 torch 之中的所有可区分张量运行;
    • torch.nn :为最大化灵活性未涉及、与 autograd 深度整合的神经网络库;
    • torch.optim:与 torch.nn 一起使用的优化包,包含 SGD、RMSProp、LBFGS、Adam 等标准优化方式;
    • torch.multiprocessing: python 多进程并发,进程之间 torch Tensors 的内存共享;
    • torch.utils:数据载入器。具有训练器和其他便利功能;
    • torch.legacy(.nn/.optim) :处于向后兼容性考虑,从 Torch 移植来的 legacy 代码;

    4.tensor的创建

    • 导入pytorch的包 import torch
    • jupyter notebook
    import torch
    #创建一个5*3的随机矩阵并显示它(Shift+Enter)
    x=torch.rand(5,3)
    x
    

    5.tensor的运算

    y=torch.ones(5,3)
    #创建一个5*3的全是1矩阵并显示它
    y
    #计算两个矩阵相加(注意尺寸要一模一样)
    z=x+y
    z
    #矩阵乘法,矩阵转置
    q=x.mm(y.t())
    

    所有Numpy上面关于ndarray的运算全部可以应用于tensor

    有关tensor的运算参考 http://pytorch.org/docs/master/tensors.html

    • 从numpy到tensor的转换:torch.from_numpy(a)
    • 从tensor到numpy的转换:a.numpy()
    • tensor与numpy的最大不同:tensor可以在GPU上运算
    • 转到gpu上运算(x.cpu()转成cpu)
    if torch.cuda.is_available():
     x=x.cuda()
     y=y.cuda()
     print(x+y)
    

    6.Numpy桥

    将Torch的Tensor和numpy的array相互转换。注意Torch的Tensor和numpy的array会共享他们的存储空间,修改一个会导致另外的一个也被修改。

    # 此处演示tensor和numpy数据结构的相互转换
    a = torch.ones(5)
    b = a.numpy()
    
    # 此处演示当修改numpy数组之后,与之相关联的tensor也会相应的被修改
    a.add_(1)
    print(a)
    print(b)
    
    # 将numpy的Array转换为torch的Tensor
    import numpy as np
    a = np.ones(5)
    b = torch.from_numpy(a)
    np.add(a, 1, out=a)
    print(a)
    print(b)
    
    # 另外除了CharTensor之外,所有的tensor都可以在CPU运算和GPU预算之间相互转换
    # 使用CUDA函数来将Tensor移动到GPU上
    # 当CUDA可用时会进行GPU的运算
    if torch.cuda.is_available():
        x = x.cuda()
        y = y.cuda()
        x + y
    

    7.动态计算图(Dynamic Computation Graph)

    • 是pytorch的最主要特征
    • 让计算模型更灵活,复杂
    • 让反向传播算法随时进行

    7.1自动微分变量

    gradient梯度,传播的就是梯度

    定义一个自动微分变量

    from torch.autograd  import Variable
    #Variable:自动微分变量
    x=Variable(torch.ones(2,2),requires_grad=True)
    #把一个2*2的张量转变成微分的变量(添加节点,构造计算图)
    x
    
    y=x+2
    y.creator
    #y的父节点
    
    z=torch.mean(y*y)
    z.data
    

    与tensor不同之处:记录下所有的计算路径,在内存中构造计算图

    7.2多层运算

    z=m((x+2)*(x+2))

    此处输入图片的描述

    一个多层神经网络

    计算梯度:求导

    z.backward()
    #z对x的偏导
    #只有叶节点可以算grad。只有x有grad信息,因为它没有父节点
    print(z.grad)
    print(y.grad)
    print(x.grad)
    

    7.3更疯狂的函数依赖

    s=Variable(torch.FloatTensor([[0.01,0.02]]),requires_grad=True)
    x=Variable(torch.ones(2,2),requires_grad=True)
    for i in range(10):
      s=s.mm(x)
      #赋值的操作会多一个新节点出来
    z=torch.mean(s)
    
    #backward()求导计算
    z.backward()
    print(x.grad)
    print(s.grad)
    

    8.神经网络

    用 torch.nn 包可以进行神经网络的构建,点击实验楼开源软件库的教程:Pytorch快速上手/在线实验室即可马上查看并在线体验了;

    • 你也可以在线体验其他开源软件:实验楼软件库
    • 如果你对任何开源软件感兴趣,欢迎在下面留言,也欢迎提交你熟悉的开源软件。提交方法:软件库使用方法

    相关文章

      网友评论

        本文标题:Pytorch快速入门及在线体验

        本文链接:https://www.haomeiwen.com/subject/jakbsxtx.html