Variable¶
注解
请不要直接调用 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 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 的字符串。
- 代码示例
-
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
。
- 代码示例
-
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 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 的值。
参数
返回
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()