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 ) [源代码]

备注

  1. 请不要直接调用 Variable 的构造函数,因为这会造成严重的错误发生!

  2. 在静态图形模式下:请使用 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

返回 一个全新的转换了 Dtypeapi_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 的值。如果 scopeNone,通过 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 中。如果 scopeNone,通过 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

属性

persistable

备注

  1. 该属性我们即将废弃,此介绍仅为了帮助用户理解概念,1.6 版本后用户可以不再关心该属性

  2. 该属性除参数以外默认值为 False,而参数的该属性默认值为 True

api_guide_Variable 是否是长期存活的 api_guide_Variable

name

备注

静态图模式下,同一个 api_guide_Block 中的两个或更多 api_guide_Variable 拥有相同 name 将意味着他们会共享相同的内容。通常我们使用这种方式来实现参数共享。

api_guide_Variable 的名字(str)。

shape

备注

该属性是只读属性。

api_guide_Variable 在每个维度上的元素数量。

dtype

备注

该属性是只读属性。

api_guide_Variable 的实际数据类型。

lod_level

备注

该属性是只读属性。

api_guide_VariableLoD 信息。

type

备注

该属性是只读属性。

api_guide_Variable 的内存模型,例如是:DenseTensor,或者 SelectedRows

ndim

备注

该属性是只读属性。

api_guide_Variable 的维度,也称作 rank。