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 ...
    所以,静态图使用起来更快,更高效;而动态图的优点是它更灵活,能给程序员更大的灵活度。


  • 相关阅读:
    ArcGIS案例学习笔记4_2
    ArcGIS案例学习笔记4_1
    ArcGIS案例学习笔记3_2
    ArcGIS案例学习笔记1_1
    ArcGIS案例学习1_2
    ArcGIS案例学习笔记2_1
    Window环境下配置Redis服务的方法及查看缓存数据的工具介绍
    C# 递归程序 获取某个节点下的全部子节点
    SQL查询中的in与join效率比较
    解决路由问题造成客户端无法访问服务器的方法之瞒天过海
  • 原文地址:https://www.cnblogs.com/dynmi/p/13645162.html
Copyright © 2011-2022 走看看