Variable
- class paddle.static. Variable ( block, type=<VarType.DENSE_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 的每个输入和输出都是 api_guide_Variable。多数情况下,api_guide_Variable 用于保存不同种类的数据或训练标签。
api_guide_Variable 总是属于某一个 api_guide_Block。所有 api_guide_Variable 都有其自己的 name
,不同 api_guide_Block 中的两个 api_guide_Variable 可以具有相同的名称。如果使用的 不是 Dygraph 模式,那么同一个 api_guide_Block 中的两个或更多 api_guide_Variable 拥有相同 name
将意味着他们会共享相同的内容。通常我们使用这种方式来实现 参数共享。
api_guide_Variable 有很多种。它们每种都有自己的属性和用法。请参考 framework.proto 以获得详细信息。api_guide_Variable 的大多数成员变量可以设置为 None
。它的意思是它不可用或稍后指定。
如果您希望创建一个 api_guide_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)
获取该 api_guide_Variable 的静态描述字符串。
参数:
throw_on_error (bool) - 是否在没有设置必需字段时抛出异常。
with_details (bool) - 值为 true 时,打印更多关于 api_guide_Variable 的信息,如
error_clip
,stop_gradient
等。
返回
用于静态描述该 api_guide_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: DENSE_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)
将该 api_guide_Variable 中的数据转换成目标 Dtype
。
参数:
self ( api_guide_Variable ) - 当前 api_guide_Variable,用户不需要传入。
dtype (int | float | float64) - 希望转换成的
Dtype
。
返回 一个全新的转换了 Dtype
的 api_guide_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)
获取 api_guide_Variable 的值。
参数
scope ( Scope,可选 ) - 从指定的
scope
中获取 api_guide_Variable 的值。如果scope
为None
,通过 paddle.static.global_scope() 获取全局/默认作用域实例,并从中获取 api_guide_Variable 的值;否则,从指定的scope
中获取 api_guide_Variable 的值。
返回
Tensor, api_guide_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
设置为 api_guide_Variable 的值。
参数
value ( Tensor|ndarray ) - api_guide_Variable 的值。
scope ( Scope,可选 ) - 将 api_guide_Variable 的值设置到指定的
scope
中。如果scope
为None
,通过 paddle.static.global_scope() 获取全局/默认作用域实例,并将 api_guide_Variable 的值设置到这个用域实例中;否则,将 api_guide_Variable 的值设置到指定的scope
中。
返回
无。
代码示例
>>> 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)
返回该 api_guide_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)
返回该 api_guide_Variable 的维度,也称作 rank。
返回
Variable
的维度。
代码示例
>>> import paddle
>>> paddle.enable_static()
>>> # create a static Variable
>>> x = paddle.static.data(name='x', shape=[3, 2, 1])
>>> # print the dimension of the Variable
>>> print(x.ndimension())
3
dim(self)
返回该 api_guide_Variable 的维度,也称作 rank。
返回 Variable
的维度。
代码示例
>>> import paddle
>>> paddle.enable_static()
>>> # create a static Variable
>>> x = paddle.static.data(name='x', shape=[3, 2, 1])
>>> # print the dimension of the Variable
>>> print(x.dim())
3