写在前面
PaddlePaddle即飞桨,我在学习这个框架的过程中,其实是很迷的,迷惑的地方就在它的静态图与动态图。于是,我打算好好整理整理,把两者的特点给大家解析一下,让新入门的开发者少走弯路。
1. 关于飞桨的版本
我查阅了飞桨的文档,PaddlePaddle1.3版本是没有动态图这个概念的,从PaddlePaddle1.4才开始出现动态图:
因此,要使用飞桨的动态图,或者说命令式编程时,飞桨的版本一定要在1.4以上
在开始之前,我再多提一句:
- 静态图: 描述(声明)式编程
- 动态图: 命令式编程
从编程范式上说,飞桨兼容支持声明式编程和命令式编程,通俗地讲即静态图和动态图。其实飞桨本没有图的概念,在飞桨的设计中,把一个神经网络定义成一段类似程序的描述,也就是用户在写程序的过程中,就定义了模型表达及计算。
在静态图的控制流实现方面,飞桨借助自己实现的控制流OP而不是python原生的if else和for循环,这使得在飞桨中的定义的program即一个网络模型,可以有一个内部的表达,是可以全局优化编译执行的。
考虑到开发者更愿意使用python原生控制流,飞桨也做了支持,并通过解释方式执行,这就是命令式编程模式。
但整体上,这两种编程范式是相对兼容统一的。飞桨将持续发布更完善的命令式编程功能,同时保持更强劲的性能。
2. 静态图
代码示例:
import paddle.fluid as fluid
import numpy as np
x_np = np.random.rand(1).astype("float32")
y_np = np.random.rand