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')