From 2b6d00496e94b98ace1819fdf082cebdaa6fb130 Mon Sep 17 00:00:00 2001 From: hong <43953930+phlrain@users.noreply.github.com> Date: Fri, 15 May 2020 02:04:46 +0800 Subject: [PATCH] Api move 20a (#24559) * add base name alias; test=develop * fix embedding bug; test=develop * fix io error; test=develop * add metric; test=develop * add import palce; test=develop * add setup; test=develop * fix incubate reader; test=develop * fix initializer error; test=develop --- python/paddle/__init__.py | 36 +++++++++++--- python/paddle/declarative/__init__.py | 44 +++++++++++++++++ .../test_imperative_container_layerlist.py | 2 +- ...test_imperative_container_parameterlist.py | 2 +- .../test_imperative_named_members.py | 2 +- python/paddle/framework/__init__.py | 43 +++++++--------- python/paddle/imperative/__init__.py | 18 +++++-- python/paddle/incubate/__init__.py | 3 ++ python/paddle/io/__init__.py | 33 +++++++------ python/paddle/metric/__init__.py | 26 +++++----- python/paddle/nn/__init__.py | 10 ++-- python/paddle/nn/functional/activation.py | 16 +++--- python/paddle/nn/functional/common.py | 4 +- .../__init__.py} | 22 ++++++--- python/paddle/optimizer/__init__.py | 49 ++++++++----------- python/setup.py.in | 4 ++ 16 files changed, 194 insertions(+), 120 deletions(-) create mode 100644 python/paddle/declarative/__init__.py rename python/paddle/nn/{initalizer.py => initializer/__init__.py} (57%) diff --git a/python/paddle/__init__.py b/python/paddle/__init__.py index fd6544f9df..f660fb3039 100644 --- a/python/paddle/__init__.py +++ b/python/paddle/__init__.py @@ -38,6 +38,8 @@ import paddle.tensor import paddle.nn import paddle.framework import paddle.imperative +import paddle.optimizer +import paddle.metric import paddle.incubate.complex as complex # TODO: define alias in tensor and framework directory @@ -194,20 +196,42 @@ from .tensor.search import index_select #DEFINE_ALIAS from .tensor.search import nonzero #DEFINE_ALIAS from .tensor.search import sort #DEFINE_ALIAS from .framework.random import manual_seed #DEFINE_ALIAS +from .framework import append_backward #DEFINE_ALIAS +from .framework import gradients #DEFINE_ALIAS +from .framework import Executor #DEFINE_ALIAS +from .framework import global_scope #DEFINE_ALIAS +from .framework import scope_guard #DEFINE_ALIAS +from .framework import BuildStrategy #DEFINE_ALIAS +from .framework import CompiledProgram #DEFINE_ALIAS +from .framework import default_main_program #DEFINE_ALIAS +from .framework import default_startup_program #DEFINE_ALIAS +from .framework import create_global_var #DEFINE_ALIAS +from .framework import create_parameter #DEFINE_ALIAS +from .framework import Print #DEFINE_ALIAS +from .framework import py_func #DEFINE_ALIAS +from .framework import ExecutionStrategy #DEFINE_ALIAS +from .framework import name_scope #DEFINE_ALIAS +from .framework import ParallelExecutor #DEFINE_ALIAS +from .framework import ParamAttr #DEFINE_ALIAS +from .framework import Program #DEFINE_ALIAS +from .framework import program_guard #DEFINE_ALIAS +from .framework import Variable #DEFINE_ALIAS +from .framework import WeightNormParamAttr #DEFINE_ALIAS +from .framework import CPUPlace #DEFINE_ALIAS +from .framework import CUDAPlace #DEFINE_ALIAS +from .framework import CUDAPinnedPlace #DEFINE_ALIAS from .tensor.search import index_sample #DEFINE_ALIAS from .tensor.stat import mean #DEFINE_ALIAS from .tensor.stat import reduce_mean #DEFINE_ALIAS from .tensor.stat import std #DEFINE_ALIAS from .tensor.stat import var #DEFINE_ALIAS +from .fluid.data import data # from .tensor.tensor import Tensor #DEFINE_ALIAS # from .tensor.tensor import LoDTensor #DEFINE_ALIAS # from .tensor.tensor import LoDTensorArray #DEFINE_ALIAS from . import incubate from .incubate import hapi -from .fluid.dygraph.base import enable_dygraph #DEFINE_ALIAS -from .fluid.dygraph.base import disable_dygraph #DEFINE_ALIAS -from .fluid.framework import in_dygraph_mode #DEFINE_ALIAS -enable_imperative = enable_dygraph #DEFINE_ALIAS -disable_imperative = disable_dygraph #DEFINE_ALIAS -in_imperative_mode = in_dygraph_mode +from .fluid.dygraph.base import enable_dygraph as enable_imperative #DEFINE_ALIAS +from .fluid.dygraph.base import disable_dygraph as disable_imperative #DEFINE_ALIAS +from .fluid.framework import in_dygraph_mode as in_imperative_mode #DEFINE_ALIAS diff --git a/python/paddle/declarative/__init__.py b/python/paddle/declarative/__init__.py new file mode 100644 index 0000000000..0f28cc7f42 --- /dev/null +++ b/python/paddle/declarative/__init__.py @@ -0,0 +1,44 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +__all__ = [ + 'fc', + 'batch_norm', + 'embedding', + 'bilinear_tensor_product' + 'conv2d' + 'conv2d_transpose' + 'conv3d' + 'conv3d_transpose' + 'create_parameter' + 'crf_decoding' + 'data_norm' + 'deformable_conv' + 'group_norm' + 'hsigmoid' + 'instance_norm' + 'layer_norm' + 'multi_box_head' + 'nce' + 'prelu' + 'row_conv' + 'spectral_norm', +] + +from ..fluid.layers import fc, batch_norm, bilinear_tensor_product, \ + conv2d, conv2d_transpose, conv3d, conv3d_transpose, create_parameter, \ + crf_decoding, data_norm, deformable_conv, group_norm, hsigmoid, instance_norm, \ + layer_norm, multi_box_head, nce, prelu, row_conv, spectral_norm + +from ..fluid.input import embedding diff --git a/python/paddle/fluid/tests/unittests/test_imperative_container_layerlist.py b/python/paddle/fluid/tests/unittests/test_imperative_container_layerlist.py index e106960141..ef90dd0498 100644 --- a/python/paddle/fluid/tests/unittests/test_imperative_container_layerlist.py +++ b/python/paddle/fluid/tests/unittests/test_imperative_container_layerlist.py @@ -37,7 +37,7 @@ class TestImperativeContainer(unittest.TestCase): [fluid.dygraph.Linear(2**i, 2**(i + 1)) for i in range(6)]) def paddle_imperative_list(self): - return paddle.imperative.LayerList( + return paddle.nn.LayerList( [fluid.dygraph.Linear(2**i, 2**(i + 1)) for i in range(6)]) def layer_list(self, use_fluid_api): diff --git a/python/paddle/fluid/tests/unittests/test_imperative_container_parameterlist.py b/python/paddle/fluid/tests/unittests/test_imperative_container_parameterlist.py index 7503051d65..39cbed865b 100644 --- a/python/paddle/fluid/tests/unittests/test_imperative_container_parameterlist.py +++ b/python/paddle/fluid/tests/unittests/test_imperative_container_parameterlist.py @@ -35,7 +35,7 @@ class MyLayer(fluid.Layer): shape=[2, 2], dtype='float32')] * num_stacked_param) def paddle_imperative_ParameterList(self, num_stacked_param): - return paddle.imperative.ParameterList( + return paddle.nn.ParameterList( [fluid.layers.create_parameter( shape=[2, 2], dtype='float32')] * num_stacked_param) diff --git a/python/paddle/fluid/tests/unittests/test_imperative_named_members.py b/python/paddle/fluid/tests/unittests/test_imperative_named_members.py index 1546dd3194..c7151463d1 100644 --- a/python/paddle/fluid/tests/unittests/test_imperative_named_members.py +++ b/python/paddle/fluid/tests/unittests/test_imperative_named_members.py @@ -67,7 +67,7 @@ class TestImperativeNamedParameters(unittest.TestCase): fc1 = fluid.Linear(10, 3) fc2 = fluid.Linear(3, 10, bias_attr=False) custom = MyLayer(3, 10) - model = paddle.imperative.Sequential(fc1, fc2, custom) + model = paddle.nn.Sequential(fc1, fc2, custom) named_parameters = list(model.named_parameters()) expected_named_parameters = list() diff --git a/python/paddle/framework/__init__.py b/python/paddle/framework/__init__.py index 873b22f4f4..3078f432c3 100644 --- a/python/paddle/framework/__init__.py +++ b/python/paddle/framework/__init__.py @@ -13,31 +13,24 @@ # limitations under the License. # TODO: import framework api under this directory -# __all__ = ['append_backward', -# 'gradients', -# 'Executor', -# 'global_scope', -# 'scope_guard', -# 'BuildStrategy', -# 'CompiledProgram', -# 'default_main_program', -# 'default_startup_program', -# 'create_global_var', -# 'create_parameter', -# 'create_py_reader_by_data', -# 'Print', -# 'py_func', -# 'ExecutionStrategy', -# 'in_dygraph_mode', -# 'name_scope', -# 'ParallelExecutor', -# 'ParamAttr', -# 'Program', -# 'program_guard', -# 'Variable', -# 'WeightNormParamAttr', -# 'Model', -# 'Sequential'] +__all__ = [ + 'append_backward', 'gradients', 'Executor', 'global_scope', 'scope_guard', + 'BuildStrategy', 'CompiledProgram', 'default_main_program', + 'default_startup_program', 'create_global_var', 'create_parameter', 'Print', + 'py_func', 'ExecutionStrategy', 'name_scope', 'ParallelExecutor', + 'ParamAttr', 'Program', 'program_guard', 'Variable', 'WeightNormParamAttr', + 'CPUPlace', 'CUDAPlace', 'CUDAPinnedPlace' +] from . import random from .random import manual_seed +from ..fluid.executor import Executor, global_scope, scope_guard +from ..fluid.backward import append_backward, gradients +from ..fluid.compiler import BuildStrategy, CompiledProgram, ExecutionStrategy +from ..fluid.framework import default_main_program, default_startup_program, name_scope, Program, program_guard, Variable +from ..fluid.layers.control_flow import Print +from ..fluid.layers.nn import py_func +from ..fluid.parallel_executor import ParallelExecutor +from ..fluid.param_attr import ParamAttr, WeightNormParamAttr +from ..fluid.layers.tensor import create_global_var, create_parameter +from ..fluid.core import CPUPlace, CUDAPlace, CUDAPinnedPlace diff --git a/python/paddle/imperative/__init__.py b/python/paddle/imperative/__init__.py index dcaf23a765..79e9c57bef 100644 --- a/python/paddle/imperative/__init__.py +++ b/python/paddle/imperative/__init__.py @@ -15,16 +15,24 @@ # define api used to run in imperative mode __all__ = [ 'BackwardStrategy', 'enabled', 'grad', 'guard', 'LayerList', 'load', 'save', - 'prepare_context', 'to_variable', 'TracedLayer', 'no_grad', 'ParameterList', - 'Sequential' + 'prepare_context', 'to_variable', 'TracedLayer', 'no_grad', 'ParallelEnv', + 'ProgramTranslator', 'declarative', 'DataParallel' +] + +__all__ += [ + 'NoamDecay', 'PiecewiseDecay', 'NaturalExpDecay', 'ExponentialDecay', + 'InverseTimeDecay', 'PolynomialDecay', 'CosineDecay' ] from paddle.fluid import core from ..fluid.dygraph.base import enabled, guard, no_grad, to_variable, grad -from ..fluid.dygraph.container import LayerList, ParameterList, Sequential from ..fluid.dygraph.checkpoint import load_dygraph as load from ..fluid.dygraph.checkpoint import save_dygraph as save -from ..fluid.dygraph.parallel import prepare_context -from ..fluid.dygraph.jit import TracedLayer +from ..fluid.dygraph.parallel import prepare_context, ParallelEnv, DataParallel +from ..fluid.dygraph.jit import TracedLayer, declarative +from ..fluid.dygraph import ProgramTranslator + +from ..fluid.dygraph.learning_rate_scheduler import NoamDecay, PiecewiseDecay, NaturalExpDecay, ExponentialDecay, \ + InverseTimeDecay, PolynomialDecay, CosineDecay BackwardStrategy = core.BackwardStrategy diff --git a/python/paddle/incubate/__init__.py b/python/paddle/incubate/__init__.py index e6888ebc8f..aee695d419 100644 --- a/python/paddle/incubate/__init__.py +++ b/python/paddle/incubate/__init__.py @@ -16,3 +16,6 @@ from . import hapi __all__ = [] __all__ += hapi.__all__ +__all__ += ["reader"] + +from ..fluid.contrib import reader diff --git a/python/paddle/io/__init__.py b/python/paddle/io/__init__.py index b85ef741b0..f9c083d2ae 100644 --- a/python/paddle/io/__init__.py +++ b/python/paddle/io/__init__.py @@ -18,22 +18,25 @@ __all__ = [ 'BatchSampler', # 'Transform', 'DataLoader', - # 'load', - # 'save', - # 'load_program_state', - # 'set_program_state', - # 'load_inference_model', - # 'save_inference_model', - # 'batch', - # 'shuffle', - # 'buffered', - # 'cache', - # 'chain', - # 'firstn', - # 'compose', - # 'map_readers', - # 'xmap_readers' + 'load', + 'save', + 'load_program_state', + 'set_program_state', + 'load_inference_model', + 'save_inference_model', + 'batch', + 'shuffle', + 'buffered', + 'cache', + 'chain', + 'firstn', + 'compose', + 'map_readers', + 'xmap_readers' ] from ..fluid.io import DataLoader from ..fluid.dataloader import Dataset, BatchSampler +from ..fluid.io import load, save, load_program_state, set_program_state, \ + load_inference_model, save_inference_model, batch +from ..reader import shuffle, buffered, cache, chain, firstn, compose, map_readers, xmap_readers diff --git a/python/paddle/metric/__init__.py b/python/paddle/metric/__init__.py index 85704ce862..e03336f6db 100644 --- a/python/paddle/metric/__init__.py +++ b/python/paddle/metric/__init__.py @@ -13,16 +13,16 @@ # limitations under the License. # TODO: define the functions to calculate metric in this directory -# __all__ = ['Accuracy', -# 'Auc', -# 'ChunkEvaluator', -# 'CompositeMetric', -# 'DetectionMAP', -# 'EditDistance', -# 'Precesion', -# 'Recall', -# 'accuracy', -# 'auc', -# 'chunk_eval', -# 'cos_sim', -# 'mean_iou'] +__all__ = [ + 'Accuracy', 'Auc', 'ChunkEvaluator', 'CompositeMetric', 'DetectionMAP', + 'EditDistance', 'Precision', 'Recall', 'accuracy', 'auc', 'chunk_eval', + 'cos_sim', 'mean_iou' +] + + + +from ..fluid.metrics import Accuracy, Auc, ChunkEvaluator, CompositeMetric, DetectionMAP, EditDistance, \ + Precision, Recall + +from ..fluid.layers.metric_op import accuracy, auc +from ..fluid.layers.nn import chunk_eval, cos_sim, mean_iou diff --git a/python/paddle/nn/__init__.py b/python/paddle/nn/__init__.py index 1c4d353bf8..016f89a515 100644 --- a/python/paddle/nn/__init__.py +++ b/python/paddle/nn/__init__.py @@ -19,6 +19,8 @@ from .layer import norm from .functional import extension from .layer import common +from . import initializer + __all__ = [] __all__ += norm.__all__ __all__ += extension.__all__ @@ -47,13 +49,6 @@ from .decode import beam_search_decode #DEFINE_ALIAS # from .decode import ctc_greedy_decoder #DEFINE_ALIAS # from .decode import dynamic_decode #DEFINE_ALIAS # from .decode import gather_tree #DEFINE_ALIAS -# from .initalizer import Bilinear #DEFINE_ALIAS -# from .initalizer import Constant #DEFINE_ALIAS -# from .initalizer import MSRA #DEFINE_ALIAS -# from .initalizer import Normal #DEFINE_ALIAS -# from .initalizer import TruncatedNormal #DEFINE_ALIAS -# from .initalizer import Uniform #DEFINE_ALIAS -# from .initalizer import Xavier #DEFINE_ALIAS from .input import data #DEFINE_ALIAS # from .input import Input #DEFINE_ALIAS # from .layer.activation import PReLU #DEFINE_ALIAS @@ -98,3 +93,4 @@ from .layer.norm import InstanceNorm #DEFINE_ALIAS from .layer import loss #DEFINE_ALIAS from .layer import conv #DEFINE_ALIAS from ..fluid.dygraph.layers import Layer #DEFINE_ALIAS +from ..fluid.dygraph.container import LayerList, ParameterList, Sequential #DEFINE_ALIAS diff --git a/python/paddle/nn/functional/activation.py b/python/paddle/nn/functional/activation.py index ed2acb6495..dad6b252ed 100644 --- a/python/paddle/nn/functional/activation.py +++ b/python/paddle/nn/functional/activation.py @@ -78,8 +78,8 @@ def hsigmoid(input, path_code=None, is_sparse=False): """ - :alias_main: paddle.nn.functional.hsigmoid - :alias: paddle.nn.functional.hsigmoid,paddle.nn.functional.activation.hsigmoid + :alias_main: paddle.nn.functional.hsigmoid + :alias: paddle.nn.functional.hsigmoid,paddle.nn.functional.activation.hsigmoid The hierarchical sigmoid organizes the classes into a complete binary tree to reduce the computational complexity and speed up the model training, especially the training of language model. @@ -194,8 +194,8 @@ def hsigmoid(input, def relu(input, inplace=False, name=None): """ - :alias_main: paddle.nn.functional.relu - :alias: paddle.nn.functional.relu,paddle.nn.functional.activation.relu + :alias_main: paddle.nn.functional.relu + :alias: paddle.nn.functional.relu,paddle.nn.functional.activation.relu ReLU Activation. @@ -246,8 +246,8 @@ def relu(input, inplace=False, name=None): def sigmoid(input, inplace=False, name=None): """ - :alias_main: paddle.nn.functional.sigmoid - :alias: paddle.nn.functional.sigmoid,paddle.nn.functional.activation.sigmoid + :alias_main: paddle.nn.functional.sigmoid + :alias: paddle.nn.functional.sigmoid,paddle.nn.functional.activation.sigmoid Sigmoid Activation. @@ -307,8 +307,8 @@ def sigmoid(input, inplace=False, name=None): def log_softmax(input, axis=None, dtype=None, name=None): """ - :alias_main: paddle.nn.functional.log_softmax - :alias: paddle.nn.functional.log_softmax,paddle.nn.functional.activation.log_softmax + :alias_main: paddle.nn.functional.log_softmax + :alias: paddle.nn.functional.log_softmax,paddle.nn.functional.activation.log_softmax This operator implements the log_softmax layer. The calculation process is as follows: diff --git a/python/paddle/nn/functional/common.py b/python/paddle/nn/functional/common.py index 12a899f084..9ae6e02d42 100644 --- a/python/paddle/nn/functional/common.py +++ b/python/paddle/nn/functional/common.py @@ -51,8 +51,8 @@ def interpolate(input, align_mode=1, data_format='NCHW'): """ - :alias_main: paddle.nn.functional.interpolate - :alias: paddle.nn.functional.interpolate,paddle.nn.functional.common.interpolate + :alias_main: paddle.nn.functional.interpolate + :alias: paddle.nn.functional.interpolate,paddle.nn.functional.common.interpolate This op resizes a batch of images. The input must be a 4-D Tensor of the shape (num_batches, channels, in_h, in_w) diff --git a/python/paddle/nn/initalizer.py b/python/paddle/nn/initializer/__init__.py similarity index 57% rename from python/paddle/nn/initalizer.py rename to python/paddle/nn/initializer/__init__.py index 55ae7d649b..489f324868 100644 --- a/python/paddle/nn/initalizer.py +++ b/python/paddle/nn/initializer/__init__.py @@ -14,12 +14,20 @@ # TODO: define the initializers to create a Parameter in neural network +from ...fluid.initializer import Bilinear #DEFINE_ALIAS +from ...fluid.initializer import Constant #DEFINE_ALIAS +from ...fluid.initializer import MSRA #DEFINE_ALIAS +from ...fluid.initializer import Normal #DEFINE_ALIAS +from ...fluid.initializer import TruncatedNormal #DEFINE_ALIAS +from ...fluid.initializer import Uniform #DEFINE_ALIAS +from ...fluid.initializer import Xavier #DEFINE_ALIAS + __all__ = [ - # 'Bilinear', - # 'Constant', - # 'MSRA', - # 'Normal', - # 'TruncatedNormal', - # 'Uniform', - # 'Xavier' + 'Bilinear', + 'Constant', + 'MSRA', + 'Normal', + 'TruncatedNormal', + 'Uniform', + 'Xavier', ] diff --git a/python/paddle/optimizer/__init__.py b/python/paddle/optimizer/__init__.py index d76a1ec84f..4dc3cf397a 100644 --- a/python/paddle/optimizer/__init__.py +++ b/python/paddle/optimizer/__init__.py @@ -12,32 +12,23 @@ # See the License for the specific language governing permissions and # limitations under the License. -# TODO: define all optimizers in this directory, -# __all__ = ['Adadelta', -# 'AdadeltaOptimizer', -# 'Adagrad', -# 'AdagradOptimizer', -# 'Adam', -# 'Adamax', -# 'AdamaxOptimizer', -# 'AdamOptimizer', -# 'DecayedAdagrad', -# 'DecayedAdagradOptimizer', -# 'DGCMomentumOptimizer', -# 'Dpsgd', -# 'DpsgdOptimizer', -# 'ExponentialMovingAverage', -# 'Ftrl', -# 'FtrlOptimizer', -# 'LambOptimizer', -# 'LarsMomentum', -# 'LarsMomentumOptimizer', -# 'LookaheadOptimizer', -# 'ModelAverage', -# 'Momentum', -# 'MomentumOptimizer', -# 'PipelineOptimizer', -# 'RecomputeOptimizer', -# 'RMSPropOptimizer', -# 'SGD', -# 'SGDOptimizer'] +__all__ = [ + 'Adadelta', 'AdadeltaOptimizer', 'Adagrad', 'AdagradOptimizer', 'Adam', + 'Adamax', 'AdamaxOptimizer', 'AdamOptimizer', 'DecayedAdagrad', + 'DecayedAdagradOptimizer', 'DGCMomentumOptimizer', 'Dpsgd', + 'DpsgdOptimizer', 'ExponentialMovingAverage', 'Ftrl', 'FtrlOptimizer', + 'LambOptimizer', 'LarsMomentum', 'LarsMomentumOptimizer', + 'LookaheadOptimizer', 'ModelAverage', 'Momentum', 'MomentumOptimizer', + 'PipelineOptimizer', 'RecomputeOptimizer', 'RMSPropOptimizer', 'SGD', + 'SGDOptimizer' +] + + +from ..fluid.optimizer import SGD, Momentum, Adagrad, Adam, Adamax, Dpsgd, DecayedAdagrad, \ + Ftrl, SGDOptimizer, MomentumOptimizer, AdagradOptimizer, \ + AdamOptimizer, AdamaxOptimizer, DpsgdOptimizer, \ + DecayedAdagradOptimizer, RMSPropOptimizer, FtrlOptimizer, Adadelta, \ + AdadeltaOptimizer, ModelAverage, LarsMomentum, \ + LarsMomentumOptimizer, DGCMomentumOptimizer, LambOptimizer, \ + ExponentialMovingAverage, PipelineOptimizer, LookaheadOptimizer, \ + RecomputeOptimizer diff --git a/python/setup.py.in b/python/setup.py.in index ad2dcd2877..97a1254607 100644 --- a/python/setup.py.in +++ b/python/setup.py.in @@ -184,10 +184,14 @@ packages=['paddle', 'paddle.incubate.hapi.vision.models', 'paddle.incubate.hapi.vision.transforms', 'paddle.incubate.hapi.text', + 'paddle.incubate', 'paddle.io', + 'paddle.optimizer', 'paddle.nn', 'paddle.nn.functional', 'paddle.nn.layer', + 'paddle.nn.initializer', + 'paddle.metric', 'paddle.imperative', 'paddle.tensor', ] -- GitLab