zoukankan      html  css  js  c++  java
  • ML框架中静态图和动态图区别

    在现行的Python机器学习框架中,模型都是由两部分组成:张量Tensor和计算图。
    计算图决定了整个模型数据流动的方向,和数据的组合方式。Tensor是在计算图中流动的数据。如下图:

    流动的数据Tensor在所有现行框架中基本没什么区别,因为它就是单纯的数。各个框架之间的最大区别在于计算图的形式。这里被分成了动态图和静态图两种。
    我们知道,计算图的生命周期是这样的:
    Define -> Compile -> Use
    静态图,严格按照先定义计算图再使用的规则来。compile和use被分离开来。就是说你要先编译这个图,生成binary file(也就是写死了这个图),才能用它。
    动态图的编译和使用是一起发生的。就是说只有你在调用它进行计算时才会按情况调整后编译。

    举例分析

    • 1 模型输入
      在Tensorflow 中我们定义一个卷积神经网络模型时,要求提供输入图像的宽度和高度信息,如input_shape=(256,256,3)。在编译后它就写死了,只能喂这个尺寸的图像进去。而在Torch中定义一个卷积神经网络模型时候,我们不需要写出输入图像的宽度高度信息。后面使用的时候,在保证channel数正确的前提下,可以喂不同尺寸的图像进去(当然一个batch内的数据必须独立同分布)。

    • 2 内部结构
      这是一段torch的代码:

    import torch
    first_counter = torch.Tensor([0])
    second_counter = torch.Tensor([10])
    while (first_counter < second_counter)[0]:
        first_counter += 2
        second_counter += 1
    print(first_counter)
    print(second_counter)
    

    可以看出动态图的torch的计算流图是很自由的,可以变化,而tensorflow这样做的话会报错。

    优缺点分析

    静态图它是编译好再使用,所以它是Define -> Compile -> Use -> Use -> Use -> Use -> Use -> Use -> Use...
    动态图是每次使用前编译,所以它是Define -> Compile -> Use -> Define -> Compile -> Use -> Define -> Compile -> Use ...
    所以,静态图使用起来更快,更高效;而动态图的优点是它更灵活,能给程序员更大的灵活度。


  • 相关阅读:
    微信开放平台:OpenAPI、云开发与基础管理能力升级
    腾讯刘颖:从容器到低代码,腾讯云原生技术演进历程
    十年老站长心声:我为什么选择把 Hexo 网站迁移到 Webify
    腾讯云发布微搭生态开放计划,与合作伙伴携手共创产业未来
    SQL Server附加数据库出现错误5123的正确解决方法
    数据分页获取(二)
    Select语句
    数据分页获取(一)
    SQL Server中行转列原理
    QT实现Linux下系统监控小工具之二
  • 原文地址:https://www.cnblogs.com/dynmi/p/13645162.html
Copyright © 2011-2022 走看看