Variable¶
- class paddle.static. Variable ( block, type=<VarType.LOD_TENSOR: 7>, name=None, shape=None, dtype=None, lod_level=None, capacity=None, persistable=None, error_clip=None, stop_gradient=False, is_data=False, need_check_feed=False, belong_to_optimizer=False, **kwargs ) [源代码] ¶
注解
请不要直接调用 Variable 的构造函数,因为这会造成严重的错误发生!
在静态图形模式下:请使用 Block.create_var 创建一个静态的 Variable,该静态的 Variable 在使用 Executor 执行前是没有实际数据的。
在 Paddle 静态图模式中,OP 的每个输入和输出都是 Variable。多数情况下,Variable 用于保存不同种类的数据或训练标签。
Variable 总是属于某一个 Block。所有 Variable 都有其自己的 name
,不同 Block 中的两个 Variable 可以具有相同的名称。如果使用的 不是 Dygraph 模式,那么同一个 Block 中的两个或更多 Variable 拥有相同 name
将意味着他们会共享相同的内容。通常我们使用这种方式来实现 参数共享。
Variable 有很多种。它们每种都有自己的属性和用法。请参考 framework.proto 以获得详细信息。Variable 的大多数成员变量可以设置为 None
。它的意思是它不可用或稍后指定。
如果您希望创建一个 Variable 那么可以参考如下示例:
在静态图模型中:
代码示例¶
>>> import paddle.base as base
>>> cur_program = base.Program()
>>> cur_block = cur_program.current_block()
>>> new_variable = cur_block.create_var(name="X",
... shape=[-1, 23, 48],
... dtype='float32')
在动态图模型中:
代码示例¶
>>> import paddle.base as base
>>> import numpy as np
>>> import paddle
>>> with base.dygraph.guard():
... new_variable = paddle.to_tensor(np.arange(10))
方法¶
to_string(throw_on_error, with_details=True)¶
获取该 Variable 的静态描述字符串。
参数:
throw_on_error (bool) - 是否在没有设置必需字段时抛出异常。
with_details (bool) - 值为 true 时,打印更多关于 Variable 的信息,如
error_clip
,stop_gradient
等。
返回
用于静态描述该 Variable 的字符串。
代码示例
>>> import paddle.base as base
>>> import paddle
>>> paddle.enable_static()
>>> cur_program = base.Program()
>>> cur_block = cur_program.current_block()
>>> new_variable = cur_block.create_var(name="X",
... shape=[-1, 23, 48],
... dtype='float32')
>>> print(new_variable.to_string(True))
>>> print("=============with detail===============")
>>> print(new_variable.to_string(True, True))
name: "X"
type {
type: LOD_TENSOR
lod_tensor {
tensor {
data_type: FP32
dims: -1
dims: 23
dims: 48
}
}
}
stop_gradient: false
error_clip: None
clone(self)¶
返回一个新的 Variable
,其复制原 Variable
并且新的 Variable
也被保留在计算图中,即复制的新 Variable
也参与反向计算。调用 out = variable.clone()
与 out = assign(variable)
效果一样。
返回
复制的新 Variable
。
代码示例
>>> import paddle
>>> paddle.enable_static()
>>> # create a static Variable
>>> x = paddle.static.data(name='x', shape=[3, 2, 1])
>>> # create a cloned Variable
>>> y = x.clone()
detach(self)¶
返回一个新的 Variable
,并从当前计算图分离。
返回
与当前计算图分离的 Variable
。
代码示例
>>> import paddle
>>> paddle.enable_static()
>>> # create a static Variable
>>> x = paddle.static.data(name='x', shape=[3, 2, 1])
>>> # create a detached Variable
>>> y = x.detach()
astype(self, dtype)¶
将该 Variable 中的数据转换成目标 Dtype
。
参数:
返回 一个全新的转换了 Dtype
的 Variable。
代码示例
>>> import paddle
>>> import paddle.base as base
>>> paddle.enable_static()
>>> startup_prog = paddle.static.Program()
>>> main_prog = paddle.static.Program()
>>> with base.program_guard(startup_prog, main_prog):
... original_variable = paddle.static.data(name = "new_variable", shape=[2,2], dtype='float32')
... new_variable = original_variable.astype('int64')
... print("new var's dtype is: {}".format(new_variable.dtype))
...
new var's dtype is: paddle.int64
get_value(scope=None)¶
获取 Variable 的值。
参数
返回
Tensor, Variable 的值。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> import numpy as np
>>> paddle.enable_static()
>>> x = static.data(name="x", shape=[10, 10], dtype='float32')
>>> y = static.nn.fc(x, 10, name='fc')
>>> place = paddle.CPUPlace()
>>> exe = static.Executor(place)
>>> prog = paddle.static.default_main_program()
>>> exe.run(static.default_startup_program())
>>> inputs = np.ones((10, 10), dtype='float32')
>>> exe.run(prog, feed={'x': inputs}, fetch_list=[y, ])
>>> path = 'temp/tensor_'
>>> for var in prog.list_vars():
... if var.persistable:
... t = var.get_value()
... paddle.save(t, path+var.name+'.pdtensor')
>>> for var in prog.list_vars():
... if var.persistable:
... t_load = paddle.load(path+var.name+'.pdtensor')
... var.set_value(t_load)
set_value(value, scope=None)¶
将 value
设置为 Variable 的值。
参数
返回
无。
代码示例
>>> import paddle
>>> import paddle.static as static
>>> import numpy as np
>>> paddle.enable_static()
>>> x = static.data(name="x", shape=[10, 10], dtype='float32')
>>> y = static.nn.fc(x, 10, name='fc')
>>> place = paddle.CPUPlace()
>>> exe = static.Executor(place)
>>> prog = paddle.static.default_main_program()
>>> exe.run(static.default_startup_program())
>>> inputs = np.ones((10, 10), dtype='float32')
>>> exe.run(prog, feed={'x': inputs}, fetch_list=[y, ])
>>> path = 'temp/tensor_'
>>> for var in prog.list_vars():
... if var.persistable:
... t = var.get_value()
... paddle.save(t, path+var.name+'.pdtensor')
>>> for var in prog.list_vars():
... if var.persistable:
... t_load = paddle.load(path+var.name+'.pdtensor')
... var.set_value(t_load)
size(self)¶
返回该 Variable 中的数据元素数量,结果是一个 shape 为[1]的 int64 的 Variable
。
返回
Variable
:单元元素数量。
代码示例
>>> import paddle
>>> paddle.enable_static()
>>> # create a static Variable
>>> x = paddle.static.data(name='x', shape=[3, 2, 1])
>>> # get the number of elements of the Variable
>>> y = x.size()