diff --git a/docs/api/paddle/static/InputSpec_cn.rst b/docs/api/paddle/static/InputSpec_cn.rst index bc06b1494f7..aee53280ec6 100644 --- a/docs/api/paddle/static/InputSpec_cn.rst +++ b/docs/api/paddle/static/InputSpec_cn.rst @@ -24,15 +24,7 @@ InputSpec 代码示例 :::::::::::: -.. code-block:: python - - from paddle.static import InputSpec - - input = InputSpec([None, 784], 'float32', 'x') - label = InputSpec([None, 1], 'int64', 'label') - print(input) # InputSpec(shape=(-1, 784), dtype=paddle.float32, name=x) - print(label) # InputSpec(shape=(-1, 1), dtype=paddle.int64, name=label) - +COPY-FROM: paddle.static.InputSpec 方法 :::::::::::: @@ -53,15 +45,7 @@ from_tensor(tensor, name=None) **代码示例** -.. code-block:: python - - import numpy as np - import paddle - from paddle.static import InputSpec - - x = paddle.to_tensor(np.ones([2, 2], np.float32)) - x_spec = InputSpec.from_tensor(x, name='x') - print(x_spec) # InputSpec(shape=(2, 2), dtype=paddle.float32, name=x) +COPY-FROM: paddle.static.InputSpec.from_tensor from_numpy(ndarray, name=None) @@ -81,14 +65,7 @@ from_numpy(ndarray, name=None) **代码示例** -.. code-block:: python - - import numpy as np - from paddle.static import InputSpec - - x = np.ones([2, 2], np.float32) - x_spec = InputSpec.from_numpy(x, name='x') - print(x_spec) # InputSpec(shape=(2, 2), dtype=paddle.float32, name=x) +COPY-FROM: paddle.static.InputSpec.from_numpy batch(batch_size) @@ -106,13 +83,7 @@ batch(batch_size) **代码示例** -.. code-block:: python - - from paddle.static import InputSpec - - x_spec = InputSpec(shape=[64], dtype='float32', name='x') - x_spec.batch(4) - print(x_spec) # InputSpec(shape=(4, 64), dtype=paddle.float32, name=x) +COPY-FROM: paddle.static.InputSpec.batch unbatch() @@ -127,10 +98,4 @@ unbatch() **代码示例** -.. code-block:: python - - from paddle.static import InputSpec - - x_spec = InputSpec(shape=[4, 64], dtype='float32', name='x') - x_spec.unbatch() - print(x_spec) # InputSpec(shape=(64,), dtype=paddle.float32, name=x) +COPY-FROM: paddle.static.InputSpec.unbatch diff --git a/docs/api/paddle/static/Program_cn.rst b/docs/api/paddle/static/Program_cn.rst index 0d1ca36c986..b994106f9f9 100644 --- a/docs/api/paddle/static/Program_cn.rst +++ b/docs/api/paddle/static/Program_cn.rst @@ -12,7 +12,7 @@ Program Program 是 Paddle 对于计算图的一种静态描述,使用 Program 的构造函数可以创建一个 Program。Program 中包括至少一个 :ref:`api_guide_Block`,当 :ref:`api_guide_Block` 中存在条件选择的控制流 OP(例如 :ref:`cn_api_fluid_layers_While` 等)时,该 Program 将会含有嵌套着的 :ref:`api_guide_Block` 即控制流外部的 :ref:`api_guide_Block` 将包含着控制流内部的 :ref:`api_guide_Block`,而嵌套的 :ref:`api_guide_Block` 的元素访问控制将由具体的控制流 OP 来决定。关于 Program 具体的结构和包含的类型请参阅 `framework.proto `_ 。 -一个 Program 的集合通常包含初始化程序(startup_program)与主程序(main_program),初始化程序是一个包含一些初始化工作的 Program,主程序将会包含用来训练的网络结构和变量,在使用同一个 :ref:`api_guide_executor` 执行时他们会共享初始化工作的结果,例如初始化的参数。一个 Program 的集合可以被用来测试或者训练,被用来训练时,``Paddle`` 将会利用所有用户使用的 OP 和变量来搭建一个训练网络,被用来测试时,可以通过调用 Program 相关的接口例如:`clone` 剪去一些与测试无关的 OP 和变量,比如反向传播的 OP 和变量。 +一个 Program 的集合通常包含初始化程序(startup_program)与主程序(main_program),初始化程序是一个包含一些初始化工作的 Program,主程序将会包含用来训练的网络结构和变量,在使用同一个 :ref:`api_guide_executor` 执行时他们会共享初始化工作的结果,例如初始化的参数。一个 Program 的集合可以被用来测试或者训练,被用来训练时,``Paddle`` 将会利用所有用户使用的 OP 和变量来搭建一个训练网络,被用来测试时,可以通过调用 Program 相关的接口例如:``clone`` 剪去一些与测试无关的 OP 和变量,比如反向传播的 OP 和变量。 返回 @@ -22,22 +22,7 @@ Program,创建的空的 Program。 代码示例 :::::::::: -.. code-block:: python - - import paddle - import paddle.static as static - - paddle.enable_static() - - main_program = static.Program() - startup_program = static.Program() - with static.program_guard(main_program=main_program, startup_program=startup_program): - x = static.data(name="x", shape=[-1, 784], dtype='float32') - y = static.data(name="y", shape=[-1, 1], dtype='int32') - z = static.nn.fc(name="fc", x=x, size=10, activation="relu") - - print("main program is: {}".format(main_program)) - print("start up program is: {}".format(startup_program)) +COPY-FROM: paddle.static.Program 方法 @@ -50,7 +35,7 @@ to_string(throw_on_error, with_details=False) **参数** - **throw_on_error** (bool) - 是否在没有设置必需字段时抛出异常。 - - **with_details** (bool) - 值为 true 时,打印更多关于变量和参数的信息,如 trainable, optimize_attr 等。 + - **with_details** (bool) - 值为 true 时,打印更多关于变量和参数的信息,如 ``trainable``, ``optimize_attr`` 等。 **返回** @@ -59,20 +44,7 @@ str,由 Program 转换得到的字符串。 **代码示例** -.. code-block:: python - - import paddle - import paddle.static as static - - paddle.enable_static() - - prog = static.default_main_program() - x = static.data(name="X", shape=[2,3], dtype="float32") - pred = static.nn.fc(x, size=3) - prog_string = prog.to_string(throw_on_error=True, with_details=False) - prog_string_with_details = prog.to_string(throw_on_error=False, with_details=True) - print("program string without detail: {}".format(prog_string)) - print("program string with detail: {}".format(prog_string_with_details)) +COPY-FROM: paddle.static.Program.to_string clone(for_test=False) ''''''''' @@ -82,29 +54,16 @@ clone(for_test=False) 2. 此 API 当 ``for_test=True`` 时将会裁剪部分 OP 和变量。为防止错误的裁剪,推荐在 :ref:`cn_api_fluid_backward_append_backward` 和执行优化器之前使用;``clone(for_test=True)`` 。 -当 ``for_test=True`` 时创建一个新的、仅包含当前 Program 前向内容的 Program。否则创建一个新的,和当前 Program 完全相同的 Program +当 ``for_test=True`` 时创建一个新的、仅包含当前 Program 前向内容的 Program。否则创建一个新的和当前 Program 完全相同的 Program。 有些 OP,在训练和测试之间的行为是不同的,比如 :ref:`cn_api_fluid_layers_batch_norm`。它们有一个属性 ``is_test`` 来控制行为。当 ``for_test=True`` 时,此方法将把它们的 ``is_test`` 属性更改为 True。 - 克隆 Program 用于训练时,将 ``for_test`` 设置为 False。 -- 克隆 Program 用于测试时,将 ``for_test`` 设置为 True。虽然在这种情况下,如果在使用了优化器之后调用 ``clone`` 我们依旧会对 Program 当中反向执行以及优化器相关的内容进行自动裁剪,但是,我们强烈建议在使用优化器之前使用 ``clone`` 例如如果使用的是 :ref:`cn_api_fluid_optimizer_Momentum` 可以这样去使用: +- 克隆 Program 用于测试时,将 ``for_test`` 设置为 True。虽然在这种情况下,如果在使用了优化器之后调用 ``clone`` 我们依旧会对 Program 当中反向执行以及优化器相关的内容进行自动裁剪,但是,我们强烈建议在使用优化器之前使用 ``clone`` 例如如果使用的是 :ref:`cn_api_paddle_optimizer_Momentum` 可以这样去使用: **代码示例** -.. code-block:: python - - import paddle - import paddle.static as static - - paddle.enable_static() - - img = static.data(name='image', shape=[None, 784]) - pred = static.nn.fc(x=img, size=10, activation='relu') - loss = paddle.mean(pred) - # Here we use clone before Momentum - test_program = static.default_main_program().clone(for_test=True) - optimizer = paddle.optimizer.Momentum(learning_rate=0.01, momentum=0.9) - optimizer.minimize(loss) +COPY-FROM: paddle.static.Program.clone:code-example-1 **参数** @@ -120,116 +79,15 @@ Program,当 ``for_test=True`` 时返回一个新的、仅包含当前 Program .. note:: Program 在 clone 后的顺序可能不同,这不会影响的训练或测试进程。在下面的示例中,我们提供了一个简单的方法 print_prog(Program)来打印程序描述,以确保 clone 后仍能得到同样的打印结果: -.. code-block:: python - - def print_prog(prog): - for name, value in sorted(prog.block(0).vars.items()): - print(value) - for op in prog.block(0).ops: - print("op type is {}".format(op.type)) - print("op inputs are {}".format(op.input_arg_names)) - print("op outputs are {}".format(op.output_arg_names)) - for key, value in sorted(op.all_attrs().items()): - if key not in ['op_callstack', 'op_role_var']: - print(" [ attrs: {}: {} ]".format(key, value)) +COPY-FROM: paddle.static.Program.clone:code-example-2 1. 克隆一个 Program,示例代码如下。 -.. code-block:: python - - import paddle - import paddle.static as static - import paddle.utils as utils - import paddle.nn.functional as F - - paddle.enable_static() - - def print_prog(prog): - for name, value in sorted(prog.block(0).vars.items()): - print(value) - for op in prog.block(0).ops: - print("op type is {}".format(op.type)) - print("op inputs are {}".format(op.input_arg_names)) - print("op outputs are {}".format(op.output_arg_names)) - for key, value in sorted(op.all_attrs().items()): - if key not in ['op_callstack', 'op_role_var']: - print(" [ attrs: {}: {} ]".format(key, value)) - - train_program = static.Program() - startup_program = static.Program() - - # startup_program is used to do some parameter init work, - # and main program is used to hold the network - with static.program_guard(train_program, startup_program): - with utils.unique_name.guard(): - img = static.data(name='image', shape=[None, 784]) - hidden = static.nn.fc(x=img, size=200, activation='relu') - hidden = F.dropout(hidden, p=0.5) - loss = F.cross_entropy( - input=static.nn.fc(x=hidden, size=10, activation='softmax'), - label=static.data(name='label', shape=[1], dtype='int64')) - avg_loss = paddle.mean(loss) - test_program = train_program.clone(for_test=True) - print_prog(test_program) - - # Due to parameter sharing usage for train and test, so we need to use startup program of train - # instead of using test startup program, while nothing is in test's startup program - - # In Paddle we will share weights by using the same Tensor name. In train and test program - # all parameters will have the same name and this can make train and test program sharing parameters, - # that's why we need to use startup program of train. And for startup program of test, it has nothing, - # since it is a new program. - - with static.program_guard(train_program, startup_program): - with utils.unique_name.guard(): - sgd = paddle.optimizer.SGD(learning_rate=1e-3) - sgd.minimize(avg_loss) +COPY-FROM: paddle.static.Program.clone:code-example-3 2. 如果分别运行 train Program 和 test Program,则可以不使用 clone。 -.. code-block:: python - - import paddle - import paddle.static as static - import paddle.utils as utils - import paddle.nn.functional as F - - paddle.enable_static() - - def print_prog(prog): - for name, value in sorted(prog.block(0).vars.items()): - print(value) - for op in prog.block(0).ops: - print("op type is {}".format(op.type)) - print("op inputs are {}".format(op.input_arg_names)) - print("op outputs are {}".format(op.output_arg_names)) - for key, value in sorted(op.all_attrs().items()): - if key not in ['op_callstack', 'op_role_var']: - print(" [ attrs: {}: {} ]".format(key, value)) - - def network(): - img = static.data(name='image', shape=[None, 784]) - hidden = static.nn.fc(x=img, size=200, activation='relu') - hidden = F.dropout(hidden, p=0.5) - loss = F.cross_entropy( - input=static.nn.fc(x=hidden, size=10, activation='softmax'), - label=static.data(name='label', shape=[1], dtype='int64')) - avg_loss = paddle.mean(loss) - return avg_loss - - train_program_2 = static.Program() - startup_program_2 = static.Program() - test_program_2 = static.Program() - with static.program_guard(train_program_2, startup_program_2): - with utils.unique_name.guard(): - avg_loss = network() - sgd = paddle.optimizer.SGD(learning_rate=1e-3) - sgd.minimize(avg_loss) - # the test startup program is not used. - with static.program_guard(test_program_2, startup_program_2): - with utils.unique_name.guard(): - avg_loss = network() - print_prog(test_program_2) +COPY-FROM: paddle.static.Program.clone:code-example-4 上边两个代码片段生成和打印的 Program 是一样的。 @@ -241,7 +99,7 @@ Program,当 ``for_test=True`` 时返回一个新的、仅包含当前 Program **参数** - - **binary_str_type** (str) – `protobuf `_ 二进制字符串。 + - **binary_str** (str) – `protobuf `_ 二进制字符串。 **返回** @@ -249,27 +107,7 @@ Program,反序列化后的 Program。 **代码示例** -.. code-block:: python - - import paddle - import paddle.static as static - - paddle.enable_static() - - startup_prog = static.Program() - main_prog = static.Program() - with static.program_guard(startup_prog, main_prog): - x = static.data(name='X', shape=[1000, 784], dtype='float32') - - y = static.data(name='Y', shape=[784, 100], dtype='float32') - - z = paddle.matmul(x=x, y=y) - - binary_str = static.default_main_program().desc.serialize_to_string() - prog_restored = static.default_main_program().parse_from_string(binary_str) - - print(static.default_main_program()) - print(prog_restored) +COPY-FROM: paddle.static.Program.parse_from_string 属性 :::::::::::: @@ -284,19 +122,7 @@ int,该 Program 中的 :ref:`api_guide_Block` 的个数。 **代码示例** -.. code-block:: python - - import paddle - import paddle.static as static - - paddle.enable_static() - - prog = static.default_main_program() - num_blocks = prog.num_blocks - print(num_blocks) - - # print result: - # 1 +COPY-FROM: paddle.static.Program.num_blocks random_seed ''''''''' @@ -312,28 +138,7 @@ int64,该 Program 中当前正在使用的 random seed。 **代码示例** -.. code-block:: python - - import paddle - import paddle.static as static - import paddle.nn.functional as F - - paddle.enable_static() - - prog = static.default_main_program() - random_seed = prog.random_seed - x_var = static.data(name="X", shape=[3,3], dtype="float32") - print(random_seed) - ## 0 - ## the default random seed is 0 - - # Here we need to set random seed before we use paddle.nn.functional.dropout - prog.random_seed = 1 - z_var = F.dropout(x_var, 0.7) - - print(prog.random_seed) - ## 1 - ## the random seed is change to 1 +COPY-FROM: paddle.static.Program.random_seed global_block() ''''''''' @@ -346,22 +151,13 @@ global_block() **代码示例** -.. code-block:: python - - import paddle - import paddle.static as static - - paddle.enable_static() - - prog = static.default_main_program() - gb_block = prog.global_block() - print(gb_block) +COPY-FROM: paddle.static.Program.global_block block(index) ''''''''' -返回该 Program 中,``index`` 指定的 :ref:`api_guide_Block` 。 ``index`` 类型为 int。 +返回该 Program 中,``index`` 指定的 :ref:`api_guide_Block` 。 ``index`` 类型为 ``int`` 。 **参数** @@ -373,16 +169,8 @@ block(index) **代码示例** -.. code-block:: python - - import paddle - import paddle.static as static - - paddle.enable_static() +COPY-FROM: paddle.static.Program.block - prog = static.default_main_program() - block_0 = prog.block(0) - print(block_0) current_block() ''''''''' @@ -395,16 +183,8 @@ current_block() **代码示例** -.. code-block:: python +COPY-FROM: paddle.static.Program.current_block - import paddle - import paddle.static as static - - paddle.enable_static() - - prog = static.default_main_program() - current_blk = prog.current_block() - print(current_blk) list_vars() ''''''''' @@ -417,21 +197,8 @@ Generator,会 yield 每个 Program 中的变量。 **代码示例** -.. code-block:: python - - import paddle - import paddle.static as static +COPY-FROM: paddle.static.Program.list_vars - paddle.enable_static() - - prog = static.default_main_program() - img = static.data(name='img', shape=[None, 1,28,28], dtype='float32') - label = static.data(name='label', shape=[None,1], dtype='int64') - for var in prog.list_vars(): - print(var) - - # var img : LOD_TENSOR.shape(-1, 1, 28, 28).dtype(float32).stop_gradient(True) - # var label : LOD_TENSOR.shape(-1, 1).dtype(int64).stop_gradient(True) all_parameters() ''''''''' @@ -444,31 +211,8 @@ list[ :ref:`api_guide_parameter` ],一个包含当前 Program 中所有参数 **代码示例** -.. code-block:: python - - import paddle - import paddle.static as static +COPY-FROM: paddle.static.Program.all_parameters - paddle.enable_static() - - program = static.default_main_program() - data = static.data(name='x', shape=[None, 13], dtype='float32') - hidden = static.nn.fc(x=data, size=10) - loss = paddle.mean(hidden) - paddle.optimizer.SGD(learning_rate=0.01).minimize(loss) - - for param in program.all_parameters(): - print(param) - - # Here will print all parameters in current program, in this example, - # the result is like: - # - # persist trainable param fc_0.w_0 : LOD_TENSOR.shape(13, 10).dtype(float32).stop_gradient(False) - # persist trainable param fc_0.b_0 : LOD_TENSOR.shape(10,).dtype(float32).stop_gradient(False) - # - # Here print(param) will print out all the properties of a parameter, - # including name, type and persistable, you can access to specific - # property of a parameter, such as param.name, param.type state_dict(mode='all', scope=None) ''''''''' @@ -477,7 +221,7 @@ state_dict(mode='all', scope=None) **参数** - - **mode** (str,可选) - 获取何种持久性变量。目前支持以下选项:(1) 'opt':获得优化器的持久性变量放在 dict 结构中;(2) 'param':获得组网中的持久性变量放在 dict 结构中,不包含优化器中的持久性变量;(3) 'all':获得组网和优化器中的持久性变量放在 dict 结构中;默认值为'all'。 + - **mode** (str,可选) - 获取何种持久性变量。目前支持以下选项:(1) ``opt``:获得优化器的持久性变量放在 ``dict`` 结构中;(2) ``param``:获得组网中的持久性变量放在 ``dict`` 结构中,不包含优化器中的持久性变量;(3) ``all``:获得组网和优化器中的持久性变量放在 dict 结构中;默认值为 ``all``。 - **scope** (Scope,可选) - 如果 scope 为 ``None``,通过 `paddle.static.global_scope()` 获取全局/默认作用域实例,并从中获取 ``state_dict``;否则从指定的 ``scope`` 获取 ``state_dict``。默认值为 ``None`` 。 **返回** @@ -486,24 +230,8 @@ dict,包含持久性变量的 dict,键值是持久性变量的名字,值 **代码示例** -.. code-block:: python - - import paddle - import paddle.static as static - - paddle.enable_static() - - x = static.data(name="x", shape=[10, 10], dtype='float32') - y = static.nn.fc(x, 10) - z = static.nn.fc(y, 10) +COPY-FROM: paddle.static.Program.state_dict - place = paddle.CPUPlace() - exe = static.Executor(place) - exe.run(static.default_startup_program()) - prog = static.default_main_program() - - path = "./temp/model.pdparams" - paddle.save(prog.state_dict(), path) set_state_dict(state_dict, scope=None) ''''''''' @@ -521,23 +249,4 @@ set_state_dict(state_dict, scope=None) **代码示例** -.. code-block:: python - - import paddle - import paddle.static as static - - paddle.enable_static() - - x = static.data(name="x", shape=[10, 10], dtype='float32') - y = static.nn.fc(x, 10) - z = static.nn.fc(y, 10) - - place = paddle.CPUPlace() - exe = static.Executor(place) - exe.run(static.default_startup_program()) - prog = static.default_main_program() - - path = "./temp/model.pdparams" - paddle.save(prog.state_dict(), path) - state_dict_load = paddle.load(path) - prog.set_state_dict(state_dict_load) +COPY-FROM: paddle.static.Program.set_state_dict diff --git a/docs/api/paddle/static/Variable_cn.rst b/docs/api/paddle/static/Variable_cn.rst index c43a0a7222b..c8f20e05ab5 100644 --- a/docs/api/paddle/static/Variable_cn.rst +++ b/docs/api/paddle/static/Variable_cn.rst @@ -19,19 +19,17 @@ Variable 如果您希望创建一个 :ref:`api_guide_Variable` 那么可以参考如下示例: +在静态图模型中: + 代码示例 :::::::::::: - .. code-block:: python - - import paddle +COPY-FROM: paddle.static.Variable:code-example-1 - 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') +代码示例 +:::::::::::: +COPY-FROM: paddle.static.Variable:code-example-2 方法 :::::::::::: @@ -51,21 +49,7 @@ to_string(throw_on_error, with_details=True) **代码示例** - .. code-block:: python - - 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)) +COPY-FROM: paddle.static.Variable.to_string clone(self) @@ -78,17 +62,7 @@ clone(self) 复制的新 ``Variable``。 **代码示例** - .. code-block:: python - - 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() +COPY-FROM: paddle.static.Variable.clone detach(self) @@ -118,21 +92,8 @@ astype(self, dtype) **返回** 一个全新的转换了 ``Dtype`` 的 :ref:`api_guide_Variable`。 - - **代码示例** - .. code-block:: python - - 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)) +COPY-FROM: paddle.static.Variable.astype get_value(scope=None) @@ -149,34 +110,7 @@ get_value(scope=None) Tensor, :ref:`api_guide_Variable` 的值。 **代码示例** - -.. code-block:: python - - 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) +COPY-FROM: paddle.static.Variable.get_value set_value(value, scope=None) @@ -195,33 +129,7 @@ set_value(value, scope=None) **代码示例** -.. code-block:: python - - 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) +COPY-FROM: paddle.static.Variable.set_value size(self) @@ -233,7 +141,6 @@ size(self) ``Variable``:单元元素数量。 - **代码示例** COPY-FROM: paddle.static.Variable.size @@ -248,15 +155,7 @@ ndimension(self) ``Variable`` 的维度。 **代码示例** - .. code-block:: python - - 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 +COPY-FROM: paddle.static.Variable.ndimension dim(self) @@ -268,15 +167,7 @@ dim(self) ``Variable`` 的维度。 **代码示例** - .. code-block:: python - - 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 +COPY-FROM: paddle.static.Variable.dim 属性 diff --git a/docs/api/paddle/static/nn/cond_cn.rst b/docs/api/paddle/static/nn/cond_cn.rst index 94d75065dd4..55cae64912b 100644 --- a/docs/api/paddle/static/nn/cond_cn.rst +++ b/docs/api/paddle/static/nn/cond_cn.rst @@ -4,13 +4,13 @@ cond ------------------------------- -.. py:function:: paddle.static.nn.cond(pred, true_fn=None, false_fn=None, name=None) +.. py:function:: paddle.static.nn.cond(pred, true_fn=None, false_fn=None, name=None, return_names=None) -如果 ``pred`` 是 ``True``,该 API 返回 ``true_fn()``,否则返回 ``false_fn()`` 。 -用户如果不想在 ``callable`` 中做任何事,可以把 ``true_fn`` 或 ``false_fn`` 设为 ``None``,此时本 API 会把该 ``callable`` 视为简单返回 ``None`` 。 +如果 ``pred`` 是 ``True``,该 API 返回 ``true_fn()``,否则返回 ``false_fn()``。 +用户如果不想在 ``callable`` 中做任何事,可以把 ``true_fn`` 或 ``false_fn`` 设为 ``None``,此时本 API 会把该 ``callable`` 视为简单返回 ``None``。 -``true_fn`` 和 ``false_fn`` 需要返回同样嵌套结构(nest structure)的 Tensor,如果不想返回任何值也可都返回 ``None`` 。 +``true_fn`` 和 ``false_fn`` 需要返回同样嵌套结构(nest structure)的 Tensor,如果不想返回任何值也可都返回 ``None``。 PaddlePaddle 里 Tensor 的嵌套结构是指一个 Tensor,或者 Tensor 的元组(tuple),或者 Tensor 的列表(list)。 .. note:: @@ -18,60 +18,22 @@ PaddlePaddle 里 Tensor 的嵌套结构是指一个 Tensor,或者 Tensor 的 2. 本接口在动态图和静态图模式下都可以运行,在动态图情况下就只会按 ``pred`` 条件运行其中一支分支。 3. 静态图模式下,因为各个分支都要参与组网,因此不论运行哪个分支,在 ``true_fn`` 和 ``false_fn`` 内外创建的 Tensor 和 Op 都会组网,即 PaddlePaddle 并不是惰性语法(lazy semantics)。例如 - .. code-block:: python - - import paddle - - a = paddle.zeros((1, 1)) - b = paddle.zeros((1, 1)) - c = a * b - out = paddle.static.nn.cond(a < b, lambda: a + c, lambda: b * b) + COPY-FROM: paddle.static.nn.cond:code-example-1 不管 ``a < b`` 是否成立,``c = a * b`` 都会被组网且运行,``a + c`` 和 ``b * b`` 都会参与组网,只是组网后运行时只会运行条件对应的分支。 参数 ::::::::: - **pred** (Tensor) - 一个元素个数为 1 的布尔型(boolean)的 Tensor ( 0-D Tensor 或者形状为 [1] ),该布尔值决定要返回 ``true_fn`` 还是 ``false_fn`` 的运行结果。 - - **true_fn** (callable) - 一个当 ``pred`` 是 ``True`` 时被调用的 callable,默认值:``None`` 。 - - **false_fn** (callable) - 一个当 ``pred`` 是 ``False`` 时被调用的 callable,默认值:``None`` 。 - - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。 + - **true_fn** (callable) - 一个当 ``pred`` 是 ``True`` 时被调用的 callable,默认值:``None``。 + - **false_fn** (callable) - 一个当 ``pred`` 是 ``False`` 时被调用的 callable,默认值:``None``。 + - **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值:``None``。 + - **return_names** (sequence of string,可选) - 通常情况下,用户不必设置此参数。字符串表示返回的变量的名称。序列的结构必须与 ``true_fn`` 和 ``false_fn`` 的返回值相同,默认值:``None``。 返回 ::::::::: -Tensor|list(Tensor)|tuple(Tensor),如果 ``pred`` 是 ``True``,该 API 返回 ``true_fn()``,否则返回 ``false_fn()`` 。 +Tensor|list(Tensor)|tuple(Tensor),如果 ``pred`` 是 ``True``,该 API 返回 ``true_fn()``,否则返回 ``false_fn()``。 代码示例 ::::::::: -.. code-block:: python - - import paddle - - # - # pseudocode: - # if 0.1 < 0.23: - # return 1, True - # else: - # return 3, 2 - # - - def true_func(): - return paddle.full(shape=[1, 2], dtype='int32', - fill_value=1), paddle.full(shape=[2, 3], - dtype='bool', - fill_value=True) - - - def false_func(): - return paddle.full(shape=[3, 4], dtype='float32', - fill_value=3), paddle.full(shape=[4, 5], - dtype='int64', - fill_value=2) - - x = paddle.full(shape=[1], dtype='float32', fill_value=0.1) - y = paddle.full(shape=[1], dtype='float32', fill_value=0.23) - pred = paddle.less_than(x=x, y=y, name=None) - ret = paddle.static.nn.cond(pred, true_func, false_func) - # ret 是包含两个 tensors 的元组 - # ret[0] = [[1 1]] - # ret[1] = [[ True True True] - # [ True True True]] +COPY-FROM: paddle.static.nn.cond:code-example-2 diff --git a/docs/api/paddle/static/program_guard_cn.rst b/docs/api/paddle/static/program_guard_cn.rst index 69d81ac4c46..3dc65435190 100644 --- a/docs/api/paddle/static/program_guard_cn.rst +++ b/docs/api/paddle/static/program_guard_cn.rst @@ -22,28 +22,11 @@ program_guard 代码示例 1 :::::::::::: -.. code-block:: python - - import paddle - - paddle.enable_static() - main_program = paddle.static.Program() - startup_program = paddle.static.Program() - with paddle.static.program_guard(main_program, startup_program): - data = paddle.static.data(name='image', shape=[None, 784, 784], dtype='float32') - hidden = paddle.static.nn.fc(x=data, size=10, activation='relu') +COPY-FROM: paddle.static.program_guard:code-example-1 例如,当组的网不需要 startup_program 初始化各变量时,可以传入一个临时的 program。 代码示例 2 :::::::::::: -.. code-block:: python - - import paddle - - paddle.enable_static() - main_program = paddle.static.Program() - # does not care about startup program. Just pass a temporary value. - with paddle.static.program_guard(main_program, paddle.static.Program()): - data = paddle.static.data(name='image', shape=[None, 784, 784], dtype='float32') +COPY-FROM: paddle.static.program_guard:code-example-2