Variable
飞桨(PaddlePaddle,以下简称Paddle)中的 Variable
可以包含任何类型的值变量,提供的API中用到的类型是 Tensor 。
后续的文档介绍中提到的 Variable
基本等价于 Tensor (特殊的地方会标注说明)。
在 Paddle 中存在三种 Variable
:
1. 模型中的可学习参数
模型中的可学习参数(包括网络权重、偏置等)生存期和整个训练任务一样长,会接受优化算法的更新,在 Paddle中以 Variable 的子类 Parameter 表示。
在Paddle中可以通过 fluid.layers.create_parameter
来创建可学习参数:
w = fluid.layers.create_parameter(name="w",shape=[1],dtype='float32')
Paddle 为大部分常见的神经网络基本计算模块都提供了封装。以最简单的全连接模型为例,下面的代码片段会直接为全连接层创建连接权值(W)和偏置( bias )两个可学习参数,无需显式地调用 Parameter 相关接口来创建。
import paddle.fluid as fluid
y = fluid.layers.fc(input=x, size=128, bias_attr=True)
2. 占位 Variable
在声明式编程模式(静态图)模式下,组网的时候通常不知道实际输入的信息,此刻需要一个占位的 Variable
,表示一个待提供输入的 Variable
Paddle 中使用 fluid.data
来接收输入数据, fluid.data
需要提供输入 Tensor 的形状信息,当遇到无法确定的维度时,相应维度指定为 None ,如下面的代码片段所示:
import paddle.fluid as fluid
#定义x的维度为[3,None],其中我们只能确定x的第一的维度为3,第二个维度未知,要在程序执行过程中才能确定
x = fluid.data(name="x", shape=[3,None], dtype="int64")
#若图片的宽度和高度在运行时可变,将宽度和高度定义为None。
#shape的三个维度含义分别是:batch_size, channel、图片的宽度、图片的高度
b = fluid.data(name="image",shape=[None, 3,None,None],dtype="float32")
其中,dtype=“int64”表示有符号64位整数数据类型,更多Fluid目前支持的数据类型请查看: Paddle目前支持的数据类型 。
3. 常量 Variable
Fluid 通过 fluid.layers.fill_constant
来实现常量Variable,用户可以指定内部包含Tensor的形状,数据类型和常量值。代码实现如下所示:
import paddle.fluid as fluid
data = fluid.layers.fill_constant(shape=[1], value=0, dtype='int64')