• Pytorch:计算图与动态图机制


    计算图

    computational graph

    表示方法

    计算图是用来描述运算的有向无环图

    计算图有两个主要元素:结点(node)和边(edge)

    结点表示数据,如向量,矩阵,张量

    边表示运算,如加减乘除卷积等

    计算图不仅使计算显得简洁,更重要的是其表示梯度求导更为方便

    用计算图表示y=(x+w)*(w+1):     令 a=x+w    b=w+1     则y=a*b

    梯度求导结合题例的算式和计算图表示

                     

    从上述的计算图表示中,可以看到,除了x,w外的梯度都是可以用x,w或其xw梯度表示

    叶子结点

    叶子结点:用户创建的结点称为叶子结点,如x,w

    torch.tensor.is_leaf:用来查看是否为叶子结点

    叶子结点的用处:在反向传播之后,只有叶子结点的梯度会被保留,其他中间结点的梯度数据会被释放,以节省内存

    若要保存某特定结点的梯度,可以在运行反向传播函数前,补上一句tensor.retain_grad(),此次反向传播后,该tensor的梯度会被保留

    梯度方向

    torch.tensor.grad_fn:记录创建该张量时所用的方法(函数)及梯度方向

    作用:以便计算机知道求导某张量结点的梯度需用到的特定法则

              

    AddBackward代表a张量为相加形成,此时的梯度在反向传播中

    动态图

    dynamic graph

    动态图与静态图

    根据计算图的搭建方式,可以将计算图分为动态图和静态图。

    • 动态图采用搭建和运算同时进行:灵活、易调节(debug)
    • 静态图为先搭建,后运算:高效但不灵活

    pytorch采用动态图机制,tensorflow采用静态图机制

    如下左图,tensorflow的搭建机制为先确立好所有的路线流向,再将tensor数据注入跑通整个过程。这也是tensorflow的名字由来

    而下右图,pytorch中随着代码的数据定义与构建,同时也确立部分的计算图模块。

                

  • 相关阅读:
    Maven 打包指定子工程项目(springcloud分模块打包)
    linux常见问题: zip/unzip: command not found
    CentOS8安装jdk1.8
    nacos-docker镜像安装nacos并配置数据库
    浏览器的一个请求从发送到返回都经历了什么
    python之scrapy
    常见的爬虫与反爬虫斗争
    Python闭包与延迟绑定
    ip代理
    python编程:统计文件中单词出现次数
  • 原文地址:https://www.cnblogs.com/SakuraYuki/p/13341448.html
Copyright © 2020-2023  润新知