Variable¶
- 注意:
-
1. 请不要直接调用 Variable 的构造函数,因为这会造成严重的错误发生!
2. 请使用 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 paddle.enable_static() cur_program = paddle.static.Program() cur_block = cur_program.current_block() new_variable = cur_block.create_var(name="X", shape=[-1, 23, 48], dtype='float32')
- to_string ( throw_on_error, with_details=True ) ¶
获取该 Variable 的静态描述字符串。
- 参数:
-
throw_on_error (bool) - 是否在没有设置必需字段时抛出异常。
with_details (bool) - 值为true时,打印更多关于 Variable 的信息,如
error_clip
,stop_gradient
等。
返回:用于静态描述该 Variable 的字符串。
返回类型: str
抛出异常: ValueError
- 当 throw_on_error == true
,当没有设置任何必需的字段时,抛出 ValueError
。
- 示例代码
-
import paddle paddle.enable_static() cur_program = paddle.static.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("\n=============with detail===============\n") print(new_variable.to_string(True, True))
- clone ( self ) ¶
返回一个新的 Variable
, 其复制原 Variable
并且新的 Variable
也被保留在计算图中,即复制的新 Variable
也参与反向计算。调用 out = variable.clone()
与 out = assign(variable)
效果一样。
返回:复制的新 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
。
返回类型: 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。
返回类型: Variable
- 示例代码
-
import paddle paddle.enable_static() startup_prog = paddle.static.Program() main_prog = paddle.static.Program() with paddle.static.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))
- get_value ( scope=None ) ¶
获取 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 的值。
参数¶
返回¶
None
代码示例¶
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()
- ndimension ( self ) ¶
返回该 Variable 的维度,也称作rank。
返回: Variable
的维度
返回类型: Variable
- 示例代码
-
import paddle paddle.enable_static() x = paddle.static.data(name="x", shape=[10, 10], dtype='float32') print("Variable's number of dimension: ", x.ndimension()) # Variable's number of dimension: 2
- dim ( self ) ¶
返回该 Variable 的维度,也称作rank。
返回: Variable
的维度
返回类型: Variable
- 示例代码
-
import paddle paddle.enable_static() x = paddle.static.data(name="x", shape=[10, 10], dtype='float32') print("Variable's number of dim: ", x.dim()) # Variable's number of dim: 2
属性¶
- persistable ¶
注意:该属性我们即将废弃,此介绍仅为了帮助用户理解概念, 1.6版本后用户可以不再关心该属性
1. 该属性除参数以外默认值为
False
,而参数的该属性默认值为True
。
- name ¶
注意:静态图模式下,同一个 Block 中的两个或更多 Variable 拥有相同 name
将意味着他们会共享相同的内容。通常我们使用这种方式来实现参数共享。
此 Variable 的名字(str)。
- shape ¶
注意:该属性是只读属性。
此 Variable 在每个维度上的元素数量。
- dtype ¶
注意:该属性是只读属性。
此 Variable 的实际数据类型。
- lod_level ¶
注意:该属性是只读属性。
此 Variable 的 LoD
信息,关于 LoD
可以参考 api_fluid_LoDTensor 相关内容。
- type ¶
注意:该属性是只读属性。
此 Variable 的内存模型,例如是:api_fluid_LoDTensor ,或者SelectedRows。
- ndim ¶
注意:该属性是只读属性。
此 Variable 的维度,也称作rank。