diff --git a/ci_scripts/api_white_list.txt b/ci_scripts/api_white_list.txt index 07456d34a4d..71193adb3bf 100644 --- a/ci_scripts/api_white_list.txt +++ b/ci_scripts/api_white_list.txt @@ -28,4 +28,7 @@ paddle/distributed/fleet/utils/fs/HDFSClient_cn.rst paddle/distributed/fleet/utils/fs/LocalFS_cn.rst paddle/fluid/dygraph/parallel/DataParallel_cn.rst paddle/fluid/dygraph/parallel/ParallelEnv_cn.rst +paddle/fluid/framework/is_compiled_with_xpu_cn.rst +paddle/fluid/framework/xpu_places_cn.rst +paddle/fluid/core/XPUPlace_cn.rst upgrade_guide_cn.md diff --git a/ci_scripts/check_api_cn.sh b/ci_scripts/check_api_cn.sh index a48e6db0fe7..846bf4c48c9 100644 --- a/ci_scripts/check_api_cn.sh +++ b/ci_scripts/check_api_cn.sh @@ -4,7 +4,7 @@ set -x function install_paddle() { # try to download paddle, and install rm -rf paddlepaddle_gpu-0.0.0-cp27-cp27mu-linux_x86_64.whl - wget https://paddle-fluiddoc-ci.bj.bcebos.com/python/dist/paddlepaddle_gpu-0.0.0-cp27-cp27mu-linux_x86_64.whl + wget -q https://paddle-fluiddoc-ci.bj.bcebos.com/python/dist/paddlepaddle_gpu-0.0.0-cp27-cp27mu-linux_x86_64.whl pip install -U paddlepaddle_gpu-0.0.0-cp27-cp27mu-linux_x86_64.whl # if failed, build paddle if [ $? -ne 0 ];then diff --git a/doc/paddle/api/alias_api_mapping b/doc/paddle/api/alias_api_mapping index d46e8a04c74..bf0f0387719 100755 --- a/doc/paddle/api/alias_api_mapping +++ b/doc/paddle/api/alias_api_mapping @@ -17,7 +17,6 @@ paddle.fluid.executor.Executor paddle.static.Executor paddle.nn.functional.pooling.avg_pool2d paddle.nn.functional.avg_pool2d paddle.framework.io.load paddle.load,paddle.framework.load paddle.fluid.dygraph.container.Sequential paddle.nn.Sequential -paddle.fluid.dygraph.BilinearTensorProduct paddle.nn.BilinearTensorProduct,paddle.nn.layer.BilinearTensorProduct,paddle.nn.layer.common.BilinearTensorProduct paddle.fluid.layers.stanh paddle.stanh,paddle.tensor.stanh,paddle.tensor.math.stanh paddle.fluid.dygraph.base.enable_dygraph paddle.disable_static paddle.tensor.math.kron paddle.kron,paddle.tensor.kron @@ -42,6 +41,7 @@ paddle.tensor.math.floor_divide paddle.floor_divide,paddle.tensor.floor_divide paddle.fluid.layers.prelu paddle.static.nn.prelu paddle.tensor.manipulation.chunk paddle.chunk,paddle.tensor.chunk paddle.tensor.manipulation.reshape paddle.reshape,paddle.tensor.reshape +paddle.tensor.manipulation.reshape_ paddle.reshape_,paddle.tensor.reshape_ paddle.tensor.math.increment paddle.increment,paddle.tensor.increment,paddle.tensor.math.increment paddle.fluid.compiler.CompiledProgram paddle.static.CompiledProgram paddle.tensor.manipulation.flip paddle.flip,paddle.reverse,paddle.tensor.flip,paddle.tensor.reverse @@ -58,6 +58,7 @@ paddle.fluid.layers.row_conv paddle.static.nn.row_conv paddle.tensor.math.logsumexp paddle.logsumexp,paddle.tensor.logsumexp paddle.tensor.search.index_select paddle.index_select,paddle.tensor.index_select paddle.tensor.manipulation.squeeze paddle.squeeze,paddle.tensor.squeeze +paddle.tensor.manipulation.squeeze_ paddle.squeeze_,paddle.tensor.squeeze_ paddle.nn.functional.common.interpolate paddle.nn.functional.interpolate paddle.fluid.layers.cos paddle.cos,paddle.tensor.cos,paddle.tensor.math.cos paddle.fluid.layers.cosh paddle.cosh,paddle.tensor.cosh,paddle.tensor.math.cosh @@ -86,12 +87,11 @@ paddle.fluid.framework.default_main_program paddle.static.default_main_program paddle.device.get_device paddle.get_device paddle.device.set_device paddle.set_device paddle.device.get_cudnn_version paddle.get_cudnn_version -paddle.device.XPUPlace paddle.XPUPlace -paddle.device.is_compiled_with_xpu paddle.is_compiled_with_xpu +paddle.fluid.framework.is_compiled_with_xpu paddle.is_compiled_with_xpu,paddle.device.is_compiled_with_xpu +paddle.fluid.framework.device_guard paddle.static.device_guard paddle.fluid.framework.is_compiled_with_cuda paddle.is_compiled_with_cuda,paddle.device.is_compiled_with_cuda paddle.fluid.layers.log_loss paddle.nn.functional.log_loss,paddle.nn.functional.loss.log_loss paddle.fluid.layers.softmax_with_cross_entropy paddle.nn.functional.softmax_with_cross_entropy,paddle.nn.functional.loss.softmax_with_cross_entropy -paddle.fluid.layers.sampled_softmax_with_cross_entropy paddle.nn.functional.loss.sampled_softmax_with_cross_entropy paddle.nn.functional.pooling.adaptive_max_pool1d paddle.nn.functional.adaptive_max_pool1d paddle.tensor.creation.zeros_like paddle.zeros_like,paddle.tensor.zeros_like paddle.tensor.creation.zeros paddle.zeros,paddle.tensor.zeros @@ -104,7 +104,6 @@ paddle.tensor.linalg.histogram paddle.histogram,paddle.tensor.histogram paddle.fluid.dygraph.jit.declarative paddle.jit.to_static paddle.tensor.logic.equal_all paddle.equal_all,paddle.tensor.equal_all paddle.nn.functional.activation.softsign paddle.nn.functional.softsign -paddle.fluid.layers.ssd_loss paddle.nn.functional.ssd_loss,paddle.nn.functional.loss.ssd_loss paddle.fluid.backward.append_backward paddle.static.append_backward paddle.nn.functional.pooling.adaptive_max_pool2d paddle.nn.functional.adaptive_max_pool2d paddle.tensor.math.prod paddle.prod,paddle.tensor.prod @@ -123,9 +122,9 @@ paddle.fluid.backward.gradients paddle.static.gradients paddle.nn.layer.activation.Tanhshrink paddle.nn.Tanhshrink paddle.fluid.core.CPUPlace paddle.CPUPlace,paddle.framework.CPUPlace paddle.nn.functional.activation.softmax paddle.nn.functional.softmax +paddle.nn.functional.activation.softmax_ paddle.nn.functional.softmax_ paddle.nn.functional.pooling.adaptive_max_pool3d paddle.nn.functional.adaptive_max_pool3d paddle.nn.functional.activation.hardtanh paddle.nn.functional.hardtanh -paddle.fluid.layers.distribute_fpn_proposals paddle.nn.functional.distribute_fpn_proposals,paddle.nn.functional.vision.distribute_fpn_proposals paddle.tensor.math.max paddle.max,paddle.tensor.max paddle.tensor.math.minimum paddle.minimum,paddle.tensor.minimum paddle.fluid.layers.linspace paddle.linspace,paddle.tensor.linspace,paddle.tensor.creation.linspace @@ -153,6 +152,7 @@ paddle.fluid.layers.bilinear_tensor_product paddle.static.nn.bilinear_tensor_pro paddle.fluid.framework.name_scope paddle.static.name_scope paddle.fluid.framework.cpu_places paddle.static.cpu_places paddle.fluid.framework.cuda_places paddle.static.cuda_places +paddle.fluid.framework.xpu_places paddle.static.xpu_places paddle.fluid.layers.is_empty paddle.is_empty,paddle.tensor.is_empty,paddle.tensor.logic.is_empty paddle.tensor.math.multiply paddle.multiply,paddle.tensor.multiply paddle.tensor.creation.Tensor paddle.Tensor @@ -211,6 +211,7 @@ paddle.fluid.executor.global_scope paddle.static.global_scope paddle.fluid.param_attr.WeightNormParamAttr paddle.static.WeightNormParamAttr paddle.tensor.math.addmm paddle.addmm,paddle.tensor.addmm paddle.fluid.framework.Program paddle.static.Program +paddle.fluid.framework.Variable paddle.static.Variable paddle.fluid.layers.round paddle.round,paddle.tensor.round,paddle.tensor.math.round paddle.tensor.creation.ones paddle.ones,paddle.tensor.ones paddle.tensor.random.randint paddle.randint,paddle.tensor.randint @@ -314,22 +315,19 @@ paddle.tensor.math.any paddle.any,paddle.tensor.any paddle.static.input.InputSpec paddle.static.InputSpec paddle.fluid.layers.acos paddle.acos,paddle.tensor.acos,paddle.tensor.math.acos paddle.tensor.search.topk paddle.topk,paddle.tensor.topk -paddle.fluid.dygraph.Pool2D paddle.nn.layer.Pool2D,paddle.nn.layer.common.Pool2D paddle.tensor.math.isfinite paddle.isfinite,paddle.tensor.isfinite paddle.fluid.framework.program_guard paddle.static.program_guard -paddle.fluid.layers.space_to_depth paddle.nn.functional.space_to_depth,paddle.nn.functional.vision.space_to_depth paddle.nn.layer.common.CosineSimilarity paddle.nn.CosineSimilarity,paddle.nn.layer.CosineSimilarity -paddle.nn.layer.extension.RowConv paddle.nn.RowConv,paddle.nn.layer.RowConv paddle.nn.layer.loss.MSELoss paddle.nn.MSELoss,paddle.nn.layer.MSELoss paddle.nn.functional.vision.pixel_shuffle paddle.nn.functional.pixel_shuffle paddle.tensor.math.tanh paddle.tanh,paddle.tensor.tanh,paddle.nn.functional.tanh,paddle.nn.functional.activation.tanh +paddle.tensor.math.tanh_ paddle.tanh_,paddle.tensor.tanh_,paddle.nn.functional.tanh_,paddle.nn.functional.activation.tanh_ paddle.fluid.dygraph.jit.load paddle.jit.load paddle.fluid.layers.batch_norm paddle.static.nn.batch_norm paddle.fluid.layers.cosh paddle.cosh,paddle.tensor.cosh,paddle.tensor.math.cosh paddle.nn.layer.common.Upsample paddle.nn.Upsample,paddle.nn.layer.Upsample paddle.fluid.layers.instance_norm paddle.static.nn.instance_norm paddle.nn.functional.activation.hardshrink paddle.nn.functional.hardshrink -paddle.fluid.layers.clip paddle.nn.clip,paddle.nn.clip.clip paddle.tensor.search.argmin paddle.argmin,paddle.tensor.argmin paddle.nn.layer.common.Dropout2D paddle.nn.Dropout2D,paddle.nn.layer.Dropout2D paddle.tensor.math.add_n paddle.add_n,paddle.tensor.add_n,paddle.tensor.math.add_n @@ -340,9 +338,7 @@ paddle.nn.functional.loss.binary_cross_entropy paddle.nn.functional.binary_cross paddle.nn.layer.common.Linear paddle.nn.Linear,paddle.nn.layer.Linear,paddle.nn.layer.common.Linear paddle.nn.layer.activation.ReLU6 paddle.nn.ReLU6 paddle.static.input.data paddle.static.data -paddle.fluid.layers.edit_distance paddle.nn.functional.loss.edit_distance paddle.tensor.math.maximum paddle.maximum,paddle.tensor.maximum -paddle.fluid.layers.add_position_encoding paddle.nn.functional.add_position_encoding,paddle.nn.functional.extension.add_position_encoding paddle.nn.functional.common.cosine_similarity paddle.nn.functional.cosine_similarity paddle.fluid.layers.floor paddle.floor,paddle.tensor.floor,paddle.tensor.math.floor paddle.tensor.math.log2 paddle.log2,paddle.tensor.log2 @@ -363,18 +359,18 @@ paddle.nn.functional.common.linear paddle.nn.functional.linear paddle.nn.layer.activation.LogSoftmax paddle.nn.LogSoftmax,paddle.nn.layer.LogSoftmax paddle.nn.layer.loss.KLDivLoss paddle.nn.KLDivLoss,paddle.nn.layer.KLDivLoss paddle.tensor.math.sign paddle.sign,paddle.tensor.sign -paddle.fluid.layers.iou_similarity paddle.nn.functional.iou_similarity,paddle.nn.functional.loss.iou_similarity paddle.fluid.layers.transpose paddle.transpose,paddle.tensor.transpose,paddle.tensor.linalg.transpose,paddle.tensor.manipulation.transpose paddle.nn.functional.activation.elu paddle.nn.functional.elu +paddle.nn.functional.activation.elu_ paddle.nn.functional.elu_ paddle.tensor.manipulation.broadcast_to paddle.broadcast_to,paddle.tensor.broadcast_to paddle.fluid.layers.tensor.create_global_var paddle.static.create_global_var,paddle.framework.create_global_var -paddle.fluid.layers.affine_channel paddle.nn.functional.affine_channel,paddle.nn.functional.vision.affine_channel paddle.tensor.creation.full_like paddle.full_like,paddle.tensor.full_like paddle.fluid.parallel_executor.ParallelExecutor paddle.static.ParallelExecutor paddle.tensor.logic.not_equal paddle.not_equal,paddle.tensor.not_equal paddle.fluid.layers.layer_norm paddle.static.nn.layer_norm paddle.fluid.layers.nce paddle.static.nn.nce paddle.nn.functional.activation.relu paddle.nn.functional.relu +paddle.nn.functional.activation.relu_ paddle.nn.functional.relu_ paddle.nn.layer.norm.InstanceNorm1D paddle.nn.InstanceNorm1D paddle.nn.functional.common.pad paddle.nn.functional.pad paddle.fluid.layers.spectral_norm paddle.static.nn.spectral_norm @@ -383,7 +379,7 @@ paddle.nn.layer.activation.Softplus paddle.nn.Softplus paddle.fluid.dygraph.parallel.DataParallel paddle.DataParallel,paddle.framework.DataParallel paddle.fluid.layers.exp paddle.exp,paddle.tensor.exp,paddle.tensor.math.exp paddle.tensor.manipulation.scatter paddle.scatter,paddle.tensor.scatter -paddle.fluid.layers.detection_output paddle.nn.functional.detection_output,paddle.nn.functional.vision.detection_output +paddle.tensor.manipulation.scatter_ paddle.scatter_,paddle.tensor.scatter_ paddle.fluid.layers.conv3d_transpose paddle.static.nn.conv3d_transpose paddle.tensor.stat.numel paddle.numel,paddle.tensor.numel paddle.tensor.stat.median paddle.median,paddle.tensor.median @@ -394,11 +390,10 @@ paddle.fluid.layers.scale paddle.scale,paddle.tensor.scale,paddle.tensor.math.sc paddle.fluid.framework.default_startup_program paddle.static.default_startup_program paddle.tensor.linalg.cross paddle.cross,paddle.tensor.cross paddle.nn.layer.norm.InstanceNorm2D paddle.nn.InstanceNorm2D -paddle.fluid.layers.assign paddle.nn.functional.assign,paddle.nn.functional.common.assign paddle.fluid.layers.case paddle.static.nn.case paddle.fluid.core.CUDAPlace paddle.CUDAPlace,paddle.framework.CUDAPlace +paddle.fluid.core.XPUPlace paddle.XPUPlace,paddle.device.XPUPlace,paddle.framework.XPUPlace paddle.nn.functional.pooling.max_pool2d paddle.nn.functional.max_pool2d -paddle.fluid.layers.clip_by_norm paddle.nn.clip_by_norm,paddle.nn.clip.clip_by_norm paddle.nn.functional.loss.binary_cross_entropy_with_logits paddle.nn.functional.binary_cross_entropy_with_logits paddle.nn.layer.pooling.AdaptiveAvgPool1D paddle.nn.AdaptiveAvgPool1D,paddle.nn.layer.AdaptiveAvgPool1D paddle.fluid.layers.cast paddle.cast,paddle.tensor.cast,paddle.tensor.manipulation.cast @@ -406,10 +401,11 @@ paddle.fluid.layers.log paddle.log,paddle.tensor.log,paddle.tensor.math.log paddle.fluid.layers.sqrt paddle.sqrt,paddle.tensor.sqrt,paddle.tensor.math.sqrt paddle.tensor.manipulation.stack paddle.stack,paddle.tensor.stack paddle.tensor.manipulation.unsqueeze paddle.unsqueeze,paddle.tensor.unsqueeze +paddle.tensor.manipulation.unsqueeze_ paddle.unsqueeze_,paddle.tensor.unsqueeze_ paddle.tensor.math.add paddle.add,paddle.tensor.add +paddle.tensor.math.broadcast_shape paddle.broadcast_shape,paddle.tensor.broadcast_shape paddle.tensor.math.subtract paddle.subtract,paddle.tensor.subtract paddle.nn.layer.common.Bilinear paddle.nn.Bilinear,paddle.nn.layer.Bilinear -paddle.nn.functional.extension.row_conv paddle.nn.functional.row_conv paddle.nn.layer.loss.BCEWithLogitsLoss paddle.nn.BCEWithLogitsLoss,paddle.nn.layer.BCEWithLogitsLoss paddle.nn.layer.norm.InstanceNorm3D paddle.nn.InstanceNorm3D paddle.tensor.manipulation.tile paddle.tile,paddle.tensor.tile @@ -422,7 +418,6 @@ paddle.fluid.layers.multi_box_head paddle.static.nn.multi_box_head paddle.fluid.layers.unfold paddle.nn.functional.unfold,paddle.nn.functional.common.unfold paddle.nn.layer.pooling.AdaptiveAvgPool2D paddle.nn.AdaptiveAvgPool2D,paddle.nn.layer.AdaptiveAvgPool2D paddle.fluid.layers.logical_and paddle.logical_and,paddle.tensor.logical_and,paddle.tensor.logic.logical_and -paddle.fluid.layers.linear_lr_warmup paddle.nn.functional.linear_lr_warmup,paddle.nn.functional.learning_rate.linear_lr_warmup paddle.nn.functional.vision.affine_grid paddle.nn.functional.affine_grid paddle.fluid.dygraph.Flatten paddle.nn.Flatten,paddle.nn.layer.Flatten,paddle.nn.layer.common.Flatten paddle.nn.functional.pooling.avg_pool1d paddle.nn.functional.avg_pool1d @@ -488,9 +483,13 @@ paddle.vision.transforms.functional.rotate paddle.vision.transforms.rotate,paddl paddle.vision.transforms.functional.to_grayscale paddle.vision.transforms.to_grayscale,paddle.vision.to_grayscale paddle.vision.transforms.functional.to_tensor paddle.vision.transforms.to_tensor,paddle.vision.to_tensor paddle.vision.transforms.functional.normalize paddle.vision.transforms.normalize,paddle.vision.normalize +paddle.vision.image.get_image_backend paddle.vision.get_image_backend +paddle.vision.image.image_load paddle.vision.image_load +paddle.vision.image.set_image_backend paddle.vision.set_image_backend paddle.vision.datasets.folder.DatasetFolder paddle.vision.datasets.DatasetFolder,paddle.vision.DatasetFolder paddle.vision.datasets.folder.ImageFolder paddle.vision.datasets.ImageFolder,paddle.vision.ImageFolder paddle.vision.datasets.mnist.MNIST paddle.vision.datasets.MNIST,paddle.vision.MNIST +paddle.vision.datasets.mnist.FashionMNIST paddle.vision.datasets.FashionMNIST,paddle.vision.FashionMNIST paddle.vision.datasets.flowers.Flowers paddle.vision.datasets.Flowers,paddle.vision.Flowers paddle.vision.datasets.cifar.Cifar10 paddle.vision.datasets.Cifar10,paddle.vision.Cifar10 paddle.vision.datasets.cifar.Cifar100 paddle.vision.datasets.Cifar100,paddle.vision.Cifar100 @@ -531,7 +530,7 @@ paddle.optimizer.adadelta.Adadelta paddle.optimizer.Adadelta paddle.optimizer.adagrad.Adagrad paddle.optimizer.Adagrad paddle.optimizer.adam.Adam paddle.optimizer.Adam paddle.optimizer.adamax.Adamax paddle.optimizer.Adamax -paddle.optimizer.adamw.Adamw paddle.optimizer.Adamw +paddle.optimizer.adamw.AdamW paddle.optimizer.AdamW paddle.optimizer.momentum.Momentum paddle.optimizer.Momentum paddle.optimizer.optimizer.Optimizer paddle.optimizer.Optimizer paddle.optimizer.rmsprop.RMSProp paddle.optimizer.RMSProp @@ -540,8 +539,7 @@ paddle.nn.layer.common.Pad1D paddle.nn.Pad1D,paddle.nn.common.Pad1D paddle.nn.layer.common.Pad2D paddle.nn.Pad2D,paddle.nn.common.Pad2D paddle.nn.layer.common.Pad3D paddle.nn.Pad3D,paddle.nn.common.Pad3D paddle.nn.functional.interpolate paddle.nn.functional.interpolate,paddle.nn.functional.common.interpolate -paddle.nn.functional.upsample paddle.nn.functional.upsample,paddle.nn.functional.common.upsample -paddle.nn.Upsample paddle.nn.layer.Upsample,paddle.nn.layer.common.Upsample +paddle.nn.functional.common.upsample paddle.nn.functional.upsample paddle.nn.layer.common.UpsamplingBilinear2D paddle.nn.UpsamplingBilinear2D,paddle.nn.layer.UpsamplingBilinear2D paddle.nn.layer.common.UpsamplingNearest2D paddle.nn.UpsamplingNearest2D,paddle.nn.layer.UpsamplingNearest2D paddle.fluid.initializer.set_global_initializer paddle.nn.initializer.set_global_initializer @@ -551,3 +549,7 @@ paddle.tensor.attribute.real paddle.real,paddle.tensor.real paddle.tensor.attribute.imag paddle.imag,paddle.tensor.imag paddle.fluid.layers.BeamSearchDecoder paddle.nn.BeamSearchDecoder paddle.fluid.layers.dynamic_decode paddle.nn.dynamic_decode +paddle.fluid.layers.accuracy paddle.static.accuracy +paddle.fluid.layers.auc paddle.static.auc +paddle.tensor.Overview paddle.Overview +paddle.optimizer.lamb.Lamb paddle.optimizer.Lamb diff --git a/doc/paddle/api/api_label b/doc/paddle/api/api_label index 052050f574d..e06c4ced921 100644 --- a/doc/paddle/api/api_label +++ b/doc/paddle/api/api_label @@ -1050,3 +1050,4 @@ Decoder .. _api_paddle_fluid_layers_Decoder: DetectionMAP .. _api_paddle_fluid_metrics_DetectionMAP: ModelAverage .. _api_paddle_fluid_optimizer_ModelAverage: lstm .. _api_paddle_fluid_layers_lstm: +Lamb .. _api_paddle_optimizer_lamb_Lamb: diff --git a/doc/paddle/api/index_cn.rst b/doc/paddle/api/index_cn.rst index 57095d3c15e..7e49085f08f 100644 --- a/doc/paddle/api/index_cn.rst +++ b/doc/paddle/api/index_cn.rst @@ -30,7 +30,7 @@ API 文档 | | ProgBarLogger 等。 | +-------------------------------+-------------------------------------------------------+ | paddle.nn | 组网相关的API,例如 Linear 、卷积 Conv2D 、 | -| | 循环神经网络 LSTM 、损失函数 CrossEntropyLoss 、 | +| | 循环神经网络 RNN 、损失函数 CrossEntropyLoss 、 | | | 激活函数 ReLU 等。 | +-------------------------------+-------------------------------------------------------+ | paddle.static | 静态图下基础框架相关API,比如:Variable, Program, | diff --git a/doc/paddle/api/index_en.rst b/doc/paddle/api/index_en.rst index d472f217717..33503493596 100644 --- a/doc/paddle/api/index_en.rst +++ b/doc/paddle/api/index_en.rst @@ -33,7 +33,7 @@ In this version, PaddlePaddle has made many optimizations to the APIs. You can r | | ProgBarLogger, etc. | +-------------------------------+-------------------------------------------------------+ | paddle.nn | Networking-related APIs such as Linear, Conv2D, | -| | CrossEntropyLoss, LSTM,and ReLU | +| | CrossEntropyLoss, RNN,and ReLU | +-------------------------------+-------------------------------------------------------+ | paddle.static | Basic framework related APIs under static graph, | | | such as Variable, Program, Executor, etc. | diff --git a/doc/paddle/api/not_display_doc_list b/doc/paddle/api/not_display_doc_list index 0df8f3f4e4f..d73db61c10d 100644 --- a/doc/paddle/api/not_display_doc_list +++ b/doc/paddle/api/not_display_doc_list @@ -3,3 +3,4 @@ paddle.hapi.progressbar.ProgressBar paddle.fluid.contrib paddle.reader paddle.dataset +paddle.utils.op_version.OpLastCheckpointChecker diff --git a/doc/paddle/api/paddle/amp/Overview_cn.rst b/doc/paddle/api/paddle/amp/Overview_cn.rst new file mode 100644 index 00000000000..cfec4ef8849 --- /dev/null +++ b/doc/paddle/api/paddle/amp/Overview_cn.rst @@ -0,0 +1,58 @@ +.. _cn_overview_amp: + +paddle.amp +--------------------- + +paddle.amp 目录下包含飞桨框架支持的动态图自动混合精度(AMP)相关的API。具体如下: + +- :ref:`AMP相关API ` +- :ref:`开启AMP后默认转化为float16计算的相关OP ` +- :ref:`开启AMP后默认使用float32计算的相关OP ` + + + +.. _about_amp: +AMP相关API +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`auto_cast ` ", "创建AMP上下文环境" + " :ref:`GradScaler ` ", "控制loss的缩放比例" + +.. _about_amp_white_list_ops: +开启AMP后默认转化为float16计算的相关OP +::::::::::::::::::::::: + +.. csv-table:: + :header: "OP名称", "OP功能" + :widths: 10, 30 + + "conv2d", "卷积计算" + "matmul", "矩阵乘法" + "matmul_v2", "矩阵乘法" + "mul", "矩阵乘法" + +.. _about_amp_black_list_ops: +开启AMP后默认使用float32计算的相关OP +::::::::::::::::::::::: + +.. csv-table:: + :header: "OP名称", "OP功能" + :widths: 10, 30 + + "exp", "指数运算" + "square", "平方运算" + "log", "对数运算" + "mean", "取平均值" + "sum", "求和运算" + "cos_sim", "余弦相似度" + "softmax", "softmax操作" + "softmax_with_cross_entropy", "softmax交叉熵损失函数" + "sigmoid_cross_entropy_with_logits", "按元素的概率误差" + "cross_entropy", "交叉熵" + "cross_entropy2", "交叉熵" + + diff --git a/doc/paddle/api/paddle/distribution/Overview_cn.rst b/doc/paddle/api/paddle/distribution/Overview_cn.rst new file mode 100644 index 00000000000..8d174235a1f --- /dev/null +++ b/doc/paddle/api/paddle/distribution/Overview_cn.rst @@ -0,0 +1,24 @@ +.. _cn_overview_distribution: + +paddle.distribution +--------------------- + +paddle.distribution 目录下包含飞桨框架支持的概率分布相关的API。具体如下: + +- :ref:`概率分布相关API ` + + + +.. _about_distribution: +概率分布相关API +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`Distribution ` ", "Distribution概率分布抽象基类" + " :ref:`Categorical ` ", "Categorical概率分布类" + " :ref:`Normal ` ", "Normal概率分布类" + " :ref:`Uniform ` ", "Uniform概率分布类" + diff --git a/doc/paddle/api/paddle/fluid/clip/ClipGradByValue_cn.rst b/doc/paddle/api/paddle/fluid/clip/ClipGradByValue_cn.rst index 0db8afd5742..4dae8638d6d 100644 --- a/doc/paddle/api/paddle/fluid/clip/ClipGradByValue_cn.rst +++ b/doc/paddle/api/paddle/fluid/clip/ClipGradByValue_cn.rst @@ -1,4 +1,4 @@ -.. _cn_api_fluid_clip_ClipGradByValue +.. _cn_api_fluid_clip_ClipGradByValue: ClipGradByValue ------------------------------- diff --git a/doc/paddle/api/paddle/fluid/core/CPUPlace_cn.rst b/doc/paddle/api/paddle/fluid/core/CPUPlace_cn.rst index a5127cb818f..890773e73bd 100644 --- a/doc/paddle/api/paddle/fluid/core/CPUPlace_cn.rst +++ b/doc/paddle/api/paddle/fluid/core/CPUPlace_cn.rst @@ -3,7 +3,7 @@ CPUPlace ------------------------------- -.. py:class:: paddle.fluid.CPUPlace +.. py:class:: paddle.CPUPlace diff --git a/doc/paddle/api/paddle/fluid/core/CUDAPinnedPlace_cn.rst b/doc/paddle/api/paddle/fluid/core/CUDAPinnedPlace_cn.rst index 2e6f8a191d6..daa087d97de 100644 --- a/doc/paddle/api/paddle/fluid/core/CUDAPinnedPlace_cn.rst +++ b/doc/paddle/api/paddle/fluid/core/CUDAPinnedPlace_cn.rst @@ -3,7 +3,7 @@ CUDAPinnedPlace ------------------------------- -.. py:class:: paddle.fluid.CUDAPinnedPlace +.. py:class:: paddle.CUDAPinnedPlace diff --git a/doc/paddle/api/paddle/fluid/core/XPUPlace_cn.rst b/doc/paddle/api/paddle/fluid/core/XPUPlace_cn.rst new file mode 100644 index 00000000000..b7fa4b75b7a --- /dev/null +++ b/doc/paddle/api/paddle/fluid/core/XPUPlace_cn.rst @@ -0,0 +1,29 @@ +.. _cn_api_fluid_XPUPlace: + +XPUPlace +------------------------------- + +.. py:class:: paddle.XPUPlace + + + + + +``XPUPlace`` 是一个设备描述符,表示一个分配或将要分配 ``Tensor`` 的 Baidu Kunlun XPU 设备。 +每个 ``XPUPlace`` 有一个 ``dev_id`` (设备id)来表明当前的 ``XPUPlace`` 所代表的显卡编号,编号从 0 开始。 +``dev_id`` 不同的 ``XPUPlace`` 所对应的内存不可相互访问。 + +参数: + - **id** (int,可选) - XPU的设备ID。如果为 ``None``,则默认会使用 id 为 0 的设备。默认值为 ``None``。 + +**代码示例** + +.. code-block:: python + + import paddle + + place = paddle.XPUPlace(0) + + + + diff --git a/doc/paddle/api/paddle/fluid/dygraph/BatchNorm_cn.rst b/doc/paddle/api/paddle/fluid/dygraph/BatchNorm_cn.rst index d0be6c8bcc7..b0c3d16eabf 100644 --- a/doc/paddle/api/paddle/fluid/dygraph/BatchNorm_cn.rst +++ b/doc/paddle/api/paddle/fluid/dygraph/BatchNorm_cn.rst @@ -3,7 +3,7 @@ BatchNorm ------------------------------- -.. py:class:: paddle.fluid.dygraph.BatchNorm(num_channels, act=None, is_test=False, momentum=0.9, epsilon=1e-05, param_attr=None, bias_attr=None, dtype='float32', data_layout='NCHW', in_place=False, moving_mean_name=None, moving_variance_name=None, do_model_average_for_mean_and_var=False, use_global_stats=False, trainable_statistics=False) +.. py:class:: paddle.nn.BatchNorm(num_channels, act=None, is_test=False, momentum=0.9, epsilon=1e-05, param_attr=None, bias_attr=None, dtype='float32', data_layout='NCHW', in_place=False, moving_mean_name=None, moving_variance_name=None, do_model_average_for_mean_and_var=False, use_global_stats=False, trainable_statistics=False) @@ -60,14 +60,13 @@ BatchNorm .. code-block:: python - import paddle.fluid as fluid - from paddle.fluid.dygraph.base import to_variable + import paddle import numpy as np - x = np.random.random(size=(3, 10, 3, 7)).astype('float32') - with fluid.dygraph.guard(): - x = to_variable(x) - batch_norm = fluid.BatchNorm(10) - hidden1 = batch_norm(x) - + x_data = np.random.random(size=(3, 10, 3, 7)).astype('float32') + x = paddle.to_tensor(x_data) + batch_norm = paddle.nn.BatchNorm(10) + batch_norm_out = batch_norm(x) + print(batch_norm_out.shape) + # [3, 10, 3, 7] diff --git a/doc/paddle/api/paddle/fluid/dygraph/ProgramTranslator_cn.rst b/doc/paddle/api/paddle/fluid/dygraph/ProgramTranslator_cn.rst index b8b2b8e8348..c93d1304c23 100644 --- a/doc/paddle/api/paddle/fluid/dygraph/ProgramTranslator_cn.rst +++ b/doc/paddle/api/paddle/fluid/dygraph/ProgramTranslator_cn.rst @@ -1,4 +1,4 @@ -.. _cn_api_fluid_dygraph_ProgramTranslator +.. _cn_api_fluid_dygraph_ProgramTranslator: ProgramTranslator ------------------------------- diff --git a/doc/paddle/api/paddle/fluid/executor/Executor_cn.rst b/doc/paddle/api/paddle/fluid/executor/Executor_cn.rst index dba9e880c8d..3dfc65cad4a 100644 --- a/doc/paddle/api/paddle/fluid/executor/Executor_cn.rst +++ b/doc/paddle/api/paddle/fluid/executor/Executor_cn.rst @@ -220,7 +220,7 @@ infer_from_dataset的文档与train_from_dataset几乎完全相同,只是在 - **scope** (Scope) – 执行这个program的域,用户可以指定不同的域。默认为全局域 - **thread** (int) – 用户想要在这个函数中运行的线程数量。线程的实际数量为min(Dataset.thread_num, thread),如果thread > 0,默认为0 - **debug** (bool) – 是否开启debug模式,默认为False - - **fetch_list** (Tensor List) – 返回变量列表,每个变量都会在训练过程中被打印出来,默认为None + - **fetch_list** (Tensor List) – 返回变量列表,每个变量都会在预测过程中被打印出来,默认为None - **fetch_info** (String List) – 每个变量的打印信息,默认为None - **print_period** (int) – 每两次打印之间间隔的mini-batches的数量,默认为100 diff --git a/doc/paddle/api/paddle/fluid/executor/scope_guard_cn.rst b/doc/paddle/api/paddle/fluid/executor/scope_guard_cn.rst index 11915aac0ad..c9f8055bd1b 100644 --- a/doc/paddle/api/paddle/fluid/executor/scope_guard_cn.rst +++ b/doc/paddle/api/paddle/fluid/executor/scope_guard_cn.rst @@ -4,7 +4,7 @@ scope_guard ------------------------------- -.. py:function:: paddle.fluid.executor.scope_guard (scope) +.. py:function:: paddle.static.scope_guard (scope) diff --git a/doc/paddle/api/paddle/fluid/framework/Variable_cn.rst b/doc/paddle/api/paddle/fluid/framework/Variable_cn.rst index 83af840cce8..b3d76960758 100644 --- a/doc/paddle/api/paddle/fluid/framework/Variable_cn.rst +++ b/doc/paddle/api/paddle/fluid/framework/Variable_cn.rst @@ -3,408 +3,155 @@ Variable ------------------------------- -.. py:class:: paddle.fluid.Variable - - +.. py:class:: paddle.static.Variable **注意:** **1. 请不要直接调用** `Variable` **的构造函数,因为这会造成严重的错误发生!** - **2. 在静态图形模式下:请使用** `Block.create_var` **创建一个静态的** `Variable` **,该静态的** `Variable` **在使用** :ref:`cn_api_fluid_executor` **执行前是没有实际数据的。** + **2. 请使用** `Block.create_var` **创建一个静态的** `Variable` **,该静态的** `Variable` **在使用** :ref:`cn_api_fluid_executor` **执行前是没有实际数据的。** - **3. 在** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下:请使用** :ref:`cn_api_fluid_dygraph_to_variable` 创建一个拥有实际数据的 :ref:`api_guide_Variable` +在Paddle静态图模式中,OP的每个输入和输出都是 :ref:`api_guide_Variable` 。多数情况下, :ref:`api_guide_Variable` 用于保存不同种类的数据或训练标签。 -在Fluid中,OP的每个输入和输出都是 :ref:`api_guide_Variable` 。多数情况下, :ref:`api_guide_Variable` 用于保存不同种类的数据或训练标签。 - -:ref:`api_guide_Variable` 总是属于某一个 :ref:`api_guide_Block` 。所有 :ref:`api_guide_Variable` 都有其自己的 ``name`` ,不同 :ref:`api_guide_Block` 中的两个 :ref:`api_guide_Variable` 可以具有相同的名称。如果使用的 **不是** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ 模式,那么同一个 :ref:`api_guide_Block` 中的两个或更多 :ref:`api_guide_Variable` 拥有相同 ``name`` 将意味着他们会共享相同的内容。通常我们使用这种方式来实现 **参数共享** +:ref:`api_guide_Variable` 总是属于某一个 :ref:`api_guide_Block` 。所有 :ref:`api_guide_Variable` 都有其自己的 ``name`` ,不同 :ref:`api_guide_Block` 中的两个 :ref:`api_guide_Variable` 可以具有相同的名称。如果使用的 **不是** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ 模式,那么同一个 :ref:`api_guide_Block` 中的两个或更多 :ref:`api_guide_Variable` 拥有相同 ``name`` 将意味着他们会共享相同的内容。通常我们使用这种方式来实现 **参数共享**。 :ref:`api_guide_Variable` 有很多种。它们每种都有自己的属性和用法。请参考 `framework.proto `_ 以获得详细信息。 :ref:`api_guide_Variable` 的大多数成员变量可以设置为 ``None``。它的意思是它不可用或稍后指定。 如果您希望创建一个 :ref:`api_guide_Variable` 那么可以参考如下示例: **示例代码:** - -在静态图形模式下: - .. code-block:: python - - import paddle.fluid as fluid - cur_program = fluid.Program() - cur_block = cur_program.current_block() - new_variable = cur_block.create_var(name="X", - shape=[-1, 23, 48], - dtype='float32') -在 `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ 模式下: - .. code-block:: python - - import paddle.fluid as fluid - import numpy as np - with fluid.dygraph.guard(): - new_variable = fluid.dygraph.to_variable(np.arange(10)) - - -.. py:method:: detach() - -**注意:** - - **1. 该API只在** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下生效** - - **2.** ``detach`` **后的** :ref:`api_guide_Variable` **将会成为临时变量** - -产生一个新的,和当前计算图分离的,但是拥有当前 :ref:`api_guide_Variable` 其内容的临时变量 - -返回:一个新的,和当前计算图分离的,但是拥有当前 :ref:`api_guide_Variable` 其内容的临时 :ref:`api_guide_Variable` - -返回类型:(:ref:`api_guide_Variable` | 和输入的 ``Dtype`` 一致) - -**示例代码** .. code-block:: python - import paddle.fluid as fluid - from paddle.fluid.dygraph.base import to_variable - from paddle.fluid.dygraph import Linear - import numpy as np + import paddle - data = np.random.uniform(-1, 1, [30, 10, 32]).astype('float32') - with fluid.dygraph.guard(): - linear = Linear(32, 64) - data = to_variable(data) - x = linear(data) - y = x.detach() + paddle.enable_static() -.. py:method:: numpy() - -**注意:** + 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') - **1. 该API只在** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下生效** - - -返回一个 ``ndarray`` 来表示当前 :ref:`api_guide_Variable` 的值 - -返回:``numpy`` 的数组,表示当前 :ref:`api_guide_Variable` 的实际值 - -返回类型:ndarray,``dtype`` 和输入的 ``dtype`` 一致 - -**示例代码** - .. code-block:: python +.. py:method:: to_string(throw_on_error, with_details=True) - import paddle.fluid as fluid - from paddle.fluid.dygraph.base import to_variable - from paddle.fluid.dygraph import Linear - import numpy as np +获取该 :ref:`api_guide_Variable` 的静态描述字符串。 - data = np.random.uniform(-1, 1, [30, 10, 32]).astype('float32') - with fluid.dygraph.guard(): - linear = Linear(32, 64) - data = to_variable(data) - x = linear(data) - print(x.numpy()) - -.. py:method:: set_value() - -**注意:** - - **1. 该API只在** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下生效** - -为此 :ref:`api_guide_Variable` 设置一个新的值。 - -**参数:** - - - **value**: ( :ref:`api_guide_Variable` 或 ``ndarray`` ) 要赋值给此 :ref:`api_guide_Variable` 的新的值。 - -返回:无 - -抛出异常: ``ValueError`` - 当要赋于的新值的 ``shape`` 和此 :ref:`api_guide_Variable` 原有的 ``shape`` 不同时,抛出 ``ValueError`` 。 - -**示例代码** - .. code-block:: python - - import paddle.fluid as fluid - from paddle.fluid.dygraph.base import to_variable - from paddle.fluid.dygraph import Linear - import numpy as np - - data = np.ones([3, 1024], dtype='float32') - with fluid.dygraph.guard(): - linear = fluid.dygraph.Linear(1024, 4) - t = to_variable(data) - linear(t) # 使用默认参数值调用前向 - custom_weight = np.random.randn(1024, 4).astype("float32") - linear.weight.set_value(custom_weight) # 将参数修改为自定义的值 - out = linear(t) # 使用新的参数值调用前向 - -.. py:method:: backward() - -**注意:** - - **1. 该API只在** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下生效** - - **2. 由于如果该** :ref:`api_guide_Variable` **以上没有任何地方需要梯度,那么仅仅设置该** :ref:`api_guide_Variable` **的梯度为** ``1`` **是没有意义的。因此,这种情况下,为了节省一些计算,我们不去产生该** :ref:`api_guide_Variable` **的梯度** - -从该节点开始执行反向 - -**参数:** +**参数:** + - **throw_on_error** (bool) - 是否在没有设置必需字段时抛出异常。 + - **with_details** (bool) - 值为true时,打印更多关于 :ref:`api_guide_Variable` 的信息,如 ``error_clip`` , ``stop_gradient`` 等。 - - **retain_graph** (bool,可选) – 该参数用于确定反向梯度更新完成后反向梯度计算图是否需要保留(retain_graph为True则保留反向梯度计算图)。若用户打算在执行完该方法( :code:`backward` )后,继续向之前已构建的计算图中添加更多的Op,则需要设置 :code:`retain_graph` 值为True(这样才会保留之前计算得到的梯度)。可以看出,将 :code:`retain_graph` 设置为False可降低内存的占用。默认值为False。 +返回:用于静态描述该 :ref:`api_guide_Variable` 的字符串。 -返回:无 +返回类型: str +抛出异常: ``ValueError`` - 当 ``throw_on_error == true`` ,当没有设置任何必需的字段时,抛出 ``ValueError`` 。 **示例代码** .. code-block:: python - import numpy as np import paddle - paddle.disable_static() - x = np.ones([2, 2], np.float32) - inputs = [] - for _ in range(10): - tmp = paddle.to_tensor(x) - # 如果这里我们不为输入tmp设置stop_gradient=False,那么后面loss也将因为这个链路都不需要梯度 - # 而不产生梯度 - tmp.stop_gradient=False - inputs.append(tmp) - ret = paddle.sums(inputs) - loss = paddle.reduce_sum(ret) - loss.backward() - -.. py:method:: gradient() - -**注意:** - - **1. 该API只在** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下生效** - - **2. 由于如果该** :ref:`api_guide_Variable` **以上没有任何地方需要梯度,那么仅仅设置该** :ref:`api_guide_Variable` **的梯度为** ``1`` **是没有意义的。因此,这种情况下,为了节省一些计算,我们不去产生该** :ref:`api_guide_Variable` **的梯度** -获取该 :ref:`api_guide_Variable` 的梯度值 + paddle.enable_static() -返回:如果 :ref:`api_guide_Variable` 的类型是LoDTensor(参见 :ref:`cn_user_guide_lod_tensor` ),返回该 :ref:`api_guide_Variable` 类型为 ``ndarray`` 的梯度值;如果 :ref:`api_guide_Variable` 的类型是SelectedRows,返回该 :ref:`api_guide_Variable` 类型为 ``ndarray`` 的梯度值和类型为 ``ndarray`` 的词id组成的tuple。 - -返回类型:``ndarray`` 或者 ``tuple of ndarray`` , 返回类型 ``tuple of ndarray`` 仅在 :ref:`cn_api_fluid_dygraph_Embedding` 层稀疏更新时产生。 - - -**示例代码** - .. code-block:: python - - import paddle.fluid as fluid - import numpy as np - - # example1: 返回ndarray - x = np.ones([2, 2], np.float32) - with fluid.dygraph.guard(): - inputs2 = [] - for _ in range(10): - tmp = fluid.dygraph.base.to_variable(x) - tmp.stop_gradient=False - inputs2.append(tmp) - ret2 = fluid.layers.sums(inputs2) - loss2 = fluid.layers.reduce_sum(ret2) - loss2.backward() - print(loss2.gradient()) - - # example2: 返回tuple of ndarray - with fluid.dygraph.guard(): - embedding = fluid.dygraph.Embedding( - size=[20, 32], - param_attr='emb.w', - is_sparse=True) - x_data = np.arange(12).reshape(4, 3).astype('int64') - x_data = x_data.reshape((-1, 3, 1)) - x = fluid.dygraph.base.to_variable(x_data) - out = embedding(x) - out.backward() - print(embedding.weight.gradient()) - -.. py:method:: clear_gradient() + 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)) - **1. 该API只在** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下生效** - **2. 只有当该** :ref:`api_guide_Variable` **有梯度时才可调用,通常我们都会为参数调用这个方法,因为临时变量的梯度将会在其离开作用域时被** ``python`` **自动清除** +.. py:method:: clone(self) -设置该 :ref:`api_guide_Variable` 的梯度为零 +返回一个新的 ``Variable`` , 其复制原 ``Variable`` 并且新的 ``Variable`` 也被保留在计算图中,即复制的新 ``Variable`` 也参与反向计算。调用 ``out = variable.clone()`` 与 ``out = assign(variable)`` 效果一样。 -返回:无 +返回:复制的新 ``Variable``。 +返回类型: ``Variable`` **示例代码** .. code-block:: python - import paddle.fluid as fluid - import numpy as np - - x = np.ones([2, 2], np.float32) - with fluid.dygraph.guard(): - inputs2 = [] - for _ in range(10): - tmp = fluid.dygraph.base.to_variable(x) - tmp.stop_gradient=False - inputs2.append(tmp) - ret2 = fluid.layers.sums(inputs2) - loss2 = fluid.layers.reduce_sum(ret2) - loss2.backward() - print(loss2.gradient()) - loss2.clear_gradient() - print("After clear {}".format(loss2.gradient())) + import paddle + paddle.enable_static() -.. py:method:: to_string() - -**注意:** - - **1. 该API只在非** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下生效** - -获取该 :ref:`api_guide_Variable` 的静态描述字符串 - -**参数:(仅在非** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下生效)** - - **throw_on_error** (bool) - 是否在没有设置必需字段时抛出异常。 - - **with_details** (bool) - 值为true时,打印更多关于 :ref:`api_guide_Variable` 的信息,如 ``error_clip`` , ``stop_gradient`` 等 - - -返回:用于静态描述该 :ref:`api_guide_Variable` 的字符串 + # create a static Variable + x = paddle.static.data(name='x', shape=[3, 2, 1]) - -返回: 将Program转换为字符串 - -返回类型: str - -抛出异常: ``ValueError`` - 当 ``throw_on_error == true`` ,当没有设置任何必需的字段时,抛出 ``ValueError`` 。 - - -**示例代码** - .. code-block:: python - - import paddle.fluid as fluid - - cur_program = fluid.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)) + # create a cloned Variable + y = x.clone() .. py:method:: astype(self, dtype) -将该 :ref:`api_guide_Variable` 中的数据转换成目标 ``Dtype`` +将该 :ref:`api_guide_Variable` 中的数据转换成目标 ``Dtype``。 **参数:** - **self** ( :ref:`api_guide_Variable` ) - 当前 :ref:`api_guide_Variable` , 用户不需要传入。 - - **dtype** (int | float | float64) - 希望转换成的 ``Dtype`` + - **dtype** (int | float | float64) - 希望转换成的 ``Dtype``。 -返回:一个全新的转换了 ``Dtype`` 的 :ref:`api_guide_Variable` +返回:一个全新的转换了 ``Dtype`` 的 :ref:`api_guide_Variable`。 返回类型: :ref:`api_guide_Variable` - **示例代码** + .. code-block:: python -在静态图模式下: - .. code-block:: python - - import paddle.fluid as fluid - - startup_prog = fluid.Program() - main_prog = fluid.Program() - with fluid.program_guard(startup_prog, main_prog): - original_variable = fluid.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)) - - -在 `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ 模式下: - .. code-block:: python - - import paddle.fluid as fluid - import numpy as np + import paddle - x = np.ones([2, 2], np.float32) - with fluid.dygraph.guard(): - original_variable = fluid.dygraph.to_variable(x) - print("original var's dtype is: {}, numpy dtype is {}".format(original_variable.dtype, original_variable.numpy().dtype)) - new_variable = original_variable.astype('int64') - print("new var's dtype is: {}, numpy dtype is {}".format(new_variable.dtype, new_variable.numpy().dtype)) + 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)) 属性 :::::::::::: -.. py:attribute:: stop_gradient - -**注意:该属性在** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下除参数以外默认值为** ``True`` **,而参数的该属性默认值为** ``False`` **。在静态图下所有的** :ref:`api_guide_Variable` **该属性默认值都为** ``False`` - -是否从此 :ref:`api_guide_Variable` 开始,之前的相关部分都停止梯度计算 - -**示例代码** - .. code-block:: python - - import paddle.fluid as fluid - import numpy as np - - with fluid.dygraph.guard(): - value0 = np.arange(26).reshape(2, 13).astype("float32") - value1 = np.arange(6).reshape(2, 3).astype("float32") - value2 = np.arange(10).reshape(2, 5).astype("float32") - linear = fluid.Linear(13, 5, dtype="float32") - linear2 = fluid.Linear(3, 3, dtype="float32") - a = fluid.dygraph.to_variable(value0) - b = fluid.dygraph.to_variable(value1) - c = fluid.dygraph.to_variable(value2) - out1 = linear(a) - out2 = linear2(b) - out1.stop_gradient = True - out = fluid.layers.concat(input=[out1, out2, c], axis=1) - out.backward() - # 可以发现这里linear的参数梯度变成了None - assert linear.weight.gradient() is None - assert out1.gradient() is None - .. py:attribute:: persistable **注意:该属性我们即将废弃,此介绍仅为了帮助用户理解概念, 1.6版本后用户可以不再关心该属性** **1. 该属性除参数以外默认值为** ``False`` **,而参数的该属性默认值为** ``True`` 。 - **2. 该属性在** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下一经初始化即不能修改,这是由于在动态执行时,** :ref:`api_guide_Variable` **的生命周期将由** ``Python`` **自行控制不再需要通过该属性来修改** - -此 :ref:`api_guide_Variable` 是否是长期存活的 :ref:`api_guide_Variable` +此 :ref:`api_guide_Variable` 是否是长期存活的 :ref:`api_guide_Variable`。 .. py:attribute:: name -**注意:在非** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下,那么同一个** :ref:`api_guide_Block` **中的两个或更多** :ref:`api_guide_Variable` **拥有相同** ``name`` **将意味着他们会共享相同的内容。通常我们使用这种方式来实现参数共享** +**注意:静态图模式下,同一个** :ref:`api_guide_Block` **中的两个或更多** :ref:`api_guide_Variable` **拥有相同** ``name`` **将意味着他们会共享相同的内容。通常我们使用这种方式来实现参数共享。** -此 :ref:`api_guide_Variable` 的名字(str) +此 :ref:`api_guide_Variable` 的名字(str)。 .. py:attribute:: shape -**注意:该属性是只读属性** +**注意:该属性是只读属性。** -此 :ref:`api_guide_Variable` 的维度 +此 :ref:`api_guide_Variable` 的维度。 .. py:attribute:: dtype -**注意:该属性是只读属性** +**注意:该属性是只读属性。** -此 :ref:`api_guide_Variable` 的实际数据类型 +此 :ref:`api_guide_Variable` 的实际数据类型。 .. py:attribute:: lod_level -**注意:** - - **1. 该属性是只读属性** - - **2.** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下,不支持该属性,该值为零** +**注意:该属性是只读属性。** -此 :ref:`api_guide_Variable` 的 ``LoD`` 信息,关于 ``LoD`` 可以参考 :ref:`api_fluid_LoDTensor` 相关内容 +此 :ref:`api_guide_Variable` 的 ``LoD`` 信息,关于 ``LoD`` 可以参考 :ref:`api_fluid_LoDTensor` 相关内容。 .. py:attribute:: type -**注意:该属性是只读属性** +**注意:该属性是只读属性。** -此 :ref:`api_guide_Variable` 的内存模型,例如是::ref:`api_fluid_LoDTensor`, 或者SelectedRows +此 :ref:`api_guide_Variable` 的内存模型,例如是::ref:`api_fluid_LoDTensor`, 或者SelectedRows。 diff --git a/doc/paddle/api/paddle/fluid/framework/default_main_program_cn.rst b/doc/paddle/api/paddle/fluid/framework/default_main_program_cn.rst index dd2fe0dd0de..43577c40a19 100644 --- a/doc/paddle/api/paddle/fluid/framework/default_main_program_cn.rst +++ b/doc/paddle/api/paddle/fluid/framework/default_main_program_cn.rst @@ -3,7 +3,7 @@ default_main_program ------------------------------- -.. py:function:: paddle.fluid.default_main_program() +.. py:function:: paddle.static.default_main_program() @@ -15,10 +15,14 @@ default_main_program 可以使用 :ref:`cn_api_fluid_program_guard` 来切换 ``default main program``。 -返回: :ref:`cn_api_fluid_Program` ,当前默认用于存储OP和Tensor描述的Program。 +返回 +::::::::: + :ref:`cn_api_fluid_Program` ,当前默认用于存储OP和Tensor描述的Program。 -**代码示例** + +代码示例 +::::::::: .. code-block:: python diff --git a/doc/paddle/api/paddle/fluid/framework/default_startup_program_cn.rst b/doc/paddle/api/paddle/fluid/framework/default_startup_program_cn.rst index 6a3698e1106..f632725a03b 100644 --- a/doc/paddle/api/paddle/fluid/framework/default_startup_program_cn.rst +++ b/doc/paddle/api/paddle/fluid/framework/default_startup_program_cn.rst @@ -6,7 +6,7 @@ default_startup_program ------------------------------- -.. py:function:: paddle.fluid.default_startup_program() +.. py:function:: paddle.static.default_startup_program() @@ -19,10 +19,13 @@ default_startup_program 该函数将返回默认的或当前的 ``startup program`` 。用户可以使用 :ref:`cn_api_fluid_program_guard` 来切换 :ref:`cn_api_fluid_Program` 。 -返回: :ref:`cn_api_fluid_Program` ,当前的默认/全局的 ``startup program`` 。 +返回 +::::::::: + :ref:`cn_api_fluid_Program` ,当前的默认/全局的 ``startup program`` 。 -**代码示例:** +代码示例 +::::::::: .. code-block:: python diff --git a/doc/paddle/api/paddle/fluid/framework/device_guard_cn.rst b/doc/paddle/api/paddle/fluid/framework/device_guard_cn.rst new file mode 100644 index 00000000000..1d9499a77a4 --- /dev/null +++ b/doc/paddle/api/paddle/fluid/framework/device_guard_cn.rst @@ -0,0 +1,41 @@ +.. _cn_api_device_guard: + +device_guard +------------------------------- + +**注意:该API仅支持静态图模式** + +.. py:function:: paddle.static.device_guard(device=None) + +一个用于指定OP运行设备的上下文管理器。 + +参数: + - **device** (str|None) – 指定上下文中使用的设备。它可以是'cpu'或者'gpu‘,当它被设置为'cpu'或者'gpu'时,创建在该上下文中的OP将被运行在CPUPlace或者CUDAPlace上。若设置为'gpu',同时程序运行在单卡模式下,设备的索引将与执行器的设备索引保持一致。默认值:None,在该上下文中的OP将被自动地分配设备。 + +**代码示例** + +.. code-block:: python + + import paddle + + paddle.enable_static() + support_gpu = paddle.is_compiled_with_cuda() + place = paddle.CPUPlace() + if support_gpu: + place = paddle.CUDAPlace(0) + + # if GPU is supported, the three OPs below will be automatically assigned to CUDAPlace(0) + data1 = paddle.full(shape=[1, 3, 8, 8], fill_value=0.5, dtype='float32') + data2 = paddle.full(shape=[1, 3, 64], fill_value=0.5, dtype='float32') + shape = paddle.shape(data2) + + with paddle.static.device_guard("cpu"): + # Ops created here will be placed on CPUPlace + shape = paddle.slice(shape, axes=[0], starts=[0], ends=[4]) + with paddle.static.device_guard('gpu'): + # if GPU is supported, OPs created here will be placed on CUDAPlace(0), otherwise on CPUPlace + out = paddle.reshape(data1, shape=shape) + + exe = paddle.static.Executor(place) + exe.run(paddle.static.default_startup_program()) + result = exe.run(fetch_list=[out]) diff --git a/doc/paddle/api/paddle/fluid/framework/is_compiled_with_cuda_cn.rst b/doc/paddle/api/paddle/fluid/framework/is_compiled_with_cuda_cn.rst index 0e9c9be2880..3bbe4f90f1a 100644 --- a/doc/paddle/api/paddle/fluid/framework/is_compiled_with_cuda_cn.rst +++ b/doc/paddle/api/paddle/fluid/framework/is_compiled_with_cuda_cn.rst @@ -3,7 +3,7 @@ is_compiled_with_cuda ------------------------------- -.. py:function:: paddle.fluid.is_compiled_with_cuda() +.. py:function:: paddle.is_compiled_with_cuda() diff --git a/doc/paddle/api/paddle/fluid/framework/is_compiled_with_xpu_cn.rst b/doc/paddle/api/paddle/fluid/framework/is_compiled_with_xpu_cn.rst new file mode 100644 index 00000000000..b1e87083c88 --- /dev/null +++ b/doc/paddle/api/paddle/fluid/framework/is_compiled_with_xpu_cn.rst @@ -0,0 +1,22 @@ +.. _cn_api_fluid_is_compiled_with_xpu: + +is_compiled_with_xpu +------------------------------- + +.. py:function:: paddle.is_compiled_with_xpu() + + + + +检查 ``whl`` 包是否可以被用来在Baidu Kunlun XPU上运行模型 + +返回:bool,支持Baidu Kunlun XPU则为True,否则为False。 + +**示例代码** + +.. code-block:: python + + import paddle + support_xpu = paddle.is_compiled_with_xpu() + + diff --git a/doc/paddle/api/paddle/fluid/framework/xpu_places_cn.rst b/doc/paddle/api/paddle/fluid/framework/xpu_places_cn.rst new file mode 100644 index 00000000000..0feca06fbea --- /dev/null +++ b/doc/paddle/api/paddle/fluid/framework/xpu_places_cn.rst @@ -0,0 +1,39 @@ +.. _cn_api_fluid_xpu_places: + +xpu_places +------------------------------- + +.. py:function:: paddle.static.xpu_places(device_ids=None) + + +.. note:: + 多卡任务请先使用 FLAGS_selected_xpus 环境变量设置可见的XPU设备,下个版本将会修正 XPU_VISIBLE_DEVICES 环境变量无效的问题。 + +该接口根据 ``device_ids`` 创建一个或多个 ``paddle.XPUPlace`` 对象,并返回所创建的对象列表。 + +如果 ``device_ids`` 为 ``None``,则首先检查 ``FLAGS_selected_xpus`` 标志。 +例如: ``FLAGS_selected_xpus=0,1,2`` ,则返回的列表将为 ``[paddle.XPUPlace(0), paddle.XPUPlace(1), paddle.XPUPlace(2)]``。 +如果未设置标志 ``FLAGS_selected_xpus`` ,则根据 ``XPU_VISIBLE_DEVICES`` 环境变量,返回所有可见的 XPU places。 + +如果 ``device_ids`` 不是 ``None``,它应该是使用的XPU设备ID的列表或元组。 +例如: ``device_id=[0,1,2]`` ,返回的列表将是 ``[paddle.XPUPlace(0), paddle.XPUPlace(1), paddle.XPUPlace(2)]``。 + +参数 +::::::::: + - **device_ids** (list(int)|tuple(int),可选) - XPU的设备ID列表或元组。默认值为 ``None``。 + +返回 +::::::::: +list[paddle.XPUPlace],创建的 ``paddle.XPUPlace`` 列表。 + +代码示例 +::::::::: + +.. code-block:: python + + import paddle + import paddle.static as static + + paddle.enable_static() + + xpu_places = static.xpu_places() diff --git a/doc/fluid/api_cn/layers_cn/accuracy_cn.rst b/doc/paddle/api/paddle/fluid/layers/accuracy_cn.rst similarity index 57% rename from doc/fluid/api_cn/layers_cn/accuracy_cn.rst rename to doc/paddle/api/paddle/fluid/layers/accuracy_cn.rst index 15c3d9efcb1..9f1ffb8de9f 100755 --- a/doc/fluid/api_cn/layers_cn/accuracy_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/accuracy_cn.rst @@ -3,7 +3,7 @@ accuracy ------------------------------- -.. py:function:: paddle.fluid.layers.accuracy(input, label, k=1, correct=None, total=None) +.. py:function:: paddle.static.accuracy(input, label, k=1, correct=None, total=None) @@ -19,34 +19,34 @@ accuracy layer。 参考 https://en.wikipedia.org/wiki/Precision_and_recall - **correct** (int64|int32)-正确预测值的个数。 - **total** (int64|int32)-总共的预测值。 -返回: 计算出来的正确率。 +返回: Tensor,计算出来的正确率,数据类型为float32。 -返回类型: Variable(Tensor),数据类型为float32的Tensor **代码示例** .. code-block:: python - import paddle.fluid as fluid import numpy as np - data = fluid.layers.data(name="input", shape=[-1, 32, 32], dtype="float32") - label = fluid.layers.data(name="label", shape=[-1,1], dtype="int") - fc_out = fluid.layers.fc(input=data, size=10) - predict = fluid.layers.softmax(input=fc_out) - result = fluid.layers.accuracy(input=predict, label=label, k=5) + import paddle + import paddle.static as static + import paddle.nn.functional as F - place = fluid.CPUPlace() - exe = fluid.Executor(place) + paddle.enable_static() + data = static.data(name="input", shape=[-1, 32, 32], dtype="float32") + label = static.data(name="label", shape=[-1,1], dtype="int") + fc_out = static.nn.fc(x=data, size=10) + predict = F.softmax(x=fc_out) + result = static.accuracy(input=predict, label=label, k=5) - exe.run(fluid.default_startup_program()) + place = paddle.CPUPlace() + exe = static.Executor(place) + + exe.run(static.default_startup_program()) x = np.random.rand(3, 32, 32).astype("float32") y = np.array([[1],[0],[1]]) output= exe.run(feed={"input": x,"label": y}, - fetch_list=[result[0]]) + fetch_list=[result[0]]) print(output) - - """ - Output: - [array([0.6666667], dtype=float32)] - """ + + #[array([0.], dtype=float32)] \ No newline at end of file diff --git a/doc/fluid/api_cn/layers_cn/auc_cn.rst b/doc/paddle/api/paddle/fluid/layers/auc_cn.rst similarity index 70% rename from doc/fluid/api_cn/layers_cn/auc_cn.rst rename to doc/paddle/api/paddle/fluid/layers/auc_cn.rst index e915875f5d3..8779f6c8639 100755 --- a/doc/fluid/api_cn/layers_cn/auc_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/auc_cn.rst @@ -3,7 +3,7 @@ auc ------------------------------- -.. py:function:: paddle.fluid.layers.auc(input, label, curve='ROC', num_thresholds=200, topk=1, slide_steps=1) +.. py:function:: paddle.static.auc(input, label, curve='ROC', num_thresholds=200, topk=1, slide_steps=1) @@ -28,7 +28,7 @@ auc - **topk** (int) - 取topk的输出值用于计算。 - **slide_steps** (int) - 当计算batch auc时,不仅用当前步也用于先前步。slide_steps=1,表示用当前步;slide_steps = 3表示用当前步和前两步;slide_steps = 0,则用所有步。 -返回:代表当前AUC的一个元组。 +返回:元组,当前计算出的AUC。数据类型是tensor,支持float32和float64。 返回的元组为auc_out, batch_auc_out, [batch_stat_pos, batch_stat_neg, stat_pos, stat_neg]。 auc_out为准确率的结果。 batch_auc_out为batch准确率的结果。 @@ -37,33 +37,30 @@ batch_stat_neg为batch计算时label=0的统计值 stat_pos计算时label=1的统计值 stat_neg为计算时label=0的统计值 -返回类型: Variable(Tensor),数据类型为float32或float64的Tensor。 - **代码示例**: .. code-block:: python - import paddle.fluid as fluid import numpy as np - data = fluid.layers.data(name="input", shape=[-1, 32,32], dtype="float32") - label = fluid.layers.data(name="label", shape=[1], dtype="int") - fc_out = fluid.layers.fc(input=data, size=2) - predict = fluid.layers.softmax(input=fc_out) - result=fluid.layers.auc(input=predict, label=label) + import paddle + import paddle.static as static + import paddle.nn.functional as F + + paddle.enable_static() + data = static.data(name="input", shape=[-1, 32,32], dtype="float32") + label = static.data(name="label", shape=[-1], dtype="int") + fc_out = static.nn.fc(x=data, size=2) + predict = F.softmax(x=fc_out) + result = static.auc(input=predict, label=label) - place = fluid.CPUPlace() - exe = fluid.Executor(place) + place = paddle.CPUPlace() + exe = static.Executor(place) - exe.run(fluid.default_startup_program()) + exe.run(static.default_startup_program()) x = np.random.rand(3,32,32).astype("float32") y = np.array([1,0,1]) output= exe.run(feed={"input": x,"label": y}, - fetch_list=[result[0]]) + fetch_list=[result[0]]) print(output) - """ - output: - [array([0.5])] - """ - - + #[array([0.])] \ No newline at end of file diff --git a/doc/paddle/api/paddle/fluid/layers/conv3d_cn.rst b/doc/paddle/api/paddle/fluid/layers/conv3d_cn.rst index 57f00ee55e4..409cb2900bf 100644 --- a/doc/paddle/api/paddle/fluid/layers/conv3d_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/conv3d_cn.rst @@ -4,7 +4,7 @@ conv3d ------------------------------- -.. py:function:: paddle.fluid.layers.conv3d(input, num_filters, filter_size, stride=1, padding=0, dilation=1, groups=None, param_attr=None, bias_attr=None, use_cudnn=True, act=None, name=None, data_format="NCDHW") +.. py:function:: paddle.static.nn.conv3d(input, num_filters, filter_size, stride=1, padding=0, dilation=1, groups=None, param_attr=None, bias_attr=None, use_cudnn=True, act=None, name=None, data_format="NCDHW") diff --git a/doc/paddle/api/paddle/fluid/layers/conv3d_transpose_cn.rst b/doc/paddle/api/paddle/fluid/layers/conv3d_transpose_cn.rst index 81341011619..f6a610fae24 100755 --- a/doc/paddle/api/paddle/fluid/layers/conv3d_transpose_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/conv3d_transpose_cn.rst @@ -4,7 +4,7 @@ conv3d_transpose ------------------------------- -.. py:function:: paddle.fluid.layers.conv3d_transpose(input, num_filters, output_size=None, filter_size=None, padding=0, stride=1, dilation=1, groups=None, param_attr=None, bias_attr=None, use_cudnn=True, act=None, name=None, data_format='NCDHW') +.. py:function:: paddle.static.nn.conv3d_transpose(input, num_filters, output_size=None, filter_size=None, padding=0, stride=1, dilation=1, groups=None, param_attr=None, bias_attr=None, use_cudnn=True, act=None, name=None, data_format='NCDHW') diff --git a/doc/paddle/api/paddle/fluid/layers/cos_cn.rst b/doc/paddle/api/paddle/fluid/layers/cos_cn.rst index c5fde054743..aa13b281637 100644 --- a/doc/paddle/api/paddle/fluid/layers/cos_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/cos_cn.rst @@ -22,8 +22,6 @@ cos 返回:输出Tensor,与 ``x`` 维度相同、数据类型相同。 -返回类型:Tensor - **代码示例**: .. code-block:: python diff --git a/doc/paddle/api/paddle/fluid/layers/cosh_cn.rst b/doc/paddle/api/paddle/fluid/layers/cosh_cn.rst index a7c43152b66..91fa897a441 100644 --- a/doc/paddle/api/paddle/fluid/layers/cosh_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/cosh_cn.rst @@ -22,8 +22,6 @@ cosh 返回:输出Tensor,与 ``x`` 维度相同、数据类型相同。 -返回类型:Tensor - **代码示例**: .. code-block:: python diff --git a/doc/paddle/api/paddle/fluid/layers/gather_tree_cn.rst b/doc/paddle/api/paddle/fluid/layers/gather_tree_cn.rst index 1d1d4629b3b..573351d6f1f 100644 --- a/doc/paddle/api/paddle/fluid/layers/gather_tree_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/gather_tree_cn.rst @@ -3,12 +3,12 @@ gather_tree ------------------------------- -.. py:function:: paddle.fluid.layers.gather_tree(ids, parents) +.. py:function:: paddle.nn.functional.gather_tree(ids, parents) -该OP在整个束搜索(Beam Search)结束后使用。在搜索结束后,可以获得每个时间步选择的的候选词id及其对应的在搜索树中的parent节点, ``ids`` 和 ``parents`` 的形状布局均为 :math:`[max\_time, batch\_size, beam\_size]` ,该OP从最后一个时间步回溯产生完整的id序列。 +该OP在整个束搜索(Beam Search)结束后使用。在搜索结束后,可以获得每个时间步选择的的候选词 id 及其对应的在搜索树中的 parent 节点, ``ids`` 和 ``parents`` 的形状布局均为 :math:`[max\_time, batch\_size, beam\_size]` ,该OP从最后一个时间步回溯产生完整的 id 序列。 示例: @@ -41,26 +41,23 @@ gather_tree 参数: - - **ids** (Variable) - 形状为 :math:`[length, batch\_size, beam\_size]` 的三维Tensor,数据类型是int32或int64。包含了所有时间步选择的id。 - - **parents** (Variable) - 形状和数据类型均与 ``ids`` 相同的Tensor。包含了束搜索中每一时间步所选id对应的parent。 + - **ids** (Tensor) - 形状为 :math:`[length, batch\_size, beam\_size]` 的三维 Tensor,数据类型是 int32 或 int64。包含了所有时间步选择的 id。 + - **parents** (Tensor) - 形状和数据类型均与 ``ids`` 相同的 Tensor。包含了束搜索中每一时间步所选 id 对应的 parent。 -返回:和 ``ids`` 具有相同形状和数据类型的Tensor。包含了根据parent回溯而收集产生的完整id序列。 - -返回类型:Variable +返回:和 ``ids`` 具有相同形状和数据类型的 Tensor。包含了根据 parent 回溯而收集产生的完整 id 序列。 **代码示例**: .. code-block:: python - import paddle.fluid as fluid + import paddle + + ids = paddle.to_tensor([[[2, 2], [6, 1]], [[3, 9], [6, 1]], [[0, 1], [9, 0]]]) + + parents = paddle.to_tensor([[[0, 0], [1, 1]], [[1, 0], [1, 0]], [[0, 0], [0, 1]]]) - ids = fluid.data(name='ids', - shape=[5, 2, 2], - dtype='int64') - parents = fluid.data(name='parents', - shape=[5, 2, 2], - dtype='int64') - final_sequences = fluid.layers.gather_tree(ids, parents) + final_sequences = paddle.nn.functional.gather_tree(ids, parents) + # [[[2, 2], [1, 6]], [[3, 3], [6, 1]], [[0, 1], [9, 0]]] diff --git a/doc/paddle/api/paddle/fluid/layers/instance_norm_cn.rst b/doc/paddle/api/paddle/fluid/layers/instance_norm_cn.rst index caf2885e616..d1b88d4a146 100644 --- a/doc/paddle/api/paddle/fluid/layers/instance_norm_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/instance_norm_cn.rst @@ -4,7 +4,7 @@ instance_norm ------------------------------- -.. py:function:: paddle.fluid.layers.instance_norm(input, epsilon=1e-05, param_attr=None, bias_attr=None, name=None) +.. py:function:: paddle.static.nn.instance_norm(input, epsilon=1e-05, param_attr=None, bias_attr=None, name=None) diff --git a/doc/paddle/api/paddle/fluid/layers/multiplex_cn.rst b/doc/paddle/api/paddle/fluid/layers/multiplex_cn.rst index fcc44a78105..55546725358 100644 --- a/doc/paddle/api/paddle/fluid/layers/multiplex_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/multiplex_cn.rst @@ -3,7 +3,7 @@ multiplex ------------------------------- -.. py:function:: paddle.fluid.layers.multiplex(inputs, index) +.. py:function:: paddle.multiplex(inputs, index, name) @@ -35,39 +35,22 @@ multiplex 参数: - **inputs** (list) - 为输入Tensor列表,列表元素为数据类型为float32,float64,int32,int64的多维Tensor。所有输入Tensor的shape应相同,秩必须至少为2。 - - **index** (Variable)- 用来选择输入Tensor中的某些行构建输出Tensor的索引,为数据类型为int32或int64、shape为[M, 1]的2-D Tensor,其中M为输入Tensor个数。 + - **index** (Tensor)- 用来选择输入Tensor中的某些行构建输出Tensor的索引,为数据类型为int32或int64、shape为[M, 1]的2-D Tensor,其中M为输入Tensor个数。 + - **name** (str,可选) – 具体用法请参见 :ref:`api_guide_Name` ,一般无需设置,默认值为None。 -返回:进行Multiplex运算后的输出Tensor。 - -返回类型:Variable(Tensor)。 +返回:Tensor, 进行Multiplex运算后的输出Tensor。 **代码示例** .. code-block:: python - import paddle.fluid as fluid - import numpy as np - - x1 = fluid.layers.data(name='x1', shape=[4], dtype='float32') - x2 = fluid.layers.data(name='x2', shape=[4], dtype='float32') - index = fluid.layers.data(name='index', shape=[1], dtype='int32') - out = fluid.layers.multiplex(inputs=[x1, x2], index=index) - - exe = fluid.Executor(fluid.CPUPlace()) - exe.run(fluid.default_startup_program()) - - img1 = np.array([[1, 2], [3, 4]]).astype(np.float32) - img2 = np.array([[5, 6], [7, 8]]).astype(np.float32) - index = np.array([[1], [0]]).astype(np.int32) - - res = exe.run(fluid.default_main_program(), feed={'x1':img1, 'x2':img2, 'index':index}, fetch_list=[out]) - print(res) # [array([[5., 6.], [3., 4.]], dtype=float32)] - - - - - - - - - + import paddle + import numpy as np + img1 = np.array([[1, 2], [3, 4]]).astype(np.float32) + img2 = np.array([[5, 6], [7, 8]]).astype(np.float32) + inputs = [paddle.to_tensor(img1), paddle.to_tensor(img2)] + index = paddle.to_tensor(np.array([[1], [0]]).astype(np.int32)) + res = paddle.multiplex(inputs, index) + print(res) + # [[5. , 6.], + # [3. , 4.]] diff --git a/doc/paddle/api/paddle/fluid/layers/nce_cn.rst b/doc/paddle/api/paddle/fluid/layers/nce_cn.rst index 79ace0ddcd7..abebb121463 100644 --- a/doc/paddle/api/paddle/fluid/layers/nce_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/nce_cn.rst @@ -4,7 +4,7 @@ nce ------------------------------- -.. py:function:: paddle.fluid.layers.nce(input, label, num_total_classes, sample_weight=None, param_attr=None, bias_attr=None, num_neg_samples=None, name=None, sampler='uniform', custom_dist=None, seed=0, is_sparse=False) +.. py:function:: paddle.static.nn.nce(input, label, num_total_classes, sample_weight=None, param_attr=None, bias_attr=None, num_neg_samples=None, name=None, sampler='uniform', custom_dist=None, seed=0, is_sparse=False) diff --git a/doc/paddle/api/paddle/fluid/layers/nn/py_func_cn.rst b/doc/paddle/api/paddle/fluid/layers/nn/py_func_cn.rst index e59841a1605..c63a1a02d1c 100644 --- a/doc/paddle/api/paddle/fluid/layers/nn/py_func_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/nn/py_func_cn.rst @@ -76,14 +76,14 @@ PaddlePaddle 通过py_func在Python端注册OP。py_func的设计原理在于Pad ce_loss = paddle.nn.loss.CrossEntropyLoss() return ce_loss(prediction, label) - x = paddle.static.data(name='x', shape=[1,4], dtype='float32') - y = paddle.static.data(name='y', shape=[1,10], dtype='int64') + x = paddle.static.data(name='x', shape=[None, 4], dtype='float32') + y = paddle.static.data(name='y', shape=[10], dtype='int64') res = simple_net(x, y) exe = paddle.static.Executor(paddle.CPUPlace()) exe.run(paddle.static.default_startup_program()) - input1 = np.random.random(size=[1,4]).astype('float32') - input2 = np.random.randint(1, 10, size=[1,10], dtype='int64') + input1 = np.random.random(size=[10, 4]).astype('float32') + input2 = np.random.randint(1, 10, size=[10], dtype='int64') out = exe.run(paddle.static.default_main_program(), feed={'x':input1, 'y':input2}, fetch_list=[res.name]) diff --git a/doc/paddle/api/paddle/fluid/layers/shape_cn.rst b/doc/paddle/api/paddle/fluid/layers/shape_cn.rst index 62de5901350..6a625d70006 100755 --- a/doc/paddle/api/paddle/fluid/layers/shape_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/shape_cn.rst @@ -3,7 +3,7 @@ shape ------------------------------- -.. py:function:: paddle.fluid.layers.shape(input) +.. py:function:: paddle.shape(input) @@ -33,9 +33,8 @@ shape层。 - **input** (Tensor)- 输入的多维Tensor或SelectedRows,数据类型为float16,float32,float64,int32,int64。如果输入是SelectedRows类型,则返回其内部持有Tensor的shape。 -返回: 一个Tensor,表示输入Tensor或SelectedRows的shape。 +返回: Tensor, 表示输入Tensor或SelectedRows的shape。 -返回类型:Tensor。 **代码示例:** @@ -44,4 +43,4 @@ shape层。 import paddle x = paddle.randn((2,3)) print(paddle.shape(x)) # [2, 3] - \ No newline at end of file + diff --git a/doc/paddle/api/paddle/fluid/layers/sigmoid_cn.rst b/doc/paddle/api/paddle/fluid/layers/sigmoid_cn.rst index 15c6909222e..29795955696 100755 --- a/doc/paddle/api/paddle/fluid/layers/sigmoid_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/sigmoid_cn.rst @@ -3,7 +3,7 @@ sigmoid ------------------------------- -.. py:function:: paddle.fluid.layers.sigmoid(x, name=None) +.. py:function:: paddle.nn.functional.sigmoid(x, name=None) @@ -14,16 +14,18 @@ sigmoid激活函数 out = \frac{1}{1 + e^{-x}} -参数: +参数 +::::::::: - **x** Tensor - 数据类型为float32,float64。激活函数的输入值。 - **name** (str|None) - 该层名称(可选)。若为空,则自动为该层命名。默认:None -返回:激活函数的输出值 +返回 +::::::::: +Tensor, 激活函数的输出值,数据类型为float32。 -返回类型:Tensor,数据类型为float32的Tensor。 - -**代码示例**: +代码示例 +::::::::: .. code-block:: python diff --git a/doc/paddle/api/paddle/fluid/layers/sinh_cn.rst b/doc/paddle/api/paddle/fluid/layers/sinh_cn.rst new file mode 100644 index 00000000000..20b7f2ebcfa --- /dev/null +++ b/doc/paddle/api/paddle/fluid/layers/sinh_cn.rst @@ -0,0 +1,34 @@ +.. _cn_api_fluid_layers_sinh: + +sinh +------------------------------- + +.. py:function:: paddle.sinh(x, name=None) + + + + +双曲正弦函数。 + +输入范围是 `(-inf, inf)` , 输出范围是 `(-inf, inf)`。 + +.. math:: + + out = \frac{exp(x)-exp(-x)}{2} + +参数: + - x (Tensor) - 输入的Tensor,数据类型为:float32、float64 、float16。 + - name (str,可选) - 操作的名称(可选,默认值为None)。更多信息请参见 :ref:`api_guide_Name`。 + +返回:输出Tensor,与 ``x`` 维度相同、数据类型相同。 + +**代码示例**: + +.. code-block:: python + + import paddle + + x = paddle.to_tensor([-2.0, -1.0, 1.0, 2.0]) + out = paddle.sinh(x) + print(out) + # [-3.62686038, -1.17520118, 1.17520118, 3.62686038] diff --git a/doc/paddle/api/paddle/fluid/layers/temporal_shift_cn.rst b/doc/paddle/api/paddle/fluid/layers/temporal_shift_cn.rst index b1458877013..15a098ce9a1 100644 --- a/doc/paddle/api/paddle/fluid/layers/temporal_shift_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/temporal_shift_cn.rst @@ -2,9 +2,7 @@ temporal_shift ------------------------------- -.. py:function:: paddle.fluid.layers.temporal_shift(x, seg_num, shift_ratio=0.25, name=None) - - +.. py:function:: paddle.nn.functional.temporal_shift(x, seg_num, shift_ratio=0.25, name=None) 该OP用于对输入X做时序通道T上的位移操作,为TSM(Temporal Shift Module)中使用的操作。 @@ -31,20 +29,19 @@ temporal_shift 有关时序移动的详细信息,请参阅文件: `Temporal Shift Module `_ -参数: +参数 +::::::::: - **x** (Tensor) – 时移算符的输入张量。维度为 :math:`[N*T,C,H,W]` 的4-D Tensor。N为批量大小,T为时间段数,C为信道数,H为特征高度,W为特征宽度,数据类型为float32或float64。 - **seg_num** (int) – 时间段编号,这应该是一个正整数。 - **shift_ratio** (float) – 通道的移位比、通道的第一个 ``shift_ratio`` 部分沿时间维度移动-1,通道的第二个 ``shift_ratio`` 部分沿时间维度移动1,范围须在[0, 0.5]内。默认值0.25 - **name** (str,可选) – 具体用法请参见 :ref:`api_guide_Name` ,一般无需设置。默认值:None。 -返回:时序位移后的输出张量(Tensor),维度与输入 ``x`` 一致。 - -返回类型:变量(Tensor),数据类型与输入 ``x`` 一致。 - -抛出异常: ``TypeError`` – seg_num 必须是int类型 - +返回 +::::::::: +Tensor, 时序位移后的输出张量,维度和数据类型与输入 ``x`` 一致。 -**代码示例**: +代码示例 +::::::::: .. code-block:: python diff --git a/doc/paddle/api/paddle/fluid/layers/tensor/create_global_var_cn.rst b/doc/paddle/api/paddle/fluid/layers/tensor/create_global_var_cn.rst index c16fea6cb26..6bde6ee9e75 100644 --- a/doc/paddle/api/paddle/fluid/layers/tensor/create_global_var_cn.rst +++ b/doc/paddle/api/paddle/fluid/layers/tensor/create_global_var_cn.rst @@ -3,7 +3,7 @@ create_global_var ------------------------------- -.. py:function:: paddle.fluid.layers.create_global_var(shape,value,dtype,persistable=False,force_cpu=False,name=None) +.. py:function:: paddle.static.create_global_var(shape,value,dtype,persistable=False,force_cpu=False,name=None) diff --git a/doc/paddle/api/paddle/fluid/param_attr/ParamAttr_cn.rst b/doc/paddle/api/paddle/fluid/param_attr/ParamAttr_cn.rst index d97ff6cee8c..3c2d29c86a2 100644 --- a/doc/paddle/api/paddle/fluid/param_attr/ParamAttr_cn.rst +++ b/doc/paddle/api/paddle/fluid/param_attr/ParamAttr_cn.rst @@ -8,8 +8,6 @@ ParamAttr .. py:class:: paddle.ParamAttr(name=None, initializer=None, learning_rate=1.0, regularizer=None, trainable=True, do_model_average=False, need_clip=True) - - .. note:: 该类中的 ``gradient_clip`` 属性在2.0版本会废弃,推荐使用``need_clip``来设置梯度裁剪范围,并在初始化 ``optimizer`` 时设置梯度裁剪。 共有三种裁剪策略: :ref:`api_paddle_nn_ClipGradByGlobalNorm` 、:ref:`api_paddle_nn_ClipGradByNorm` 、 :ref:`api_paddle_nn_ClipGradByValue` 。 @@ -19,13 +17,13 @@ ParamAttr 参数: - **name** (str,可选) - 参数的名称。默认值为None,表示框架自动创建参数的名称。 - **initializer** (Initializer,可选) - 参数的初始化方式。默认值为None,表示权重参数采用Xavier初始化方式,偏置参数采用全0初始化方式。 - - **learning_rate** (float) - 参数的学习率。实际参数的学习率等于全局学习率乘以参数的学习率,再乘以learning rate schedule的系数。 + - **learning_rate** (float,可选) - 参数的学习率。实际参数的学习率等于全局学习率乘以参数的学习率,再乘以learning rate schedule的系数。 - **regularizer** (WeightDecayRegularizer,可选) - 正则化方法。支持两种正则化策略: :ref:`api_paddle_regularizer_L1Decay` 、 :ref:`api_paddle_regularizer_L2Decay` ,如果在 ``optimizer`` (例如 :ref:`api_paddle_optimizer_SGD` ) 中也 设置了正则化,``optimizer`` 中的正则化将被忽略。默认值为None,表示没有正则化。 - - **trainable** (bool) - 参数是否需要训练。默认值为True,表示需要训练。 - - **do_model_average** (bool) - 是否做模型平均。默认值为True。仅在 :ref:`ExponentialMovingAverage` 下使用。 - - **need_clip** (bool) - 参数是否需要进行梯度裁剪。默认值为True,表示该参数的梯度会根据优化器中设置的裁剪规则进行裁剪。 + - **trainable** (bool,可选) - 参数是否需要训练。默认值为True,表示需要训练。 + - **do_model_average** (bool,可选) - 是否做模型平均。默认值为True。仅在 :ref:`ExponentialMovingAverage` 下使用。 + - **need_clip** (bool,可选) - 参数是否需要进行梯度裁剪。默认值为True,表示该参数的梯度会根据优化器中设置的裁剪规则进行裁剪。 返回: 表示参数属性的对象。 diff --git a/doc/paddle/api/paddle/framework/random/seed_cn.rst b/doc/paddle/api/paddle/framework/random/seed_cn.rst index 9f250ede9ad..a3ad54523e2 100644 --- a/doc/paddle/api/paddle/framework/random/seed_cn.rst +++ b/doc/paddle/api/paddle/framework/random/seed_cn.rst @@ -3,7 +3,7 @@ seed ------------------------------- -.. py:function:: paddle.framework.seed(seed) +.. py:function:: paddle.seed(seed) 设置全局默认generator的随机种子。 diff --git a/doc/paddle/api/paddle/hapi/callbacks/EarlyStopping_cn.rst b/doc/paddle/api/paddle/hapi/callbacks/EarlyStopping_cn.rst index e4a79d6b89b..ed23990b7b3 100644 --- a/doc/paddle/api/paddle/hapi/callbacks/EarlyStopping_cn.rst +++ b/doc/paddle/api/paddle/hapi/callbacks/EarlyStopping_cn.rst @@ -11,7 +11,7 @@ EarlyStopping - **monitor** (str,可选) - 监控量。该量作为模型是否停止学习的监控指标。默认值:'loss'。 - **mode** (str,可选) - 可以是'auto'、'min'或者'max'。在min模式下,模型会在监控量的值不再减少时停止训练;max模式下,模型会在监控量的值不再增加时停止训练;auto模式下,实际的模式会从 ``monitor`` 推断出来。如果 ``monitor`` 中有'acc',将会认为是max模式,其它情况下,都会被推断为min模式。默认值:'auto'。 - **patience** (int,可选) - 多少个epoch模型效果未提升会使模型提前停止训练。默认值:0。 - - **verbose** (int,可选) - 可以是0或者1。1代表不打印模型提前停止训练的日志,1代表打印日志。默认值:1。 + - **verbose** (int,可选) - 可以是0或者1。0代表不打印模型提前停止训练的日志,1代表打印日志。默认值:1。 - **min_delta** (int|float,可选) - 监控量最小改变值。当evaluation的监控变量改变值小于 ``min_delta`` ,就认为模型没有变化。默认值:0。 - **baseline** (int|float,可选) - 监控量的基线。如果模型在训练 ``patience`` 个epoch后效果对比基线没有提升,将会停止训练。如果是None,代表没有基线。默认值:None。 - **save_best_model** (bool,可选) - 是否保存效果最好的模型(监控量的值最优)。文件会保存在 ``fit`` 中传入的参数 ``save_dir`` 下,前缀名为best_model,默认值: True。 @@ -65,4 +65,4 @@ EarlyStopping save_freq=10, save_dir=save_dir, epochs=20, - callbacks=[callbacks]) \ No newline at end of file + callbacks=[callbacks]) diff --git a/doc/paddle/api/paddle/hapi/callbacks/VisualDL_cn.rst b/doc/paddle/api/paddle/hapi/callbacks/VisualDL_cn.rst index 27f0f8b1d34..5b80d8d14ea 100644 --- a/doc/paddle/api/paddle/hapi/callbacks/VisualDL_cn.rst +++ b/doc/paddle/api/paddle/hapi/callbacks/VisualDL_cn.rst @@ -5,7 +5,7 @@ VisualDL .. py:class:: paddle.callbacks.VisualDL(log_dir) - ``VisualDL`` 是一个visualdl的回调类。 + ``VisualDL`` 是一个visualdl( `飞桨可视化分析工具 `_ )的回调类。该类将训练过程中的损失值和评价指标储存至日志文件中后,启动面板即可查看可视化结果。 参数: - **log_dir** (str) - 输出日志保存的路径。 diff --git a/doc/paddle/api/paddle/hapi/model/Model_cn.rst b/doc/paddle/api/paddle/hapi/model/Model_cn.rst index d9c57c42e03..48b7c494e6b 100644 --- a/doc/paddle/api/paddle/hapi/model/Model_cn.rst +++ b/doc/paddle/api/paddle/hapi/model/Model_cn.rst @@ -417,7 +417,7 @@ evaluate(eval_data, batch_size=1, log_freq=10, verbose=2, num_workers=0, callbac - **num_workers** (int) - 启动子进程用于读取数据的数量。当 ``eval_data`` 为 ``DataLoader`` 的实例时,该参数会被忽略。默认值:True。 - **callbacks** (Callback|list[Callback]|None) - ``Callback`` 的一个实例或实例列表。该参数不给定时,默认会插入 ``ProgBarLogger`` 和 ``ModelCheckpoint`` 这两个实例。默认值:None。 -返回:None +返回:dict, key是 ``prepare`` 时Metric的的名称,value是该Metric的值。 **代码示例**: @@ -453,7 +453,7 @@ predict(test_data, batch_size=1, num_workers=0, stack_outputs=False, callbacks=N - **stack_outputs** (bool) - 是否将输出进行堆叠。默认值:False。 - **callbacks** (Callback|list[Callback]|None) - ``Callback`` 的一个实例或实例列表。默认值:None。 -返回:None +返回:模型的输出。 **代码示例**: diff --git a/doc/paddle/api/paddle/hapi/model_summary/summary_cn.rst b/doc/paddle/api/paddle/hapi/model_summary/summary_cn.rst index f0f280ab859..4819f48653c 100644 --- a/doc/paddle/api/paddle/hapi/model_summary/summary_cn.rst +++ b/doc/paddle/api/paddle/hapi/model_summary/summary_cn.rst @@ -3,7 +3,7 @@ summary ------------------------------- -.. py:function:: paddle.summary(self, input_size=None, dtype=None) +.. py:function:: paddle.summary(self, input_size=None, dtypes=None) ``summary`` 函数能够打印网络的基础结构和参数信息。 @@ -54,4 +54,4 @@ summary params_info = paddle.summary(lenet, (1, 1, 28, 28)) print(params_info) - + # {'total_params': 61610, 'trainable_params': 61610} diff --git a/doc/paddle/api/paddle/io/ChainDataset.rst b/doc/paddle/api/paddle/io/ChainDataset_cn.rst similarity index 100% rename from doc/paddle/api/paddle/io/ChainDataset.rst rename to doc/paddle/api/paddle/io/ChainDataset_cn.rst diff --git a/doc/paddle/api/paddle/io/ComposeDatast.rst b/doc/paddle/api/paddle/io/ComposeDatast_cn.rst similarity index 100% rename from doc/paddle/api/paddle/io/ComposeDatast.rst rename to doc/paddle/api/paddle/io/ComposeDatast_cn.rst diff --git a/doc/paddle/api/paddle/io/DataLoader_cn.rst b/doc/paddle/api/paddle/io/DataLoader_cn.rst index f3961957422..805d8da480d 100644 --- a/doc/paddle/api/paddle/io/DataLoader_cn.rst +++ b/doc/paddle/api/paddle/io/DataLoader_cn.rst @@ -117,7 +117,7 @@ DataLoader当前支持 ``map-style`` 和 ``iterable-style`` 的数据集, ``ma 本方法创建的DataLoader对象提供了3个方法设置数据源,分别是 :code:`set_sample_generator` , :code:`set_sample_list_generator` 和 :code:`set_batch_generator` 。请查阅下述示例代码了解它们的使用方法。 -如果iterable = True,本方法创建的DataLoader对象时一个Python生成器,可以for-range的方法循环迭代。 +如果iterable = True,本方法创建的DataLoader对象是一个Python生成器,可以for-range的方法循环迭代。 如果iterable = False,本方法创建的DataLoader对象提供 :code:`start()` 和 :code:`reset()` 方法控制数据读取过程。 @@ -283,7 +283,7 @@ DataLoader当前支持 ``map-style`` 和 ``iterable-style`` 的数据集, ``ma EPOCH_NUM = 4 IMAGE_SIZE = 784 - CLASS_NUM = 10 + CLASS_NUM = 1 USE_GPU = False # whether to use GPU diff --git a/doc/paddle/api/paddle/io/Overview_cn.rst b/doc/paddle/api/paddle/io/Overview_cn.rst new file mode 100644 index 00000000000..13e5e385132 --- /dev/null +++ b/doc/paddle/api/paddle/io/Overview_cn.rst @@ -0,0 +1,76 @@ +.. _cn_overview_io: + +paddle.io +--------------------- + +paddle.io 目录下包含飞桨框架数据集定义、数据读取相关的API。具体如下: + +- :ref:`多进程数据读取器相关API ` +- :ref:`数据集定义相关API ` +- :ref:`数据集操作相关API ` +- :ref:`采样器相关API ` +- :ref:`批采样器相关API ` + + + +.. _about_dataloader: +多进程数据读取器相关API +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`DataLoader ` ", "多进程数据读取器" + " :ref:`get_worker_info ` ", "获取当前子进程相关信息" + " :ref:`default_collate_fn ` ", "多进程DataLoader中默认组batch函数" + " :ref:`default_convert_fn ` ", "多进程DataLoader中默认转换函数,在多进程DataLoader中不组batch时使用,只将数据转换为Tensor而不组batch" + +.. _about_dataset_define: +数据集定义相关API +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`Dataset ` ", "映射式(map-style)数据集基类定义接口" + " :ref:`IterableDataset ` ", "迭代式(iterable-style)数据集基类定义接口" + " :ref:`TensorDataset ` ", "张量(Tensor)数据集基类定义接口" + +.. _about_dataset_operate: +数据集操作相关API +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`ChainDataset ` ", "数据集样本级联接口" + " :ref:`ComposeDataset ` ", "数据集字段组合接口" + " :ref:`Subset ` ", "数据集取子集接口" + +.. _about_sampler: +采样器相关API +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`Sampler ` ", "采样器基类定义接口" + " :ref:`SequenceSampler ` ", "顺序采样器接口" + " :ref:`RandomSampler ` ", "随机采样器接口" + " :ref:`WeightedRandomSampler ` ", "带权重随机采样器接口" + +.. _about_batch_sampler: +批采样器相关API +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`BatchSampler ` ", "批采样器接口" + " :ref:`DistributedBatchSampler ` ", "分布式批采样器接口, 用于分布式多卡场景" + diff --git a/doc/paddle/api/paddle/io/SubsetDataset_cn.rst b/doc/paddle/api/paddle/io/SubsetDataset_cn.rst new file mode 100755 index 00000000000..f113c427ab1 --- /dev/null +++ b/doc/paddle/api/paddle/io/SubsetDataset_cn.rst @@ -0,0 +1,32 @@ +.. _cn_api_io_SubsetDataset: + +SubsetDataset +------------------------------- + +.. py:class:: paddle.io.SubsetDataset(dataset, indices) + +用于构造一个数据集级的数据子数据集。 + +给定原数据集合的指标数组,可以以此数组构造原数据集合的子数据集合。 + +参数: + - **datasets** 原数据集。 + - **indices** 用于提取子集的原数据集合指标数组。 + +返回:list[Dataset], 原数据集合的子集列表。 + +**代码示例** + +.. code-block:: python + + import paddle + from paddle.io import Subset + # example 1: + a = paddle.io.Subset(dataset=range(1, 4), indices=[0, 2]) + print(list(a)) + # [1, 3] + # example 2: + b = paddle.io.Subset(dataset=range(1, 4), indices=[1, 1]) + print(list(b)) + # [2, 2] + diff --git a/doc/paddle/api/paddle/io/TensorDataset_cn.rst b/doc/paddle/api/paddle/io/TensorDataset_cn.rst new file mode 100644 index 00000000000..42c09fed35c --- /dev/null +++ b/doc/paddle/api/paddle/io/TensorDataset_cn.rst @@ -0,0 +1,38 @@ +.. _cn_api_io_cn_TensorDataset: + +TensorDataset +------------------------------- + +.. py:class:: paddle.io.TensorDataset + +由张量列表定义的数据集。 + +每个张量的形状应为[N,...],而N是样本数,每个张量表示样本中一个字段,TensorDataset中通过在第一维索引张量来获取每个样本。 + +参数: + - **tensors** (list of Tensors) - Tensor列表,这些Tensor的第一维形状相同 + +返回:由张量列表定义的数据集 + +返回类型: Dataset + +**代码示例** + +.. code-block:: python + + import numpy as np + import paddle + from paddle.io import TensorDataset + + + input_np = np.random.random([2, 3, 4]).astype('float32') + input = paddle.to_tensor(input_np) + label_np = np.random.random([2, 1]).astype('int32') + label = paddle.to_tensor(label_np) + + dataset = TensorDataset([input, label]) + + for i in range(len(dataset)): + input, label = dataset[i] + print(input, label) + diff --git a/doc/paddle/api/paddle/io/default_collate_fn_cn.rst b/doc/paddle/api/paddle/io/default_collate_fn_cn.rst new file mode 100644 index 00000000000..21eb3c21d05 --- /dev/null +++ b/doc/paddle/api/paddle/io/default_collate_fn_cn.rst @@ -0,0 +1,24 @@ +.. _cn_api_io_cn_default_collate_fn: + +default_collate_fn +------------------------------- + +.. py:function:: paddle.io.default_collate_fn + +``paddle.io.DataLoader`` 中默认组批次函数,输入 ``batch`` 为样本列表,格式如下: + + ``[[filed1,filed2,...],[filed1,filed2,...],...]`` + +此函数将其各按字段组装整合为如下批次数据: + + ``[batch_filed1,batch_filed2,...]`` + + +参数: + - **batch** (list of numpy array|paddle.Tensor) - 批次数据,格式为样本列表,每个样本包含多个字段,字段为numpy array或Tensor + +返回:转换为Tensor的批次数据 + +返回类型: list of paddle.Tensor + +用法见 :ref:`DataLoader ` diff --git a/doc/paddle/api/paddle/io/default_convert_fn_cn.rst b/doc/paddle/api/paddle/io/default_convert_fn_cn.rst new file mode 100644 index 00000000000..ffc6d2a50fd --- /dev/null +++ b/doc/paddle/api/paddle/io/default_convert_fn_cn.rst @@ -0,0 +1,20 @@ +.. _cn_api_io_cn_default_convert_fn: + +default_convert_fn +------------------------------- + +.. py:function:: paddle.io.default_convert_fn + +``paddle.io.DataLoader`` 中默认批次转换函数,输入 ``batch`` 为批次数据,将批次数据中的 ``numpy array`` 数据转换为 ``paddle.Tensor`` 。 + +一般用于 ``paddle.io.DataLoader`` 中 ``batch_size=None`` 及不需要 ``paddle.io.DataLoader`` 中组批次的情况 + + +参数: + - **batch** (list of numpy array|paddle.Tensor) - 批次数据,包含numpy array或Tensor的列表 + +返回:转换为Tensor的批次数据 + +返回类型: list of paddle.Tensor + +用法见 :ref:`DataLoader ` diff --git a/doc/paddle/api/paddle/io/get_worker_info.rst b/doc/paddle/api/paddle/io/get_worker_info_cn.rst similarity index 100% rename from doc/paddle/api/paddle/io/get_worker_info.rst rename to doc/paddle/api/paddle/io/get_worker_info_cn.rst diff --git a/doc/paddle/api/paddle/io/random_split_cn.rst b/doc/paddle/api/paddle/io/random_split_cn.rst new file mode 100644 index 00000000000..f40da2e8987 --- /dev/null +++ b/doc/paddle/api/paddle/io/random_split_cn.rst @@ -0,0 +1,42 @@ +.. _cn_api_io_cn_random_split: + +random_split +------------------------------- + +.. py:class:: paddle.io.random_split(dataset, lengths, generator=None) + +给定子集合dataset的长度数组,随机切分出原数据集合的非重复子集合。 + +参数: + - **dataset** (Dataset) - 此参数必须是 ``paddle.io.Dataset`` 或 ``paddle.io.IterableDataset`` 的一个子类实例或实现了 ``__len__`` 的Python对象,用于生成样本下标。默认值为None。 + - **lengths** (list) - 总和为原数组长度的,子集合长度数组。 + - **generator** (Generator) - 指定采样 ``data_source`` 的采样器。默认值为None。 + +返回: list, 返回按给定长度数组描述随机分割的原数据集合的非重复子集合。 + + +**代码示例** + +.. code-block:: python + + import paddle + from paddle.io import random_split + a_list = paddle.io.random_split(range(10), [3, 7]) + print(len(a_list)) + # 2 + for idx, v in enumerate(a_list[0]): + print(idx, v) + # output of the first subset + # 0 1 + # 1 3 + # 2 9 + for idx, v in enumerate(a_list[1]): + print(idx, v) + # output of the second subset + # 0 5 + # 1 7 + # 2 8 + # 3 6 + # 4 0 + # 5 2 + # 6 4 diff --git a/doc/paddle/api/paddle/jit/Overview_cn.rst b/doc/paddle/api/paddle/jit/Overview_cn.rst new file mode 100644 index 00000000000..8dd96ac2836 --- /dev/null +++ b/doc/paddle/api/paddle/jit/Overview_cn.rst @@ -0,0 +1,38 @@ +.. _cn_overview_jit: + +paddle.jit +-------------- + +paddle.jit 目录下包含飞桨框架支持动态图转静态图相关的API。具体如下: + +- :ref:`动态图转静态图相关API ` +- :ref:`Debug动态图转静态图相关 ` + + + +.. _about_dygraph_to_static: +动态图转静态图相关API +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`to_static ` ", "动转静to_static装饰器" + " :ref:`save ` ", "动转静模型存储接口" + " :ref:`load ` ", "动转静模型载入接口" + " :ref:`ProgramTranslator ` ", "动转静控制主类ProgramTranslator" + " :ref:`TracedLayer ` ", "备选根据trace动转静的接口TracedLayer" + + +.. _about_debug: +Debug动态图转静态图相关 +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`set_code_level ` ", "设置代码级别,打印该级别动转静转化后的代码" + " :ref:`set_verbosity ` ", "设置动态图转静态图的日志详细级别" + diff --git a/doc/paddle/api/paddle/metric/Overview_cn.rst b/doc/paddle/api/paddle/metric/Overview_cn.rst new file mode 100644 index 00000000000..97192b07e6b --- /dev/null +++ b/doc/paddle/api/paddle/metric/Overview_cn.rst @@ -0,0 +1,34 @@ +.. _cn_overview_metric: + +paddle.metric +--------------------- + +paddle.metric 目录下包含飞桨框架支持的评估器API。具体如下: + +- :ref:`评估器类相关API ` +- :ref:`评估器函数相关API ` + + +.. _about_metric_class: +评估器类相关API +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`Metric ` ", "评估器基类" + " :ref:`Accuracy ` ", "准确率评估器类" + " :ref:`Auc ` ", "auc评估器类" + " :ref:`Precision ` ", "精确率评估器类" + " :ref:`Recall ` ", "召回率评估器类" + +.. _about_metric_method: +评估器函数相关API +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`accuracy ` ", "准确率评估函数" \ No newline at end of file diff --git a/doc/paddle/api/paddle/nn/Overview_cn.rst b/doc/paddle/api/paddle/nn/Overview_cn.rst new file mode 100644 index 00000000000..14c45a6931b --- /dev/null +++ b/doc/paddle/api/paddle/nn/Overview_cn.rst @@ -0,0 +1,475 @@ +.. _cn_overview_nn: + +paddle.nn +--------------------- + +paddle.nn 目录下包含飞桨框架支持的神经网络层和相关函数的相关API。具体如下: + +- :ref:`容器相关 ` +- :ref:`卷积层 ` +- :ref:`Pooling层 ` +- :ref:`Padding层 ` +- :ref:`激活层 ` +- :ref:`Normalization层 ` +- :ref:`循环神经网络层 ` +- :ref:`Transformer相关 ` +- :ref:`线性层 ` +- :ref:`Dropout层 ` +- :ref:`Embedding层 ` +- :ref:`Loss层 ` +- :ref:`Vision层 ` +- :ref:`Clip相关 ` +- :ref:`公共层 ` +- :ref:`卷积相关函数 ` +- :ref:`Pooling相关函数 ` +- :ref:`Padding相关函数 ` +- :ref:`激活函数 ` +- :ref:`Normalization方法 ` +- :ref:`线性处理相关函数 ` +- :ref:`Dropout方法 ` +- :ref:`Embedding相关函数 ` +- :ref:`损失函数 ` +- :ref:`公用方法 ` +- :ref:`初始化相关 ` + + + + +.. _about_container: +容器相关 +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.Layer ` ", "基于OOD实现的动态图Layer" + " :ref:`paddle.nn.LayerList ` ", "用于保存子层列表" + " :ref:`paddle.nn.ParameterList ` ", "参数列表容器" + " :ref:`paddle.nn.Sequential ` ", "顺序容器;子Layer将按构造函数参数的顺序添加到此容器中" + +.. _convolution_layers: +卷积层 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.Conv1D ` ", "一维卷积层" + " :ref:`paddle.nn.Conv1DTranspose ` ", "一维转置卷积层" + " :ref:`paddle.nn.Conv2D ` ", "二维卷积层" + " :ref:`paddle.nn.Conv2DTranspose ` ", "二维转置卷积层" + " :ref:`paddle.nn.Conv3D ` ", "三维卷积层" + " :ref:`paddle.nn.Conv3DTranspose ` ", "三维转置卷积层" + +.. _pooling_layers: +pooling层 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.AdaptiveAvgPool1D ` ", "一维自适应平均池化层" + " :ref:`paddle.nn.AdaptiveAvgPool2D ` ", "二维自适应平均池化层" + " :ref:`paddle.nn.AdaptiveAvgPool3D ` ", "三维自适应平均池化层" + " :ref:`paddle.nn.AdaptiveMaxPool1D ` ", "一维自适应最大池化层" + " :ref:`paddle.nn.AdaptiveMaxPool2D ` ", "二维自适应最大池化层" + " :ref:`paddle.nn.AdaptiveMaxPool3D ` ", "三维自适应最大池化层" + " :ref:`paddle.nn.AvgPool1D ` ", "一维平均池化层" + " :ref:`paddle.nn.AvgPool2D ` ", "二维平均池化层" + " :ref:`paddle.nn.AvgPool3D ` ", "三维平均池化层" + " :ref:`paddle.nn.MaxPool1D ` ", "一维最大池化层" + " :ref:`paddle.nn.MaxPool2D ` ", "二维最大池化层" + " :ref:`paddle.nn.MaxPool3D ` ", "三维最大池化层" + +.. _padding_layers: +Padding层 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.Pad1D ` ", "一维填充层" + " :ref:`paddle.nn.Pad2D ` ", "二维填充层" + " :ref:`paddle.nn.Pad3D ` ", "三维填充层" + +.. _activation_layers: +激活层 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.ELU ` ", "ELU激活层" + " :ref:`paddle.nn.GELU ` ", "GELU激活层" + " :ref:`paddle.nn.Hardshrink ` ", "Hardshrink激活层" + " :ref:`paddle.nn.Hardsigmoid ` ", "Hardsigmoid激活层" + " :ref:`paddle.nn.Hardswish ` ", "Hardswish激活层" + " :ref:`paddle.nn.Hardtanh ` ", "Hardtanh激活层" + " :ref:`paddle.nn.LeakyReLU ` ", "LeakyReLU 激活层" + " :ref:`paddle.nn.LogSigmoid ` ", "LogSigmoid激活层" + " :ref:`paddle.nn.LogSoftmax ` ", "LogSoftmax激活层" + " :ref:`paddle.nn.Maxout ` ", "Maxout激活层" + " :ref:`paddle.nn.PReLU ` ", "PReLU激活层" + " :ref:`paddle.nn.ReLU ` ", "ReLU激活层" + " :ref:`paddle.nn.ReLU6 ` ", "ReLU6激活层" + " :ref:`paddle.nn.SELU ` ", "SELU激活层" + " :ref:`paddle.nn.Sigmoid ` ", "Sigmoid激活层" + " :ref:`paddle.nn.Softmax ` ", "Softmax激活层" + " :ref:`paddle.nn.Softplus ` ", "Softplus激活层" + " :ref:`paddle.nn.Softshrink ` ", "Softshrink激活层" + " :ref:`paddle.nn.Softsign ` ", "Softsign激活层" + " :ref:`paddle.nn.Swish ` ", "Swish激活层" + " :ref:`paddle.nn.Tanh ` ", "Tanh激活层" + " :ref:`paddle.nn.Tanhshrink ` ", "Tanhshrink激活层" + " :ref:`paddle.nn.ThresholdedReLU ` ", "Thresholded ReLU激活层" + +.. _normalization_layers: +Normalization层 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.BatchNorm ` ", "Batch Normalization层" + " :ref:`paddle.nn.BatchNorm1D ` ", "一维Batch Normalization层" + " :ref:`paddle.nn.BatchNorm2D ` ", "二维Batch Normalization层" + " :ref:`paddle.nn.BatchNorm3D ` ", "三维Batch Normalization层" + " :ref:`paddle.nn.GroupNorm ` ", "Group Normalization层" + " :ref:`paddle.nn.InstanceNorm1D ` ", "一维Instance Normalization层" + " :ref:`paddle.nn.InstanceNorm2D ` ", "二维Instance Normalization层" + " :ref:`paddle.nn.InstanceNorm3D ` ", "三维Instance Normalization层" + " :ref:`paddle.nn.LayerNorm ` ", "用于保存Normalization层列表" + " :ref:`paddle.nn.LocalResponseNorm ` ", "Local Response Normalization层" + " :ref:`paddle.nn.SpectralNorm ` ", "Spectral Normalization层" + " :ref:`paddle.nn.SyncBatchNorm ` ", "Synchronized Batch Normalization层" + +.. _RNN_layers: +循环神经网络层 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.BiRNN ` ", "双向循环神经网络" + " :ref:`paddle.nn.GRU ` ", "门控循环单元网络" + " :ref:`paddle.nn.GRUCell ` ", "门控循环单元" + " :ref:`paddle.nn.LSTM ` ", "长短期记忆网络" + " :ref:`paddle.nn.LSTMCell ` ", "长短期记忆网络单元" + " :ref:`paddle.nn.RNN ` ", "循环神经网络" + " :ref:`paddle.nn.RNNCellBase ` ", "循环神经网络单元基类" + " :ref:`paddle.nn.SimpleRNN ` ", "简单循环神经网络" + " :ref:`paddle.nn.SimpleRNNCell ` ", "简单循环神经网络单元" + +.. _Transformer: +Transformer相关 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.MultiHeadAttention ` ", "多头注意力机制" + " :ref:`paddle.nn.Transformer ` ", "Transformer模型" + " :ref:`paddle.nn.TransformerDecoder ` ", "Transformer解码器" + " :ref:`paddle.nn.TransformerDecoderLayer ` ", "Transformer解码器层" + " :ref:`paddle.nn.TransformerEncoder ` ", "Transformer编码器" + " :ref:`paddle.nn.TransformerEncoderLayer ` ", "Transformer编码器层" + +.. _linear_layers: +线性层 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.Bilinear ` ", "对两个输入执行双线性张量积" + " :ref:`paddle.nn.Linear ` ", "线性变换层" + +.. _dropout_layers: +Dropout层 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.AlphaDropout ` ", "具有自归一化性质的dropout" + " :ref:`paddle.nn.Dropout ` ", "Dropout" + " :ref:`paddle.nn.Dropout2D ` ", "一维Dropout" + " :ref:`paddle.nn.Dropout3D ` ", "二维Dropout" + +.. _embedding_layers: +Embedding层 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.Embedding ` ", "嵌入层(Embedding Layer)" + +.. _loss_layers: +Loss层 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.BCELoss ` ", "BCELoss层" + " :ref:`paddle.nn.BCEWithLogitsLoss ` ", "BCEWithLogitsLoss层" + " :ref:`paddle.nn.CrossEntropyLoss ` ", "交叉熵损失层" + " :ref:`paddle.nn.CTCLoss ` ", "CTCLoss层" + " :ref:`paddle.nn.HSigmoidLoss ` ", "层次sigmoid损失层" + " :ref:`paddle.nn.KLDivLoss ` ", "Kullback-Leibler散度损失层" + " :ref:`paddle.nn.L1Loss ` ", "L1损失层" + " :ref:`paddle.nn.MarginRankingLoss ` ", "MarginRankingLoss层" + " :ref:`paddle.nn.MSELoss ` ", "均方差误差损失层" + " :ref:`paddle.nn.NLLLoss ` ", "NLLLoss层" + " :ref:`paddle.nn.SmoothL1Loss ` ", "平滑L1损失层" + +.. _vision_layers: +Vision层 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.PixelShuffle ` ", "将一个形为[N, C, H, W]或是[N, H, W, C]的Tensor重新排列成形为 [N, C/r**2, H*r, W*r]或 [N, H*r, W*r, C/r**2] 的Tensor" + " :ref:`paddle.nn.Upsample ` ", "用于调整一个batch中图片的大小" + " :ref:`paddle.nn.UpsamplingBilinear2D ` ", "用于调整一个batch中图片的大小(使用双线性插值方法)" + " :ref:`paddle.nn.UpsamplingNearest2D ` ", "用于调整一个batch中图片的大小(使用最近邻插值方法)" + +.. _about_clip: +Clip相关 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.ClipGradByGlobalNorm ` ", "将一个 Tensor列表 t_list 中所有Tensor的L2范数之和,限定在 clip_norm 范围内" + " :ref:`paddle.nn.ClipGradByNorm ` ", "将输入的多维Tensor X 的L2范数限制在 clip_norm 范围之内" + " :ref:`paddle.nn.ClipGradByValue ` ", "将输入的多维Tensor X 的值限制在 [min, max] 范围" + +.. _common_layers: +公共层 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.BeamSearchDecoder ` ", "带beam search解码策略的解码器" + " :ref:`paddle.nn.CosineSimilarity ` ", "余弦相似度计算" + " :ref:`paddle.nn.dynamic_decode ` ", "循环解码" + " :ref:`paddle.nn.Flatten ` ", "将一个连续维度的Tensor展平成一维Tensor" + " :ref:`paddle.nn.PairwiseDistance ` ", "计算两个向量之间pairwise的距离" + +.. _convolution_functional: +卷积相关函数 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.functional.conv1d ` ", "一维卷积函数" + " :ref:`paddle.nn.functional.conv1d_transpose ` ", "一维转置卷积函数" + " :ref:`paddle.nn.functional.conv2d ` ", "二维卷积函数" + " :ref:`paddle.nn.functional.conv2d_transpose ` ", "二维转置卷积函数" + " :ref:`paddle.nn.functional.conv3d ` ", "三维卷积函数" + " :ref:`paddle.nn.functional.conv3d_transpose ` ", "三维转置卷积函数" + +.. _pooling_functional: +Pooling相关函数 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.functional.adaptive_avg_pool1d ` ", "一维自适应平均池化" + " :ref:`paddle.nn.functional.adaptive_avg_pool2d ` ", "二维自适应平均池化" + " :ref:`paddle.nn.functional.adaptive_avg_pool3d ` ", "三维自适应平均池化" + " :ref:`paddle.nn.functional.adaptive_max_pool1d ` ", "一维自适应最大池化" + " :ref:`paddle.nn.functional.avg_pool1d ` ", "一维平均池化" + " :ref:`paddle.nn.functional.avg_pool2d ` ", "二维平均池化" + " :ref:`paddle.nn.functional.avg_pool3d ` ", "三维平均池化" + " :ref:`paddle.nn.functional.max_pool1d ` ", "一维最大池化" + " :ref:`paddle.nn.functional.max_pool2d ` ", "二维最大池化" + " :ref:`paddle.nn.functional.max_pool3d ` ", "三维最大池化" + +.. _padding_functional: +Padding相关函数 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.functional.pad ` ", "依照 pad 和 mode 属性对input进行填充" + +.. _activation_functional: +激活函数 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.functional.elu ` ", "elu激活函数" + " :ref:`paddle.nn.functional.gelu ` ", "gelu激活函数" + " :ref:`paddle.nn.functional.hardshrink ` ", "hardshrink激活函数" + " :ref:`paddle.nn.functional.hardsigmoid ` ", "sigmoid的分段线性逼近激活函数" + " :ref:`paddle.nn.functional.hardswish ` ", "hardswish激活函数" + " :ref:`paddle.nn.functional.hardtanh ` ", "hardtanh激活函数" + " :ref:`paddle.nn.functional.leaky_relu ` ", "leaky_relu激活函数" + " :ref:`paddle.nn.functional.log_sigmoid ` ", "log_sigmoid激活函数" + " :ref:`paddle.nn.functional.log_softmax ` ", "log_softmax激活函数" + " :ref:`paddle.nn.functional.maxout ` ", "maxout激活函数" + " :ref:`paddle.nn.functional.prelu ` ", "prelu激活函数" + " :ref:`paddle.nn.functional.relu ` ", "relu激活函数" + " :ref:`paddle.nn.functional.relu6 ` ", "relu6激活函数" + " :ref:`paddle.nn.functional.selu ` ", "selu激活函数" + " :ref:`paddle.nn.functional.sigmoid ` ", "sigmoid激活函数" + " :ref:`paddle.nn.functional.softmax ` ", "softmax激活函数" + " :ref:`paddle.nn.functional.softplus ` ", "softplus激活函数" + " :ref:`paddle.nn.functional.softshrink ` ", "softshrink激活函数" + " :ref:`paddle.nn.functional.softsign ` ", "softsign激活函数" + " :ref:`paddle.nn.functional.swish ` ", "swish激活函数" + " :ref:`paddle.nn.functional.tanhshrink ` ", "tanhshrink激活函数" + " :ref:`paddle.nn.functional.thresholded_relu ` ", "thresholded_relu激活函数" + +.. _normalization_functional: +Normalization方法 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.functional.batch_norm ` ", "Batch Normalization方法" + " :ref:`paddle.nn.functional.instance_norm ` ", "Instance Normalization方法" + " :ref:`paddle.nn.functional.layer_norm ` ", "Layer Normalization方法" + " :ref:`paddle.nn.functional.local_response_norm ` ", "Local Response Normalization函数" + " :ref:`paddle.nn.functional.normalize ` ", "归一化方法" + " :ref:`paddle.nn.functional.remove_weight_norm ` ", "移除传入 layer 中的权重归一化" + " :ref:`paddle.nn.functional.weight_norm ` ", "对传入的 layer 中的权重参数进行归一化" + +.. _linear_functional: +线性处理相关函数 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.functional.bilinear ` ", "对两个输入执行双线性张量积" + " :ref:`paddle.nn.functional.linear ` ", "线性变换" + " :ref:`paddle.nn.functional.linear_lr_warmup ` ", "线性学习率热身(warm up)" + +.. _dropout_functional: +Dropout方法 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.functional.alpha_dropout ` ", "一种具有自归一化性质的dropout" + " :ref:`paddle.nn.functional.dropout ` ", "Dropout" + " :ref:`paddle.nn.functional.dropout2d ` ", "一维Dropout" + " :ref:`paddle.nn.functional.dropout3d ` ", "二维Dropout" + +.. _embedding_functional: +Embedding相关函数 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.functional.diag_embed ` ", "对角线Embedding 方法" + " :ref:`paddle.nn.functional.embedding ` ", "Embedding 方法" + +.. _loss_functional: +损失函数 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.functional.binary_cross_entropy ` ", "二值交叉熵损失值" + " :ref:`paddle.nn.functional.binary_cross_entropy_with_logits ` ", "logits二值交叉熵损失值" + " :ref:`paddle.nn.functional.ctc_loss ` ", "用于计算ctc损失" + " :ref:`paddle.nn.functional.dice_loss ` ", "用于比较预测结果跟标签之间的相似度" + " :ref:`paddle.nn.functional.hsigmoid_loss ` ", "层次sigmoid损失函数" + " :ref:`paddle.nn.functional.l1_loss ` ", "用于计算L1损失" + " :ref:`paddle.nn.functional.kl_div ` ", "用于计算KL散度损失" + " :ref:`paddle.nn.functional.log_loss ` ", "用于计算负对数损失" + " :ref:`paddle.nn.functional.sampled_softmax_with_cross_entropy ` ", "为所有示例采样若干个样本,并计算每行采样张量的SoftMax标准化值,然后计算交叉熵损失" + " :ref:`paddle.nn.functional.margin_ranking_loss ` ", "用于计算margin rank loss 损失" + " :ref:`paddle.nn.functional.mse_loss ` ", "用于计算均方差误差" + " :ref:`paddle.nn.functional.nll_loss ` ", "用于计算nll损失" + " :ref:`paddle.nn.functional.npair_loss ` ", "成对数据损失计算" + " :ref:`paddle.nn.functional.sigmoid_focal_loss ` ", "用于计算分类任务中前景类-背景类数量不均衡问题的损失" + " :ref:`paddle.nn.functional.smooth_l1_loss ` ", "用于计算平滑L1损失" + " :ref:`paddle.nn.functional.softmax_with_cross_entropy ` ", "将softmax操作、交叉熵损失函数的计算过程进行合并" + " :ref:`paddle.nn.functional.ssd_loss ` ", "用于SSD物体检测算法的多窗口损失计算" + +.. _common_functional: +公用方法 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.functional.add_position_encoding ` ", "将输入inpu中每个位置(序列中的位置)的特征与对应的位置编码加权求和" + " :ref:`paddle.nn.functional.affine_channel ` ", "对输入的每个 channel 应用单独的仿射变换" + " :ref:`paddle.nn.functional.affine_grid ` ", "用于生成仿射变换前后的feature maps的坐标映射关系" + " :ref:`paddle.nn.functional.assign ` ", "将输入Tensor或numpy数组拷贝至输出Tensor" + " :ref:`paddle.nn.functional.cosine_similarity ` ", "用于计算x1与x2沿axis维度的余弦相似度" + " :ref:`paddle.nn.functional.cross_entropy ` ", "计算输入input和标签label间的交叉熵" + " :ref:`paddle.nn.functional.detection_output ` ", "给定回归位置偏移、置信度以及先验框信息计算检测的输出" + " :ref:`paddle.nn.functional.distribute_fpn_proposals ` ", "Feature Pyramid Networks(FPN)模型中依据proposal的尺度和参考尺度与级别将所有proposal分配到不同的FPN级别中" + " :ref:`paddle.nn.functional.grid_sample ` ", "用于调整一个batch中图片的大小" + " :ref:`paddle.nn.functional.iou_similarity ` ", "计算两个框列表的intersection-over-union(IOU)" + " :ref:`paddle.nn.functional.label_smooth ` ", "标签平滑" + " :ref:`paddle.nn.functional.edit_distance ` ", "计算一批给定字符串及其参照字符串间的编辑距离" + " :ref:`paddle.nn.functional.one_hot ` ", "将输入'x'中的每个id转换为一个one-hot向量" + " :ref:`paddle.nn.functional.pixel_shuffle ` ", "将Tensor重新排列" + " :ref:`paddle.nn.functional.space_to_depth ` ", "对成块的空间数据进行重组" + " :ref:`paddle.nn.functional.square_error_cost ` ", "用于计算预测值和目标值的方差估计" + " :ref:`paddle.nn.functional.unfold ` ", "对每一个卷积核覆盖下的区域,将元素重新排成一列" + +.. _about_initializer: +初始化相关 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + + + " :ref:`paddle.nn.initializer.Assign ` ", "使用Numpy数组、Python列表、Tensor来初始化参数" + " :ref:`paddle.nn.initializer.Bilinear ` ", "该接口为参数初始化函数,用于转置卷积函数中" + " :ref:`paddle.nn.initializer.Constant ` ", "用于权重初始化,通过输入的value值初始化输入变量" + " :ref:`paddle.nn.initializer.KaimingNormal ` ", "实现Kaiming正态分布方式的权重初始化" + " :ref:`paddle.nn.initializer.KaimingUniform ` ", "实现Kaiming均匀分布方式的权重初始化" + " :ref:`paddle.nn.initializer.Normal ` ", "随机正态(高斯)分布初始化函数" + " :ref:`paddle.nn.initializer.set_global_initializer ` ", "用于设置Paddle框架中全局的参数初始化方法" + " :ref:`paddle.nn.initializer.TruncatedNormal ` ", "随机截断正态(高斯)分布初始化函数" + " :ref:`paddle.nn.initializer.Uniform ` ", "随机均匀分布初始化函数" + " :ref:`paddle.nn.initializer.XavierNormal ` ", "实现Xavier权重初始化方法( Xavier weight initializer)" + " :ref:`paddle.nn.initializer.XavierUniform ` ", "实现Xavier权重初始化方法( Xavier weight initializer)" diff --git a/doc/paddle/api/paddle/nn/functional/activation/elu__cn.rst b/doc/paddle/api/paddle/nn/functional/activation/elu__cn.rst new file mode 100644 index 00000000000..28af91baa3c --- /dev/null +++ b/doc/paddle/api/paddle/nn/functional/activation/elu__cn.rst @@ -0,0 +1,8 @@ +.. _cn_api_nn_cn_elu_: + +elu\_ +------------------------------- + +.. py:function:: paddle.nn.functional.elu_(x, alpha=1.0, name=None) + +Inplace 版本的 :ref:`cn_api_nn_cn_elu` API,对输入 `x` 采用 Inplace 策略 。 diff --git a/doc/paddle/api/paddle/nn/functional/activation/relu__cn.rst b/doc/paddle/api/paddle/nn/functional/activation/relu__cn.rst new file mode 100644 index 00000000000..017183b5ffe --- /dev/null +++ b/doc/paddle/api/paddle/nn/functional/activation/relu__cn.rst @@ -0,0 +1,8 @@ +.. _cn_api_nn_cn_relu_: + +relu\_ +------------------------------- + +.. py:function:: paddle.nn.functional.relu_(x, name=None) + +Inplace 版本的 :ref:`cn_api_nn_cn_relu` API,对输入 `x` 采用 Inplace 策略 。 diff --git a/doc/paddle/api/paddle/nn/functional/activation/softmax__cn.rst b/doc/paddle/api/paddle/nn/functional/activation/softmax__cn.rst new file mode 100644 index 00000000000..15f64e6eed1 --- /dev/null +++ b/doc/paddle/api/paddle/nn/functional/activation/softmax__cn.rst @@ -0,0 +1,7 @@ +.. _cn_api_nn_cn_softmax_: + +softmax\_ +------------------------------- +.. py:function:: paddle.nn.functional.softmax_(x, axis=-1, dtype=None, name=None) + +Inplace 版本的 :ref:`cn_api_nn_cn_softmax` API,对输入 `x` 采用 Inplace 策略 。 diff --git a/doc/paddle/api/paddle/nn/functional/conv/conv2d_cn.rst b/doc/paddle/api/paddle/nn/functional/conv/conv2d_cn.rst index a9445c2b660..412ed132269 100755 --- a/doc/paddle/api/paddle/nn/functional/conv/conv2d_cn.rst +++ b/doc/paddle/api/paddle/nn/functional/conv/conv2d_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_nn_functional_conv2d: + conv2d ------------------------------- diff --git a/doc/paddle/api/paddle/nn/functional/conv/conv2d_transpose_cn.rst b/doc/paddle/api/paddle/nn/functional/conv/conv2d_transpose_cn.rst index 19992ce8f50..42e60d0ff39 100644 --- a/doc/paddle/api/paddle/nn/functional/conv/conv2d_transpose_cn.rst +++ b/doc/paddle/api/paddle/nn/functional/conv/conv2d_transpose_cn.rst @@ -1,3 +1,4 @@ +.. _cn_api_nn_functional_conv2d_transpose: conv2d_transpose ------------------------------- diff --git a/doc/paddle/api/paddle/nn/functional/conv/conv3d_cn.rst b/doc/paddle/api/paddle/nn/functional/conv/conv3d_cn.rst index fd4140c99c1..b4c7d944a28 100755 --- a/doc/paddle/api/paddle/nn/functional/conv/conv3d_cn.rst +++ b/doc/paddle/api/paddle/nn/functional/conv/conv3d_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_nn_functional_conv3d: + conv3d ------------------------------- diff --git a/doc/paddle/api/paddle/nn/functional/conv/conv3d_transpose_cn.rst b/doc/paddle/api/paddle/nn/functional/conv/conv3d_transpose_cn.rst index 2284394f586..f8a5202982c 100755 --- a/doc/paddle/api/paddle/nn/functional/conv/conv3d_transpose_cn.rst +++ b/doc/paddle/api/paddle/nn/functional/conv/conv3d_transpose_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_nn_functional_conv3d_transpose: + conv3d_transpose ------------------------------- diff --git a/doc/paddle/api/paddle/nn/functional/loss/binary_cross_entropy_cn.rst b/doc/paddle/api/paddle/nn/functional/loss/binary_cross_entropy_cn.rst index 828b3431bbb..6c655686174 100644 --- a/doc/paddle/api/paddle/nn/functional/loss/binary_cross_entropy_cn.rst +++ b/doc/paddle/api/paddle/nn/functional/loss/binary_cross_entropy_cn.rst @@ -3,7 +3,7 @@ binary_cross_entropy ------------------------------- -.. py:functional:: paddle.nn.functional.binary_cross_entropy(input, label, weight=None, reduction='mean', name=None) +.. py:function:: paddle.nn.functional.binary_cross_entropy(input, label, weight=None, reduction='mean', name=None) 该函数用于计算输入 ``input`` 和标签 ``label`` 之间的二值交叉熵损失值。二值交叉熵损失函数公式如下: diff --git a/doc/paddle/api/paddle/nn/functional/loss/cross_entropy_cn.rst b/doc/paddle/api/paddle/nn/functional/loss/cross_entropy_cn.rst index 9ed7eea8ad3..c6cf71fd647 100644 --- a/doc/paddle/api/paddle/nn/functional/loss/cross_entropy_cn.rst +++ b/doc/paddle/api/paddle/nn/functional/loss/cross_entropy_cn.rst @@ -3,7 +3,7 @@ cross_entropy ------------------------------- -.. py:function:: paddle.nn.functional.cross_entropy(input, label, weight=None, ignore_index=-100, reduction="mean", soft_lable=False, axis=-1, name=None) +.. py:function:: paddle.nn.functional.cross_entropy(input, label, weight=None, ignore_index=-100, reduction="mean", soft_label=False, axis=-1, name=None) 该OP计算输入input和标签label间的交叉熵,可用于计算硬标签或软标签的交叉熵。 diff --git a/doc/paddle/api/paddle/nn/functional/loss/ctc_loss_cn.rst b/doc/paddle/api/paddle/nn/functional/loss/ctc_loss_cn.rst index 941f585264b..4c3bd001ccb 100644 --- a/doc/paddle/api/paddle/nn/functional/loss/ctc_loss_cn.rst +++ b/doc/paddle/api/paddle/nn/functional/loss/ctc_loss_cn.rst @@ -1,3 +1,5 @@ +.. _cn_paddle_nn_functional_loss_ctc: + ctc_loss ------------------------------- diff --git a/doc/paddle/api/paddle/nn/functional/loss/l1_loss_cn.rst b/doc/paddle/api/paddle/nn/functional/loss/l1_loss_cn.rst index f0e6e91e4f4..50102f374a3 100644 --- a/doc/paddle/api/paddle/nn/functional/loss/l1_loss_cn.rst +++ b/doc/paddle/api/paddle/nn/functional/loss/l1_loss_cn.rst @@ -1,3 +1,5 @@ +.. _cn_paddle_nn_functional_loss_l1: + l1_loss ------------------------------- diff --git a/doc/paddle/api/paddle/nn/functional/loss/smooth_l1_loss_cn.rst b/doc/paddle/api/paddle/nn/functional/loss/smooth_l1_loss_cn.rst index adf7f3b8031..f57fb79f215 100644 --- a/doc/paddle/api/paddle/nn/functional/loss/smooth_l1_loss_cn.rst +++ b/doc/paddle/api/paddle/nn/functional/loss/smooth_l1_loss_cn.rst @@ -1,3 +1,5 @@ +.. _cn_paddle_nn_functional_loss_smooth_l1: + smooth_l1_loss ------------------------------- diff --git a/doc/paddle/api/paddle/nn/functional/norm/instance_norm_cn.rst b/doc/paddle/api/paddle/nn/functional/norm/instance_norm_cn.rst index f6bc9890d01..3e3062b9c0e 100644 --- a/doc/paddle/api/paddle/nn/functional/norm/instance_norm_cn.rst +++ b/doc/paddle/api/paddle/nn/functional/norm/instance_norm_cn.rst @@ -1,4 +1,4 @@ -.. cn_api_nn_functional_instance_norm: +.. _cn_api_nn_functional_instance_norm: instance_norm ------------------------------- diff --git a/doc/paddle/api/paddle/nn/functional/norm/normalize_cn.rst b/doc/paddle/api/paddle/nn/functional/norm/normalize_cn.rst index ee2235b315a..bc319ed334a 100644 --- a/doc/paddle/api/paddle/nn/functional/norm/normalize_cn.rst +++ b/doc/paddle/api/paddle/nn/functional/norm/normalize_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_nn_functional_normalize: + normalize ------------------------------- diff --git a/doc/paddle/api/paddle/nn/functional/pooling/adaptive_avg_pool2d_cn.rst b/doc/paddle/api/paddle/nn/functional/pooling/adaptive_avg_pool2d_cn.rst index 48723c2e1a5..2a59b77dd9d 100755 --- a/doc/paddle/api/paddle/nn/functional/pooling/adaptive_avg_pool2d_cn.rst +++ b/doc/paddle/api/paddle/nn/functional/pooling/adaptive_avg_pool2d_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_nn_functional_adaptive_avg_pool2d: + adaptive_avg_pool2d ------------------------------- diff --git a/doc/paddle/api/paddle/nn/functional/pooling/adaptive_avg_pool3d_cn.rst b/doc/paddle/api/paddle/nn/functional/pooling/adaptive_avg_pool3d_cn.rst index 244914b384f..e500b08e544 100755 --- a/doc/paddle/api/paddle/nn/functional/pooling/adaptive_avg_pool3d_cn.rst +++ b/doc/paddle/api/paddle/nn/functional/pooling/adaptive_avg_pool3d_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_nn_functional_adaptive_avg_pool3d: + adaptive_avg_pool3d ------------------------------- diff --git a/doc/paddle/api/paddle/nn/functional/pooling/adaptive_max_pool2d.rst b/doc/paddle/api/paddle/nn/functional/pooling/adaptive_max_pool2d_cn.rst similarity index 100% rename from doc/paddle/api/paddle/nn/functional/pooling/adaptive_max_pool2d.rst rename to doc/paddle/api/paddle/nn/functional/pooling/adaptive_max_pool2d_cn.rst diff --git a/doc/paddle/api/paddle/nn/functional/pooling/adaptive_max_pool3d.rst b/doc/paddle/api/paddle/nn/functional/pooling/adaptive_max_pool3d_cn.rst similarity index 100% rename from doc/paddle/api/paddle/nn/functional/pooling/adaptive_max_pool3d.rst rename to doc/paddle/api/paddle/nn/functional/pooling/adaptive_max_pool3d_cn.rst diff --git a/doc/paddle/api/paddle/nn/initializer/xavier/XavierUniform_cn.rst b/doc/paddle/api/paddle/nn/initializer/xavier/XavierUniform_cn.rst index b92f3fa6164..f9441619e4c 100644 --- a/doc/paddle/api/paddle/nn/initializer/xavier/XavierUniform_cn.rst +++ b/doc/paddle/api/paddle/nn/initializer/xavier/XavierUniform_cn.rst @@ -1,9 +1,9 @@ -.. _cn_api_nn_initializer_XavierUnifrom: +.. _cn_api_nn_initializer_XavierUniform: -XavierUnifrom +XavierUniform ------------------------------- -.. py:class:: paddle.nn.initializer.XavierUnifrom(fan_in=None, fan_out=None, name=None) +.. py:class:: paddle.nn.initializer.XavierUniform(fan_in=None, fan_out=None, name=None) 该类实现Xavier权重初始化方法( Xavier weight initializer),Xavier权重初始化方法出自Xavier Glorot和Yoshua Bengio的论文 `Understanding the difficulty of training deep feedforward neural networks `_ diff --git a/doc/paddle/api/paddle/nn/layer/activation/Sigmoid_cn.rst b/doc/paddle/api/paddle/nn/layer/activation/Sigmoid_cn.rst index 408ca3ba605..ce5bda34f40 100644 --- a/doc/paddle/api/paddle/nn/layer/activation/Sigmoid_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/activation/Sigmoid_cn.rst @@ -3,7 +3,7 @@ Sigmoid ------------------------------- -.. py:class:: paddle.nn.layer.Sigmoid(name=None) +.. py:class:: paddle.nn.Sigmoid(name=None) 该接口用于创建一个 ``Sigmoid`` 的可调用类。 这个类可以计算输入 `x` 经过激活函数 `sigmoid` 之后的值。 diff --git a/doc/paddle/api/paddle/nn/layer/conv/Conv2DTranspose_cn.rst b/doc/paddle/api/paddle/nn/layer/conv/Conv2DTranspose_cn.rst index dd0f4a180f3..b78427323c6 100644 --- a/doc/paddle/api/paddle/nn/layer/conv/Conv2DTranspose_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/conv/Conv2DTranspose_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_paddle_nn_Conv2DTranspose: + Conv2DTranspose ------------------------------- diff --git a/doc/paddle/api/paddle/nn/layer/conv/Conv2D_cn.rst b/doc/paddle/api/paddle/nn/layer/conv/Conv2D_cn.rst index 8b911936a46..13a8f4c33fd 100644 --- a/doc/paddle/api/paddle/nn/layer/conv/Conv2D_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/conv/Conv2D_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_paddle_nn_Conv2D: + Conv2D ------------------------------- diff --git a/doc/paddle/api/paddle/nn/layer/conv/Conv3DTranspose_cn.rst b/doc/paddle/api/paddle/nn/layer/conv/Conv3DTranspose_cn.rst index ebbf338ddc9..d8e6d4c6926 100755 --- a/doc/paddle/api/paddle/nn/layer/conv/Conv3DTranspose_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/conv/Conv3DTranspose_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_paddle_nn_Conv3DTranspose: + Conv3DTranspose ------------------------------- diff --git a/doc/paddle/api/paddle/nn/layer/conv/Conv3D_cn.rst b/doc/paddle/api/paddle/nn/layer/conv/Conv3D_cn.rst index 5fab5d2d944..296025a106d 100644 --- a/doc/paddle/api/paddle/nn/layer/conv/Conv3D_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/conv/Conv3D_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_paddle_nn_Conv3D: + Conv3D ------------------------------- diff --git a/doc/paddle/api/paddle/nn/layer/loss/CTCLoss_cn.rst b/doc/paddle/api/paddle/nn/layer/loss/CTCLoss_cn.rst index 73d62d2ad30..eb15f6cacf9 100644 --- a/doc/paddle/api/paddle/nn/layer/loss/CTCLoss_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/loss/CTCLoss_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_paddle_nn_CTCLoss: + CTCLoss ------------------------------- diff --git a/doc/paddle/api/paddle/nn/layer/loss/KLDivLoss_cn.rst b/doc/paddle/api/paddle/nn/layer/loss/KLDivLoss_cn.rst index 4e509653d16..281e54bd3d0 100644 --- a/doc/paddle/api/paddle/nn/layer/loss/KLDivLoss_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/loss/KLDivLoss_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_paddle_nn_KLDivLoss: + KLDivLoss ------------------------------- diff --git a/doc/paddle/api/paddle/nn/layer/loss/L1Loss_cn.rst b/doc/paddle/api/paddle/nn/layer/loss/L1Loss_cn.rst index f7afbcefbed..946f0fc396c 100644 --- a/doc/paddle/api/paddle/nn/layer/loss/L1Loss_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/loss/L1Loss_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_paddle_nn_L1Loss: + L1Loss ------------------------------- diff --git a/doc/paddle/api/paddle/nn/layer/loss/MSELoss_cn.rst b/doc/paddle/api/paddle/nn/layer/loss/MSELoss_cn.rst index 86585ef6e3a..b60037bebca 100644 --- a/doc/paddle/api/paddle/nn/layer/loss/MSELoss_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/loss/MSELoss_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_paddle_nn_MSELoss: + MSELoss ------------------------------- diff --git a/doc/paddle/api/paddle/nn/layer/loss/MarginRankingLoss_cn.rst b/doc/paddle/api/paddle/nn/layer/loss/MarginRankingLoss_cn.rst index a202d9f6f35..e67f377670c 100644 --- a/doc/paddle/api/paddle/nn/layer/loss/MarginRankingLoss_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/loss/MarginRankingLoss_cn.rst @@ -3,7 +3,7 @@ MarginRankingLoss ------------------------------- -.. py:class:: paddle.nn.loss.MarginRankingLoss(margin=0.0, reduction='mean', name=None) +.. py:class:: paddle.nn.MarginRankingLoss(margin=0.0, reduction='mean', name=None) 该接口用于创建一个 ``MarginRankingLoss`` 的可调用类,计算输入input,other 和 标签label间的 `margin rank loss` 损失。 diff --git a/doc/paddle/api/paddle/nn/layer/loss/SmoothL1Loss_cn.rst b/doc/paddle/api/paddle/nn/layer/loss/SmoothL1Loss_cn.rst index 59ea3d8f16e..c7b688c9903 100644 --- a/doc/paddle/api/paddle/nn/layer/loss/SmoothL1Loss_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/loss/SmoothL1Loss_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_paddle_nn_SmoothL1Loss: + SmoothL1Loss ------------------------------- diff --git a/doc/paddle/api/paddle/nn/layer/pooling/AdaptiveAvgPool2D_cn.rst b/doc/paddle/api/paddle/nn/layer/pooling/AdaptiveAvgPool2D_cn.rst index 8834b94b785..14a058eb210 100755 --- a/doc/paddle/api/paddle/nn/layer/pooling/AdaptiveAvgPool2D_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/pooling/AdaptiveAvgPool2D_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_nn_AdaptiveAvgPool2D: + AdaptiveAvgPool2D ------------------------------- diff --git a/doc/paddle/api/paddle/nn/layer/pooling/AdaptiveAvgPool3D_cn.rst b/doc/paddle/api/paddle/nn/layer/pooling/AdaptiveAvgPool3D_cn.rst index 2ce50f1a79b..e93ebbb6617 100755 --- a/doc/paddle/api/paddle/nn/layer/pooling/AdaptiveAvgPool3D_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/pooling/AdaptiveAvgPool3D_cn.rst @@ -1,3 +1,5 @@ +.. _cn_api_nn_AdaptiveAvgPool3D: + AdaptiveAvgPool3D ------------------------------- diff --git a/doc/paddle/api/paddle/nn/layer/rnn/GRU_cn.rst b/doc/paddle/api/paddle/nn/layer/rnn/GRU_cn.rst index d8480749437..eb3f228a0a6 100644 --- a/doc/paddle/api/paddle/nn/layer/rnn/GRU_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/rnn/GRU_cn.rst @@ -47,7 +47,7 @@ GRU 输出: - **outputs** (Tensor) - 输出,由前向和后向cell的输出拼接得到。如果time_major为True,则Tensor的形状为[time_steps,batch_size,num_directions * hidden_size],如果time_major为False,则Tensor的形状为[batch_size,time_steps,num_directions * hidden_size],当direction设置为bidirectional时,num_directions等于2,否则等于1。 - - **final_states** (Tensor) - 最终状态。形状为[num_lauers * num_directions, batch_size, hidden_size],当direction设置为bidirectional时,num_directions等于2,否则等于1。 + - **final_states** (Tensor) - 最终状态。形状为[num_layers * num_directions, batch_size, hidden_size],当direction设置为bidirectional时,num_directions等于2,返回值的前向和后向的状态的索引是0,2,4,6...和1,3,5,7...,否则等于1。 **代码示例**: diff --git a/doc/paddle/api/paddle/nn/layer/rnn/LSTM_cn.rst b/doc/paddle/api/paddle/nn/layer/rnn/LSTM_cn.rst index 72908e330b0..528c28191db 100644 --- a/doc/paddle/api/paddle/nn/layer/rnn/LSTM_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/rnn/LSTM_cn.rst @@ -52,7 +52,7 @@ LSTM 输出: - **outputs** (Tensor) - 输出,由前向和后向cell的输出拼接得到。如果time_major为True,则Tensor的形状为[time_steps,batch_size,num_directions * hidden_size],如果time_major为False,则Tensor的形状为[batch_size,time_steps,num_directions * hidden_size],当direction设置为bidirectional时,num_directions等于2,否则等于1。 - - **final_states** (tuple) - 最终状态,一个包含h和c的元组。形状为[num_lauers * num_directions, batch_size, hidden_size],当direction设置为bidirectional时,num_directions等于2,否则等于1。 + - **final_states** (tuple) - 最终状态,一个包含h和c的元组。形状为[num_layers * num_directions, batch_size, hidden_size],当direction设置为bidirectional时,num_directions等于2,返回值的前向和后向的状态的索引是0,2,4,6...和1,3,5,7...,否则等于1。 **代码示例**: diff --git a/doc/paddle/api/paddle/nn/layer/rnn/SimpleRNN_cn.rst b/doc/paddle/api/paddle/nn/layer/rnn/SimpleRNN_cn.rst index 50fea327490..f57caf70a29 100644 --- a/doc/paddle/api/paddle/nn/layer/rnn/SimpleRNN_cn.rst +++ b/doc/paddle/api/paddle/nn/layer/rnn/SimpleRNN_cn.rst @@ -39,7 +39,7 @@ SimpleRNN 输出: - **outputs** (Tensor) - 输出,由前向和后向cell的输出拼接得到。如果time_major为False,则Tensor的形状为[batch_size,time_steps,num_directions * hidden_size],如果time_major为True,则Tensor的形状为[time_steps,batch_size,num_directions * hidden_size],当direction设置为bidirectional时,num_directions等于2,否则等于1。 - - **final_states** (Tensor) - 最终状态。形状为[num_lauers * num_directions, batch_size, hidden_size],当direction设置为bidirectional时,num_directions等于2,否则等于1。 + - **final_states** (Tensor) - 最终状态。形状为[num_layers * num_directions, batch_size, hidden_size],当direction设置为bidirectional时,num_directions等于2,返回值的前向和后向的状态的索引是0,2,4,6...和1,3,5,7...,否则等于1。 **代码示例**: diff --git a/doc/paddle/api/paddle/onnx/export_cn.rst b/doc/paddle/api/paddle/onnx/export_cn.rst index 3a94d14a3ed..8c3a1600f76 100644 --- a/doc/paddle/api/paddle/onnx/export_cn.rst +++ b/doc/paddle/api/paddle/onnx/export_cn.rst @@ -7,7 +7,9 @@ export 将输入的 ``Layer`` 存储为 ``ONNX`` 格式的模型,可使用onnxruntime或其他框架进行推理。 -更多详情请参考: `paddle2onnx `_ 。 +.. note:: + + 具体使用案例请参考 :ref:`cn_model_to_onnx` , 更多信息请参考: `paddle2onnx `_ 。 参数 ::::::::: diff --git a/doc/paddle/api/paddle/optimizer/Overview_cn.rst b/doc/paddle/api/paddle/optimizer/Overview_cn.rst index f2c47b90acb..e931acd28d2 100644 --- a/doc/paddle/api/paddle/optimizer/Overview_cn.rst +++ b/doc/paddle/api/paddle/optimizer/Overview_cn.rst @@ -15,37 +15,38 @@ paddle.optimizer 目录下包含飞桨框架支持的优化器算法相关的API :::::::::::::::::::: .. csv-table:: - :header: "序号", "API名称", "API功能" - :widths: 10, 10, 30 - - "1", " :ref:`Adadelta ` ", "Adadelta优化器" - "2", " :ref:`Adagrad ` ", "Adagrad优化器" - "3", " :ref:`Adam ` ", "Adam优化器" - "4", " :ref:`Adamax ` ", "Adamax优化器" - "5", " :ref:`AdamW ` ", "AdamW优化器" - "6", " :ref:`Momentum ` ", "Momentum优化器" - "7", " :ref:`Optimizer ` ", "飞桨框架优化器基类" - "8", " :ref:`RMSProp ` ", "RMSProp优化器" - "9", " :ref:`SGD ` ", "SGD优化器" + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`Adadelta ` ", "Adadelta优化器" + " :ref:`Adagrad ` ", "Adagrad优化器" + " :ref:`Adam ` ", "Adam优化器" + " :ref:`Adamax ` ", "Adamax优化器" + " :ref:`AdamW ` ", "AdamW优化器" + " :ref:`Lamb ` ", "Lamb优化器" + " :ref:`Momentum ` ", "Momentum优化器" + " :ref:`Optimizer ` ", "飞桨框架优化器基类" + " :ref:`RMSProp ` ", "RMSProp优化器" + " :ref:`SGD ` ", "SGD优化器" .. _about_lr: 学习率衰减相关API ::::::::::::::::::::::: .. csv-table:: - :header: "序号", "API名称", "API功能" - :widths: 10, 10, 30 - - "1", " :ref:`CosineAnnealingDecay ` ", "Cosine Annealing学习率衰减" - "2", " :ref:`ExponentialDecay ` ", "Exponential 学习率衰减" - "3", " :ref:`InverseTimeDecay ` ", "Inverse Time 学习率衰减" - "4", " :ref:`LRScheduler ` ", "学习率衰减的基类" - "5", " :ref:`LambdaDecay ` ", "Lambda 学习率衰减" - "6", " :ref:`LinearWarmup ` ", "Linear Warmup 学习率衰减" - "7", " :ref:`MultiStepDecay ` ", "MultiStep 学习率衰减" - "8", " :ref:`NaturalExpDecay ` ", "NatualExp 学习率衰减" - "9", " :ref:`NoamDecay ` ", "Norm学习率衰减" - "10", " :ref:`PiecewiseDecay ` ", "分段设置学习率" - "11", " :ref:`PolynomialDecay ` ", "多项式学习率衰减" - "12", " :ref:`ReduceOnPlateau ` ", "loss 自适应学习率衰减" - "13", " :ref:`StepDecay ` ", "按指定间隔轮数学习率衰减" + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`CosineAnnealingDecay ` ", "Cosine Annealing学习率衰减" + " :ref:`ExponentialDecay ` ", "Exponential 学习率衰减" + " :ref:`InverseTimeDecay ` ", "Inverse Time 学习率衰减" + " :ref:`LRScheduler ` ", "学习率衰减的基类" + " :ref:`LambdaDecay ` ", "Lambda 学习率衰减" + " :ref:`LinearWarmup ` ", "Linear Warmup 学习率衰减" + " :ref:`MultiStepDecay ` ", "MultiStep 学习率衰减" + " :ref:`NaturalExpDecay ` ", "NatualExp 学习率衰减" + " :ref:`NoamDecay ` ", "Norm学习率衰减" + " :ref:`PiecewiseDecay ` ", "分段设置学习率" + " :ref:`PolynomialDecay ` ", "多项式学习率衰减" + " :ref:`ReduceOnPlateau ` ", "loss 自适应学习率衰减" + " :ref:`StepDecay ` ", "按指定间隔轮数学习率衰减" diff --git a/doc/paddle/api/paddle/optimizer/lamb/Lamb_cn.rst b/doc/paddle/api/paddle/optimizer/lamb/Lamb_cn.rst new file mode 100755 index 00000000000..bac59eceda3 --- /dev/null +++ b/doc/paddle/api/paddle/optimizer/lamb/Lamb_cn.rst @@ -0,0 +1,230 @@ +.. _cn_api_paddle_optimizer_Lamb: + +Lamb +------------------------------- + +.. py:class:: paddle.optimizer.Lamb(learning_rate=0.001, lamb_weight_decay=0.01, beta1=0.9, beta2=0.999, epsilon=1e-06, parameters=None, grad_clip=None, exclude_from_weight_decay_fn=None, name=None) + + + +LAMB(Layer-wise Adaptive Moments optimizer for Batching training)优化器旨在不降低精度的前提下增大训练的批量大小,其支持自适应的逐元素更新和精确的分层校正。更多信息请参考 `Large Batch Optimization for Deep Learning: Training BERT in 76 minutes ` 。 参数更新如下: + +.. math:: + m_t=\beta_1*m_{t-1} + (1-\beta_1)*g_t +.. math:: + v_t=\beta_2∗v_{t-1}+(1−\beta_2)∗g_t^2 +.. math:: + m_t=\frac{m_t}{1-\beta_1^t} +.. math:: + v_t=\frac{v_t}{1-\beta_2^t} +.. math:: + r_t=\frac{m_t}{\sqrt{v_t}+\epsilon} +.. math:: + w_t=w_{t_1}-\eta_t*\frac{\left \| w_{t-1}\right \|}{\left \| r_t+\lambda*w_{t-1}\right \|}*(r_t+\lambda*w_{t-1}) \\ + +其中 :math:`m` 表示第一个动量,:math:`v` 代表第二个动量,:math:`\eta` 代表学习率,:math:`\lambda` 代表LAMB的权重学习率。 + +参数: + - **learning_rate** (float|Tensor, 可选) - 学习率,用于参数更新的计算。可以是一个浮点型值或者一个Tensor,默认值为0.001 + - **lamb_weight_decay** (float,可选) – LAMB权重衰减率。默认值为0.01。 + - **beta1** (float, 可选) - 第一个动量估计的指数衰减率。默认值为0.9。 + - **beta2** (float, 可选) - 第二个动量估计的指数衰减率。默认值为0.999。 + - **epsilon** (float, 可选) - 保持数值稳定性的短浮点类型值,默认值为1e-06 + - **parameters** (list, 可选) - 指定优化器需要优化的参数。在动态图模式下必须提供该参数;在静态图模式下默认值为None,这时所有的参数都将被优化。 + - **grad_clip** (GradientClipBase, 可选) – 梯度裁剪的策略,支持三种裁剪策略: :ref:`cn_api_paddle_fluid_clip_ClipGradByGlobalNorm` 、 :ref:`cn_api_paddle_fluid_clip_ClipGradByNorm` 、 :ref:`cn_api_paddle_fluid_clip_ClipGradByVelur` 。默认值为None,此时将不进行梯度裁剪。 + - **exclude_from_weight_decay_fn** (function) - 当某个参数作为输入该函数返回值为 True 时,为该参数跳过权重衰减。 + - **name** (str, 可选)- 该参数供开发人员打印调试信息时使用,具体用法请参见 :ref:`api_guide_Name` ,默认值为None + +.. note:: + 目前 ``Lamb`` 不支持 Sparse Parameter Optimization(稀疏参数优化)。 + +**代码示例** + +.. code-block:: python + + import paddle + + inp = paddle.uniform(shape=[10, 10], dtype='float32', min=-0.1, max=0.1) + linear = paddle.nn.Linear(10, 10) + out = linear(inp) + loss = paddle.mean(out) + beta1 = paddle.to_tensor([0.9], dtype="float32") + beta2 = paddle.to_tensor([0.85], dtype="float32") + lamb = paddle.optimizer.Lamb(learning_rate=0.002, parameters=linear.parameters(), lamb_weight_decay=0.01) + back = out.backward() + lamb.step() + lamb.clear_grad() + +.. py:method:: step() + +**注意:** + + **1. 该API只在** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下生效** + +执行一次优化器并进行参数更新。 + +返回:None。 + + +**代码示例** + +.. code-block:: python + + import paddle + + value = paddle.arange(26, dtype='float32') + value = paddle.reshape(value, [2, 13]) + a = paddle.to_tensor(value) + linear = paddle.nn.Linear(13, 5) + lamb = paddle.optimizer.Lamb(learning_rate = 0.01, + parameters = linear.parameters()) + out = linear(a) + out.backward() + lamb.step() + lamb.clear_grad() + +.. py:method:: minimize(loss, startup_program=None, parameters=None, no_grad_set=None) + +为网络添加反向计算过程,并根据反向计算所得的梯度,更新parameters中的Parameters,最小化网络损失值loss。 + +参数: + - **loss** (Tensor) – 需要最小化的损失值变量 + - **startup_program** (Program, 可选) – 用于初始化parameters中参数的 :ref:`cn_api_fluid_Program` , 默认值为None,此时将使用 :ref:`cn_api_fluid_default_startup_program` + - **parameters** (list, 可选) – 待更新的Parameter或者Parameter.name组成的列表, 默认值为None,此时将更新所有的Parameter + - **no_grad_set** (set, 可选) – 不需要更新的Parameter或者Parameter.name组成集合,默认值为None + +返回: tuple(optimize_ops, params_grads),其中optimize_ops为参数优化OP列表;param_grads为由(param, param_grad)组成的列表,其中param和param_grad分别为参数和参数的梯度。在静态图模式下,该返回值可以加入到 ``Executor.run()`` 接口的 ``fetch_list`` 参数中,若加入,则会重写 ``use_prune`` 参数为True,并根据 ``feed`` 和 ``fetch_list`` 进行剪枝,详见 ``Executor`` 的文档。 + +**代码示例** + +.. code-block:: python + + import paddle + + inp = paddle.uniform(shape=[10, 10], dtype="float32", min=-0.1, max=0.1) + linear = paddle.nn.Linear(10, 10) + inp = paddle.to_tensor(inp) + out = linear(inp) + loss = paddle.mean(out) + + beta1 = paddle.to_tensor([0.9], dtype="float32") + beta2 = paddle.to_tensor([0.99], dtype="float32") + + lamb = paddle.optimizer.Lamb(learning_rate=0.1, + lamb_weight_decay=0.01, + parameters=linear.parameters()) + out.backward() + lamb.minimize(loss) + lamb.clear_grad() + + +.. py:method:: clear_grad() + +**注意:** + + **1. 该API只在** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下生效** + + +清除需要优化的参数的梯度。 + +**代码示例** + +.. code-block:: python + + import paddle + + value = paddle.arange(26, dtype="float32") + value = paddle.reshape(value, [2, 13]) + a = paddle.to_tensor(value) + linear = paddle.nn.Linear(13, 5) + optimizer = paddle.optimizer.Lamb(learning_rate=0.02, + parameters=linear.parameters()) + out = linear(a) + out.backward() + optimizer.step() + optimizer.clear_grad() + +.. py:method:: set_lr(value) + +**注意:** + + **1. 该API只在** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下生效** + +手动设置当前 ``optimizer`` 的学习率。当使用_LRScheduler时,无法使用该API手动设置学习率,因为这将导致冲突。 + +参数: + value (float) - 需要设置的学习率的值。 + +返回:None + +**代码示例** + +.. code-block:: python + + import paddle + + linear = paddle.nn.Linear(10, 10) + + lamb = paddle.optimizer.Lamb(0.1, parameters=linear.parameters()) + + # set learning rate manually by python float value + lr_list = [0.2, 0.3, 0.4, 0.5, 0.6] + for i in range(5): + lamb.set_lr(lr_list[i]) + lr = lamb.get_lr() + print("current lr is {}".format(lr)) + # Print: + # current lr is 0.2 + # current lr is 0.3 + # current lr is 0.4 + # current lr is 0.5 + # current lr is 0.6 + +.. py:method:: get_lr() + +**注意:** + + **1. 该API只在** `Dygraph <../../user_guides/howto/dygraph/DyGraph.html>`_ **模式下生效** + +获取当前步骤的学习率。当不使用_LRScheduler时,每次调用的返回值都相同,否则返回当前步骤的学习率。 + +返回:float,当前步骤的学习率。 + + +**代码示例** + +.. code-block:: python + + + import paddle + import numpy as np + + # example1: _LRScheduler is not used, return value is all the same + emb = paddle.nn.Embedding(10, 10, sparse=False) + lamb = paddle.optimizer.Lamb(0.001, parameters = emb.parameters()) + lr = lamb.get_lr() + print(lr) # 0.001 + + # example2: StepDecay is used, return the step learning rate + inp = paddle.uniform(shape=[10, 10], dtype="float32", min=-0.1, max=0.1) + linear = paddle.nn.Linear(10, 10) + inp = paddle.to_tensor(inp) + out = linear(inp) + loss = paddle.mean(out) + + bd = [2, 4, 6, 8] + value = [0.2, 0.4, 0.6, 0.8, 1.0] + scheduler = paddle.optimizer.lr.StepDecay(learning_rate=0.5, step_size=2, gamma=0.1) + lamb = paddle.optimizer.Lamb(scheduler, + parameters=linear.parameters()) + + # first step: learning rate is 0.2 + np.allclose(lamb.get_lr(), 0.2, rtol=1e-06, atol=0.0) # True + + # learning rate for different steps + ret = [0.2, 0.2, 0.4, 0.4, 0.6, 0.6, 0.8, 0.8, 1.0, 1.0, 1.0, 1.0] + for i in range(12): + lamb.step() + lr = lamb.get_lr() + scheduler.step() + np.allclose(lr, ret[i], rtol=1e-06, atol=0.0) # True diff --git a/doc/paddle/api/paddle/tensor/Overview_cn.rst b/doc/paddle/api/paddle/tensor/Overview_cn.rst new file mode 100644 index 00000000000..9d426929f77 --- /dev/null +++ b/doc/paddle/api/paddle/tensor/Overview_cn.rst @@ -0,0 +1,305 @@ +.. _cn_overview_paddle: + +paddle +--------------------- + +paddle 目录下包含tensor、device、framework相关API以及某些高层API。具体如下: + +- :ref:`tensor数学操作 ` +- :ref:`tensor逻辑操作 ` +- :ref:`tensor属性相关 ` +- :ref:`tensor创建相关 ` +- :ref:`tensor元素查找相关 ` +- :ref:`tensor初始化相关 ` +- :ref:`tensor random相关 ` +- :ref:`tensor线性代数相关 ` +- :ref:`tensor元素操作相关(如:转置,reshape等) ` +- :ref:`framework相关 ` +- :ref:`device相关 ` +- :ref:`高层API相关 ` + + + + +.. _tensor_math: +tensor数学操作 +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`paddle.abs ` ", "绝对值函数" + " :ref:`paddle.acos ` ", "arccosine函数" + " :ref:`paddle.add ` ", "Tensor逐元素相加" + " :ref:`paddle.add_n ` ", "对输入的一至多个Tensor或LoDTensor求和" + " :ref:`paddle.addmm ` ", "计算输入Tensor x和y的乘积,将结果乘以标量alpha,再加上input与beta的乘积,得到输出" + " :ref:`paddle.all ` ", "对指定维度上的Tensor元素进行逻辑与运算" + " :ref:`paddle.allclose ` ", "逐个检查输入Tensor x和y的所有元素是否均满足 ∣x−y∣≤atol+rtol×∣y∣" + " :ref:`paddle.any ` ", "对指定维度上的Tensor元素进行逻辑或运算" + " :ref:`paddle.asin ` ", "arcsine函数" + " :ref:`paddle.atan ` ", "arctangent函数" + " :ref:`paddle.ceil ` ", "向上取整运算函数" + " :ref:`paddle.clip ` ", "将输入的所有元素进行剪裁,使得输出元素限制在[min, max]内" + " :ref:`paddle.conj ` ", "逐元素计算Tensor的共轭运算" + " :ref:`paddle.cos ` ", "余弦函数" + " :ref:`paddle.cosh ` ", "双曲余弦函数" + " :ref:`paddle.cumsum ` ", "沿给定 axis 计算张量 x 的累加和" + " :ref:`paddle.divide ` ", "逐元素相除算子" + " :ref:`paddle.equal ` ", "该OP返回 x==y 逐元素比较x和y是否相等,相同位置的元素相同则返回True,否则返回False" + " :ref:`paddle.equal_all ` ", "如果所有相同位置的元素相同返回True,否则返回False" + " :ref:`paddle.erf ` ", "逐元素计算 Erf 激活函数" + " :ref:`paddle.exp ` ", "逐元素进行以自然数e为底指数运算" + " :ref:`paddle.floor ` ", "向下取整函数" + " :ref:`paddle.floor_divide ` ", "逐元素整除算子,输入 x 与输入 y 逐元素整除,并将各个位置的输出元素保存到返回结果中" + " :ref:`paddle.greater_equal ` ", "逐元素地返回 x>=y 的逻辑值" + " :ref:`paddle.greater_than ` ", "逐元素地返回 x>y 的逻辑值" + " :ref:`paddle.increment ` ", "在控制流程中用来让 x 的数值增加 value" + " :ref:`paddle.inverse ` ", "计算方阵的逆" + " :ref:`paddle.kron ` ", "计算两个张量的克罗内克积" + " :ref:`paddle.less_equal ` ", "逐元素地返回 x<=y 的逻辑值" + " :ref:`paddle.less_than ` ", "逐元素地返回 x` ", "Log激活函数(计算自然对数)" + " :ref:`paddle.log10 ` ", "Log10激活函数(计算底为10的对数)" + " :ref:`paddle.log2 ` ", "计算Log1p(加一的自然对数)结果" + " :ref:`paddle.logical_and ` ", "逐元素的对 x 和 y 进行逻辑与运算" + " :ref:`paddle.logical_not ` ", "逐元素的对 X Tensor进行逻辑非运算" + " :ref:`paddle.logical_or ` ", "逐元素的对 X 和 Y 进行逻辑或运算" + " :ref:`paddle.logical_xor ` ", "逐元素的对 X 和 Y 进行逻辑异或运算" + " :ref:`paddle.logsumexp ` ", "沿着 axis 计算 x 的以e为底的指数的和的自然对数" + " :ref:`paddle.max ` ", "对指定维度上的Tensor元素求最大值运算" + " :ref:`paddle.maximum ` ", "逐元素对比输入的两个Tensor,并且把各个位置更大的元素保存到返回结果中" + " :ref:`paddle.mean ` ", "沿 axis 计算 x 的平均值" + " :ref:`paddle.median ` ", "沿给定的轴 axis 计算 x 中元素的中位数" + " :ref:`paddle.min ` ", "对指定维度上的Tensor元素求最小值运算" + " :ref:`paddle.minimum ` ", "逐元素对比输入的两个Tensor,并且把各个位置更小的元素保存到返回结果中" + " :ref:`paddle.mm ` ", "用于两个输入矩阵的相乘" + " :ref:`paddle.mod ` ", "逐元素取模算子" + " :ref:`paddle.multiplex ` ", "从每个输入Tensor中选择特定行构造输出Tensor" + " :ref:`paddle.multiply ` ", "逐元素相乘算子" + " :ref:`paddle.not_equal ` ", "逐元素地返回x!=y 的逻辑值" + " :ref:`paddle.pow ` ", "指数算子,逐元素计算 x 的 y 次幂" + " :ref:`paddle.prod ` ", "对指定维度上的Tensor元素进行求乘积运算" + " :ref:`paddle.reciprocal ` ", "对输入Tensor取倒数" + " :ref:`paddle.round ` ", "将输入中的数值四舍五入到最接近的整数数值" + " :ref:`paddle.rsqrt ` ", "rsqrt激活函数" + " :ref:`paddle.scale ` ", "缩放算子" + " :ref:`paddle.sign ` ", "对输入x中每个元素进行正负判断" + " :ref:`paddle.sin ` ", "计算输入的正弦值" + " :ref:`paddle.sinh ` ", "双曲正弦函数" + " :ref:`paddle.sqrt ` ", "计算输入的算数平方根" + " :ref:`paddle.square ` ", "该OP执行逐元素取平方运算" + " :ref:`paddle.stanh ` ", "stanh 激活函数" + " :ref:`paddle.std ` ", "沿给定的轴 axis 计算 x 中元素的标准差" + " :ref:`paddle.subtract ` ", "逐元素相减算子" + " :ref:`paddle.sum ` ", "对指定维度上的Tensor元素进行求和运算" + " :ref:`paddle.tan ` ", "三角函数tangent" + " :ref:`paddle.tanh ` ", "tanh激活函数" + " :ref:`paddle.trace ` ", "计算输入 Tensor 在指定平面上的对角线元素之和" + " :ref:`paddle.var ` ", "沿给定的轴 axis 计算 x 中元素的方差" + +.. _tensor_logic: +tensor逻辑操作 +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`paddle.is_empty ` ", "测试变量是否为空" + " :ref:`paddle.is_tensor ` ", "用来测试输入对象是否是paddle.Tensor" + " :ref:`paddle.isfinite ` ", "返回输入tensor的每一个值是否为Finite(既非 +/-INF 也非 +/-NaN )" + " :ref:`paddle.isinf ` ", "返回输入tensor的每一个值是否为 +/-INF" + " :ref:`paddle.isnan ` ", "返回输入tensor的每一个值是否为 +/-NaN" + +.. _tensor_attribute: +tensor属性相关 +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`paddle.imag ` ", "返回一个包含输入复数Tensor的虚部数值的新Tensor" + " :ref:`paddle.real ` ", "返回一个包含输入复数Tensor的实部数值的新Tensor" + " :ref:`paddle.shape ` ", "获得输入Tensor或SelectedRows的shape" + +.. _tensor_creation: +tensor创建相关 +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`paddle.arange ` ", "返回以步长 step 均匀分隔给定数值区间[start, end)的1-D Tensor,数据类型为 dtype" + " :ref:`paddle.diag ` ", "如果 x 是向量(1-D张量),则返回带有 x 元素作为对角线的2-D方阵;如果 x 是矩阵(2-D张量),则提取 x 的对角线元素,以1-D张量返回。" + " :ref:`paddle.empty ` ", "创建形状大小为shape并且数据类型为dtype的Tensor" + " :ref:`paddle.empty_like ` ", "根据 x 的shape和数据类型 dtype 创建未初始化的Tensor" + " :ref:`paddle.eye ` ", "构建二维Tensor(主对角线元素为1,其他元素为0)" + " :ref:`paddle.full ` ", "创建形状大小为 shape 并且数据类型为 dtype 的Tensor" + " :ref:`paddle.full_like ` ", "创建一个和 x 具有相同的形状并且数据类型为 dtype 的Tensor" + " :ref:`paddle.linspace ` ", "返回一个Tensor,Tensor的值为在区间start和stop上均匀间隔的num个值,输出Tensor的长度为num" + " :ref:`paddle.meshgrid <>` ", "对每个张量做扩充操作" + " :ref:`paddle.numel ` ", "返回一个长度为1并且元素值为输入 x 元素个数的Tensor" + " :ref:`paddle.ones ` ", "创建形状为 shape 、数据类型为 dtype 且值全为1的Tensor" + " :ref:`paddle.ones_like ` ", "返回一个和 x 具有相同形状的数值都为1的Tensor" + " :ref:`paddle.Tensor ` ", "Paddle中最为基础的数据结构" + " :ref:`paddle.to_tensor ` ", "通过已知的data来创建一个tensor" + " :ref:`paddle.zeros ` ", "该OP创建形状为 shape 、数据类型为 dtype 且值全为0的Tensor" + " :ref:`paddle.zeros_like ` ", "该OP返回一个和 x 具有相同的形状的全零Tensor,数据类型为 dtype 或者和 x 相同" + +.. _tensor_search: +tensor元素查找相关 +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`paddle.argmax ` ", "沿 axis 计算输入 x 的最大元素的索引" + " :ref:`paddle.argmin ` ", "沿 axis 计算输入 x 的最小元素的索引" + " :ref:`paddle.argsort ` ", "对输入变量沿给定轴进行排序,输出排序好的数据的相应索引,其维度和输入相同" + " :ref:`paddle.index_sample ` ", "对输入 x 中的元素进行批量抽样" + " :ref:`paddle.index_select ` ", "沿着指定轴 axis 对输入 x 进行索引" + " :ref:`paddle.masked_select ` ", "返回一个1-D 的Tensor, Tensor的值是根据 mask 对输入 x 进行选择的" + " :ref:`paddle.nonzero ` ", "返回输入 x 中非零元素的坐标" + " :ref:`paddle.sort ` ", "对输入变量沿给定轴进行排序,输出排序好的数据,其维度和输入相同" + " :ref:`paddle.topk ` ", "沿着可选的 axis 查找topk最大或者最小的结果和结果所在的索引信息" + " :ref:`paddle.where ` ", "该OP返回一个根据输入 condition, 选择 x 或 y 的元素组成的多维 Tensor" + +.. _tensor_initializer: +tensor初始化相关 +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`paddle.assign ` ", "将输入Tensor或numpy数组拷贝至输出Tensor" + +.. _tensor_random: +tensor random相关 +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`paddle.bernoulli ` ", "以输入 x 为概率,生成一个伯努利分布(0-1分布)的Tensor,输出Tensor的形状和数据类型与输入 x 相同" + " :ref:`paddle.multinomial ` ", "以输入 x 为概率,生成一个多项分布的Tensor" + " :ref:`paddle.normal ` ", "返回符合正态分布(均值为 mean ,标准差为 std 的正态随机分布)的随机Tensor" + " :ref:`paddle.rand ` ", "返回符合均匀分布的,范围在[0, 1)的Tensor" + " :ref:`paddle.randint ` ", "返回服从均匀分布的、范围在[low, high)的随机Tensor" + " :ref:`paddle.randn ` ", "返回符合标准正态分布(均值为0,标准差为1的正态随机分布)的随机Tensor" + " :ref:`paddle.randperm ` ", "返回一个数值在0到n-1、随机排列的1-D Tensor" + " :ref:`paddle.seed ` ", "设置全局默认generator的随机种子" + " :ref:`paddle.uniform ` ", "返回数值服从范围[min, max)内均匀分布的随机Tensor" + +.. _tensor_linalg: +tensor线性代数相关 +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`paddle.bmm ` ", "对输入x及输入y进行矩阵相乘" + " :ref:`paddle.cholesky ` ", "计算一个对称正定矩阵或一批对称正定矩阵的Cholesky分解" + " :ref:`paddle.cross ` ", "计算张量 x 和 y 在 axis 维度上的向量积(叉积)" + " :ref:`paddle.dist ` ", "计算 (x-y) 的 p 范数(p-norm)" + " :ref:`paddle.dot ` ", "计算向量的内积" + " :ref:`paddle.histogram ` ", "计算输入张量的直方图" + " :ref:`paddle.matmul ` ", "计算两个Tensor的乘积,遵循完整的广播规则" + " :ref:`paddle.mv ` ", "计算矩阵 x 和向量 vec 的乘积" + " :ref:`paddle.norm ` ", "计算给定Tensor的矩阵范数(Frobenius 范数)和向量范数(向量1范数、2范数、或者通常的p范数)" + " :ref:`paddle.rank ` ", "计算输入Tensor的维度(秩)" + " :ref:`paddle.t ` ", "对小于等于2维的Tensor进行数据转置" + " :ref:`paddle.tril ` ", "返回输入矩阵 input 的下三角部分,其余部分被设为0" + " :ref:`paddle.triu ` ", "返回输入矩阵 input 的上三角部分,其余部分被设为0" + +.. _tensor_manipulation: +tensor元素操作相关(如:转置,reshape等) +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`paddle.broadcast_to ` ", "根据 shape 指定的形状广播 x ,广播后, x 的形状和 shape 指定的形状一致" + " :ref:`paddle.cast ` ", "将输入的x的数据类型转换为 dtype 并输出" + " :ref:`paddle.chunk ` ", "将输入Tensor分割成多个子Tensor" + " :ref:`paddle.concat ` ", "对输入沿 axis 轴进行联结,返回一个新的Tensor" + " :ref:`paddle.expand ` ", "根据 shape 指定的形状扩展 x ,扩展后, x 的形状和 shape 指定的形状一致" + " :ref:`paddle.expand_as ` ", "根据 y 的形状扩展 x ,扩展后, x 的形状和 y 的形状相同" + " :ref:`paddle.flatten ` ", "根据给定的start_axis 和 stop_axis 将连续的维度展平" + " :ref:`paddle.flip ` ", "沿指定轴反转n维tensor" + " :ref:`paddle.gather ` ", "根据索引 index 获取输入 x 的指定 aixs 维度的条目,并将它们拼接在一起" + " :ref:`paddle.gather_nd ` ", "paddle.gather的高维推广" + " :ref:`paddle.reshape ` ", "在保持输入 x 数据不变的情况下,改变 x 的形状" + " :ref:`paddle.roll ` ", "沿着指定维度 axis 对输入 x 进行循环滚动,当元素移动到最后位置时,会从第一个位置重新插入" + " :ref:`paddle.scatter ` ", "通过基于 updates 来更新选定索引 index 上的输入来获得输出" + " :ref:`paddle.scatter_nd ` ", "根据 index ,将 updates 添加到一个新的张量中,从而得到输出的Tensor" + " :ref:`paddle.scatter_nd_add ` ", "通过对Tensor中的单个值或切片应用稀疏加法,从而得到输出的Tensor" + " :ref:`paddle.shard_index ` ", "根据分片(shard)的偏移量重新计算分片的索引" + " :ref:`paddle.slice ` ", "沿多个轴生成 input 的切片" + " :ref:`paddle.split ` ", "将输入Tensor分割成多个子Tensor" + " :ref:`paddle.squeeze ` ", "删除输入Tensor的Shape中尺寸为1的维度" + " :ref:`paddle.stack ` ", "沿 axis 轴对输入 x 进行堆叠操作" + " :ref:`paddle.strided_slice ` ", "沿多个轴生成 x 的切片" + " :ref:`paddle.tile ` ", "根据参数 repeat_times 对输入 x 的各维度进行复制" + " :ref:`paddle.transpose ` ", "根据perm对输入的多维Tensor进行数据重排" + " :ref:`paddle.unbind ` ", "将输入Tensor按照指定的维度分割成多个子Tensor" + " :ref:`paddle.unique ` ", "返回Tensor按升序排序后的独有元素" + " :ref:`paddle.unsqueeze ` ", "该OP向输入Tensor的Shape中一个或多个位置(axis)插入尺寸为1的维度" + " :ref:`paddle.unstack ` ", "该OP将单个dim为 D 的Tensor沿 axis 轴unpack为 num 个dim为 (D-1) 的Tensor" + +.. _about_framework: +framework相关 +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`paddle.CPUPlace ` ", "一个设备描述符,指定CPUPlace则Tensor将被自动分配在该设备上,并且模型将会运行在该设备上" + " :ref:`paddle.CUDAPinnedPlace ` ", "一个设备描述符,它所指代的页锁定内存由 CUDA 函数 cudaHostAlloc() 在主机内存上分配,主机的操作系统将不会对这块内存进行分页和交换操作,可以通过直接内存访问技术访问,加速主机和 GPU 之间的数据拷贝" + " :ref:`paddle.CUDAPlace ` ", "一个设备描述符,表示一个分配或将要分配 Tensor 或 LoDTensor 的 GPU 设备" + " :ref:`paddle.DataParallel ` ", "通过数据并行模式执行动态图模型" + " :ref:`paddle.disable_static ` ", "关闭静态图模式" + " :ref:`paddle.enable_static ` ", "开启静态图模式" + " :ref:`paddle.get_default_dtype ` ", "得到当前全局的dtype" + " :ref:`paddle.grad ` ", "对于每个 inputs ,计算所有 outputs 相对于其的梯度和" + " :ref:`paddle.in_dynamic_mode ` ", "查看paddle当前是否在动态图模式中运行" + " :ref:`paddle.load ` ", "从指定路径载入可以在paddle中使用的对象实例" + " :ref:`paddle.no_grad ` ", "创建一个上下文来禁用动态图梯度计算" + " :ref:`paddle.ParamAttr ` ", "创建一个参数属性对象" + " :ref:`paddle.save ` ", "将对象实例obj保存到指定的路径中" + " :ref:`paddle.set_default_dtype ` ", "设置默认的全局dtype。" + +.. _about_device: +device相关 +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`paddle.get_cudnn_version ` ", "此函数返回cudnn的版本" + " :ref:`paddle.is_compiled_with_cuda ` ", "检查 whl 包是否可以被用来在GPU上运行模型" + " :ref:`paddle.is_compiled_with_xpu ` ", "检查 whl 包是否可以被用来在Baidu Kunlun XPU上运行模型" + " :ref:`paddle.get_device ` ", "该功能返回当前程序运行的全局设备" + " :ref:`paddle.set_device ` ", "Paddle支持包括CPU和GPU在内的多种设备运行,设备可以通过字符串标识符表示,此功能可以指定OP运行的全局设备" + " :ref:`paddle.XPUPlace ` ", "一个设备描述符,表示一个分配或将要分配 Tensor 的 Baidu Kunlun XPU 设备" + +.. _about_hapi: +高层API相关 +:::::::::::::::::::: + +.. csv-table:: + :header: "API名称", "API功能" + :widths: 10, 30 + + " :ref:`paddle.Model ` ", "一个具备训练、测试、推理的神经网络" + " :ref:`paddle.summary ` ", "打印网络的基础结构和参数信息" + " :ref:`paddle.flops ` ", "打印网络的基础结构和参数信息" \ No newline at end of file diff --git a/doc/paddle/api/paddle/tensor/creation/Tensor_cn.rst b/doc/paddle/api/paddle/tensor/creation/Tensor_cn.rst index 02cf890c153..2f90e32d082 100644 --- a/doc/paddle/api/paddle/tensor/creation/Tensor_cn.rst +++ b/doc/paddle/api/paddle/tensor/creation/Tensor_cn.rst @@ -21,7 +21,7 @@ Tensor import paddle x = paddle.to_tensor([1.0, 2.0, 3.0]) - print("tensor's grad is: {}".format(x.dtype)) + print("tensor's type is: {}".format(x.dtype)) .. py:attribute:: grad diff --git a/doc/paddle/api/paddle/tensor/creation/eye_cn.rst b/doc/paddle/api/paddle/tensor/creation/eye_cn.rst index 36b7c6bb1ef..31499d789bf 100644 --- a/doc/paddle/api/paddle/tensor/creation/eye_cn.rst +++ b/doc/paddle/api/paddle/tensor/creation/eye_cn.rst @@ -3,7 +3,7 @@ eye ------------------------------- -.. py:function:: paddle.tensor.eye(num_rows, num_columns=None, dtype=None, name=None) +.. py:function:: paddle.eye(num_rows, num_columns=None, dtype=None, name=None) 该OP用来构建二维Tensor(主对角线元素为1,其他元素为0)。 diff --git a/doc/paddle/api/paddle/tensor/creation/tril_cn.rst b/doc/paddle/api/paddle/tensor/creation/tril_cn.rst index 87636d750a5..253ec8e6889 100644 --- a/doc/paddle/api/paddle/tensor/creation/tril_cn.rst +++ b/doc/paddle/api/paddle/tensor/creation/tril_cn.rst @@ -3,7 +3,7 @@ tril ------------------------------- -.. py:function:: paddle.tensor.tril(input, diagonal=0, name=None) +.. py:function:: paddle.tril(input, diagonal=0, name=None) @@ -11,17 +11,19 @@ tril 返回输入矩阵 `input` 的下三角部分,其余部分被设为0。 矩形的下三角部分被定义为对角线上和下方的元素。 -参数: +参数 +::::::::: - **input** (Tensor) : 输入Tensor input,数据类型支持 `float32`, `float64`, `int32`, `int64` 。 - **diagonal** (int,可选) : 指定的对角线,默认值为0。如果diagonal = 0,表示主对角线; 如果diagonal是正数,表示主对角线之上的对角线; 如果diagonal是负数,表示主对角线之下的对角线。 - **name** (str,可选)- 具体用法请参见 :ref:`api_guide_Name` ,一般无需设置,默认值为None。 -返回:计算得到的Tensor。Tensor数据类型与输入 `input` 数据类型一致。 +返回 +::::::::: +Tensor, 数据类型与输入 `input` 数据类型一致。 -返回类型:Tensor - -**代码示例**: +代码示例 +::::::::: .. code-block:: python diff --git a/doc/paddle/api/paddle/tensor/creation/triu_cn.rst b/doc/paddle/api/paddle/tensor/creation/triu_cn.rst index 862eb42901e..d25dacb0114 100644 --- a/doc/paddle/api/paddle/tensor/creation/triu_cn.rst +++ b/doc/paddle/api/paddle/tensor/creation/triu_cn.rst @@ -3,25 +3,24 @@ triu ------------------------------- -.. py:function:: paddle.tensor.triu(input, diagonal=0, name=None) - - +.. py:function:: paddle.triu(input, diagonal=0, name=None) 返回输入矩阵 `input` 的上三角部分,其余部分被设为0。 矩形的上三角部分被定义为对角线上和上方的元素。 -参数: +参数 +::::::::: - **input** (Tensor) : 输入Tensor input,数据类型支持 `float32`, `float64`, `int32`, `int64` 。 - **diagonal** (int,可选) : 指定的对角线,默认值为0。如果diagonal = 0,表示主对角线; 如果diagonal是正数,表示主对角线之上的对角线; 如果diagonal是负数,表示主对角线之下的对角线。 - **name** (str,可选)- 具体用法请参见 :ref:`api_guide_Name` ,一般无需设置,默认值为None。 -返回:计算得到的Tensor。Tensor数据类型与输入 `input` 数据类型一致。 - -返回类型:Tensor - +返回 +::::::::: +Tensor, 数据类型与输入 `input` 数据类型一致。 -**代码示例**: +代码示例 +::::::::: .. code-block:: python diff --git a/doc/paddle/api/paddle/tensor/linalg/dist_cn.rst b/doc/paddle/api/paddle/tensor/linalg/dist_cn.rst index 51a530fff1e..abb5c39864b 100644 --- a/doc/paddle/api/paddle/tensor/linalg/dist_cn.rst +++ b/doc/paddle/api/paddle/tensor/linalg/dist_cn.rst @@ -3,7 +3,7 @@ dist ------------------------------- -.. py:function:: paddle.tensor.linalg.dist(x, y, p=2) +.. py:function:: paddle.dist(x, y, p=2) 该OP用于计算 `(x-y)` 的 p 范数(p-norm),需要注意这不是严格意义上的范数,仅作为距离的度量。输入 `x` 和 `y` 的形状(shape)必须是可广播的(broadcastable)。其含义如下,详情请参考 `numpy的广播概念 `_ : diff --git a/doc/paddle/api/paddle/tensor/linalg/dot_cn.rst b/doc/paddle/api/paddle/tensor/linalg/dot_cn.rst index b6c2b4fc832..9f510fabe61 100644 --- a/doc/paddle/api/paddle/tensor/linalg/dot_cn.rst +++ b/doc/paddle/api/paddle/tensor/linalg/dot_cn.rst @@ -10,7 +10,7 @@ dot .. note:: - 支持1维和2维Tensor. + 支持1维和2维Tensor。如果是2维Tensor,矩阵的第一个维度是batch_size, 将会在多个样本上进行点积计算。 参数 ::::::::: diff --git a/doc/paddle/api/paddle/tensor/linalg/matmul_cn.rst b/doc/paddle/api/paddle/tensor/linalg/matmul_cn.rst index d72f2fd7c0b..e71cd9374b2 100644 --- a/doc/paddle/api/paddle/tensor/linalg/matmul_cn.rst +++ b/doc/paddle/api/paddle/tensor/linalg/matmul_cn.rst @@ -5,7 +5,7 @@ matmul .. py:function:: paddle.matmul(x, y, transpose_x=False, transpose_y=False, name=None) -该op是计算两个Tensor的乘积,遵循完整的广播规则,关于广播规则,请参考 :ref:`use_guide_broadcasting` 。 +该op是计算两个Tensor的乘积,遵循完整的广播规则,关于广播规则,请参考 :ref:`cn_user_guide_broadcasting` 。 并且其行为与 ``numpy.matmul`` 一致。目前,输入张量的维数可以是任意数量, ``matmul`` 可以用于 实现 ``dot`` , ``matmul`` 和 ``batchmatmul`` 。实际行为取决于输入 ``x`` 、输入 ``y`` 、 ``transpose_x`` , ``transpose_y`` 。具体如下: diff --git a/doc/paddle/api/paddle/tensor/manipulation/flatten_cn.rst b/doc/paddle/api/paddle/tensor/manipulation/flatten_cn.rst index 89f918324c2..fdba816368e 100644 --- a/doc/paddle/api/paddle/tensor/manipulation/flatten_cn.rst +++ b/doc/paddle/api/paddle/tensor/manipulation/flatten_cn.rst @@ -8,7 +8,10 @@ flatten -flatten op 根据给定的start_axis 和 stop_axis 将连续的维度展平 +flatten op 根据给定的start_axis 和 stop_axis 将连续的维度展平。 + +请注意,在动态图模式下,输出Tensor将与输入Tensor共享数据,并且没有Tensor数据拷贝的过程。 +如果不希望输入与输出共享数据,请使用 `Tensor.clone` ,例如 `flatten_clone_x = x.flatten().clone()` 。 例如: @@ -63,5 +66,8 @@ flatten op 根据给定的start_axis 和 stop_axis 将连续的维度展平 out = paddle.flatten(img, start_axis=1, stop_axis=2) # out shape is [2, 12, 4] + # 在动态图模式下,输出out与输入img共享数据 + img[0, 0, 0, 0] = -1 + print(out[0, 0, 0]) # [-1] diff --git a/doc/paddle/api/paddle/tensor/manipulation/reshape__cn.rst b/doc/paddle/api/paddle/tensor/manipulation/reshape__cn.rst new file mode 100644 index 00000000000..c6fb6678cb5 --- /dev/null +++ b/doc/paddle/api/paddle/tensor/manipulation/reshape__cn.rst @@ -0,0 +1,8 @@ +.. _cn_api_paddle_tensor_reshape_: + +reshape\_ +------------------------------- + +.. py:function:: paddle.reshape_(x, shape, name=None) + +Inplace 版本的 :ref:`cn_api_fluid_layers_reshape` API,对输入 `x` 采用 Inplace 策略 。 diff --git a/doc/paddle/api/paddle/tensor/manipulation/reshape_cn.rst b/doc/paddle/api/paddle/tensor/manipulation/reshape_cn.rst index 634ea3872eb..a1ad22b75f7 100644 --- a/doc/paddle/api/paddle/tensor/manipulation/reshape_cn.rst +++ b/doc/paddle/api/paddle/tensor/manipulation/reshape_cn.rst @@ -8,6 +8,9 @@ reshape 该OP在保持输入 ``x`` 数据不变的情况下,改变 ``x`` 的形状。 +请注意,在动态图模式下,输出Tensor将与输入Tensor共享数据,并且没有Tensor数据拷贝的过程。 +如果不希望输入与输出共享数据,请使用 `Tensor.clone` ,例如 `reshape_clone_x = x.reshape([-1]).clone()` 。 + 在指定目标shape时存在一些技巧: .. code-block:: text @@ -43,17 +46,23 @@ reshape x = paddle.rand([2, 4, 6], dtype="float32") positive_four = paddle.full([1], 4, "int32") + out = paddle.reshape(x, [-1, 0, 3, 2]) print(out) # the shape is [2,4,3,2]. + out = paddle.reshape(x, shape=[positive_four, 12]) print(out) # the shape of out_2 is [4, 12]. + shape_tensor = paddle.to_tensor(np.array([8, 6]).astype("int32")) out = paddle.reshape(x, shape=shape_tensor) print(out) # the shape is [8, 6]. - + # 在动态图模式下,输出out与输入x共享数据 + x[0, 0, 0] = 10. + print(out[0, 0]) + # the value is [10.] diff --git a/doc/paddle/api/paddle/tensor/manipulation/scatter__cn.rst b/doc/paddle/api/paddle/tensor/manipulation/scatter__cn.rst new file mode 100644 index 00000000000..c3d5517ab65 --- /dev/null +++ b/doc/paddle/api/paddle/tensor/manipulation/scatter__cn.rst @@ -0,0 +1,7 @@ +.. _cn_api_paddle_cn_scatter_: + +scatter\_ +------------------------------- +.. py:function:: paddle.scatter_(x, index, updates, overwrite=True, name=None) + +Inplace 版本的 :ref:`cn_api_paddle_cn_scatter` API,对输入 `x` 采用 Inplace 策略 。 diff --git a/doc/paddle/api/paddle/tensor/manipulation/split_cn.rst b/doc/paddle/api/paddle/tensor/manipulation/split_cn.rst index 87c46476229..316e4d94e45 100644 --- a/doc/paddle/api/paddle/tensor/manipulation/split_cn.rst +++ b/doc/paddle/api/paddle/tensor/manipulation/split_cn.rst @@ -2,22 +2,26 @@ split ------------------------------- -.. py:function:: paddle.tensor.split(x, num_or_sections, axis=0, name=None) +.. py:function:: paddle.split(x, num_or_sections, axis=0, name=None) 该OP将输入Tensor分割成多个子Tensor。 -**参数**: +参数 +::::::::: - **x** (Tensor) - 输入变量,数据类型为bool, float16, float32,float64,int32,int64的多维Tensor。 - **num_or_sections** (int|list|tuple) - 如果 ``num_or_sections`` 是一个整数,则表示Tensor平均划分为相同大小子Tensor的数量。如果 ``num_or_sections`` 是一个list或tuple,那么它的长度代表子Tensor的数量,它的元素可以是整数或者形状为[1]的Tensor,依次代表子Tensor需要分割成的维度的大小。list或tuple的长度不能超过输入Tensor待分割的维度的大小。在list或tuple中,至多有一个元素值为-1,表示该值是由 ``x`` 的维度和其他 ``num_or_sections`` 中元素推断出来的。例如对一个维度为[4,6,6]Tensor的第三维进行分割时,指定 ``num_or_sections=[2,-1,1]`` ,输出的三个Tensor维度分别为:[4,6,2],[4,6,3],[4,6,1]。 - **axis** (int|Tensor,可选) - 整数或者形状为[1]的Tensor,数据类型为int32或int64。表示需要分割的维度。如果 ``axis < 0`` ,则划分的维度为 ``rank(x) + axis`` 。默认值为0。 - **name** (str,可选) – 具体用法请参见 :ref:`api_guide_Name` ,一般无需设置,默认值为None。 -返回:分割后的Tensor列表。 +返回 +::::::::: +分割后的Tensor列表。 -**代码示例**: +代码示例 +::::::::: .. code-block:: python diff --git a/doc/paddle/api/paddle/tensor/manipulation/squeeze__cn.rst b/doc/paddle/api/paddle/tensor/manipulation/squeeze__cn.rst new file mode 100644 index 00000000000..bd69dc3bdc8 --- /dev/null +++ b/doc/paddle/api/paddle/tensor/manipulation/squeeze__cn.rst @@ -0,0 +1,8 @@ +.. _cn_api_paddle_tensor_squeeze_: + +squeeze\_ +------------------------------- + +.. py:function:: paddle.squeeze_(x, axis=None, name=None) + +Inplace 版本的 :ref:`cn_api_paddle_tensor_squeeze` API,对输入 `x` 采用 Inplace 策略 。 diff --git a/doc/paddle/api/paddle/tensor/manipulation/squeeze_cn.rst b/doc/paddle/api/paddle/tensor/manipulation/squeeze_cn.rst index 5617c623d36..8d1c31e7785 100644 --- a/doc/paddle/api/paddle/tensor/manipulation/squeeze_cn.rst +++ b/doc/paddle/api/paddle/tensor/manipulation/squeeze_cn.rst @@ -1,4 +1,5 @@ -.. _cn_api_paddle_tensor_squeeze +.. _cn_api_paddle_tensor_squeeze: + squeeze ------------------------------- @@ -6,6 +7,9 @@ squeeze 该OP会删除输入Tensor的Shape中尺寸为1的维度。如果指定了axis,则会删除axis中指定的尺寸为1的维度。如果没有指定axis,那么所有等于1的维度都会被删除。 +请注意,在动态图模式下,输出Tensor将与输入Tensor共享数据,并且没有Tensor数据拷贝的过程。 +如果不希望输入与输出共享数据,请使用 `Tensor.clone` ,例如 `squeeze_clone_x = x.squeeze().clone()` 。 + .. code-block:: text Case 1: @@ -55,4 +59,10 @@ squeeze x = paddle.rand([5, 1, 10]) output = paddle.squeeze(x, axis=1) + + print(x.shape) # [5, 1, 10] print(output.shape) # [5, 10] + + # 在动态图模式下,输出output与输入x共享数据 + x[0, 0, 0] = 10. + print(output[0, 0]) # [10.] diff --git a/doc/paddle/api/paddle/tensor/manipulation/unsqueeze__cn.rst b/doc/paddle/api/paddle/tensor/manipulation/unsqueeze__cn.rst new file mode 100644 index 00000000000..d66aa824fc4 --- /dev/null +++ b/doc/paddle/api/paddle/tensor/manipulation/unsqueeze__cn.rst @@ -0,0 +1,8 @@ +.. _cn_api_paddle_tensor_unsqueeze_: + +unsqueeze\_ +------------------------------- + +.. py:function:: paddle.unsqueeze_(x, axis, name=None) + +Inplace 版本的 :ref:`cn_api_paddle_tensor_unsqueeze` API,对输入 `x` 采用 Inplace 策略 。 diff --git a/doc/paddle/api/paddle/tensor/manipulation/unsqueeze_cn.rst b/doc/paddle/api/paddle/tensor/manipulation/unsqueeze_cn.rst index 33e2a3353d4..53f0f1f0109 100644 --- a/doc/paddle/api/paddle/tensor/manipulation/unsqueeze_cn.rst +++ b/doc/paddle/api/paddle/tensor/manipulation/unsqueeze_cn.rst @@ -1,4 +1,5 @@ -.. _cn_api_paddle_tensor_unsqueeze +.. _cn_api_paddle_tensor_unsqueeze: + unsqueeze ------------------------------- @@ -6,6 +7,9 @@ unsqueeze 该OP向输入Tensor的Shape中一个或多个位置(axis)插入尺寸为1的维度。 +请注意,在动态图模式下,输出Tensor将与输入Tensor共享数据,并且没有Tensor数据拷贝的过程。 +如果不希望输入与输出共享数据,请使用 `Tensor.clone` ,例如 `unsqueeze_clone_x = x.unsqueeze(-1).clone()` 。 + 参数 ::::::::: - **x** (Tensor)- 输入的 `Tensor` ,数据类型为:float32、float64、bool、int8、int32、int64。 @@ -35,3 +39,9 @@ Tensor,扩展维度后的多维Tensor,数据类型与输入Tensor一致。 axis = paddle.to_tensor([0, 1, 2]) out3 = paddle.unsqueeze(x, axis=axis) print(out3.shape) # [1, 1, 1, 5, 10] + + # 在动态图模式下,输出out1, out2, out3与输入x共享数据 + x[0, 0] = 10. + print(out1[0, 0, 0]) # [10.] + print(out2[0, 0, 0, 0]) # [10.] + print(out3[0, 0, 0, 0, 0]) # [10.] diff --git a/doc/paddle/api/paddle/tensor/math/add_cn.rst b/doc/paddle/api/paddle/tensor/math/add_cn.rst index 1b032f6cd03..2af9053d76c 100644 --- a/doc/paddle/api/paddle/tensor/math/add_cn.rst +++ b/doc/paddle/api/paddle/tensor/math/add_cn.rst @@ -9,7 +9,7 @@ add 该OP是逐元素相加算子,输入 ``x`` 与输入 ``y`` 逐元素相加,并将各个位置的输出元素保存到返回结果中。 -输入 ``x`` 与输入 ``y`` 必须可以广播为相同形状, 关于广播规则,请参考 :ref:`use_guide_broadcasting` +输入 ``x`` 与输入 ``y`` 必须可以广播为相同形状, 关于广播规则,请参考 :ref:`cn_user_guide_broadcasting` 等式为: @@ -19,17 +19,19 @@ add - :math:`X` :多维Tensor。 - :math:`Y` :多维Tensor。 -参数: +参数 +::::::::: - x (Tensor) - 输入的Tensor,数据类型为:float32、float64、int32、int64。 - y (Tensor) - 输入的Tensor,数据类型为:float32、float64、int32、int64。 - - name (str,可选) - 操作的名称(可选,默认值为None)。更多信息请参见 :ref:`api_guide_Name`。 + - name (str,可选) - 操作的名称(可选,默认值为None)。更多信息请参见 :ref:`api_guide_Name` 。 -返回: 多维Tensor, 数据类型与 ``x`` 相同, 维度为广播后的形状。 +返回 +::::::::: +多维Tensor, 数据类型与 ``x`` 相同, 维度为广播后的形状。 -返回类型: Tensor - -**代码示例** +代码示例 +::::::::: .. code-block:: python diff --git a/doc/paddle/api/paddle/tensor/math/broadcast_shape_cn.rst b/doc/paddle/api/paddle/tensor/math/broadcast_shape_cn.rst new file mode 100644 index 00000000000..9263d7e0e91 --- /dev/null +++ b/doc/paddle/api/paddle/tensor/math/broadcast_shape_cn.rst @@ -0,0 +1,33 @@ +.. _cn_api_tensor_broadcast_shape: + +broadcast_shape +------------------------------- + +.. py:function:: paddle.broadcast_shape(x_shape, y_shape) + + +该函数返回对x_shape大小的张量和y_shape大小的张量做broadcast操作后得到的shape,如您想了解更多,请参见 :ref:`cn_user_guide_broadcasting` 。 + +参数 +::::::::: + - x_shape (list[int]|tuple[int]) - 输入Tensor的shape。 + - y_shape (list[int]|tuple[int]) - 输入Tensor的shape。 + +返回 +::::::::: +broadcast操作后的shape,返回类型为 list[int]。 + + +代码示例 +::::::::: + +.. code-block:: python + + import paddle + + shape = paddle.broadcast_shape([2, 1, 3], [1, 3, 1]) + # [2, 3, 3] + + # shape = paddle.broadcast_shape([2, 1, 3], [3, 3, 1]) + # ValueError (terminated with error message). + diff --git a/doc/paddle/api/paddle/tensor/math/divide_cn.rst b/doc/paddle/api/paddle/tensor/math/divide_cn.rst index 649f57bbdc6..04093568c32 100644 --- a/doc/paddle/api/paddle/tensor/math/divide_cn.rst +++ b/doc/paddle/api/paddle/tensor/math/divide_cn.rst @@ -6,7 +6,7 @@ divide .. py:function:: paddle.divide(x, y, name=None) 该OP是逐元素相除算子,输入 ``x`` 与输入 ``y`` 逐元素相除,并将各个位置的输出元素保存到返回结果中。 -输入 ``x`` 与输入 ``y`` 必须可以广播为相同形状, 关于广播规则,请参考 :ref:`use_guide_broadcasting` +输入 ``x`` 与输入 ``y`` 必须可以广播为相同形状, 关于广播规则,请参考 :ref:`cn_user_guide_broadcasting` 等式为: @@ -16,18 +16,22 @@ divide - :math:`X` :多维Tensor。 - :math:`Y` :多维Tensor。 -参数: +参数 +::::::::: - x(Tensor)- 多维Tensor。数据类型为float32 、float64、int32或int64。 - y(Tensor)- 多维Tensor。数据类型为float32 、float64、int32或int64。 - name(str,可选)- 操作的名称(可选,默认值为None)。更多信息请参见 :ref:`api_guide_Name`。 -返回: - ``Tensor``,存储运算后的结果。如果x和y有不同的shape且是可以广播的,返回Tensor的shape是x和y经过广播后的shape。如果x和y有相同的shape,返回Tensor的shape与x,y相同。 +返回 +::::::::: + ``Tensor`` ,存储运算后的结果。如果x和y有不同的shape且是可以广播的,返回Tensor的shape是x和y经过广播后的shape。如果x和y有相同的shape,返回Tensor的shape与x,y相同。 -**代码示例** + +代码示例 +::::::::: .. code-block:: python diff --git a/doc/paddle/api/paddle/tensor/math/floor_divide_cn.rst b/doc/paddle/api/paddle/tensor/math/floor_divide_cn.rst index 917576a93b4..b77eda72a8d 100644 --- a/doc/paddle/api/paddle/tensor/math/floor_divide_cn.rst +++ b/doc/paddle/api/paddle/tensor/math/floor_divide_cn.rst @@ -6,7 +6,7 @@ floor_divide .. py:function:: paddle.floor_divide(x, y, name=None) 该OP是逐元素整除算子,输入 ``x`` 与输入 ``y`` 逐元素整除,并将各个位置的输出元素保存到返回结果中。 -输入 ``x`` 与输入 ``y`` 必须可以广播为相同形状, 关于广播规则,请参考 :ref:`use_guide_broadcasting` +输入 ``x`` 与输入 ``y`` 必须可以广播为相同形状, 关于广播规则,请参考 :ref:`cn_user_guide_broadcasting` 等式为: @@ -16,18 +16,20 @@ floor_divide - :math:`X` :多维Tensor。 - :math:`Y` :多维Tensor。 -参数: +参数 +::::::::: - x(Tensor)- 多维Tensor。数据类型为int32或int64。 - y(Tensor)- 多维Tensor。数据类型为int32或int64。 - name(str,可选)- 操作的名称(可选,默认值为None)。更多信息请参见 :ref:`api_guide_Name`。 -返回: 多维 Tensor, 数据类型与 ``x`` 相同,维度为广播后的形状。 +返回 +::::::::: +多维 Tensor, 数据类型与 ``x`` 相同,维度为广播后的形状。 -返回类型: Tensor - -**代码示例** +代码示例 +::::::::: .. code-block:: python @@ -39,4 +41,4 @@ floor_divide x = paddle.to_tensor(np_x) y = paddle.to_tensor(np_y) z = paddle.floor_divide(x, y) - print(z) # [2, 0, 2, 2] \ No newline at end of file + print(z) # [2, 0, 2, 2] diff --git a/doc/paddle/api/paddle/tensor/math/isinf_cn.rst b/doc/paddle/api/paddle/tensor/math/isinf_cn.rst index 98f506f41a5..39b51692c58 100644 --- a/doc/paddle/api/paddle/tensor/math/isinf_cn.rst +++ b/doc/paddle/api/paddle/tensor/math/isinf_cn.rst @@ -3,7 +3,7 @@ isinf ----------------------------- -.. py:function:: paddle.tensor.isinf(x, name=None) +.. py:function:: paddle.isinf(x, name=None) 返回输入tensor的每一个值是否为 `+/-INF` 。 diff --git a/doc/paddle/api/paddle/tensor/math/isnan_cn.rst b/doc/paddle/api/paddle/tensor/math/isnan_cn.rst index 81813856345..0d26e47b5a8 100644 --- a/doc/paddle/api/paddle/tensor/math/isnan_cn.rst +++ b/doc/paddle/api/paddle/tensor/math/isnan_cn.rst @@ -3,7 +3,7 @@ isnan ----------------------------- -.. py:function:: paddle.tensor.isnan(x, name=None) +.. py:function:: paddle.isnan(x, name=None) 返回输入tensor的每一个值是否为 `+/-NaN` 。 diff --git a/doc/paddle/api/paddle/tensor/math/logsumexp_cn.rst b/doc/paddle/api/paddle/tensor/math/logsumexp_cn.rst index 81930f1a7e3..50daf015a44 100644 --- a/doc/paddle/api/paddle/tensor/math/logsumexp_cn.rst +++ b/doc/paddle/api/paddle/tensor/math/logsumexp_cn.rst @@ -3,7 +3,7 @@ logsumexp ------------------------------- -.. py:function:: paddle.tensor.math.logsumexp(x, axis=None, keepdim=False, name=None) +.. py:function:: paddle.logsumexp(x, axis=None, keepdim=False, name=None) 该OP沿着 ``axis`` 计算 ``x`` 的以e为底的指数的和的自然对数。计算公式如下: diff --git a/doc/paddle/api/paddle/tensor/math/max_cn.rst b/doc/paddle/api/paddle/tensor/math/max_cn.rst index 4a64b2fecf4..f3ee991203a 100644 --- a/doc/paddle/api/paddle/tensor/math/max_cn.rst +++ b/doc/paddle/api/paddle/tensor/math/max_cn.rst @@ -3,7 +3,7 @@ max ------------------------------- -.. py:function:: paddle.tensor.max(x, axis=None, keepdim=False, name=None) +.. py:function:: paddle.max(x, axis=None, keepdim=False, name=None) 该OP是对指定维度上的Tensor元素求最大值运算,并输出相应的计算结果。 diff --git a/doc/paddle/api/paddle/tensor/math/min_cn.rst b/doc/paddle/api/paddle/tensor/math/min_cn.rst index 9a21be64e67..32e992ff15b 100644 --- a/doc/paddle/api/paddle/tensor/math/min_cn.rst +++ b/doc/paddle/api/paddle/tensor/math/min_cn.rst @@ -3,7 +3,7 @@ min ------------------------------- -.. py:function:: paddle.tensor.min(x, axis=None, keepdim=False, name=None) +.. py:function:: paddle.min(x, axis=None, keepdim=False, name=None) 该OP是对指定维度上的Tensor元素求最小值运算,并输出相应的计算结果。 diff --git a/doc/paddle/api/paddle/tensor/math/multiply_cn.rst b/doc/paddle/api/paddle/tensor/math/multiply_cn.rst index a92ba03939d..55fc01201e0 100755 --- a/doc/paddle/api/paddle/tensor/math/multiply_cn.rst +++ b/doc/paddle/api/paddle/tensor/math/multiply_cn.rst @@ -21,19 +21,23 @@ multiply 对于这个运算算子有2种情况: 1. :math:`Y` 的 ``shape`` 与 :math:`X` 相同。 2. :math:`Y` 的 ``shape`` 是 :math:`X` 的连续子序列。 - 3. 输入 ``x`` 与输入 ``y`` 必须可以广播为相同形状, 关于广播规则,请参考 :ref:`use_guide_broadcasting`。 + 3. 输入 ``x`` 与输入 ``y`` 必须可以广播为相同形状, 关于广播规则,请参考 :ref:`cn_user_guide_broadcasting` 。 -参数: - - **x** (Tensor)- 多维 ``Tensor`` 。数据类型为 ``float32`` 、 ``float64`` 、 ``int32`` 或 ``int64``。 - - **y** (Tensor)- 多维 ``Tensor`` 。数据类型为 ``float32`` 、 ``float64`` 、 ``int32`` 或 ``int64``。 +参数 +::::::::: + + - **x** (Tensor)- 多维 ``Tensor`` 。数据类型为 ``float32`` 、 ``float64`` 、 ``int32`` 或 ``int64`` 。 + - **y** (Tensor)- 多维 ``Tensor`` 。数据类型为 ``float32`` 、 ``float64`` 、 ``int32`` 或 ``int64`` 。 - **name** (string,可选)- 输出的名字。默认值为None。该参数供开发人员打印调试信息时使用,具体用法请参见 :ref:`api_guide_Name` 。 -返回: +返回 +::::::::: ``Tensor``,存储运算后的结果。如果x和y有不同的shape且是可以广播的,返回Tensor的shape是x和y经过广播后的shape。如果x和y有相同的shape,返回Tensor的shape与x,y相同。 -**代码示例 1** +代码示例 +::::::::: .. code-block:: python diff --git a/doc/paddle/api/paddle/tensor/math/remainder_cn.rst b/doc/paddle/api/paddle/tensor/math/remainder_cn.rst index 227d1e5d5e6..3781463819a 100644 --- a/doc/paddle/api/paddle/tensor/math/remainder_cn.rst +++ b/doc/paddle/api/paddle/tensor/math/remainder_cn.rst @@ -11,17 +11,20 @@ mod out = x \% y **注意**: - ``paddle.mod`` 支持广播。关于广播规则,请参考 :ref:`use_guide_broadcasting` + ``paddle.mod`` 支持广播。关于广播规则,请参考 :ref:`cn_user_guide_broadcasting` -参数: +参数 +::::::::: - x(Tensor)- 多维Tensor。数据类型为float32 、float64、int32或int64。 - y(Tensor)- 多维Tensor。数据类型为float32 、float64、int32或int64。 - name(str,可选)- 操作的名称(可选,默认值为None)。更多信息请参见 :ref:`api_guide_Name`。 -返回: - ``Tensor``,存储运算后的结果。如果x和y有不同的shape且是可以广播的,返回Tensor的shape是x和y经过广播后的shape。如果x和y有相同的shape,返回Tensor的shape与x,y相同。 +返回 +::::::::: +``Tensor`` ,存储运算后的结果。如果x和y有不同的shape且是可以广播的,返回Tensor的shape是x和y经过广播后的shape。如果x和y有相同的shape,返回Tensor的shape与x,y相同。 -**代码示例** +代码示例 +::::::::: .. code-block:: python @@ -30,4 +33,4 @@ mod x = paddle.to_tensor([2, 3, 8, 7]) y = paddle.to_tensor([1, 5, 3, 3]) z = paddle.mod(x, y) - print(z) # [0, 3, 2, 1] \ No newline at end of file + print(z) # [0, 3, 2, 1] diff --git a/doc/paddle/api/paddle/tensor/math/tanh__cn.rst b/doc/paddle/api/paddle/tensor/math/tanh__cn.rst new file mode 100644 index 00000000000..14d9235ff46 --- /dev/null +++ b/doc/paddle/api/paddle/tensor/math/tanh__cn.rst @@ -0,0 +1,8 @@ +.. _cn_api_tensor_tanh_: + +tanh\_ +------------------------------- + +.. py:function:: paddle.tanh_(x, name=None) + +Inplace 版本的 :ref:`cn_api_tensor_tanh` API,对输入 `x` 采用 Inplace 策略 。 diff --git a/doc/paddle/api/paddle/vision/datasets/mnist/FashionMNIST_cn.rst b/doc/paddle/api/paddle/vision/datasets/mnist/FashionMNIST_cn.rst new file mode 100644 index 00000000000..0d33f391872 --- /dev/null +++ b/doc/paddle/api/paddle/vision/datasets/mnist/FashionMNIST_cn.rst @@ -0,0 +1,37 @@ +.. _cn_api_vision_datasets_FashionMNIST: + +FashionMNIST +------------------------------- + +.. py:class:: paddle.vision.datasets.FashionMNIST() + + + `Fashion-MNIST `_ 数据集 + +参数 +::::::::: + - image_path (str) - 图像文件路径,如果 ``download`` 设置为 ``True`` ,此参数可以设置为None。默认值为None。 + - label_path (str) - 标签文件路径,如果 ``download`` 设置为 ``True`` ,此参数可以设置为None。默认值为None。 + - mode (str) - ``'train'`` 或 ``'test'`` 模式,默认为 ``'train'`` 。 + - download (bool) - 是否自定下载数据集文件。默认为 ``True`` 。 + - backend (str, optional) - 指定要返回的图像类型:PIL.Image或numpy.ndarray。必须是{'pil','cv2'}中的值。如果未设置此选项,将从paddle.vsion.get_image_backend获得这个值。 默认值:None 。 + +返回 +::::::::: + + FashionMNIST数据集实例 + +代码示例 +::::::::: + + .. code-block:: python + + from paddle.vision.datasets import FashionMNIST + + mnist = FashionMNIST(mode='test') + + for i in range(len(mnist)): + sample = mnist[i] + print(sample[0].size, sample[1]) + + diff --git a/doc/paddle/api/paddle/vision/image/get_image_backend_cn.rst b/doc/paddle/api/paddle/vision/image/get_image_backend_cn.rst new file mode 100644 index 00000000000..4b57f66e826 --- /dev/null +++ b/doc/paddle/api/paddle/vision/image/get_image_backend_cn.rst @@ -0,0 +1,25 @@ +.. _cn_api_vision_image_get_image_backend: + +get_image_backend +------------------------------- + +.. py:function:: paddle.vision.image.get_image_backend() + +获取用于加载图像的模块名称。 + + +返回 +::::::::: + + ``str``,加载图像的模块名称, ``pil`` 或 ``cv2``。 + +代码示例 +::::::::: + +.. code-block:: python + + from paddle.vision import get_image_backend + + backend = get_image_backend() + print(backend) + \ No newline at end of file diff --git a/doc/paddle/api/paddle/vision/image/image_load_cn.rst b/doc/paddle/api/paddle/vision/image/image_load_cn.rst new file mode 100644 index 00000000000..05128405ed3 --- /dev/null +++ b/doc/paddle/api/paddle/vision/image/image_load_cn.rst @@ -0,0 +1,48 @@ +.. _cn_api_vision_image_image_load: + +image_load +------------------------------- + +.. py:function:: paddle.vision.image.image_load(path, backend=None) + +读取一个图像。 + +参数 +::::::::: + + - path (str) - 图像路径。 + - backend (str,可选): 加载图像的后端。 参数必须是 ``cv2``, ``pil``, ``None`` 之一。如果后端为 ``None`` ,则使用全局的 ``_imread_backend`` 参数,默认值为 ``pil`` 。 这个参数可以使用 ``paddle.vision.set_image_backend`` 指定。 默认值:None 。 + +返回 +::::::::: + + ``PIL.Image 或 numpy.ndarray``,加载后的图像。 + +代码示例 +::::::::: + +.. code-block:: python + + import numpy as np + from PIL import Image + from paddle.vision import image_load, set_image_backend + + fake_img = Image.fromarray((np.random.random((32, 32, 3)) * 255).astype('uint8')) + + path = 'temp.png' + fake_img.save(path) + + set_image_backend('pil') + + pil_img = image_load(path).convert('RGB') + + # should be PIL.Image.Image + print(type(pil_img)) + + # use opencv as backend + # set_image_backend('cv2') + + # np_img = image_load(path) + # # should get numpy.ndarray + # print(type(np_img)) + diff --git a/doc/paddle/api/paddle/vision/image/set_image_backend_cn.rst b/doc/paddle/api/paddle/vision/image/set_image_backend_cn.rst new file mode 100644 index 00000000000..10847ced30e --- /dev/null +++ b/doc/paddle/api/paddle/vision/image/set_image_backend_cn.rst @@ -0,0 +1,65 @@ +.. _cn_api_vision_image_set_image_backend: + +set_image_backend +------------------------------- + +.. py:function:: paddle.vision.image.set_image_backend(backend) + +在 ``paddle.vision.datasets.ImageFolder`` 和 ``paddle.vision.datasets.DatasetFolder`` 类中指定用于加载图像的后端。 现在支持后端是 ``pillow`` 和 ``opencv`` 。 如果未设置后端,则默认使用 ``pil`` 。 + +参数 +::::::::: + + - backend (str) - 加载图像的后端,必须为 ``pil`` 或者 ``cv2`` 。 + + +代码示例 +::::::::: + +.. code-block:: python + + import os + import shutil + import tempfile + import numpy as np + from PIL import Image + + from paddle.vision import DatasetFolder + from paddle.vision import set_image_backend + + set_image_backend('pil') + + def make_fake_dir(): + data_dir = tempfile.mkdtemp() + + for i in range(2): + sub_dir = os.path.join(data_dir, 'class_' + str(i)) + if not os.path.exists(sub_dir): + os.makedirs(sub_dir) + for j in range(2): + fake_img = Image.fromarray((np.random.random((32, 32, 3)) * 255).astype('uint8')) + fake_img.save(os.path.join(sub_dir, str(j) + '.png')) + return data_dir + + temp_dir = make_fake_dir() + + pil_data_folder = DatasetFolder(temp_dir) + + for items in pil_data_folder: + break + + # should get PIL.Image.Image + print(type(items[0])) + + # use opencv as backend + # set_image_backend('cv2') + + # cv2_data_folder = DatasetFolder(temp_dir) + + # for items in cv2_data_folder: + # break + + # should get numpy.ndarray + # print(type(items[0])) + + shutil.rmtree(temp_dir) diff --git a/doc/paddle/api/paddle/vision/transforms/functional/crop_cn.rst b/doc/paddle/api/paddle/vision/transforms/functional/crop_cn.rst index db0fd4b486d..c5f212aa70a 100644 --- a/doc/paddle/api/paddle/vision/transforms/functional/crop_cn.rst +++ b/doc/paddle/api/paddle/vision/transforms/functional/crop_cn.rst @@ -3,9 +3,9 @@ crop ------------------------------- -.. py:function:: paddle.vision.transforms.crop(img) +.. py:function:: paddle.vision.transforms.crop(img, top, left, height, width) -对输入图像进行水平翻转。 +对输入图像进行裁剪。 参数 ::::::::: diff --git a/doc/paddle/api/paddle/vision/transforms/functional/to_tensor_cn.rst b/doc/paddle/api/paddle/vision/transforms/functional/to_tensor_cn.rst index 293ea71ea88..e9af1ccc2c6 100644 --- a/doc/paddle/api/paddle/vision/transforms/functional/to_tensor_cn.rst +++ b/doc/paddle/api/paddle/vision/transforms/functional/to_tensor_cn.rst @@ -5,7 +5,14 @@ to_tensor .. py:function:: paddle.vision.transforms.to_tensor(pic, data_format='CHW') -将 ``PIL.Image`` 或 ``numpy.ndarray`` 转换成 ``paddle.Tensor`` +将 ``PIL.Image`` 或 ``numpy.ndarray`` 转换成 ``paddle.Tensor``。 + +将形状为 (H x W x C)的输入数据 ``PIL.Image`` 或 ``numpy.ndarray`` 转换为 (C x H x W)。 +如果想保持形状不变,可以将参数 ``data_format`` 设置为 ``'HWC'``。 + +同时,如果输入的 ``PIL.Image`` 的 ``mode`` 是 ``(L, LA, P, I, F, RGB, YCbCr, RGBA, CMYK, 1)`` +其中一种,或者输入的 ``numpy.ndarray`` 数据类型是 'uint8',那个会将输入数据从(0-255)的范围缩放到 +(0-1)的范围。其他的情况,则保持输入不变。 参数 ::::::::: diff --git a/doc/paddle/api/paddle/vision/transforms/functional/vflip_cn.rst b/doc/paddle/api/paddle/vision/transforms/functional/vflip_cn.rst index 967f243bcdb..18b89294139 100644 --- a/doc/paddle/api/paddle/vision/transforms/functional/vflip_cn.rst +++ b/doc/paddle/api/paddle/vision/transforms/functional/vflip_cn.rst @@ -1,9 +1,9 @@ -.. _cn_api_vision_transforms_hflip: +.. _cn_api_vision_transforms_vflip: -hflip +vflip ------------------------------- -.. py:function:: paddle.vision.transforms.hflip(img) +.. py:function:: paddle.vision.transforms.vflip(img) 对输入图像进行垂直方向翻转。 @@ -32,4 +32,4 @@ hflip flpped_img = F.vflip(fake_img) print(flpped_img.size) - \ No newline at end of file + diff --git a/doc/paddle/faq/install_cn.md b/doc/paddle/faq/install_cn.md index 4efad3d0e4c..dd0e156ec4b 100644 --- a/doc/paddle/faq/install_cn.md +++ b/doc/paddle/faq/install_cn.md @@ -1,5 +1,31 @@ # 安装类FAQ +##### 问题:使用过程中报找不到tensorrt库的日志 + ++ 问题描述: + +TensorRT dynamic library (libnvinfer.so) that Paddle depends on is not configured correctly. (error code is libnvinfer.so: cannot open shared object file: No such file or directory) + +Suggestions: + +Check if TensorRT is installed correctly and its version is matched with paddlepaddle you installed. + +Configure TensorRT dynamic library environment variables as follows: + +Linux: set LD_LIBRARY_PATH by export LD_LIBRARY_PATH=... + +Windows: set PATH by `set PATH=XXX; + ++ 问题分析: + +遇到该问题是因为使用的paddle默认开始了TensorRT,但是本地环境中没有找到TensorRT的库,该问题只影响使用[Paddle Inference](https://paddleinference.paddlepaddle.org.cn/master/product_introduction/inference_intro.html)开启TensorRT预测的场景,对其它方面均不造成影响。 + ++ 解决办法: + +根据提示信息,在环境变量中加入TensorRT的库路径。 + +------ + ##### 问题:Windows环境下,使用pip install时速度慢,如何解决? + 解决方案: diff --git a/doc/paddle/faq/train_cn.md b/doc/paddle/faq/train_cn.md index 96073218858..42d1997c1a9 100644 --- a/doc/paddle/faq/train_cn.md +++ b/doc/paddle/faq/train_cn.md @@ -249,6 +249,25 @@ with fluid.dygraph.guard(): ---------- +## 模型保存与加载 + +#### 问题:静态图的save接口与save_inference_model接口存储的结果有什么区别? + ++ 答复:主要差别在于保存结果的应用场景: + + 1. save接口(2.0的`paddle.static.save`或者1.8的`fluid.io.save`) + + 该接口用于保存训练过程中的模型和参数,一般包括`*.pdmodel`,`*.pdparams`,`*.pdopt`三个文件。其中`*.pdmodel`是训练使用的完整模型program描述,区别于推理模型,训练模型program包含完整的网络,包括前向网络,反向网络和优化器,而推理模型program仅包含前向网络,`*.pdparams`是训练网络的参数dict,key为变量名,value为Tensor array数值,`*.pdopt`是训练优化器的参数,结构与*.pdparams一致。 + + 2. save_inference_model接口(2.0的`paddle.static.save_inference_model`或者1.8的`fluid.io.save_inference_model`) + + 该接口用于保存推理模型和参数,2.0的`paddle.static.save_inference_model`保存结果为`*.pdmodel`和`*.pdiparams`两个文件,其中`*.pdmodel`为推理使用的模型program描述,`*.pdiparams`为推理用的参数,这里存储格式与`*.pdparams`不同(注意两者后缀差个`i`),`*.pdiparams`为二进制Tensor存储格式,不含变量名。1.8的`fluid.io.save_inference_model`默认保存结果为`__model__`文件,和以参数名为文件名的多个分散参数文件,格式与2.0一致。 + + 3. 关于更多2.0动态图模型保存和加载的介绍可以参考教程:[模型存储与载入](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/02_paddle2.0_develop/08_model_save_load_cn.html) + +---------- + + ## 参数调整 ##### 问题:如何将本地数据传入`fluid.dygraph.Embedding`的参数矩阵中? @@ -332,4 +351,19 @@ for epoch in range(epochs): + 答复:目前`load_inference_model`加载进行的模型还不支持py_reader输入。 +##### 问题:预测时如何打印模型中每一步的耗时? + ++ 答复:可以在设置config时使用`config.enable_profile()`统计预测时每个算子和数据搬运的耗时。对于推理api的使用,可以参考官网文档[Python预测API介绍](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/05_inference_deployment/inference/python_infer_cn.html)。示例代码: +```python +# 设置config: +def set_config(args): + config = Config(args.model_file, args.params_file) + config.disable_gpu() + # enable_profile()打开后会统计每一步耗时 + config.enable_profile() + config.switch_use_feed_fetch_ops(False) + config.switch_specify_input_names(True) + config.switch_ir_optim(False) + return config +``` ---------- diff --git a/doc/paddle/guides/01_paddle2.0_introduction/basic_concept/broadcasting_cn.rst b/doc/paddle/guides/01_paddle2.0_introduction/basic_concept/broadcasting_cn.rst index 3b58e21d4eb..37a800ad8fb 100644 --- a/doc/paddle/guides/01_paddle2.0_introduction/basic_concept/broadcasting_cn.rst +++ b/doc/paddle/guides/01_paddle2.0_introduction/basic_concept/broadcasting_cn.rst @@ -47,7 +47,7 @@ 现在我们知道什么情况下两个张量是可以广播的,两个张量进行广播语义后的结果张量的形状计算规则如下: -1. 如果两个张量的形状的长度不一致,那么需要在较小形状长度的矩阵像前添加1,只到两个张量的形状长度相等。 +1. 如果两个张量的形状的长度不一致,那么需要在较小形状长度的矩阵向前添加1,直到两个张量的形状长度相等。 2. 保证两个张量形状相等之后,每个维度上的结果维度就是当前维度上较大的那个。 例如: @@ -64,6 +64,5 @@ x = paddle.ones((2, 1, 4)) y = paddle.ones((3, 2)) - z = x + y - print(z.shape) - # InvalidArgumentError: Broadcast dimension mismatch. + # z = x + y + # ValueError: (InvalidArgument) Broadcast dimension mismatch. diff --git a/doc/paddle/guides/01_paddle2.0_introduction/basic_concept/broadcasting_en.rst b/doc/paddle/guides/01_paddle2.0_introduction/basic_concept/broadcasting_en.rst index ef7c03b509a..bc546970c57 100644 --- a/doc/paddle/guides/01_paddle2.0_introduction/basic_concept/broadcasting_en.rst +++ b/doc/paddle/guides/01_paddle2.0_introduction/basic_concept/broadcasting_en.rst @@ -66,6 +66,5 @@ For example: x = paddle.ones((2, 1, 4)) y = paddle.ones((3, 2)) - z = x + y - print(z.shape) - # InvalidArgumentError: Broadcast dimension mismatch. + # z = x + y + # ValueError: (InvalidArgument) Broadcast dimension mismatch. diff --git a/doc/paddle/guides/01_paddle2.0_introduction/index_cn.rst b/doc/paddle/guides/01_paddle2.0_introduction/index_cn.rst index 63eb2761458..093f46b3819 100644 --- a/doc/paddle/guides/01_paddle2.0_introduction/index_cn.rst +++ b/doc/paddle/guides/01_paddle2.0_introduction/index_cn.rst @@ -4,15 +4,13 @@ 您可以通过下面的内容,了解更多飞桨框架2.0的内容: -- `基本概念 <./basic_concept/index_cn.html>`_ : 飞桨框架2.0RC 基本概念的介绍。 -- `API升级概要 <./main_upgrade_cn.html>`_ : 飞桨框架2.0RC API升级说明。 -- `升级指南 <./upgrade_guide_cn.html>`_: 介绍飞桨框架2.0RC 的主要变化和如何升级。 +- `基本概念 <./basic_concept/index_cn.html>`_ : 飞桨框架2.0 基本概念的介绍。 +- `升级指南 <./upgrade_guide_cn.html>`_: 介绍飞桨框架2.0 的主要变化和如何升级。 - `版本迁移工具 <./migration_cn.html>`_: 介绍飞桨框架版本转换工具的使用。 .. toctree:: :hidden: basic_concept/index_cn.rst - main_upgrade_cn.rst upgrade_guide_cn.md migration_cn.rst diff --git a/doc/paddle/guides/01_paddle2.0_introduction/migration_cn.rst b/doc/paddle/guides/01_paddle2.0_introduction/migration_cn.rst index 75fd7355d6c..0e24114f7ae 100644 --- a/doc/paddle/guides/01_paddle2.0_introduction/migration_cn.rst +++ b/doc/paddle/guides/01_paddle2.0_introduction/migration_cn.rst @@ -1,9 +1,9 @@ 版本迁移工具 ==================== -在飞桨框架2.0rc中,我们API的位置、命名、参数、行为,进行了系统性的调整和规范, 将API体系从1.X版本的 ``paddle.fluid.*`` 迁移到了 ``paddle.*`` 下。paddle.fluid目录下暂时保留了1.8版本API,主要是兼容性考虑,未来会被删除。 +在飞桨框架2.0中,我们API的位置、命名、参数、行为,进行了系统性的调整和规范, 将API体系从1.X版本的 ``paddle.fluid.*`` 迁移到了 ``paddle.*`` 下。paddle.fluid目录下暂时保留了1.8版本API,主要是兼容性考虑,未来会被删除。 -使用版本迁移工具自动迁移您的paddle1.x的代码到Paddle2.0rc的代码 +使用版本迁移工具自动迁移您的Paddle 1.x的代码到Paddle 2.0的代码 ------------------------------------ WARNING: 版本自动迁移工具并不能处理所有的情况,在使用本工具后,您仍然需要手工来进行检查并做相应的调整。 @@ -26,7 +26,7 @@ paddle_upgrade_tool 可以使用下面的方式,快速使用: $ paddle_upgrade_tool --inpath /path/to/model.py -这将在命令行中,以\ ``diff``\ 的形式,展示model.py从Paddle1.x转换为Paddle2.0rc的变化。如果您确认上述变化没有问题,只需要再执行: +这将在命令行中,以\ ``diff``\ 的形式,展示model.py从Paddle 1.x转换为Paddle 2.0的变化。如果您确认上述变化没有问题,只需要再执行: .. code:: ipython3 @@ -54,7 +54,7 @@ paddle_upgrade_tool 可以使用下面的方式,快速使用: 开始 ^^^^ -在使用paddle_upgrade_tool前,需要确保您已经安装了Paddle2.0rc版本。 +在使用paddle_upgrade_tool前,需要确保您已经安装了Paddle 2.0版本。 .. code:: ipython3 @@ -63,7 +63,7 @@ paddle_upgrade_tool 可以使用下面的方式,快速使用: .. parsed-literal:: - 2.0.0-rc0 + 2.0.0 克隆\ `paddlePaddle/models `__\ 来作为工具的测试。 @@ -126,10 +126,10 @@ paddle_upgrade_tool 可以使用下面的方式,快速使用: --print-match this is a debug option. Print matched code and node for each file. -paddle1.x的例子 +Paddle 1.x的例子 ^^^^^^^^^^^^^^ -这里是一个基于paddle1.x实现的一个mnist分类,部分内容如下: +这里是一个基于Paddle 1.x实现的一个mnist分类,部分内容如下: .. code:: ipython3 @@ -197,7 +197,7 @@ paddle_upgrade_tool支持单文件的转化,您可以通过下方的命令直 - 本迁移工具不能完成所有API的迁移,有少量的API需要您手动完成迁移,具体信息可见WARNING。 -使用paddle 2 -~~~~~~~~~~~~ +使用Paddle 2.0 +~~~~~~~~~~~~~~~~ -完成迁移后,代码就从paddle1.x迁移到了paddle2.0rc,您就可以在paddle2.0rc下进行相关的开发。 +完成迁移后,代码就从Paddle 1.x迁移到了Paddle 2.0,您就可以在Paddle 2.0下进行相关的开发。 diff --git a/doc/paddle/guides/01_paddle2.0_introduction/upgrade_guide_cn.md b/doc/paddle/guides/01_paddle2.0_introduction/upgrade_guide_cn.md index 286ade0544a..58f4761c3d7 100644 --- a/doc/paddle/guides/01_paddle2.0_introduction/upgrade_guide_cn.md +++ b/doc/paddle/guides/01_paddle2.0_introduction/upgrade_guide_cn.md @@ -1,19 +1,19 @@ # 升级指南 ## 升级概要 -本版本是2.0版的候选发布版本,相对1.8版本有重大升级,涉及开发方面的重要变化如下: +飞桨2.0版本,相对1.8版本有重大升级,涉及开发方面的重要变化如下: - 动态图功能完善,动态图模下数据表示概念为Tensor,推荐使用动态图模式; - API目录体系调整,API的命名和别名进行了统一规范化,虽然兼容老版API,但请使用新API体系开发; - 数据处理、组网方式、模型训练、多卡启动、模型保存和推理等开发流程都有了对应优化,请对应查看说明; 以上变化请仔细阅读本指南。对于已有模型的升级,我们还提供了2.0转换工具(见附录)提供更自动化的辅助。 -其他一些功能增加方面诸如动态图对量化训练、混合精度的支持、动静转换等方面不在本指南列出,具体可查看[Release Note](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/release_note_cn.html)或对应文档。 +其他一些功能增加方面诸如动态图对量化训练、混合精度的支持、动静转换等方面不在本指南列出,具体可查看[Release Note](https://www.paddlepaddle.org.cn/documentation/docs/zh/release_note_cn.html)或对应文档。 ## 一、动态图 ### 推荐优先使用动态图模式 -飞桨2.0rc版本将会把动态图作为默认模式。(如果还想使用静态图,可通过调用`paddle.enable_static`切换)。 +飞桨2.0版本将会把动态图作为默认模式(如果还想使用静态图,可通过调用`paddle.enable_static`切换)。 ```python import paddle @@ -42,7 +42,7 @@ paddle.to_tensor(np.random.randn(3, 4)) 为了API组织更加简洁和清晰,将原来padddle.fluid.xxx的目录体系全新升级为paddle.xxx,并对子目录的组织进行了系统的条理化优化。同时还增加了高层API,可以高低搭配使用。paddle.fluid目录下暂时保留了1.8版本API,主要是兼容性考虑,未来会被删除。 **基于2.0的开发任务,请使用paddle目录下的API,不要再使用paddle.fluid目录下的API。** 如果发现Paddle目录下有API缺失的情况,推荐使用基础API进行组合实现;您也可以通过在 [github](https://github.com/paddlepaddle/paddle) 上提issue的方式向我们反馈。 -**2.0-rc版本的API 整体目录结构如下**: +**2.0版本的API 整体目录结构如下**: | 目录 | 功能和包含的API | | :--- | --------------- | @@ -84,9 +84,10 @@ paddle.to_tensor(np.random.randn(3, 4)) - 对于按照某一轴操作,不加reduce前缀 - Conv, Pool, Dropout, BatchNorm, Pad组网类API根据输入数据类型增加1D, 2D, 3D后缀 - | Paddle 1.8 API名称 | Paddle 2.0-rc 对应的名称| + | Paddle 1.8 API名称 | Paddle 2.0对应的名称| | --------------- | ------------------------ | | paddle.fluid.layers.elementwise_add | paddle.add | + | paddle.fluid.layers.elementwise_sub | paddle.subtract | | paddle.fluid.layers.elementwise_mul | paddle.multiply | | paddle.fluid.layers.elementwise_div | paddle.divide | | paddle.fluid.layers.elementwise_max | paddle.maximum | @@ -541,12 +542,12 @@ for (...) { #### Python API -Python API 的变更与 C++ 基本对应,会在2.0RC版发布。 +Python API 的变更与 C++ 基本对应,会在2.0版发布。 ## 附录 ### 2.0转换工具 -为了降级代码升级的成本,我们提供了转换工具,可以帮助将Paddle 1.8版本开发的代码,升级为2.0-rc的API。由于相比于Paddle 1.8版本,2.0-rc版本的API进行了大量的升级,包括API名称,参数名称,行为等。转换工具当前还不能覆盖所有的API升级;对于无法转换的API,转换工具会报错,提示用户手动升级。 +为了降级代码升级的成本,我们提供了转换工具,可以帮助将Paddle 1.8版本开发的代码,升级为2.0的API。由于相比于Paddle 1.8版本,2.0版本的API进行了大量的升级,包括API名称,参数名称,行为等。转换工具当前还不能覆盖所有的API升级;对于无法转换的API,转换工具会报错,提示用户手动升级。 https://github.com/PaddlePaddle/paddle_upgrade_tool @@ -555,5 +556,5 @@ https://github.com/PaddlePaddle/paddle_upgrade_tool ### 2.0文档教程 以下提供了2.0版本的一些示例教程: -您可以在官网[应用实践](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/tutorial/index_cn.html)栏目内进行在线浏览,也可以下载在这里提供的源代码: +您可以在官网[应用实践](https://www.paddlepaddle.org.cn/documentation/docs/zh/tutorial/index_cn.html)栏目内进行在线浏览,也可以下载在这里提供的源代码: https://github.com/PaddlePaddle/book/tree/develop/paddle2.0_docs diff --git a/doc/paddle/guides/02_paddle2.0_develop/01_quick_start_cn.rst b/doc/paddle/guides/02_paddle2.0_develop/01_quick_start_cn.rst index 87b2ff00b33..c5968a292f3 100644 --- a/doc/paddle/guides/02_paddle2.0_develop/01_quick_start_cn.rst +++ b/doc/paddle/guides/02_paddle2.0_develop/01_quick_start_cn.rst @@ -3,17 +3,17 @@ 10分钟快速上手飞桨(PaddlePaddle) ================================= -本示例通过一个基础案例带您从一个飞桨新手快速掌握如何使用。 +本示例通过一个基础案例,带你快速了解如何使用飞桨框架。 -1. 安装飞桨 +一、安装飞桨 ----------- -如果您已经安装好飞桨那么可以跳过此步骤。我们针对用户提供了一个方便易用的安装引导页面,您可以通过选择自己的系统和软件版本来获取对应的安装命令,具体可以点击\ `快速安装 `__\ 查看。 +如果你已经安装好飞桨那么可以跳过此步骤。飞桨提供了一个方便易用的安装引导页面,你可以通过选择自己的系统和软件版本来获取对应的安装命令,具体可以点击\ `快速安装 `__\ 查看。 -2. 导入飞桨 +二、导入飞桨 ----------- -安装好飞桨后我们就可以在Python程序中进行飞桨的导入。 +安装好飞桨后你就可以在Python程序中导入飞桨。 .. code:: ipython3 @@ -22,20 +22,18 @@ .. parsed-literal:: - 2.0.0-rc1 + 2.0.0 -3. 实践一个手写数字识别任务 +三、实践:手写数字识别任务 --------------------------- -对于深度学习任务如果简单来看,其实分为几个核心步骤:1. -数据集的准备和加载;2. -模型的构建;3.模型训练;4.模型评估。那么接下来我们就一步一步带您通过飞桨的少量API快速实现。 +简单的说,深度学习任务一般分为几个核心步骤:1.数据集的准备和加载;2.模型构建;3.模型训练;4.模型评估。接下来你可以使用飞桨框架API,一步步实现上述步骤。 -3.1 数据加载 -~~~~~~~~~~~~ +3.1 加载内置数据集 +~~~~~~~~~~~~~~~~~ -加载我们框架为您准备好的一个手写数字识别数据集。这里我们使用两个数据集,一个用来做模型的训练,一个用来做模型的评估。 +飞桨框架内置了一些常见的数据集,在这个示例中,你可以加载飞桨框架的内置数据集:手写数字体数据集。这里加载两个数据集,一个用来训练模型,一个用来评估模型。 .. code:: ipython3 @@ -47,7 +45,7 @@ 3.2 模型搭建 ~~~~~~~~~~~~ -通过Sequential将一层一层的网络结构组建起来。需要先对数据进行Flatten操作,将[1,28, 28]形状的图片数据改变形状为[1,784]。 +通过 ``Sequential`` 将一层一层的网络结构组建起来。注意,需要先对数据进行 ``Flatten`` 操作,将[1, 28, 28]形状的图片数据改变形状为[1, 784]。 .. code:: ipython3 @@ -62,7 +60,7 @@ 3.3 模型训练 ~~~~~~~~~~~~ -配置好我们模型训练需要的损失计算方法和优化方法后就可以使用fit接口来开启我们的模型训练过程。 +在训练模型前,需要配置训练模型时损失的计算方法与优化方法,你可以使用飞桨框架提供的 ``prepare`` 完成,之后使用 ``fit`` 接口来开始训练模型。 .. code:: ipython3 @@ -70,7 +68,7 @@ model = paddle.Model(mnist) # 模型训练相关配置,准备损失计算方法,优化器和精度计算方法 - model.prepare(paddle.optimizer.Adam(parameters=mnist.parameters()), + model.prepare(paddle.optimizer.Adam(parameters=model.parameters()), paddle.nn.CrossEntropyLoss(), paddle.metric.Accuracy()) @@ -98,7 +96,7 @@ 3.4 模型评估 ~~~~~~~~~~~~ -使用我们刚才训练得到的模型参数进行模型的评估操作,看看我们的模型精度如何。 +你可以使用预先定义的验证数据集来评估前一步训练得到的模型的精度。 .. code:: ipython3 @@ -110,6 +108,6 @@ {'loss': [0.0], 'acc': 0.9804} -那么初步训练得到的模型效果在98%附近,我们可以进一步通过调整其中的训练参数来提升我们的模型精度。 +可以看出,初步训练得到的模型效果在98%附近,在逐渐了解飞桨后,你可以通过调整其中的训练参数来提升模型的精度。 -至此我们可以知道如何通过飞桨的几个简单API来快速完成一个深度学习任务,大家可以针对自己的需求来更换其中的代码,如果需要使用自己的数据集,那么可以更换数据集加载部分程序,如果需要替换模型,那么可以更改模型代码实现等等。后文会具体描述深度学习每个环节。 +至此你就通过飞桨几个简单的API完成了一个深度学习任务,你也可以针对自己的需求来更换其中的代码,比如对数据集进行增强、使用 ``CNN`` 模型等,飞桨官网提供了丰富的教程与案例可供参考。 \ No newline at end of file diff --git a/doc/paddle/guides/02_paddle2.0_develop/02_data_load_cn.rst b/doc/paddle/guides/02_paddle2.0_develop/02_data_load_cn.rst index 4c77c6e159e..ced8ed0fdec 100644 --- a/doc/paddle/guides/02_paddle2.0_develop/02_data_load_cn.rst +++ b/doc/paddle/guides/02_paddle2.0_develop/02_data_load_cn.rst @@ -3,15 +3,16 @@ 数据集定义与加载 ================ -对于深度学习任务,均是框架针对各种类型数字的计算,是无法直接使用原始图片和文本等文件来完成。那么就是涉及到了一项动作,就是将原始的各种数据文件进行处理加工,转换成深度学习任务可以使用的数据。 +深度学习模型在训练时需要大量的数据来完成模型调优,这个过程均是数字的计算,无法直接使用原始图片和文本等来完成计算。因此与需要对原始的各种数据文件进行处理,转换成深度学习模型可以使用的数据类型。 -框架自带数据集 +一、框架自带数据集 --------------------- -飞桨框架将一些我们常用到的数据集作为领域API对用户进行开放,对应API所在目录为\ ``paddle.vision.datasets``\ 与\ ``paddle.text.datasets``\,那么我们先看下提供了哪些数据集。 +飞桨框架将深度学习任务中常用到的数据集作为领域API开放,对应API所在目录为\ ``paddle.vision.datasets``\ 与\ ``paddle.text.datasets``\,你可以通过以下代码飞桨框架中提供了哪些数据集。 .. code:: ipython3 - + + import paddle print('视觉相关数据集:', paddle.vision.datasets.__all__) print('自然语言相关数据集:', paddle.text.datasets.__all__) @@ -22,9 +23,9 @@ 自然语言相关数据集: ['Conll05st', 'Imdb', 'Imikolov', 'Movielens', 'UCIHousing', 'WMT14', 'WMT16'] .. warning:: - 除\ ``paddle.vision.dataset``\ 与\ ``paddle.text.dataset``\ 外,飞桨框架还内置了另一套数据集,路径为\ ``paddle.dataset.*``\ ,但是该数据集的使用方式较老,会在未来的版本废弃,请您尽量不要使用该目录下数据集的API。 + 除\ ``paddle.vision.dataset``\ 与\ ``paddle.text.dataset``\ 外,飞桨框架还内置了另一套数据集,路径为\ ``paddle.dataset.*``\ ,但是该数据集的使用方式较老,会在未来的版本废弃,请尽量不要使用该目录下数据集的API。 -这里我们加载一个手写数字识别的数据集,其他数据集的使用方式也都类似。用\ ``mode``\ 来标识训练集与测试集。数据集接口会自动从远端下载数据集到本机缓存目录\ ``~/.cache/paddle/dataset``\ 。 +这里你可以定义手写数字体的数据集,其他数据集的使用方式也都类似。用\ ``mode``\ 来标识训练集与测试集。数据集接口会自动从远端下载数据集到本机缓存目录\ ``~/.cache/paddle/dataset``\ 。 .. code:: ipython3 @@ -36,47 +37,40 @@ val_dataset = paddle.vision.datasets.MNIST(mode='test', transform=ToTensor()) -自定义数据集 +二、自定义数据集 ------------------- -在实际的使用场景中,更多的时候我们是需要自己使用已有的相关数据来定义数据集,那么这里我们通过一个案例来了解如何进行数据集的定义,飞桨为用户提供了\ ``paddle.io.Dataset``\ 基类,让用户通过类的集成来快速实现数据集定义。 +在实际的场景中,更多需要使用你已有的相关数据来定义数据集。你可以使用飞桨提供的\ ``paddle.io.Dataset``\ 基类,来快速实现自定义数据集。 .. code:: ipython3 + import paddle from paddle.io import Dataset + BATCH_SIZE = 64 + BATCH_NUM = 20 + + IMAGE_SIZE = (28, 28) + CLASS_NUM = 10 + class MyDataset(Dataset): """ 步骤一:继承paddle.io.Dataset类 """ - def __init__(self, mode='train'): + def __init__(self, num_samples): """ - 步骤二:实现构造函数,定义数据读取方式,划分训练和测试数据集 + 步骤二:实现构造函数,定义数据集大小 """ super(MyDataset, self).__init__() - - if mode == 'train': - self.data = [ - ['traindata1', 'label1'], - ['traindata2', 'label2'], - ['traindata3', 'label3'], - ['traindata4', 'label4'], - ] - else: - self.data = [ - ['testdata1', 'label1'], - ['testdata2', 'label2'], - ['testdata3', 'label3'], - ['testdata4', 'label4'], - ] - + self.num_samples = num_samples + def __getitem__(self, index): """ 步骤三:实现__getitem__方法,定义指定index时如何获取数据,并返回单条数据(训练数据,对应的标签) """ - data = self.data[index][0] - label = self.data[index][1] + data = paddle.uniform(IMAGE_SIZE, dtype='float32') + label = paddle.randint(0, CLASS_NUM-1, dtype='int64') return data, label @@ -84,61 +78,48 @@ """ 步骤四:实现__len__方法,返回数据集总数目 """ - return len(self.data) + return self.num_samples # 测试定义的数据集 - train_dataset2 = MyDataset(mode='train') - val_dataset2 = MyDataset(mode='test') - - print('=============train dataset=============') - for data, label in train_dataset2: - print(data, label) + custom_dataset = MyDataset(BATCH_SIZE * BATCH_NUM) - print('=============evaluation dataset=============') - for data, label in val_dataset2: - print(data, label) + print('=============custom dataset=============') + for data, label in custom_dataset: + print(data.shape, label.shape) + break .. parsed-literal:: - =============train dataset============= - traindata1 label1 - traindata2 label2 - traindata3 label3 - traindata4 label4 - =============evaluation dataset============= - testdata1 label1 - testdata2 label2 - testdata3 label3 - testdata4 label4 + =============custom dataset============= + [28, 28] [1] -通过以上的方式,就可以根据实际场景,构造自己的数据集。 +通过以上的方式,你就可以根据实际场景,构造自己的数据集。 -数据加载 +三、数据加载 ------------ 飞桨推荐使用\ ``paddle.io.DataLoader``\ 完成数据的加载。简单的示例如下: .. code:: ipython3 - - train_loader = paddle.io.DataLoader(train_dataset, batch_size=64, shuffle=True) - # train_dataset 取自第一段代码框架自带数据集中定义的数据集 - # 如果要加载自定义数据集,将train_dataset 换为 train_dataset2即可 + train_loader = paddle.io.DataLoader(custom_dataset, batch_size=BATCH_SIZE, shuffle=True) + # 如果要加载内置数据集,将 custom_dataset 换为 train_dataset 即可 for batch_id, data in enumerate(train_loader()): x_data = data[0] y_data = data[1] - print(x_data.numpy().shape) - print(y_data.numpy().shape) + print(x_data.shape) + print(y_data.shape) + break .. parsed-literal:: - (64, 1, 28, 28) - (64, 1) + [64, 28, 28] + [64, 1] -通过上述的方法,我们定义了一个数据迭代器\ ``train_loader``\ , 用于加载训练数据。通过\ ``batch_size=64``\ 我们设置了数据集的批大小为64,通过\ ``shuffle=True``\ ,我们在取数据前会打乱数据。此外,我们还可以通过设置\ ``num_workers``\ 来开启多进程数据加载,提升加载速度。 +通过上述的方法,你就定义了一个数据迭代器\ ``train_loader``\ , 用于加载训练数据。通过\ ``batch_size=64``\ 设置了数据集的批大小为64,通过\ ``shuffle=True``\ ,在取数据前会打乱数据。此外,你还可以通过设置\ ``num_workers``\ 来开启多进程数据加载,提升加载速度。 .. note:: - DataLoader 默认用异步加载数据的方式来读取数据,一方面可以提升数据加载的速度,另一方面也会占据更少的内存。如您需要同时加载全部数据到内存中,请设置\ ``use_buffer_reader=False``\ 。 + DataLoader 默认用异步加载数据的方式来读取数据,一方面可以提升数据加载的速度,另一方面也会占据更少的内存。如果你需要同时加载全部数据到内存中,请设置\ ``use_buffer_reader=False``\ 。 diff --git a/doc/paddle/guides/02_paddle2.0_develop/03_data_preprocessing_cn.rst b/doc/paddle/guides/02_paddle2.0_develop/03_data_preprocessing_cn.rst index c548fb06674..23e0d0c290c 100644 --- a/doc/paddle/guides/02_paddle2.0_develop/03_data_preprocessing_cn.rst +++ b/doc/paddle/guides/02_paddle2.0_develop/03_data_preprocessing_cn.rst @@ -3,13 +3,13 @@ 数据预处理 ================ -训练过程中有时会遇到过拟合的问题,其中一个解决方法就是对训练数据做增强,对数据进行处理得到不同的图像,从而泛化数据集。数据增强API是定义在领域目录的transofrms下,这里我们介绍两种使用方式,一种是基于框架内置数据集,一种是基于自己定义的数据集。 +训练过程中有时会遇到过拟合的问题,其中一个解决方法就是对训练数据做增强,对数据进行处理得到不同的图像,从而泛化数据集。数据增强API是定义在领域目录的transofrms下,这里介绍两种使用方式,一种是基于框架内置数据集,一种是基于自定义的数据集。 -飞桨框架内置数据集 +一、飞桨框架内置数据集 ----------------------- -针对飞桨框架内置图像数据集的预处理,飞桨框架将这部分API整合到\ ``paddle.vision.transforms``\ 下,具体包括如下方法: +针对飞桨框架内置图像数据集的预处理,飞桨框架将这部分API整合到\ ``paddle.vision.transforms``\ 下,你可以通过以下方式查看: .. code:: ipython3 @@ -19,65 +19,70 @@ .. parsed-literal:: - 数据处理方法: ['BaseTransform', 'Compose', 'Resize', 'RandomResizedCrop', 'CenterCrop', 'RandomHorizontalFlip', 'RandomVerticalFlip', 'Transpose', 'Normalize', 'BrightnessTransform', 'SaturationTransform', 'ContrastTransform', 'HueTransform', 'ColorJitter', 'RandomCrop', 'Pad', 'RandomRotation', 'Grayscale', 'ToTensor', 'to_tensor', 'hflip', 'vflip', 'resize', 'pad', 'rotate', 'to_grayscale', 'crop', 'center_crop', 'adjust_brightness', 'adjust_contrast', 'adjust_hue', 'normalize' + 数据处理方法: ['BaseTransform', 'Compose', 'Resize', 'RandomResizedCrop', 'CenterCrop', 'RandomHorizontalFlip', 'RandomVerticalFlip', 'Transpose', 'Normalize', 'BrightnessTransform', 'SaturationTransform', 'ContrastTransform', 'HueTransform', 'ColorJitter', 'RandomCrop', 'Pad', 'RandomRotation', 'Grayscale', 'ToTensor', 'to_tensor', 'hflip', 'vflip', 'resize', 'pad', 'rotate', 'to_grayscale', 'crop', 'center_crop', 'adjust_brightness', 'adjust_contrast', 'adjust_hue', 'normalize'] -这里,我们随机调整图像的亮度、对比度、饱和度,并调整图像的大小,对图像的其他调整,可以参考具体的API文档。 +你可以同构以下方式随机调整图像的亮度、对比度、饱和度,并调整图像的大小,对图像的其他调整,可以参考相关的API文档。 .. code:: ipython3 from paddle.vision.transforms import Compose, Resize, ColorJitter + # 定义想要使用的数据增强方式,这里包括随机调整亮度、对比度和饱和度,改变图片大小 + transform = Compose([ColorJitter(), Resize(size=32)]) - # 定义想要使用那些数据增强方式,这里用到了随机调整亮度、对比度和饱和度,改变图片大小 - transform = Compose([ColorJitter(), Resize(size=100)]) - - # 通过transform参数传递定义好的数据增项方法即可完成对自带数据集的应用 + # 通过transform参数传递定义好的数据增强方法即可完成对自带数据集的增强 train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform) -自定义数据集 +二、自定义数据集 ----------------------- -针对自定义数据集使用数据增强有两种方式,一种是在数据集的构造函数中进行数据增强方法的定义,之后对__getitem__中返回的数据进行应用。另外一种方式也可以给自定义的数据集类暴漏一个构造参数,在实例化类的时候将数据增强方法传递进去。 +对于自定义的数据集,你可以在数据集的构造函数中进行数据增强方法的定义,之后对 ``__getitem__`` 中返回的数据进行应用,就可以完成自定义数据增强。 .. code:: ipython3 import paddle from paddle.io import Dataset + from paddle.vision.transforms import Compose, Resize + + BATCH_SIZE = 64 + BATCH_NUM = 20 + IMAGE_SIZE = (28, 28) + CLASS_NUM = 10 class MyDataset(Dataset): - def __init__(self, mode='train'): + def __init__(self, num_samples): super(MyDataset, self).__init__() - - if mode == 'train': - self.data = [ - ['traindata1', 'label1'], - ['traindata2', 'label2'], - ['traindata3', 'label3'], - ['traindata4', 'label4'], - ] - else: - self.data = [ - ['testdata1', 'label1'], - ['testdata2', 'label2'], - ['testdata3', 'label3'], - ['testdata4', 'label4'], - ] - - # 定义要使用的数据预处理方法,针对图片的操作 - self.transform = Compose([ColorJitter(), Resize(size=100)]) - + self.num_samples = num_samples + # 在 `__init__` 中定义数据增强方法,此处为调整图像大小 + self.transform = Compose([Resize(size=32)]) + def __getitem__(self, index): - data = self.data[index][0] + data = paddle.uniform(IMAGE_SIZE, dtype='float32') + # 在 `__getitem__` 中对数据集使用数据增强方法 + data = self.transform(data.numpy()) - # 在这里对训练数据进行应用 - # 这里只是一个示例,测试时需要将数据集更换为图片数据进行测试 - data = self.transform(data) - - label = self.data[index][1] + label = paddle.randint(0, CLASS_NUM-1, dtype='int64') return data, label def __len__(self): - return len(self.data) + return self.num_samples + + # 测试定义的数据集 + custom_dataset = MyDataset(BATCH_SIZE * BATCH_NUM) + + print('=============custom dataset=============') + for data, label in custom_dataset: + print(data.shape, label.shape) + break + + +.. parsed-literal:: + + =============custom dataset============= + [32, 32] [1] + + +可以看出,输出的形状从 ``[28, 28, 1]`` 变为了 ``[32, 32, 1]``,证明完成了图像的大小调整。 \ No newline at end of file diff --git a/doc/paddle/guides/02_paddle2.0_develop/04_model_cn.rst b/doc/paddle/guides/02_paddle2.0_develop/04_model_cn.rst index 0789781efa1..8306175beb8 100644 --- a/doc/paddle/guides/02_paddle2.0_develop/04_model_cn.rst +++ b/doc/paddle/guides/02_paddle2.0_develop/04_model_cn.rst @@ -3,12 +3,12 @@ 模型组网 ============ -完成数据集的构建后,需要构建网络模型。本文首先介绍飞桨组网相关的API,主要是\ ``paddle.nn``\ 下的API介绍,然后介绍动态图下飞桨框架支持的两种组网方式,分别为 Sequential组网与 SubClass组网,最后,介绍飞桨框架内置的算法模型。 +完成数据集的构建后,需要构建网络模型。首先介绍飞桨组网相关的API,主要是\ ``paddle.nn``\ 下的API介绍,然后介绍动态图下飞桨框架支持的两种组网方式,分别为 ``Sequential`` 组网与 ``SubClass`` 组网,最后,介绍飞桨框架内置的算法模型。 -1. paddle.nn 简介 +一、paddle.nn 简介 ------------------------- -飞桨框架2.0中,组网相关的API都在\ ``paddle.nn``\ 目录下,您可以通过 Sequential 或 SubClass的方式构建具体的模型。组网相关的API类别与具体的API列表如下表: +飞桨框架2.0中,组网相关的API都在\ ``paddle.nn``\ 目录下,你可以通过 ``Sequential`` 或 ``SubClass`` 的方式构建具体的模型。组网相关的API类别与具体的API列表如下表: +---------------+---------------------------------------------------------------------------+ | 功能 | API名称 | @@ -42,13 +42,14 @@ +---------------+---------------------------------------------------------------------------+ -2. Sequential 组网 +二、Sequential 组网 ------------------------- -针对顺序的线性网络结构我们可以直接使用Sequential来快速完成组网,可以减少类的定义等代码编写。具体代码如下: +针对顺序的线性网络结构你可以直接使用Sequential来快速完成组网,可以减少类的定义等代码编写。具体代码如下: .. code:: ipython3 + import paddle # Sequential形式组网 mnist = paddle.nn.Sequential( paddle.nn.Flatten(), @@ -58,7 +59,7 @@ paddle.nn.Linear(512, 10) ) -3. SubClass 组网 +三、SubClass 组网 ------------------------- 针对一些比较复杂的网络结构,就可以使用Layer子类定义的方式来进行模型代码编写,在\ ``__init__``\ 构造函数中进行组网Layer的声明,在\ ``forward``\ 中使用声明的Layer变量进行前向计算。子类组网方式也可以实现sublayer的复用,针对相同的layer可以在构造函数中一次性定义,在forward中多次调用。 @@ -87,10 +88,10 @@ mnist_2 = Mnist() -4. 飞桨框架内置模型 +四、飞桨框架内置模型 -------------------------------- -在飞桨框架中,除了自己通过上述方式组建模型外,飞桨框架还内置了部分模型,路径为 ``paddle.vision.models`` ,具体列表如下: +你除了可以通过上述方式组建模型外,还可以使用飞桨框架内置的模型,路径为 ``paddle.vision.models`` ,具体列表如下: .. code:: ipython3 @@ -108,7 +109,7 @@ lenet = paddle.vision.models.LeNet() -我们可以通过\ ``paddle.summary()``\ 方法查看模型的结构与每一层输入输出形状,具体如下: +你可以通过\ ``paddle.summary()``\ 方法查看模型的结构与每一层输入输出形状,具体如下: .. code:: ipython3 diff --git a/doc/paddle/guides/02_paddle2.0_develop/05_train_eval_predict_cn.rst b/doc/paddle/guides/02_paddle2.0_develop/05_train_eval_predict_cn.rst index b503d44a92b..c6eb9bb9c17 100644 --- a/doc/paddle/guides/02_paddle2.0_develop/05_train_eval_predict_cn.rst +++ b/doc/paddle/guides/02_paddle2.0_develop/05_train_eval_predict_cn.rst @@ -3,14 +3,16 @@ 训练与预测 ===================== -在完成数据预处理,数据加载与模型的组建后,就可以进行模型的训练与预测了。飞桨框架提供了两种训练与预测的方法,一种是用\ ``paddle.Model``\ 对模型进行封装,通过高层API如\ ``Model.fit()、Model.evaluate()、Model.predict()``\ 等完成模型的训练与预测;另一种就是基于基础API常规的训练方式。 +在完成数据预处理,数据加载与模型的组建后,你就可以进行模型的训练与预测了。飞桨框架提供了两种训练与预测的方法,一种是用\ ``paddle.Model``\ 对模型进行封装,通过高层API如\ ``Model.fit()、Model.evaluate()、Model.predict()``\ 等完成模型的训练与预测;另一种就是基于基础API常规的训练方式。 .. note:: - 高层API实现的模型训练与预测如\ ``Model.fit()、Model.evaluate()、Model.predict()``\ 都可以通过基础API实现,本文先介绍高层API的训练方式,然后会将高层API拆解为基础API的方式,方便读者对比学习。 + 高层API实现的模型训练与预测如\ ``Model.fit()、Model.evaluate()、Model.predict()``\ 都可以通过基础API实现,本文先介绍高层API的训练方式,然后会将高层API拆解为基础API的方式,方便对比学习。 +一、训练前准备 +--------------------- -在封装模型前,需要先完成数据的加载与模型的组建,由于这一部分高层API与基础API通用,所以都可用下面的代码: +在封装模型前,需要先完成数据的加载与模型的组建,由于这一部分高层API与基础API通用,所以都可用下面的代码实现: .. code:: ipython3 @@ -30,18 +32,18 @@ paddle.nn.Linear(512, 10) ) -通过上述的代码,我们完成了训练集与测试集的构建,并创建了一个 mnist的网络模型。下面就让我们分别用两种方式完成模型的训练与预测。 +通过上述的代码,你就完成了训练集与测试集的构建,并创建了一个 mnist的网络模型。下面分别用两种方式完成模型的训练与预测。 -1. 通过\ ``paddle.Model``\ 训练与预测 ---------------------------------------------------- +二、通过\ ``paddle.Model``\ 训练与预测 +------------------------------------ -我们来使用\ ``paddle.Model``\ 完成模型的封装,将网络结构组合成一个可快速使用高层API进行训练和预测的类。代码如下: +你可以使用\ ``paddle.Model``\ 完成模型的封装,将网络结构组合成一个可快速使用高层API进行训练和预测的类。代码如下: .. code:: ipython3 model = paddle.Model(mnist) -1.1 用\ ``Model.prepare()``\ 配置模型 +2.1 用\ ``Model.prepare()``\ 配置模型 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 用\ ``paddle.Model``\ 完成模型的封装后,在训练前,需要对模型进行配置,通过\ ``Model.prepare``\ 接口来对训练进行提前的配置准备工作,包括设置模型优化器,Loss计算方法,精度计算方法等。 @@ -53,10 +55,10 @@ loss=paddle.nn.CrossEntropyLoss(), metrics=paddle.metric.Accuracy()) -1.2 用\ ``Model.fit()``\ 训练模型 +2.2 用\ ``Model.fit()``\ 训练模型 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -做好模型训练的前期准备工作后,我们正式调用\ ``fit()``\ 接口来启动训练过程,需要指定一下至少3个关键参数:训练数据集,训练轮次和单次训练数据批次大小。 +做好模型训练的前期准备工作后,调用\ ``fit()``\ 接口来启动训练过程,需要指定至少3个关键参数:训练数据集,训练轮次和单次训练数据批次大小。 .. code:: ipython3 @@ -84,11 +86,11 @@ 1.3 用\ ``Model.evaluate()``\ 评估模型 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -对于训练好的模型进行评估操作可以使用\ ``evaluate``\ 接口来实现,事先定义好用于评估使用的数据集后,可以简单的调用\ ``evaluate``\ 接口即可完成模型评估操作,结束后根据prepare中loss和metric的定义来进行相关评估结果计算返回。 +对于训练好的模型进行评估可以使用\ ``evaluate``\ 接口,事先定义好用于评估使用的数据集后,直接调用\ ``evaluate``\ 接口即可完成模型评估操作,结束后根据在\ ``prepare``\ 中\ ``loss``\ 和\ ``metric``\ 的定义来进行相关评估结果计算返回。 返回格式是一个字典: \* 只包含loss,\ ``{'loss': xxx}`` \* 包含loss和一个评估指标,\ ``{'loss': xxx, 'metric name': xxx}`` \* -包含loss和多个评估指标,\ ``{'loss': xxx, 'metric name': xxx, 'metric name': xxx}`` +包含loss和多个评估指标,\ ``{'loss': xxx, 'metric name1': xxx, 'metric name2': xxx}`` .. code:: ipython3 @@ -128,12 +130,12 @@ numpy_ndarray_n是对应原始数据经过模型计算后得到的预测数据 Predict samples: 10000 -2. 通过基础API实现模型的训练与预测 +三、通过基础API实现模型的训练与预测 ----------------------------------------- -除了通过第一部分的高层API实现模型的训练与预测,飞桨框架也同样支持通过基础API对模型进行训练与预测。简单来说,\ ``Model.prepare()、Model.fit()、Model.evaluate()、Model.predict()``\ 都是由基础API封装而来。下面通过拆解高层API到基础API的方式,来了解一下如何用基础API完成模型的训练与预测。 +除了通过第一部分的高层API实现模型的训练与预测,飞桨框架也同样支持通过基础API对模型进行训练与预测。简单来说,\ ``Model.prepare()、Model.fit()、Model.evaluate()、Model.predict()``\ 都是由基础API封装而来。下面通过拆解高层API到基础API的方式,来了解如何用基础API完成模型的训练与预测。 -2.1 拆解\ ``Model.prepare()、Model.fit()``\ -- 用基础API训练模型 +3.1 拆解\ ``Model.prepare()、Model.fit()``\ -- 用基础API训练模型 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 飞桨框架通过基础API对模型进行训练与预测,对应第一部分的\ ``Model.prepare()``\ 与\ ``Model.fit()``\ : @@ -191,7 +193,7 @@ numpy_ndarray_n是对应原始数据经过模型计算后得到的预测数据 epoch: 3, batch_id: 900, loss is: [0.02940615], acc is: [1.] epoch: 4, batch_id: 900, loss is: [0.05713747], acc is: [0.984375] -2.2 拆解\ ``Model.evaluate()``\ -- 用基础API验证模型 +3.2 拆解\ ``Model.evaluate()``\ -- 用基础API验证模型 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 飞桨框架通过基础API对模型进行验证,对应第一部分的\ ``Model.evaluate()``\ : @@ -227,7 +229,7 @@ numpy_ndarray_n是对应原始数据经过模型计算后得到的预测数据 batch_id: 150, loss is: [0.12016675], acc is: [0.984375] -2.3 拆解\ ``Model.predict()``\ -- 用基础API测试模型 +3.3 拆解\ ``Model.predict()``\ -- 用基础API测试模型 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 飞桨框架通过基础API对模型进行测试,对应第一部分的\ ``Model.predict()``\ : diff --git a/doc/paddle/guides/02_paddle2.0_develop/06_device_cn.rst b/doc/paddle/guides/02_paddle2.0_develop/06_device_cn.rst index b557c668a14..5f3e76ee0cf 100644 --- a/doc/paddle/guides/02_paddle2.0_develop/06_device_cn.rst +++ b/doc/paddle/guides/02_paddle2.0_develop/06_device_cn.rst @@ -5,10 +5,10 @@ 飞桨框架2.0增加\ ``paddle.distributed.spawn``\ 函数来启动单机多卡训练,同时原有的\ ``paddle.distributed.launch``\ 的方式依然保留。 -1. 方式1、launch启动 +一、launch启动 --------------------- -高层API场景 +1.1 高层API场景 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 当调用\ ``paddle.Model``\高层API来实现训练时,想要启动单机多卡训练非常简单,代码不需要做任何修改,只需要在启动时增加一下参数\ ``-m paddle.distributed.launch``\ 。 @@ -28,7 +28,7 @@ $ export CUDA_VISIBLE_DEVICES=0,1 $ python -m paddle.distributed.launch train.py -基础API场景 +1.2 基础API场景 ~~~~~~~~~~~~~~~~~~ 如果使用基础API实现训练,想要启动单机多卡训练,需要对单机单卡的代码进行3处修改,具体如下: @@ -110,7 +110,7 @@ $ export CUDA_VISIBLE_DEVICES=0,1 $ python -m paddle.distributed.launch train.py -2. 方式2、spawn启动 +二、spawn启动 ------------------------------- launch方式启动训练,以文件为单位启动多进程,需要用户在启动时调用\ ``paddle.distributed.launch``\,对于进程的管理要求较高。飞桨框架2.0版本增加了\ ``spawn``\ 启动方式,可以更好地控制进程,在日志打印、训练退出时更友好。使用示例如下: diff --git a/doc/paddle/guides/02_paddle2.0_develop/07_customize_cn.rst b/doc/paddle/guides/02_paddle2.0_develop/07_customize_cn.rst index 2d43b1aab1d..3e5626fc3be 100644 --- a/doc/paddle/guides/02_paddle2.0_develop/07_customize_cn.rst +++ b/doc/paddle/guides/02_paddle2.0_develop/07_customize_cn.rst @@ -6,10 +6,10 @@ 除了使用飞桨框架内置的指标外,飞桨框架还支持用户根据自己的实际场景,完成指标的自定义。 -1. 自定义Loss +一、自定义Loss ----------------------- -有时我们会遇到特定任务的Loss计算方式在框架既有的Loss接口中不存在,或算法不符合自己的需求,那么期望能够自己来进行Loss的自定义,我们这里就会讲解介绍一下如何进行Loss的自定义操作,首先来看下面的代码: +有时你会遇到特定任务的Loss计算方式在框架既有的Loss接口中不存在,或算法不符合自己的需求,那么期望能够自己来进行Loss的自定义。这里介绍如何进行Loss的自定义操作,首先来看下面的代码: .. code:: ipython3 @@ -33,7 +33,8 @@ # 使用Paddle中相关API自定义的计算逻辑 # output = xxxxx # return output -那么了解完代码层面如果编写自定义代码后我们看一个实际的例子,下面是在图像分割示例代码中写的一个自定义Loss,当时主要是想使用自定义的softmax计算维度。 + +接下来是一个具体的例子,在图像分割示例代码中写的一个自定义Loss,当时主要是使用自定义的softmax计算维度。 .. code:: python @@ -49,10 +50,10 @@ return paddle.mean(loss) -2. 自定义Metric +二、自定义Metric ---------------------------- -和Loss一样,如果遇到一些想要做个性化实现的操作时,我们也可以来通过框架完成自定义的评估计算方法,具体的实现方式如下: +和Loss一样,你也可以来通过框架实现自定义的评估方法,具体的实现如下: .. code:: ipython3 @@ -101,7 +102,7 @@ """ # do reset action -我们看一个框架中的具体例子,这个是框架中已提供的一个评估指标计算接口,这里就是按照上述说明中的实现方法进行了相关类继承和成员函数实现。 +接下来看一个框架中的具体例子,是框架中已提供的一个评估指标计算接口,这里就是按照上述说明中的方法完成了实现。 .. code:: ipython3 @@ -180,10 +181,10 @@ return self._name -3. 自定义Callback +三、自定义Callback ------------------------------- -``fit``\ 接口的callback参数支持我们传一个Callback类实例,用来在每轮训练和每个batch训练前后进行调用,可以通过callback收集到训练过程中的一些数据和参数,或者实现一些自定义操作。 +``fit``\ 接口的callback参数支持传入一个\`` Callback``\ 类实例,用来在每轮训练和每个\`` batch``\ 训练前后进行调用,可以通过\`` callback``\ 收集到训练过程中的一些数据和参数,或者实现一些自定义操作。 .. code:: ipython3 @@ -212,7 +213,7 @@ # 按照需求定义自己的类成员方法 -我们看一个框架中的实际例子,这是一个框架自带的ModelCheckpoint回调函数,方便用户在fit训练模型时自动存储每轮训练得到的模型。 +看一个框架中的实际例子,这是框架自带的\`` ModelCheckpoint``\ 回调函数,可以在\`` fit``\ 训练模型时自动存储每轮训练得到的模型。 .. code:: python diff --git a/doc/paddle/guides/02_paddle2.0_develop/08_model_save_load_cn.rst b/doc/paddle/guides/02_paddle2.0_develop/08_model_save_load_cn.rst index e72be09277d..a662f114d64 100644 --- a/doc/paddle/guides/02_paddle2.0_develop/08_model_save_load_cn.rst +++ b/doc/paddle/guides/02_paddle2.0_develop/08_model_save_load_cn.rst @@ -344,7 +344,7 @@ Layer更准确的语义是描述一个具有预测功能的模型对象,接收 return self._linear(x) -(3) 如果您需要存储多个方法,需要用 ``paddle.jit.to_static`` 装饰每一个需要被存储的方法。 +(3) 如果你需要存储多个方法,需要用 ``paddle.jit.to_static`` 装饰每一个需要被存储的方法。 .. note:: 只有在forward之外还需要存储其他方法时才用这个特性,如果仅装饰非forward的方法,而forward没有被装饰,是不符合规范的。此时 ``paddle.jit.save`` 的 ``input_spec`` 参数必须为None。 @@ -388,7 +388,7 @@ Layer更准确的语义是描述一个具有预测功能的模型对象,接收 3.1.2 动态图训练 + 模型&参数存储 `````````````````````````````` -动态图模式相比动转静模式更加便于调试,如果您仍需要使用动态图直接训练,也可以在动态图训练完成后调用 ``paddle.jit.save`` 直接存储模型和参数。 +动态图模式相比动转静模式更加便于调试,如果你仍需要使用动态图直接训练,也可以在动态图训练完成后调用 ``paddle.jit.save`` 直接存储模型和参数。 同样是一个简单的网络训练示例: @@ -577,7 +577,7 @@ Layer更准确的语义是描述一个具有预测功能的模型对象,接收 paddle.jit.save(loaded_layer, "fine-tune.model/linear", input_spec=[x]) -此外, ``paddle.jit.save`` 同时保存了模型和参数,如果您只需要从存储结果中载入模型的参数,可以使用 ``paddle.load`` 接口载入,返回所存储模型的state_dict,示例如下: +此外, ``paddle.jit.save`` 同时保存了模型和参数,如果你只需要从存储结果中载入模型的参数,可以使用 ``paddle.load`` 接口载入,返回所存储模型的state_dict,示例如下: .. code-block:: python @@ -613,7 +613,7 @@ Layer更准确的语义是描述一个具有预测功能的模型对象,接收 四、旧存储格式兼容载入 ################### -如果您是从飞桨框架1.x切换到2.x,曾经使用飞桨框架1.x的fluid相关接口存储模型或者参数,飞桨框架2.x也对这种情况进行了兼容性支持,包括以下几种情况。 +如果你是从飞桨框架1.x切换到2.x,曾经使用飞桨框架1.x的fluid相关接口存储模型或者参数,飞桨框架2.x也对这种情况进行了兼容性支持,包括以下几种情况。 飞桨1.x模型准备及训练示例,该示例为后续所有示例的前序逻辑: @@ -686,7 +686,7 @@ Layer更准确的语义是描述一个具有预测功能的模型对象,接收 使用 ``paddle.jit.load`` 配合 ``**configs`` 载入模型和参数。 -如果您是按照 ``paddle.fluid.io.save_inference_model`` 的默认格式存储的,可以按照如下方式载入(接前述示例): +如果你是按照 ``paddle.fluid.io.save_inference_model`` 的默认格式存储的,可以按照如下方式载入(接前述示例): .. code-block:: python @@ -706,7 +706,7 @@ Layer更准确的语义是描述一个具有预测功能的模型对象,接收 x = paddle.randn([1, IMAGE_SIZE], 'float32') pred = fc(x) -如果您指定了存储的模型文件名,可以按照以下方式载入(接前述示例): +如果你指定了存储的模型文件名,可以按照以下方式载入(接前述示例): .. code-block:: python @@ -726,7 +726,7 @@ Layer更准确的语义是描述一个具有预测功能的模型对象,接收 x = paddle.randn([1, IMAGE_SIZE], 'float32') pred = fc(x) -如果您指定了存储的参数文件名,可以按照以下方式载入(接前述示例): +如果你指定了存储的参数文件名,可以按照以下方式载入(接前述示例): .. code-block:: python @@ -748,9 +748,9 @@ Layer更准确的语义是描述一个具有预测功能的模型对象,接收 (2) 仅载入参数 -如果您仅需要从 ``paddle.fluid.io.save_inference_model`` 的存储结果中载入参数,以state_dict的形式配置到已有代码的模型中,可以使用 ``paddle.load`` 配合 ``**configs`` 载入。 +如果你仅需要从 ``paddle.fluid.io.save_inference_model`` 的存储结果中载入参数,以state_dict的形式配置到已有代码的模型中,可以使用 ``paddle.load`` 配合 ``**configs`` 载入。 -如果您是按照 ``paddle.fluid.io.save_inference_model`` 的默认格式存储的,可以按照如下方式载入(接前述示例): +如果你是按照 ``paddle.fluid.io.save_inference_model`` 的默认格式存储的,可以按照如下方式载入(接前述示例): .. code-block:: python @@ -758,7 +758,7 @@ Layer更准确的语义是描述一个具有预测功能的模型对象,接收 load_param_dict = paddle.load(model_path) -如果您指定了存储的模型文件名,可以按照以下方式载入(接前述示例): +如果你指定了存储的模型文件名,可以按照以下方式载入(接前述示例): .. code-block:: python @@ -766,7 +766,7 @@ Layer更准确的语义是描述一个具有预测功能的模型对象,接收 load_param_dict = paddle.load(model_path, model_filename="__simplenet__") -如果您指定了存储的参数文件名,可以按照以下方式载入(接前述示例): +如果你指定了存储的参数文件名,可以按照以下方式载入(接前述示例): .. code-block:: python @@ -826,9 +826,9 @@ Layer更准确的语义是描述一个具有预测功能的模型对象,接收 (2) 指定了参数存储的文件,将所有参数存储至单个文件中 -将所有参数存储至单个文件中会导致存储结果中丢失Tensor名和Tensor数据之间的映射关系,因此这部分丢失的信息需要用户传入进行补足。为了确保正确性,这里不仅要传入Tensor的name列表,同时要传入Tensor的shape和dtype等描述信息,通过检查和存储数据的匹配性确保严格的正确性,这导致载入数据的恢复过程变得比较复杂,仍然需要一些飞桨1.x的概念支持。后续如果此项需求较为普遍,我们将会考虑将该项功能兼容支持到 ``paddle.load`` 中,但由于信息丢失而导致的使用复杂性仍然是存在的,因此建议您避免仅使用这两个接口存储参数。 +将所有参数存储至单个文件中会导致存储结果中丢失Tensor名和Tensor数据之间的映射关系,因此这部分丢失的信息需要用户传入进行补足。为了确保正确性,这里不仅要传入Tensor的name列表,同时要传入Tensor的shape和dtype等描述信息,通过检查和存储数据的匹配性确保严格的正确性,这导致载入数据的恢复过程变得比较复杂,仍然需要一些飞桨1.x的概念支持。后续如果此项需求较为普遍,飞桨将会考虑将该项功能兼容支持到 ``paddle.load`` 中,但由于信息丢失而导致的使用复杂性仍然是存在的,因此建议你避免仅使用这两个接口存储参数。 -目前暂时推荐您使用 ``paddle.static.load_program_state`` 接口解决此处的载入问题,需要获取原Program中的参数列表传入该方法,使用示例如下(接前述示例): +目前暂时推荐你使用 ``paddle.static.load_program_state`` 接口解决此处的载入问题,需要获取原Program中的参数列表传入该方法,使用示例如下(接前述示例): .. code-block:: python diff --git a/doc/paddle/guides/02_paddle2.0_develop/09_model_to_onnx_cn.rst b/doc/paddle/guides/02_paddle2.0_develop/09_model_to_onnx_cn.rst index b5e524ab192..2520c919586 100644 --- a/doc/paddle/guides/02_paddle2.0_develop/09_model_to_onnx_cn.rst +++ b/doc/paddle/guides/02_paddle2.0_develop/09_model_to_onnx_cn.rst @@ -1,3 +1,4 @@ +.. _cn_model_to_onnx: ############# 模型导出ONNX协议 @@ -49,7 +50,7 @@ Paddle动态图模型转换为ONNX协议,首先会将Paddle的动态图 ``padd 2.2 静态图导出ONNX协议 ------------ -Paddle 2.0以后我们将主推动态图组网方式,如果您的模型来自于旧版本的Paddle,使用静态图组网,请参考paddle2onnx的 `使用文档 `_ 和 `示例 `_ 。 +Paddle 2.0以后将主推动态图组网方式,如果您的模型来自于旧版本的Paddle,使用静态图组网,请参考paddle2onnx的 `使用文档 `_ 和 `示例 `_ 。 三、ONNX模型的验证 ################## diff --git a/doc/paddle/guides/02_paddle2.0_develop/index_cn.rst b/doc/paddle/guides/02_paddle2.0_develop/index_cn.rst index 119f3bf7699..b9f7d4754e9 100644 --- a/doc/paddle/guides/02_paddle2.0_develop/index_cn.rst +++ b/doc/paddle/guides/02_paddle2.0_develop/index_cn.rst @@ -4,9 +4,9 @@ 本部分将介绍飞桨框架2.0的开发流程。 -为了快速上手飞桨框架2.0,您可以参考 `10分钟快速上手飞桨 <./01_quick_start_cn.html>`_ ; +为了快速上手飞桨框架2.0,你可以参考 `10分钟快速上手飞桨 <./01_quick_start_cn.html>`_ ; -当您完成了您的快速上手的任务后,下面这些模块会阐述如何用飞桨框架2.0,实现深度学习过程中的每一步。具体包括: +当完成了快速上手的任务后,下面这些模块会阐述如何用飞桨框架2.0,实现深度学习过程中的每一步。具体包括: - `数据集定义与加载 <./02_data_load_cn.html>`_ : 飞桨框架数据加载的方式,主要为\ ``paddle.io.Dataset + paddle.io.DataLoader``\ ,以及飞桨内置数据集的介绍。 - `数据预处理 <./03_data_preprocessing_cn.html>`_ : 飞桨框架数据预处理的方法,主要是\ ``paddle.vision.transform.*``\ 。 diff --git a/doc/paddle/guides/04_dygraph_to_static/grammar_list_cn.rst b/doc/paddle/guides/04_dygraph_to_static/grammar_list_cn.rst index 15232af266a..978739a18a6 100644 --- a/doc/paddle/guides/04_dygraph_to_static/grammar_list_cn.rst +++ b/doc/paddle/guides/04_dygraph_to_static/grammar_list_cn.rst @@ -96,11 +96,11 @@ Python基本容器 动转静无法正确运行的情况 -------------------------- -1. Reshape后的变量调用其shape作为PaddlePaddle API参数。 +1. 改变变量的shape后调用其shape作为PaddlePaddle API参数。 -具体表现比如 ``x = reshape(x, shape=shape_tensor)`` ,再使用 ``x.shape[0]`` 的值进行其他操作。这种情况会由于动态图和静态图的本质不同而使得动态图能够运行,但静态图运行失败。其原因是动态图情况下,API是直接返回运行结果,因此 ``x.shape`` 在经过reshape运算后是确定的。但是在转化为静态图后,因为静态图API只是组网,``shape_tensor`` 的值在组网时是不知道的,所以 ``reshape`` 接口组网完,静态图并不知道 ``x.shape`` 的值。PaddlePaddle静态图用-1表示未知的shape值,此时 ``x`` 的shape每个维度会被设为-1,而不是期望的值。 +具体表现比如 ``x = reshape(x, shape=shape_tensor)`` ,再使用 ``x.shape[0]`` 的值进行其他操作。这种情况会由于动态图和静态图的本质不同而使得动态图能够运行,但静态图运行失败。其原因是动态图情况下,API是直接返回运行结果,因此 ``x.shape`` 在经过reshape运算后是确定的。但是在转化为静态图后,因为静态图API只是组网,``shape_tensor`` 的值在组网时是不知道的,所以 ``reshape`` 接口组网完,静态图并不知道 ``x.shape`` 的值。PaddlePaddle静态图用-1表示未知的shape值,此时 ``x`` 的shape每个维度会被设为-1,而不是期望的值。同理,类似expand等更改shape的API,其输出Tensor再调用shape也难以进行动转静。 -遇到这类情况我们建议尽量固定shape值,减少reshape操作。 +遇到这类情况我们建议尽量固定shape值,减少变化shape操作。 2. 多重list嵌套读写Tensor @@ -114,9 +114,9 @@ Python基本容器 遇到这种情况我们建议在动转静的函数中尽量使用PaddlePaddle接口替代numpy接口进行运算。 -4. 一个函数递归调用自己 +4. 一个函数递归调用本身 -ProgramTranslator还无法支持一个函数递归调用自己,原因是递归常常会用 ``if-else`` 构造停止递归的条件。然而这样的停止条件在静态图下只是一个 ``cond`` 组网,组网并不能在编译阶段决定自己组多少次,会导致函数运行时一直组网递归直至栈溢出,因此ProgramTranslator还无法支持一个函数递归调用自己。 +ProgramTranslator还无法支持一个函数递归调用本身,原因是递归常常会用 ``if-else`` 构造停止递归的条件。然而这样的停止条件在静态图下只是一个 ``cond`` 组网,组网并不能在编译阶段得到递归条件决定本身组多少次,会导致函数运行时一直组网递归直至栈溢出,因此ProgramTranslator还无法支持一个函数递归调用本身。 遇到这种情况我们建议将代码改为非递归写法。 diff --git a/doc/paddle/guides/04_dygraph_to_static/grammar_list_en.rst b/doc/paddle/guides/04_dygraph_to_static/grammar_list_en.rst index 57a7998028e..688a33051c1 100644 --- a/doc/paddle/guides/04_dygraph_to_static/grammar_list_en.rst +++ b/doc/paddle/guides/04_dygraph_to_static/grammar_list_en.rst @@ -99,11 +99,11 @@ Python containers Unsupported grammars -------------------- -1. Use the shape of output tensor of ``reshape`` +1. Use the shape of a tensor whose shape has been changed. -For example, ``x = reshape(x, shape=shape_tensor)`` , then use ``x.shape[0]`` to do other operation. Due to the difference between dygraph and static graph, it is okay in dygraph but it will fail in static graph. The reason is that APIs return computation result in dygraph mode, so ``x.shape`` has deterministic value after calling ``reshape`` . However, static graph doesn't have the value ``shape_tensor`` during building network, so PaddlePaddle doesn't know the value of ``x.shape`` after calling ``reshape``. PaddlePaddle static graph will set -1 to represent unknown shape value for each dimension of ``x.shape`` in this case, not the expected value. +For example, ``x = reshape(x, shape=shape_tensor)`` , then use ``x.shape[0]`` to do other operation. Due to the difference between dygraph and static graph, it is okay in dygraph but it will fail in static graph. The reason is that APIs return computation result in dygraph mode, so ``x.shape`` has deterministic value after calling ``reshape`` . However, static graph doesn't have the value ``shape_tensor`` during building network, so PaddlePaddle doesn't know the value of ``x.shape`` after calling ``reshape``. PaddlePaddle static graph will set -1 to represent unknown shape value for each dimension of ``x.shape`` in this case, not the expected value. Similarily, calling the ``shape`` of the output tensor of those APIs which change the shape, such as ``expend``, cannot be converted into static graph properly. -We suggest to set fixed shape value as much as possible, reduce the reshape operation. +We suggest to set fixed shape value as much as possible, reduce the operations that change tensor shape. 2. List of list of Tensor diff --git a/doc/paddle/guides/05_inference_deployment/images/inference_ecosystem.png b/doc/paddle/guides/05_inference_deployment/images/inference_ecosystem.png new file mode 100644 index 00000000000..5f1800fa093 Binary files /dev/null and b/doc/paddle/guides/05_inference_deployment/images/inference_ecosystem.png differ diff --git a/doc/paddle/guides/05_inference_deployment/index_cn.rst b/doc/paddle/guides/05_inference_deployment/index_cn.rst index 3a9b202b570..c64a9e24f1a 100644 --- a/doc/paddle/guides/05_inference_deployment/index_cn.rst +++ b/doc/paddle/guides/05_inference_deployment/index_cn.rst @@ -1,12 +1,40 @@ ######## -预测部署 +推理部署 ######## -- `服务器端部署 `_ :介绍了如何在服务器端将模型部署上线 +飞桨推理产品简介 +================== -- `移动端部署 `_ :介绍了 PaddlePaddle 组织下的嵌入式平台深度学习框架Paddle-Lite -- `模型压缩 `_ :简要介绍了PaddleSlim模型压缩工具库的特点以及使用说明。 +作为飞桨生态重要的一部分,飞桨提供了多个推理产品,完整承接深度学习模型应用的最后一公里。 + +整体上分,推理产品主要包括如下子产品 + + +.. csv-table:: + :header: "名称", "英文表示", "适用场景" + :widths: 10, 10, 30 + + "飞桨原生推理库", "`Paddle Inference `_ ", "高性能服务器端、云端推理" + "飞桨服务化推理框架", "Paddle Serving", "自动服务、模型管理等高阶功能" + "飞桨轻量化推理引擎", "`Paddle Lite `_ ", "移动端、物联网等" + "飞桨前端推理引擎", "Paddle.js", "浏览器中推理、小程序等" + + +各产品在推理生态中的关系如下 + +.. image:: images/inference_ecosystem.png + +**用户使用飞桨推理产品的工作流** 如下 + +1. 获取一个飞桨的推理模型,其中有两种方法 + + 1. 利用飞桨训练得到一个推理模型 + 2. 用 X2Paddle 工具从第三方框架(比如 TensorFlow 或者 Caffe 等)产出的模型转化 + +2. (可选)对模型进行进一步优化, PaddleSlim 工具可以对模型进行压缩,量化,裁剪等工作,显著提升模型执行的速度性能,降低资源消耗 + +3. 将模型部署到具体的推理产品上 .. toctree:: :hidden: diff --git a/doc/paddle/guides/05_inference_deployment/inference/build_and_install_lib_cn.rst b/doc/paddle/guides/05_inference_deployment/inference/build_and_install_lib_cn.rst index 511b48ee94d..7917ea6088a 100644 --- a/doc/paddle/guides/05_inference_deployment/inference/build_and_install_lib_cn.rst +++ b/doc/paddle/guides/05_inference_deployment/inference/build_and_install_lib_cn.rst @@ -7,22 +7,23 @@ ------------- .. csv-table:: - :header: "版本说明", "预测库(1.8.5版本)", "预测库(2.0.0-rc1版本)", "预测库(develop版本)" + :header: "版本说明", "预测库(1.8.5版本)", "预测库(2.0.0版本)", "预测库(develop版本)" :widths: 3, 2, 2, 2 - "ubuntu14.04_cpu_avx_mkl_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" - "ubuntu14.04_cpu_avx_openblas_gcc482", "`fluid_inference.tgz `__", ,"`paddle_inference.tgz `__" - "ubuntu14.04_cpu_noavx_openblas_gcc482", "`fluid_inference.tgz `__", ,"`paddle_inference.tgz `__" - "ubuntu14.04_cuda9.0_cudnn7_avx_mkl_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" - "ubuntu14.04_cuda9.0_cudnn7_avx_openblas_gcc482", , "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" - "ubuntu14.04_cuda10.0_cudnn7_avx_mkl_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" + "ubuntu14.04_cpu_avx_mkl_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" + "ubuntu14.04_cpu_avx_openblas_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__","`paddle_inference.tgz `__" + "ubuntu14.04_cpu_noavx_openblas_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__","`paddle_inference.tgz `__" + "ubuntu14.04_cuda9.0_cudnn7_avx_mkl_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" + "ubuntu14.04_cuda9.0_cudnn7_avx_openblas_gcc482", , "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" + "ubuntu14.04_cuda10.0_cudnn7_avx_mkl_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" "ubuntu14.04_cuda10.1_cudnn7.6_avx_mkl_trt6_gcc482", "`fluid_inference.tgz `__", , - "ubuntu14.04_cuda10.1_cudnn7.6_avx_mkl_trt6_gcc82", , "`paddle_inference.tgz `__", - "ubuntu14.04_cuda10.2_cudnn8_avx_mkl_trt7_gcc82", , "`paddle_inference.tgz `__", - "ubuntu14.04_cuda11_cudnn8_avx_mkl_trt7_gcc82", , "`paddle_inference.tgz `__", - "nv_jetson_cuda10_cudnn7.6_trt6_nano(jetpack4.3, for Nano)", , "`paddle_inference.tar.gz `__", - "nv_jetson_cuda10_cudnn7.6_trt6_tx2(jetpack4.3, for TX2 series)", , "`paddle_inference.tar.gz `__", - "nv_jetson_cuda10_cudnn7.6_trt6_xavier(jetpack4.3, for AGX Xavier and Xavier NX)", , "`paddle_inference.tar.gz `__", + "ubuntu14.04_cuda10.1_cudnn7.6_avx_mkl_trt6_gcc82", , "`paddle_inference.tgz `__", + "ubuntu14.04_cuda10.2_cudnn8_avx_mkl_trt7_gcc82", , "`paddle_inference.tgz `__", + "ubuntu14.04_cuda11_cudnn8_avx_mkl_trt7_gcc82", , "`paddle_inference.tgz `__", + "nv_jetson_cuda10_cudnn7.6_trt6_all(jetpack4.3, for all Jetson devices)", , "`paddle_inference.tar.gz `__", + "nv_jetson_cuda10_cudnn7.6_trt6_nano(jetpack4.3, for Nano)", , "`paddle_inference.tar.gz `__", + "nv_jetson_cuda10_cudnn7.6_trt6_tx2(jetpack4.3, for TX2 series)", , "`paddle_inference.tar.gz `__", + "nv_jetson_cuda10_cudnn7.6_trt6_xavier(jetpack4.3, for AGX Xavier and Xavier NX)", , "`paddle_inference.tar.gz `__", 从源码编译 @@ -52,7 +53,7 @@ WITH_TENSORRT OFF 编译支持NVIDIA TensorRT的预 git clone https://github.com/paddlepaddle/Paddle cd Paddle # 建议使用git checkout切换到Paddle稳定的版本,如: - git checkout v1.8.5 + git checkout release/2.0 **note**: 如果您是多卡机器,建议安装NCCL;如果您是单卡机器则可以在编译时显示指定WITH_NCCL=OFF来跳过这一步。注意如果WITH_NCCL=ON,且没有安装NCCL,则编译会报错。 @@ -197,3 +198,4 @@ version.txt 中记录了该预测库的版本信息,包括Git Commit ID、使 + diff --git a/doc/paddle/guides/05_inference_deployment/inference/build_and_install_lib_en.rst b/doc/paddle/guides/05_inference_deployment/inference/build_and_install_lib_en.rst index 0b88efc53a2..acdf11c2a9b 100644 --- a/doc/paddle/guides/05_inference_deployment/inference/build_and_install_lib_en.rst +++ b/doc/paddle/guides/05_inference_deployment/inference/build_and_install_lib_en.rst @@ -7,22 +7,23 @@ Direct Download and Installation --------------------------------- .. csv-table:: c++ inference library list - :header: "version description", "inference library(1.8.5 version)", "inference library(2.0.0-rc1 version)", "inference library(develop version)" + :header: "version description", "inference library(1.8.5 version)", "inference library(2.0.0 version)", "inference library(develop version)" :widths: 3, 2, 2, 2 - "ubuntu14.04_cpu_avx_mkl_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" - "ubuntu14.04_cpu_avx_openblas_gcc482", "`fluid_inference.tgz `__", ,"`paddle_inference.tgz `__" - "ubuntu14.04_cpu_noavx_openblas_gcc482", "`fluid_inference.tgz `__", ,"`paddle_inference.tgz `__" - "ubuntu14.04_cuda9.0_cudnn7_avx_mkl_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" - "ubuntu14.04_cuda9.0_cudnn7_avx_openblas_gcc482", , "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" - "ubuntu14.04_cuda10.0_cudnn7_avx_mkl_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" + "ubuntu14.04_cpu_avx_mkl_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" + "ubuntu14.04_cpu_avx_openblas_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__","`paddle_inference.tgz `__" + "ubuntu14.04_cpu_noavx_openblas_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__","`paddle_inference.tgz `__" + "ubuntu14.04_cuda9.0_cudnn7_avx_mkl_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" + "ubuntu14.04_cuda9.0_cudnn7_avx_openblas_gcc482", , "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" + "ubuntu14.04_cuda10.0_cudnn7_avx_mkl_gcc482", "`fluid_inference.tgz `__", "`paddle_inference.tgz `__", "`paddle_inference.tgz `__" "ubuntu14.04_cuda10.1_cudnn7.6_avx_mkl_trt6_gcc482", "`fluid_inference.tgz `__", , - "ubuntu14.04_cuda10.1_cudnn7.6_avx_mkl_trt6_gcc82", , "`paddle_inference.tgz `__", - "ubuntu14.04_cuda10.2_cudnn8_avx_mkl_trt7_gcc82", , "`paddle_inference.tgz `__", - "ubuntu14.04_cuda11_cudnn8_avx_mkl_trt7_gcc82", , "`paddle_inference.tgz `__", - "nv_jetson_cuda10_cudnn7.6_trt6_nano(jetpack4.3, for Nano)", , "`paddle_inference.tar.gz `__", - "nv_jetson_cuda10_cudnn7.6_trt6_tx2(jetpack4.3, for TX2 series)", , "`paddle_inference.tar.gz `__", - "nv_jetson_cuda10_cudnn7.6_trt6_xavier(jetpack4.3, for AGX Xavier and Xavier NX)", , "`paddle_inference.tar.gz `__", + "ubuntu14.04_cuda10.1_cudnn7.6_avx_mkl_trt6_gcc82", , "`paddle_inference.tgz `__", + "ubuntu14.04_cuda10.2_cudnn8_avx_mkl_trt7_gcc82", , "`paddle_inference.tgz `__", + "ubuntu14.04_cuda11_cudnn8_avx_mkl_trt7_gcc82", , "`paddle_inference.tgz `__", + "nv_jetson_cuda10_cudnn7.6_trt6_all(jetpack4.3, for all Jetson devices)", , "`paddle_inference.tar.gz `__", + "nv_jetson_cuda10_cudnn7.6_trt6_nano(jetpack4.3, for Nano)", , "`paddle_inference.tar.gz `__", + "nv_jetson_cuda10_cudnn7.6_trt6_tx2(jetpack4.3, for TX2 series)", , "`paddle_inference.tar.gz `__", + "nv_jetson_cuda10_cudnn7.6_trt6_xavier(jetpack4.3, for AGX Xavier and Xavier NX)", , "`paddle_inference.tar.gz `__", Build from Source Code ----------------------- @@ -53,8 +54,8 @@ Firstly we pull the latest code from github. git clone https://github.com/paddlepaddle/Paddle cd Paddle - # Use git checkout to switch to stable versions such as v1.8.5 - git checkout v1.8.5 + # Use git checkout to switch to stable versions such as release/2.0 + git checkout release/2.0 **note**: If your environment is a multi-card machine, it is recommended to install nccl; otherwise, you can skip this step by specifying WITH_NCCL = OFF during compilation. Note that if WITH_NCCL = ON, and NCCL is not installed, the compiler will report an error. @@ -212,3 +213,4 @@ The version information of the inference library is recorded in version.txt, inc + diff --git a/doc/paddle/guides/05_inference_deployment/inference/windows_cpp_inference.md b/doc/paddle/guides/05_inference_deployment/inference/windows_cpp_inference.md index b375606c943..5976378a5f0 100644 --- a/doc/paddle/guides/05_inference_deployment/inference/windows_cpp_inference.md +++ b/doc/paddle/guides/05_inference_deployment/inference/windows_cpp_inference.md @@ -5,13 +5,13 @@ 直接下载安装 ------------- -| 版本说明 | 预测库(1.8.4版本) |预测库(2.0.0-rc1) | 编译器 | 构建工具 | cuDNN | CUDA | +| 版本说明 | 预测库(1.8.4版本) |预测库(2.0.0) | 编译器 | 构建工具 | cuDNN | CUDA | |:---------|:-------------------|:-------------------|:----------------|:--------|:-------|:-------| -| cpu_avx_mkl | [fluid_inference.zip](https://paddle-wheel.bj.bcebos.com/1.8.4/win-infer/mkl/cpu/fluid_inference_install_dir.zip) | [paddle_inference.zip](https://paddle-wheel.bj.bcebos.com/2.0.0-rc1/win-infer/mkl/cpu/paddle_inference_install_dir.zip) | MSVC 2015 update 3| CMake v3.16.0 | -| cpu_avx_openblas | [fluid_inference.zip](https://paddle-wheel.bj.bcebos.com/1.8.4/win-infer/open/cpu/fluid_inference_install_dir.zip) | [paddle_inference.zip](https://paddle-wheel.bj.bcebos.com/2.0.0-rc1%2Fwin-infer%2Fopen%2F%20cpu%2Fpaddle_inference_install_dir.zip) | MSVC 2015 update 3| CMake v3.16.0 | -| cuda9.0_cudnn7_avx_mkl | [fluid_inference.zip](https://paddle-wheel.bj.bcebos.com/1.8.4/win-infer/mkl/post97/fluid_inference_install_dir.zip) |[paddle_inference.zip](https://paddle-wheel.bj.bcebos.com/2.0.0-rc1/win-infer/mkl/post90/paddle_inference_install_dir.zip)| MSVC 2015 update 3 | CMake v3.16.0 | 7.3.1 | 9.0 | +| cpu_avx_mkl | [fluid_inference.zip](https://paddle-wheel.bj.bcebos.com/1.8.4/win-infer/mkl/cpu/fluid_inference_install_dir.zip) | [paddle_inference.zip](https://paddle-wheel.bj.bcebos.com/2.0.0/win-infer/mkl/cpu/paddle_inference_install_dir.zip) | MSVC 2015 update 3| CMake v3.16.0 | +| cpu_avx_openblas | [fluid_inference.zip](https://paddle-wheel.bj.bcebos.com/1.8.4/win-infer/open/cpu/fluid_inference_install_dir.zip) | [paddle_inference.zip](https://paddle-wheel.bj.bcebos.com/2.0.0/win-infer/open/cpu/paddle_inference_install_dir.zip) | MSVC 2015 update 3| CMake v3.16.0 | +| cuda9.0_cudnn7_avx_mkl | [fluid_inference.zip](https://paddle-wheel.bj.bcebos.com/1.8.4/win-infer/mkl/post97/fluid_inference_install_dir.zip) |[paddle_inference.zip](https://paddle-wheel.bj.bcebos.com/2.0.0/win-infer/mkl/post90/paddle_inference_install_dir.zip)| MSVC 2015 update 3 | CMake v3.16.0 | 7.3.1 | 9.0 | | cuda9.0_cudnn7_avx_openblas | [fluid_inference.zip](https://paddle-wheel.bj.bcebos.com/1.8.4/win-infer/open/post97/fluid_inference_install_dir.zip) || MSVC 2015 update 3 | CMake v3.16.0 | 7.3.1 | 9.0 | -| cuda10.0_cudnn7_avx_mkl | [fluid_inference.zip](https://paddle-wheel.bj.bcebos.com/1.8.4/win-infer/mkl/post107/fluid_inference_install_dir.zip) | [paddle_inference.zip](https://paddle-wheel.bj.bcebos.com/2.0.0-rc1%2Fwin-infer%2Fmkl%2F%20post100%2Fpaddle_inference_install_dir.zip) | MSVC 2015 update 3 | CMake v3.16.0 | 7.4.1 | 10.0 | +| cuda10.0_cudnn7_avx_mkl | [fluid_inference.zip](https://paddle-wheel.bj.bcebos.com/1.8.4/win-infer/mkl/post107/fluid_inference_install_dir.zip) | [paddle_inference.zip](https://paddle-wheel.bj.bcebos.com/2.0.0/win-infer/mkl/post100/paddle_inference_install_dir.zip) | MSVC 2015 update 3 | CMake v3.16.0 | 7.4.1 | 10.0 | ### 硬件环境 diff --git a/doc/paddle/guides/06_distributed_training/cluster_quick_start_cn.rst b/doc/paddle/guides/06_distributed_training/cluster_quick_start_cn.rst index fbef8c48da7..67fa6014498 100644 --- a/doc/paddle/guides/06_distributed_training/cluster_quick_start_cn.rst +++ b/doc/paddle/guides/06_distributed_training/cluster_quick_start_cn.rst @@ -6,7 +6,7 @@ 使用Fleet API进行分布式训练 --------------------------- -从Paddle Fluid `Release 1.5.1 `_ 开始,官方推荐使用Fleet API进行分布式训练。 +从PaddlePaddle `Release 1.5.1 `_ 开始,官方推荐使用Fleet API进行分布式训练。 准备条件 @@ -14,7 +14,7 @@ * - [x] 成功安装Paddle Fluid,如果尚未安装,请参考 `快速开始 `_ + [x] 成功安装PaddlePaddle,如果尚未安装,请参考 `快速开始 `_ * [x] 学会最基本的单机训练方法,请参考 `单机训练 `_ 中描述的单机训练,进行学习 diff --git a/doc/paddle/guides/06_distributed_training/cluster_quick_start_en.rst b/doc/paddle/guides/06_distributed_training/cluster_quick_start_en.rst index ea7be029706..daa7a088788 100644 --- a/doc/paddle/guides/06_distributed_training/cluster_quick_start_en.rst +++ b/doc/paddle/guides/06_distributed_training/cluster_quick_start_en.rst @@ -4,7 +4,7 @@ Quick start for distributed training Distributed training with Fleet API ----------------------------------- -Since Paddle Fluid `Release +Since PaddlePaddle `Release 1.5.1 `__, it is officially recommended to use the Fleet API for distributed training. @@ -12,7 +12,7 @@ training. Preparation ~~~~~~~~~~~ -- [x] Install Paddle Fluid. If not already installed, please refer to +- [x] Install PaddlePaddle. If not already installed, please refer to `Beginner’s Guide `__. - [x] Master the most basic single node training method. Please refer diff --git a/doc/paddle/guides/07_new_op/custom_op.md b/doc/paddle/guides/07_new_op/custom_op.md index 250be98d44f..5074b12a6de 100644 --- a/doc/paddle/guides/07_new_op/custom_op.md +++ b/doc/paddle/guides/07_new_op/custom_op.md @@ -2,7 +2,7 @@ -通常,如果PaddlePaddle的Operator(OP)库中没有您所需要的操作,建议先尝试使用已有的OP组合,如果无法组合出您需要的操作,可以尝试使用`fluid.layers.py_func`,也可以按照这篇教程自定义C++ OP。当然,如果用若干OP组合出来的OP性能无法满足您的要求,也可以自定义C++ OP。 +通常,如果PaddlePaddle的Operator(OP)库中没有您所需要的操作,建议先尝试使用已有的OP组合,如果无法组合出您需要的操作,可以尝试使用`paddle.static.py_func`,也可以按照这篇教程自定义C++ OP。当然,如果用若干OP组合出来的OP性能无法满足您的要求,也可以自定义C++ OP。 自定义OP需要以下几个步骤: @@ -279,7 +279,7 @@ g++ relu_op.cc relu_op.cu.o -o relu2_op.so -shared -fPIC -std=c++11 -O3 -DPADDLE ## 封装Python Layer接口 -需要使用 `fluid.load_op_library` 接口调用加载动态库,使得PaddlePaddle的主进程中可以使用用户自定义的OP。 +需要使用 `paddle.incubate.load_op_library` 接口调用加载动态库,使得PaddlePaddle的主进程中可以使用用户自定义的OP。 ``` # custom_op.py @@ -300,7 +300,7 @@ def relu2(x, name=None): 注意点: -1. 一个动态库只需使用`fluid.load_op_library`在`paddle.fluid` import之后加载一次即可。 +1. 一个动态库只需使用`paddle.incubate.load_op_library`在`paddle` import之后加载一次即可。 2. Python接口的封装和PaddlePaddle框架内部的封装相同,更多的示例也可以阅读源码中 `python/paddle/fluid/layers/nn.py`的代码示例。 ## 单测测试 diff --git a/doc/paddle/guides/07_new_op/new_op.md b/doc/paddle/guides/07_new_op/new_op.md index 7b221635384..47a297f0f91 100644 --- a/doc/paddle/guides/07_new_op/new_op.md +++ b/doc/paddle/guides/07_new_op/new_op.md @@ -134,7 +134,7 @@ or not. But the output only shares the LoD information with input $X$. 上面的代码在`MulOp`中添加两个输入`X`和`Y`,添加了一个输出`Out`,以及`use_mkldnn`等属性,并解释了各自含义,命名请遵守[命名规范](https://github.com/PaddlePaddle/FluidDoc/blob/release/1.2/doc/fluid/dev/name_convention.md)。 ### 定义GradOpMaker类 -通常情况下,大部分Op只有一个对应的反向Op,每个Op的会有一个对应的`GradOpMaker`。为方便代码编写,fluid为只有提供了一个模板类[`SingleGradOpMaker`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/grad_op_desc_maker.h#L188)。`MulOp`的`GradOpMaker`需要继承这个模板类,并在`Apply()`方法中设置反向Op的输入、输出和属性。此外,fluid还提供了一个默认的`GradOpMaker`, +通常情况下,大部分Op只有一个对应的反向Op,每个Op的会有一个对应的`GradOpMaker`。为方便代码编写,paddle为只有一个反向的Op提供了一个模板类[`SingleGradOpMaker`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/grad_op_desc_maker.h#L188)。`MulOp`的`GradOpMaker`需要继承这个模板类,并在`Apply()`方法中设置反向Op的输入、输出和属性。此外,paddle还提供了一个默认的`GradOpMaker`, [`DefaultGradOpMaker`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/framework/grad_op_desc_maker.h#L227),该模板类会使用前向Op的全部输入(`Input`)输出(`Output`)以及输出变量所对应的梯度(`Output@Grad`)作为反向Op的输入,将前向Op的输入变量所对应的的梯度(`Input@Grad`)作为输出。 **注意:** @@ -423,7 +423,7 @@ y_dim[i] = x_dim[i] + z_dim[i] Op的输入和输出可分别通过`ExecutionContext::Input()`和`ExecutionContext::Output()`获得。 -**注意:** 若op的输入/输出的变量类型是`LoDTensor`(fluid默认所有的`Tensor`默认都是`LoDTensor`类型),请写成`ExecutionContext::Input()`和`ExecutionContext::Output()`,不要写`ExecutionContext::Input()`和`ExecutionContext::Output()`。因为若实际的变量类型为`SelectedRows`,`Input()`和`Output()`方法会将`SelectedRows`类型特化为`Tensor`,导致潜在的错误。 +**注意:** 若op的输入/输出的变量类型是`LoDTensor`(paddle默认所有的`Tensor`默认都是`LoDTensor`类型),请写成`ExecutionContext::Input()`和`ExecutionContext::Output()`,不要写`ExecutionContext::Input()`和`ExecutionContext::Output()`。因为若实际的变量类型为`SelectedRows`,`Input()`和`Output()`方法会将`SelectedRows`类型特化为`Tensor`,导致潜在的错误。 下面是 `MulKernel` `Compute`的实现: @@ -518,12 +518,27 @@ class MulKernel : public framework::OpKernel { ### 编译 -在`build/paddle/fluid/operators`目录下,运行下面命令可以进行编译: +详细的编译环境准备和执行流程可参考[从源码编译](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/install/compile/fromsource.html),下面简单介绍几个主要步骤。 +在`Paddle`代码目录下创建并切换到build目录: ``` -make mul_op +mkdir build && cd build ``` +执行`cmake`命令,具体选项可参考[从源码编译](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/install/compile/fromsource.html)中的介绍,下面的命令为编译Python3.5,GPU版本,带测试,Release版本的Paddle。 + +``` +cmake .. -DPY_VERSION=3.5 -DWITH_GPU=ON -DWITH_TESTING=ON -DCMAKE_BUILD_TYPE=Release +``` + +在`build`目录下,运行下面命令可以进行编译整个paddle: + +``` +make -j$(nproc) +``` +**注意:** +新增op后请重新执行`cmake`命令,然后再执行`make`命令编译paddle。 + ## 绑定Python 系统会对新增的op自动绑定Python,并链接到生成的lib库中。 @@ -611,13 +626,15 @@ Op单元测试继承自`OpTest`。各项具体的单元测试在`TestMulOp`里 `python/paddle/fluid/tests/unittests/` 目录下新增的 `test_*.py` 单元测试会被自动加入工程进行编译。 -请注意,**运行单元测试测时需要编译整个工程**,并且编译时需要打开`WITH_TESTING`, 即`cmake -DWITH_TESTING=ON ..`。编译成功后,执行下面的命令来运行单元测试: +请注意,**运行单元测试测时需要编译整个工程**,并且编译时需要打开`WITH_TESTING`。 + +参考上述[编译](#编译)过程,编译成功后,在`build`目录下执行下面的命令来运行单元测试: ```bash make test ARGS="-R test_mul_op -V" ``` -或者: +或者执行: ```bash ctest -R test_mul_op diff --git a/doc/paddle/guides/07_new_op/new_python_op.md b/doc/paddle/guides/07_new_op/new_python_op.md index 06dfa94e899..9a6e3dc3c86 100644 --- a/doc/paddle/guides/07_new_op/new_python_op.md +++ b/doc/paddle/guides/07_new_op/new_python_op.md @@ -1,6 +1,6 @@ # 如何写新的Python OP -PaddlePaddle Fluid通过 `py_func` 接口支持在Python端自定义OP。 py_func的设计原理在于Paddle中的LodTensor可以与numpy数组可以方便的互相转换,从而可以使用Python中的numpy API来自定义一个Python OP。 +Paddle 通过 `py_func` 接口支持在Python端自定义OP。 py_func的设计原理在于Paddle中的Tensor可以与numpy数组可以方便的互相转换,从而可以使用Python中的numpy API来自定义一个Python OP。 ## py_func接口概述 @@ -14,12 +14,12 @@ def py_func(func, x, out, backward_func=None, skip_vars_in_backward_input=None): 其中, -- `x` 是Python Op的输入变量,可以是单个 `Variable` | `tuple[Variable]` | `list[Variable]` 。多个Variable以tuple[Variable]或list[Variale]的形式传入,其中Variable为LoDTensor或Tenosr。 -- `out` 是Python Op的输出变量,可以是单个 `Variable` | `tuple[Variable]` | `list[Variable]` 。其中Variable既可以为LoDTensor或Tensor,也可以为numpy数组。 -- `func` 是Python Op的前向函数。在运行网络前向时,框架会调用 `out = func(*x)` ,根据前向输入 `x` 和前向函数 `func` 计算前向输出 `out`。在 ``func`` 建议先主动将LoDTensor转换为numpy数组,方便灵活的使用numpy相关的操作,如果未转换成numpy,则可能某些操作无法兼容。 +- `x` 是Python Op的输入变量,可以是单个 `Tensor` | `tuple[Tensor]` | `list[Tensor]` 。多个Tensor以tuple[Tensor]或list[Tensor]的形式传入。 +- `out` 是Python Op的输出变量,可以是单个 `Tensor` | `tuple[Tensor]` | `list[Tensor]`,也可以是`Numpy Array `。 +- `func` 是Python Op的前向函数。在运行网络前向时,框架会调用 `out = func(*x)` ,根据前向输入 `x` 和前向函数 `func` 计算前向输出 `out`。在 ``func`` 建议先主动将Tensor转换为numpy数组,方便灵活的使用numpy相关的操作,如果未转换成numpy,则可能某些操作无法兼容。 - `backward_func` 是Python Op的反向函数。若 `backward_func` 为 `None` ,则该Python Op没有反向计算逻辑; 若 `backward_func` 不为 `None`,则框架会在运行网路反向时调用 `backward_func` 计算前向输入 `x` 的梯度。 -- `skip_vars_in_backward_input` 为反向函数 `backward_func` 中不需要的输入,可以是单个 `Variable` | `tuple[Variable]` | `list[Variable]` 。 +- `skip_vars_in_backward_input` 为反向函数 `backward_func` 中不需要的输入,可以是单个 `Tensor` | `tuple[Tensor]` | `list[Tensor]` 。 ## 如何使用py_func编写Python Op @@ -46,7 +46,7 @@ def backward_func(x_1, x_2, ..., x_n, y_1, y_2, ..., y_m, dy_1, dy_2, ..., dy_m) 若反向函数不需要某些前向输入变量或前向输出变量,可设置 `skip_vars_in_backward_input` 进行排除(步骤三中会叙述具体的排除方法)。 -注:,x_1, ..., x_n为输入的多个LodTensor,请以tuple(Variable)或list[Variable]的形式在py_func中传入。建议先主动将LodTensor通过numpy.array转换为数组,否则Python与numpy中的某些操作可能无法兼容使用在LodTensor上。 +注:,x_1, ..., x_n为输入的多个Tensor,请以tuple(Tensor)或list[Tensor]的形式在py_func中传入。建议先主动将Tensor通过numpy.array转换为数组,否则Python与numpy中的某些操作可能无法兼容使用在Tensor上。 此处我们利用numpy的相关API完成tanh的前向函数和反向函数编写。下面给出多个前向与反向函数定义的示例: @@ -55,12 +55,12 @@ import numpy as np # 前向函数1:模拟tanh激活函数 def tanh(x): - # 可以直接将LodTensor作为np.tanh的输入参数 + # 可以直接将Tensor作为np.tanh的输入参数 return np.tanh(x) -# 前向函数2:将两个2-D LodTenosr相加,输入多个LodTensor以list[Variable]或tuple(Variable)形式 +# 前向函数2:将两个2-D Tenosr相加,输入多个Tensor以list[Tensor]或tuple(Tensor)形式 def element_wise_add(x, y): - # 必须先手动将LodTensor转换为numpy数组,否则无法支持numpy的shape操作 + # 必须先手动将Tensor转换为numpy数组,否则无法支持numpy的shape操作 x = np.array(x) y = np.array(y) @@ -76,17 +76,17 @@ def element_wise_add(x, y): # 前向函数3:可用于调试正在运行的网络(打印值) def debug_func(x): - # 可以直接将LodTensor作为print的输入参数 + # 可以直接将Tensor作为print的输入参数 print(x) # 前向函数1对应的反向函数,默认的输入顺序为:x、out、out的梯度 def tanh_grad(x, y, dy): - # 必须先手动将LodTensor转换为numpy数组,否则"+/-"等操作无法使用 + # 必须先手动将Tensor转换为numpy数组,否则"+/-"等操作无法使用 return np.array(dy) * (1 - np.square(np.array(y))) ``` -注意,前向函数和反向函数的输入均是 `LoDTensor` 类型,输出可以是Numpy Array或 `LoDTensor`。 -由于 `LoDTensor` 实现了Python的buffer protocol协议,因此即可通过 `numpy.array` 直接将 `LoDTensor` 转换为numpy Array来进行操作,也可直接将 `LoDTensor` 作为numpy函数的输入参数。但建议先主动转换为numpy Array,则可以任意的使用python与numpy中的所有操作(例如"numpy array的+/-/shape")。 +注意,前向函数和反向函数的输入均是 `Tensor` 类型,输出可以是Numpy Array或 `Tensor`。 +由于 `Tensor` 实现了Python的buffer protocol协议,因此即可通过 `numpy.array` 直接将 `Tensor` 转换为numpy Array来进行操作,也可直接将 `Tensor` 作为numpy函数的输入参数。但建议先主动转换为numpy Array,则可以任意的使用python与numpy中的所有操作(例如"numpy array的+/-/shape")。 tanh的反向函数不需要前向输入x,因此我们可定义一个不需要前向输入x的反向函数,并在后续通过 `skip_vars_in_backward_input` 进行排除 : @@ -100,15 +100,17 @@ def tanh_grad_without_x(y, dy): 我们需调用 `Program.current_block().create_var` 创建前向输出变量。在创建前向输出变量时,必须指明变量的名称name、数据类型dtype和维度shape。 ```Python -import paddle.fluid as fluid +import paddle + +paddle.enable_static() def create_tmp_var(program, name, dtype, shape): return program.current_block().create_var(name=name, dtype=dtype, shape=shape) -in_var = fluid.layers.data(name='input', dtype='float32', shape=[-1, 28, 28]) +in_var = paddle.static.data(name='input', dtype='float32', shape=[-1, 28, 28]) # 手动创建前向输出变量 -out_var = create_tmp_var(fluid.default_main_program(), name='output', dtype='float32', shape=[-1, 28, 28]) +out_var = create_tmp_var(paddle.static.default_main_program(), name='output', dtype='float32', shape=[-1, 28, 28]) ``` - 第三步:调用 `py_func` 组建网络 @@ -116,13 +118,13 @@ out_var = create_tmp_var(fluid.default_main_program(), name='output', dtype='flo `py_func` 的调用方式为: ```Python -fluid.layers.py_func(func=tanh, x=in_var, out=out_var, backward_func=tanh_grad) +paddle.static.nn.py_func(func=tanh, x=in_var, out=out_var, backward_func=tanh_grad) ``` 若我们不希望在反向函数输入参数中出现前向输入,则可使用 `skip_vars_in_backward_input` 进行排查,简化反向函数的参数列表。 ```Python -fluid.layers.py_func(func=tanh, x=in_var, out=out_var, backward_func=tanh_grad_without_x, +paddle.static.nn.py_func(func=tanh, x=in_var, out=out_var, backward_func=tanh_grad_without_x, skip_vars_in_backward_input=in_var) ``` @@ -131,8 +133,7 @@ fluid.layers.py_func(func=tanh, x=in_var, out=out_var, backward_func=tanh_grad_w ## 注意事项 -- `py_func` 的前向函数和反向函数内部不应调用 `fluid.layers.xxx` ,因为前向函数和反向函数是在网络运行时调用的,且输入参数均为C++端的 `LoDTensor` ; - 而 `fluid.layers.xxx` 是在组建网络的阶段调用的,且输入参数为Python端的 `Variable` 。 +- `py_func` 的前向函数和反向函数内部不应调用 `paddle.xx`组网接口 ,因为前向函数和反向函数是在网络运行时调用的,而 `paddle.xx` 是在组建网络的阶段调用 。 - `skip_vars_in_backward_input` 只能跳过前向输入变量和前向输出变量,不能跳过前向输出的梯度。 diff --git a/doc/paddle/guides/07_new_op/op_notes.md b/doc/paddle/guides/07_new_op/op_notes.md index ddae81c3987..3086f27e0d9 100644 --- a/doc/paddle/guides/07_new_op/op_notes.md +++ b/doc/paddle/guides/07_new_op/op_notes.md @@ -1,12 +1,12 @@ # C++ OP相关注意事项 -## Fluid中Op的构建逻辑 -### 1.Fluid中Op的构建逻辑 -Fluid中所有的Op都继承自`OperatorBase`,且所有的Op都是无状态的,每个Op包含的成员变量只有四个:type、inputs、outputs、attribute。 +## Paddle中Op的构建逻辑 +### 1.Paddle中Op的构建逻辑 +Paddle中所有的Op都继承自`OperatorBase`,且所有的Op都是无状态的,每个Op包含的成员变量只有四个:type、inputs、outputs、attribute。 Op的核心方法是Run,Run方法需要两方面的资源:数据资源和计算资源,这两个资源分别通过`Scope`和`Place`获取。框架内部有一个全局的`DeviceContextPool`,用来记录`Place`和`DeviceContext`之间的对应的关系,即每个`Place`有且仅有一个`DeviceContext`与之对应,`DeviceContext`中存放了当前设备的计算资源。比如对于GPU,这些资源包括`cudnn_handle`、`cublas_handle`、`stream`等,**Op内部所有的计算(数据拷贝和CUDA Kernel等)都必须在`DeviceContext`中进行**。 -Fluid框架的设计理念是可以在多种设备及第三方库上运行,有些Op的实现可能会因为设备或者第三方库的不同而不同。为此,Fluid引入了OpKernel的方式,即一个Op可以有多个OpKernel,这类Op继承自`OperatorWithKernel`,这类Op的代表是conv_op,conv_op的OpKernel有:`GemmConvKernel`、`CUDNNConvOpKernel`、`ConvMKLDNNOpKernel`,且每个OpKernel都有double和float两种数据类型。不需要OpKernel的代表有`WhileOp`等。 +Paddle框架的设计理念是可以在多种设备及第三方库上运行,有些Op的实现可能会因为设备或者第三方库的不同而不同。为此,Paddle引入了OpKernel的方式,即一个Op可以有多个OpKernel,这类Op继承自`OperatorWithKernel`,这类Op的代表是conv_op,conv_op的OpKernel有:`GemmConvKernel`、`CUDNNConvOpKernel`、`ConvMKLDNNOpKernel`,且每个OpKernel都有double和float两种数据类型。不需要OpKernel的代表有`WhileOp`等。 Operator继承关系图: ![op_inheritance_relation_diagram](./op_inheritance_relation_diagram.png) @@ -97,7 +97,7 @@ Operator继承关系图: ## 写Op注意事项 ### 1.Op可以支持输入输出类型 -Fluid的Op的输入输出都是`Variable`,从设计上讲,`Variable`中可以存放任意类型,Op的输入输出`Variable`可能是是任意类型,通常情况下`Variable`中存放的是`LoDTensor`、`SelectedRows`。 +Paddle的Op的输入输出都是`Variable`,从设计上讲,`Variable`中可以存放任意类型,Op的输入输出`Variable`可能是是任意类型,通常情况下`Variable`中存放的是`LoDTensor`、`SelectedRows`。 **注意:** @@ -159,9 +159,9 @@ ShareDataWith的功能是使两个Tensor共享底层buffer,在调用这个操 ### 8.显存优化 #### 8.1 为可原位计算的Op注册Inplace -有些Op的计算逻辑中,输出可以复用输入的显存空间,也可称为原位计算。例如[`reshape_op`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/reshape_op.cc)中,输出`Out`可以复用输入`X`的显存空间,因为该Op的计算逻辑不会改变`X`的实际数据,只是修改它的shape,输出和输入复用同一块显存空间不影响结果。对于这类OP,可以注册`Inlace`,从而让框架在运行时自动地进行显存优化。 +有些Op的计算逻辑中,输出可以复用输入的显存空间,也可称为原位计算。例如[reshape_op](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/reshape_op.cc)中,输出`Out`可以复用输入`X`的显存空间,因为该Op的计算逻辑不会改变`X`的实际数据,只是修改它的shape,输出和输入复用同一块显存空间不影响结果。对于这类OP,可以注册`Inlace`,从而让框架在运行时自动地进行显存优化。 -fluid提供了`DECLARE_INPLACE_OP_INFERER`宏用于注册`Inplace`,该宏第一个参数是一个类名,如`ReshapeOpInplaceInToOut`;第二个参数是一对复用的输入输出,以`{"X", "Out"}`的形式给出。在`REGISTER_OPERATOR`时, +Paddle提供了`DECLARE_INPLACE_OP_INFERER`宏用于注册`Inplace`,该宏第一个参数是一个类名,如`ReshapeOpInplaceInToOut`;第二个参数是一对复用的输入输出,以`{"X", "Out"}`的形式给出。在`REGISTER_OPERATOR`时, 可以将类名传传入,从而为该Op注册`Inplace`。 ``` @@ -179,7 +179,7 @@ REGISTER_OPERATOR( 所以在写注册反向Op时需要注意以下几点: -- Fluid提供的`DefaultGradOpMaker`,默认会将前向op的所有输入(`Input`)、输出(`Output`)以及输出变量所对应的梯度(`Output@Grad`)作为反向Op的输入,将前向Op输入所对应的梯度(`Input@Grad`)作为反向Op的输出。所以在使用`DefaultGradOpMaker`时需要考虑是否有些变量在计算中不被用到。 +- Paddle提供的`DefaultGradOpMaker`,默认会将前向op的所有输入(`Input`)、输出(`Output`)以及输出变量所对应的梯度(`Output@Grad`)作为反向Op的输入,将前向Op输入所对应的梯度(`Input@Grad`)作为反向Op的输出。所以在使用`DefaultGradOpMaker`时需要考虑是否有些变量在计算中不被用到。 - 如果`DefaultGradOpMaker`不能够满足需求,需要用户自己手动构建`GradOpMaker`,具体实现请参考[相关文档](new_op.html#gradopmaker); - 如果有些反向Op需要依赖前向Op的输入或输出变量的的Shape或LoD,但不依赖于变量中Tensor的Buffer,且不能根据其他变量推断出该Shape和LoD,则可以通过`DECLARE_NO_NEED_BUFFER_VARS_INFERER`接口对该变量(以下称该变量为`X`)在反向Op中进行注册`NoNeedBufferVars`。**一旦注册了`NoNeedBufferVars`,反向op中就不能读写该变量对应的Tensor中的buffer,只能调用Tensor的dims()和lod()方法,同时,反向Op中的`GetExpectedKernelType()`必须要重写,并且`GetExpectedKernelType()`中不能访问`X`变量中Tensor的type()方法**。比如在`SliceOpGrad`中只会用到`Input`中变量的Shape信息,所以需要为对`Input`在`SliceOpGrad`上进行注册: ``` @@ -266,7 +266,7 @@ The following device operations are asynchronous with respect to the host: ### 10. LoD 在 Op 内部的传导规范 -[LoD](https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/fluid/design/concepts/lod_tensor.md) 是 Paddle Fluid 框架用来表示变长序列数据的属性,除了仅支持输入是 padding data 的 Op 外,所有 Op 的实现都要考虑 LoD 的传导问题。 +[LoD](https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/fluid/design/concepts/lod_tensor.md) 是 Paddle 框架用来表示变长序列数据的属性,除了仅支持输入是 padding data 的 Op 外,所有 Op 的实现都要考虑 LoD 的传导问题。 根据 OP 的计算过程中是否用到 LoD,我们可以将涉及到 LoD 传导问题的 OP 分为两类: LoD-Transparent 与 LoD-Based。 @@ -333,7 +333,7 @@ Op的计算速度与输入的数据量有关,对于某些Op可以根据输入 目前发现cudnn中的卷积操作、cudnn中的MaxPooling、CUDA中CudaAtomicXX、ParallelExecutor的Reduce模式下参数梯度的聚合等操作运行结果是非确定的。 -为此Fluid中添加了一些FLAGS,比如使用FLAGS_cudnn_deterministic来强制cudnn使用确定性算法、FLAGS_cpu_deterministic强制CPU端的计算使用确定性方法。 +为此Paddle中添加了一些FLAGS,比如使用FLAGS_cudnn_deterministic来强制cudnn使用确定性算法、FLAGS_cpu_deterministic强制CPU端的计算使用确定性方法。 ### 2.WITH_FAST_MATH的开与关 如果WITH_FAST_MATH是ON,NVCC在编译Paddle和Egien的时候会使用--use_fast_math,这样可能会使CUDA中的一些操作在损失一定精度的情况下变快,比如log、exp、tanh等,但也会使一些操作的计算结果是错的,比如pow操作,具体原因请查看[torch/DEPRECEATED-torch7-distro#132](https://github.com/torch/DEPRECEATED-torch7-distro/issues/132)。 @@ -348,7 +348,7 @@ Enforce提示信息不能为空,并且需要写明,因为报错信息可以 **注意:**在merge到develop分支之前一定进行公式预览。可参考[dynamic_lstmp](../../../api_cn/layers_cn/nn_cn.html#dynamic-lstmp)。 ### 3.Op变量名的命名要规范 -在定义Op时,Op的输入输出以及属性的命名需要符合规范,具体命名规则请参考:[`name_convention`](https://github.com/PaddlePaddle/FluidDoc/blob/release/1.2/doc/fluid/dev/name_convention.md)。 +在定义Op时,Op的输入输出以及属性的命名需要符合规范,具体命名规则请参考:[name_convention](https://github.com/PaddlePaddle/FluidDoc/blob/release/1.2/doc/fluid/dev/name_convention.md)。 ### 4.Python端Op接口中参数的顺序 Python API中参数的顺序一般按照重要性来排,以fc为例: diff --git a/doc/paddle/guides/09_others_information/api_mapping_cn.rst b/doc/paddle/guides/09_others_information/api_mapping_cn.rst index c284373a4a9..8698c15a075 100644 --- a/doc/paddle/guides/09_others_information/api_mapping_cn.rst +++ b/doc/paddle/guides/09_others_information/api_mapping_cn.rst @@ -3,343 +3,338 @@ 飞桨框架API映射表 ===================== -本文档基于PaddlePaddle v1.X 梳理了常用API与PaddlePaddle v2.0RC1对应关系。可根据对应关系,快速熟悉PaddlePaddle 2.0RC1的接口使用。 +本文档基于PaddlePaddle v1.X 梳理了常用API与PaddlePaddle v2.0对应关系。可根据对应关系,快速熟悉PaddlePaddle 2.0的接口使用。 .. csv-table:: - :header: "序号", "PaddlePaddle 1.X API", "PaddlePaddle 2.0RC1 API" + :header: "序号", "PaddlePaddle 1.X API", "PaddlePaddle 2.0 API" :widths: 1, 8, 8 - "0", "`paddle.fluid.BuildStrategy `_ ", "`paddle.static.BuildStrategy `_" - "1", "`paddle.fluid.CompiledProgram `_ ", "`paddle.static.CompiledProgram `_" - "2", "`paddle.fluid.cpu_places `_ ", "`paddle.static.cpu_places `_" - "3", "`paddle.fluid.CPUPlace `_ ", "`paddle.CPUPlace `_" - "4", "`paddle.fluid.cuda_places `_ ", "`paddle.static.cuda_places `_" - "5", "`paddle.fluid.CUDAPinnedPlace `_ ", "`paddle.CUDAPinnedPlace `_" - "6", "`paddle.fluid.CUDAPlace `_ ", "`paddle.CUDAPlace `_" - "7", "`paddle.fluid.default_main_program `_ ", "`paddle.static.default_main_program `_" - "8", "`paddle.fluid.default_startup_program `_ ", "`paddle.static.default_startup_program `_" - "9", "`paddle.fluid.disable_dygraph `_ ", "`paddle.enable_static `_" - "10", "`paddle.fluid.embedding `_ ", "`paddle.nn.functional.embedding(动态图) `_, `paddle.static.nn.embedding(静态图) `_" - "11", "`paddle.fluid.enable_dygraph `_ ", "`paddle.disable_static `_" - "12", "`paddle.fluid.enable_imperative `_ ", "`paddle.disable_static `_" - "13", "`paddle.fluid.ExecutionStrategy `_ ", "`paddle.static.ExecutionStrategy `_" - "14", "`paddle.fluid.Executor `_ ", "`paddle.static.Executor `_" - "15", "`paddle.fluid.global_scope `_ ", "`paddle.static.global_scope `_" - "16", "`paddle.fluid.gradients `_ ", "`paddle.static.gradients `_" - "17", "`paddle.fluid.in_dygraph_mode `_ ", "`paddle.in_dynamic_mode `_" - "18", "`paddle.fluid.is_compiled_with_cuda `_ ", "`paddle.is_compiled_with_cuda `_" - "19", "`paddle.fluid.load `_ ", "`paddle.static.load `_" - "20", "`paddle.fluid.load_op_library `_ ", "`paddle.utils.load_op_library `_" - "21", "`paddle.fluid.name_scope `_ ", "`paddle.static.name_scope `_" - "22", "`paddle.fluid.one_hot `_ ", "`paddle.nn.functional.one_hot `_" - "23", "`paddle.fluid.ParallelExecutor `_ ", "`paddle.static.ParallelExecutor `_" - "24", "`paddle.fluid.ParamAttr `_ ", "`paddle.ParamAttr `_" - "25", "`paddle.fluid.Program `_ ", "`paddle.static.Program `_" - "26", "`paddle.fluid.program_guard `_ ", "`paddle.static.program_guard `_" - "27", "`paddle.fluid.require_version `_ ", "`paddle.utils.require_version `_" - "28", "`paddle.fluid.save `_ ", "`paddle.save `_ " - "29", "`paddle.fluid.scope_guard `_ ", "`paddle.static.scope_guard `_" - "30", "`paddle.fluid.Variable `_ ", "`paddle.static.Variable `_" - "31", "`paddle.fluid.WeightNormParamAttr `_ ", "`paddle.static.WeightNormParamAttr `_" - "32", "`paddle.fluid.backward.append_backward `_ ", "`paddle.static.append_backward `_" - "33", "`paddle.fluid.backward.gradients `_ ", "`paddle.static.gradients `_" - "34", "`paddle.fluid.clip.GradientClipByGlobalNorm `_ ", "`paddle.nn.ClipGradByGlobalNorm `_" - "35", "`paddle.fluid.clip.GradientClipByNorm `_ ", "`paddle.nn.ClipGradByNorm `_" - "36", "`paddle.fluid.clip.GradientClipByValue `_ ", "`paddle.nn.ClipGradByValue `_" - "37", "`paddle.fluid.dataset.InMemoryDataset `_ ", "`paddle.distributed.InMemoryDataset `_" - "38", "`paddle.fluid.dataset.QueueDataset `_ ", "`paddle.distributed.QueueDataset `_" - "39", "`paddle.fluid.dygraph.BatchNorm `_ ", "`paddle.nn.BatchNorm1D `_, `paddle.nn.BatchNorm2D `_, `paddle.nn.BatchNorm3D `_" - "40", "`paddle.fluid.dygraph.BCELoss `_ ", "`paddle.nn.BCELoss `_" - "41", "`paddle.fluid.dygraph.BilinearTensorProduct `_ ", "`paddle.nn.Bilinear `_" - "42", "`paddle.fluid.dygraph.Conv2D `_ ", "`paddle.nn.Conv2D `_" - "43", "`paddle.fluid.dygraph.Conv2DTranspose `_ ", "`paddle.nn.Conv2DTranspose `_" - "44", "`paddle.fluid.dygraph.Conv3D `_ ", "`paddle.nn.Conv3D `_" - "45", "`paddle.fluid.dygraph.Conv3DTranspose `_ ", "`paddle.nn.Conv3DTranspose `_" - "46", "`paddle.fluid.dygraph.CosineDecay `_ ", "`paddle.optimizer.lr.CosineAnnealingDecay `_" - "47", "`paddle.fluid.dygraph.DataParallel `_ ", "`paddle.DataParallel `_" - "48", "`paddle.fluid.dygraph.disable_dygraph `_ ", "`paddle.enable_static `_" - "49", "`paddle.fluid.dygraph.Dropout `_ ", "`paddle.nn.Dropout `_, `paddle.nn.Dropout2D `_, `paddle.nn.Dropout3D `_" - "50", "`paddle.fluid.dygraph.Embedding `_ ", "`paddle.nn.Embedding `_" - "51", "`paddle.fluid.dygraph.enable_dygraph `_ ", "`paddle.disable_static `_" - "52", "`paddle.fluid.dygraph.enable_imperative `_ ", "`paddle.disable_static `_" - "53", "`paddle.fluid.dygraph.grad `_ ", "`paddle.grad `_" - "54", "`paddle.fluid.dygraph.GroupNorm `_ ", "`paddle.nn.GroupNorm `_" - "55", "`paddle.fluid.dygraph.InstanceNorm `_ ", "`paddle.nn.InstanceNorm1D `_, `paddle.nn.InstanceNorm2D `_, `paddle.nn.InstanceNorm3D `_" - "56", "`paddle.fluid.dygraph.L1Loss `_ ", "`paddle.nn.L1Loss `_" - "57", "`paddle.fluid.dygraph.Layer `_ ", "`paddle.nn.Layer `_" - "58", "`paddle.fluid.dygraph.LayerList `_ ", "`paddle.nn.LayerList `_" - "59", "`paddle.fluid.dygraph.LayerNorm `_ ", "`paddle.nn.LayerNorm `_" - "60", "`paddle.fluid.dygraph.Linear `_ ", "`paddle.nn.Linear `_" - "61", "`paddle.fluid.dygraph.load_dygraph `_ ", "`paddle.load `_" - "62", "`paddle.fluid.dygraph.MSELoss `_ ", "`paddle.nn.MSELoss `_" - "63", "`paddle.fluid.dygraph.NaturalExpDecay `_ ", "`paddle.optimizer.lr.NaturalExpDecay `_" - "64", "`paddle.fluid.dygraph.NLLLoss `_ ", "`paddle.nn.NLLLoss `_" - "65", "`paddle.fluid.dygraph.NoamDecay `_ ", "`paddle.optimizer.lr.NoamDecay `_" - "66", "`paddle.fluid.dygraph.ParameterList `_ ", "`paddle.nn.ParameterList `_" - "67", "`paddle.fluid.dygraph.no_grad `_ ", "`paddle.no_grad `_" - "68", "`paddle.fluid.dygraph.PolynomialDecay `_ ", "`paddle.optimizer.lr.PolynomialDecay `_" - "69", "`paddle.fluid.dygraph.Pool2D `_ ", "`paddle.nn.MaxPool2D `_, `paddle.nn.AvgPool2D `_" - "70", "`paddle.fluid.dygraph.PRelu `_ ", "`paddle.nn.PReLU `_" - "72", "`paddle.fluid.dygraph.ProgramTranslator `_ ", "`paddle.jit.ProgramTranslator `_" - "73", "`paddle.fluid.dygraph.Sequential `_ ", "`paddle.nn.Sequential `_" - "74", "`paddle.fluid.dygraph.SpectralNorm `_ ", "`paddle.nn.SpectralNorm `_" - "75", "`paddle.fluid.dygraph.to_variable `_ ", "`paddle.to_tensor `_" - "76", "`paddle.fluid.dygraph.TracedLayer `_ ", "`paddle.jit.TracedLayer `_" - "77", "`paddle.fluid.executor.Executor `_ ", "`paddle.static.Executor `_" - "78", "`paddle.fluid.executor.global_scope `_ ", "`paddle.static.global_scope `_" - "79", "`paddle.fluid.executor.scope_guard `_ ", "`paddle.static.scope_guard `_" - "80", "`paddle.fluid.initializer.Bilinear `_ ", "`paddle.nn.initializer.Bilinear `_" - "81", "`paddle.fluid.initializer.BilinearInitializer `_ ", "`paddle.nn.initializer.Bilinear `_" - "82", "`paddle.fluid.initializer.Constant `_ ", "`paddle.nn.initializer.Constant `_" - "83", "`paddle.fluid.initializer.ConstantInitializer `_ ", "`paddle.nn.initializer.Constant `_" - "84", "`paddle.fluid.initializer.MSRA `_ ", "`paddle.nn.initializer.KaimingNormal `_, `paddle.nn.initializer.KaimingUniform `_" - "85", "`paddle.fluid.initializer.MSRAInitializer `_ ", "`paddle.nn.initializer.KaimingNormal `_, `paddle.nn.initializer.KaimingUniform `_" - "86", "`paddle.fluid.initializer.Normal `_ ", "`paddle.nn.initializer.Normal `_" - "87", "`paddle.fluid.initializer.NormalInitializer `_ ", "`paddle.nn.initializer.Normal `_" - "88", "`paddle.fluid.initializer.NumpyArrayInitializer `_ ", "`paddle.nn.initializer.Assign `_" - "89", "`paddle.fluid.initializer.TruncatedNormal `_ ", "`paddle.nn.initializer.TruncatedNormal `_" - "90", "`paddle.fluid.initializer.TruncatedNormalInitializer `_ ", "`paddle.nn.initializer.TruncatedNormal `_" - "91", "`paddle.fluid.initializer.Uniform `_ ", "`paddle.nn.initializer.Uniform `_" - "92", "`paddle.fluid.initializer.UniformInitializer `_ ", "`paddle.nn.initializer.Uniform `_" - "93", "`paddle.fluid.initializer.Xavier `_ ", "`paddle.nn.initializer.XavierNormal `_, `paddle.nn.initializer.XavierUniform `_" - "94", "`paddle.fluid.initializer.XavierInitializer `_ ", "`paddle.nn.initializer.XavierNormal `_, `paddle.nn.initializer.XavierUniform `_" - "95", "`paddle.fluid.io.DataLoader `_ ", "`paddle.io.DataLoader `_" - "96", "`paddle.fluid.io.load `_ ", "`paddle.static.load `_" - "97", "`paddle.fluid.io.load_inference_model `_ ", "`paddle.static.load_inference_model `_" - "98", "`paddle.fluid.io.load_program_state `_ ", "`paddle.static.load_program_state `_" - "99", "`paddle.fluid.io.save `_ ", "`paddle.save `_, `paddle.fluid.io.save `_, `paddle.static.save `_" - "100", "`paddle.fluid.io.save_inference_model `_ ", "`paddle.static.save_inference_model `_" - "101", "`paddle.fluid.io.set_program_state `_ ", "`paddle.static.set_program_state `_" - "102", "`paddle.fluid.layers.abs `_ ", "`paddle.abs `_" - "103", "`paddle.fluid.layers.accuracy `_ ", "`paddle.metric.accuracy `_" - "104", "`paddle.fluid.layers.acos `_ ", "`paddle.acos `_" - "105", "`paddle.fluid.layers.adaptive_pool2d `_ ", "`paddle.nn.functional.adaptive_avg_pool2d `_, `paddle.nn.functional.adaptive_max_pool2d `_" - "106", "`paddle.fluid.layers.adaptive_pool3d `_ ", "`paddle.nn.functional.adaptive_max_pool3d `_, `paddle.nn.functional.adaptive_avg_pool3d `_" - "107", "`paddle.fluid.layers.addcmul `_ ", "`paddle.tensor.math.addcmul `_" - "108", "`paddle.fluid.layers.addmm `_ ", "`paddle.addmm `_" - "109", "`paddle.fluid.layers.affine_grid `_ ", "`paddle.nn.functional.affine_grid `_" - "110", "`paddle.fluid.layers.allclose `_ ", "`paddle.allclose `_" - "111", "`paddle.fluid.layers.arange `_ ", "`paddle.arange `_" - "112", "`paddle.fluid.layers.argmax `_ ", "`paddle.argmax `_" - "113", "`paddle.fluid.layers.argmin `_ ", "`paddle.argmin `_" - "114", "`paddle.fluid.layers.argsort `_ ", "`paddle.argsort `_" - "115", "`paddle.fluid.layers.asin `_ ", "`paddle.asin `_" - "116", "`paddle.fluid.layers.assign `_ ", "`paddle.assign `_" - "117", "`paddle.fluid.layers.atan `_ ", "`paddle.atan `_" - "118", "`paddle.fluid.layers.auc `_ ", "`paddle.metric.Auc `_" - "119", "`paddle.fluid.layers.batch_norm `_ ", "`paddle.static.nn.batch_norm `_" - "120", "`paddle.fluid.layers.bilinear_tensor_product `_ ", "`paddle.nn.functional.bilinear `_" - "121", "`paddle.fluid.layers.bmm `_ ", "`paddle.bmm `_" - "122", "`paddle.fluid.layers.case `_ ", "`paddle.static.nn.case `_" - "123", "`paddle.fluid.layers.cast `_ ", "`paddle.cast `_" - "124", "`paddle.fluid.layers.Categorical `_ ", "`paddle.distribution.Categorical `_" - "125", "`paddle.fluid.layers.ceil `_ ", "`paddle.ceil `_" - "126", "`paddle.fluid.layers.chunk_eval `_ ", "`paddle.metric.chunk_eval `_" - "127", "`paddle.fluid.layers.clamp `_ ", "`paddle.clip `_" - "128", "`paddle.fluid.layers.clip_by_norm `_ ", "`paddle.nn.clip_by_norm `_" - "129", "`paddle.fluid.layers.concat `_ ", "`paddle.concat `_" - "130", "`paddle.fluid.layers.cond `_ ", "`paddle.static.nn.cond `_" - "131", "`paddle.fluid.layers.conv2d `_ ", "`paddle.nn.functional.conv2d(动态图) `_, `paddle.static.nn.conv2d(静态图) `_, " - "132", "`paddle.fluid.layers.conv2d_transpose `_ ", "`paddle.nn.functional.conv2d_transpose(动态图) `_, `paddle.static.nn.conv2d_transpose(静态图) `_" - "133", "`paddle.fluid.layers.conv3d `_ ", "`paddle.nn.functional.conv3d(动态图) `_, `paddle.static.nn.conv3d(静态图) `_" - "134", "`paddle.fluid.layers.conv3d_transpose `_ ", "`paddle.nn.functional.conv3d_transpose(动态图) `_, `paddle.static.nn.conv3d_transpose(静态图) `_" - "135", "`paddle.fluid.layers.cos `_ ", "`paddle.cos `_" - "136", "`paddle.fluid.layers.cos_sim `_ ", "`paddle.nn.functional.cosine_similarity `_" - "137", "`paddle.fluid.layers.create_parameter `_ ", "`paddle.create_parameter `_" - "138", "`paddle.fluid.layers.crf_decoding `_ ", "`paddle.static.nn.crf_decoding `_" - "139", "`paddle.fluid.layers.crop `_ ", "`paddle.crop `_" - "140", "`paddle.fluid.layers.cross `_ ", "`paddle.cross `_" - "141", "`paddle.fluid.layers.cumsum `_ ", "`paddle.cumsum `_" - "142", "`paddle.fluid.layers.data `_ ", "`paddle.static.data `_" - "143", "`paddle.fluid.layers.data_norm `_ ", "`paddle.static.nn.data_norm `_" - "144", "`paddle.fluid.layers.deformable_conv `_ ", "`paddle.static.nn.deform_conv2d `_" - "145", "`paddle.fluid.layers.diag `_ ", "`paddle.diag `_" - "146", "`paddle.fluid.layers.diag_embed `_ ", "`paddle.nn.functional.diag_embed `_" - "147", "`paddle.fluid.layers.dice_loss `_ ", "`paddle.nn.functional.dice_loss `_" - "148", "`paddle.fluid.layers.dist `_ ", "`paddle.dist `_" - "149", "`paddle.fluid.layers.dot `_ ", "`paddle.dot `_" - "150", "`paddle.fluid.layers.dropout `_ ", "`paddle.nn.functional.dropout `_, `paddle.nn.functional.dropout2d `_, `paddle.nn.functional.dropout3d `_" - "151", "`paddle.fluid.layers.dynamic_gru `_ ", "`paddle.nn.GRU `_" - "152", "`paddle.fluid.layers.dynamic_decode `_ ", "`paddle.nn.dynamic_decode `_" - "153", "`paddle.fluid.layers.elementwise_add `_ ", "`paddle.add `_" - "154", "`paddle.fluid.layers.elementwise_div `_ ", "`paddle.divide `_" - "155", "`paddle.fluid.layers.elementwise_equal `_ ", "`paddle.equal `_" - "156", "`paddle.fluid.layers.elementwise_floordiv `_ ", "`paddle.floor_divide `_" - "157", "`paddle.fluid.layers.elementwise_max `_ ", "`paddle.maximum `_" - "158", "`paddle.fluid.layers.elementwise_min `_ ", "`paddle.minimum `_" - "159", "`paddle.fluid.layers.elementwise_mod `_ ", "`paddle.mod `_" - "160", "`paddle.fluid.layers.elementwise_mul `_ ", "`paddle.multiply `_" - "161", "`paddle.fluid.layers.elu `_ ", "`paddle.nn.functional.elu `_" - "162", "`paddle.fluid.layers.embedding `_ ", "`paddle.nn.functional.embedding(动态图) `_, `paddle.static.nn.embedding(静态图) `_" - "163", "`paddle.fluid.layers.erf `_ ", "`paddle.erf `_" - "164", "`paddle.fluid.layers.exp `_ ", "`paddle.exp `_" - "165", "`paddle.fluid.layers.expand `_ ", "`paddle.expand `_" - "166", "`paddle.fluid.layers.expand_as `_ ", "`paddle.expand_as `_" - "167", "`paddle.fluid.layers.exponential_decay `_ ", "`paddle.optimizer.lr.ExponentialDecay `_" - "168", "`paddle.fluid.layers.eye `_ ", "`paddle.eye `_" - "169", "`paddle.fluid.layers.fc `_ ", "`paddle.nn.functional.linear(动态图) `_, `paddle.static.nn.fc(静态图) `_" - "170", "`paddle.fluid.layers.flatten `_ ", "`paddle.flatten `_" - "171", "`paddle.fluid.layers.flip `_ ", "`paddle.flip `_" - "172", "`paddle.fluid.layers.floor `_ ", "`paddle.floor `_" - "173", "`paddle.fluid.layers.full_like `_ ", "`paddle.full_like `_" - "174", "`paddle.fluid.layers.gather `_ ", "`paddle.gather `_" - "175", "`paddle.fluid.layers.gather_nd `_ ", "`paddle.gather_nd `_" - "176", "`paddle.fluid.layers.gelu `_ ", "`paddle.nn.functional.gelu `_" - "177", "`paddle.fluid.layers.greater_equal `_ ", "`paddle.greater_equal `_" - "178", "`paddle.fluid.layers.greater_than `_ ", "`paddle.greater_than `_" - "179", "`paddle.fluid.layers.group_norm `_ ", "`paddle.static.nn.group_norm `_" - "180", "`paddle.fluid.layers.GRUCell `_ ", "`paddle.nn.GRUCell `_" - "181", "`paddle.fluid.layers.hard_shrink `_ ", "`paddle.nn.functional.hardshrink `_" - "182", "`paddle.fluid.layers.hard_sigmoid `_ ", "`paddle.nn.functional.hardsigmoid `_" - "183", "`paddle.fluid.layers.hard_swish `_ ", "`paddle.nn.functional.hardswish `_" - "184", "`paddle.fluid.layers.has_inf `_ ", "`paddle.isinf `_" - "185", "`paddle.fluid.layers.has_nan `_ ", "`paddle.isnan `_" - "186", "`paddle.fluid.layers.hsigmoid `_ ", "`paddle.nn.functional.hsigmoid_loss `_" - "187", "`paddle.fluid.layers.increment `_ ", "`paddle.increment `_" - "188", "`paddle.fluid.layers.inverse_time_decay `_ ", "`paddle.optimizer.lr.InverseTimeDecay `_" - "189", "`paddle.fluid.layers.index_select `_ ", "`paddle.index_select `_" - "190", "`paddle.fluid.layers.instance_norm `_ ", "`paddle.static.nn.instance_norm `_" - "191", "`paddle.fluid.layers.interpolate `_ ", "`paddle.nn.functional.interpolate `_" - "192", "`paddle.fluid.layers.iou_similarity `_ ", "`paddle.nn.functional.iou_similarity `_" - "193", "`paddle.fluid.layers.is_empty `_ ", "`paddle.is_empty `_" - "194", "`paddle.fluid.layers.isfinite `_ ", "`paddle.isfinite `_" - "195", "`paddle.fluid.layers.kldiv_loss `_ ", "`paddle.nn.functional.kl_div `_" - "196", "`paddle.fluid.layers.kron `_ ", "`paddle.kron `_" - "197", "`paddle.fluid.layers.label_smooth `_ ", "`paddle.nn.functional.label_smooth `_" - "198", "`paddle.fluid.layers.layer_norm `_ ", "`paddle.static.nn.layer_norm `_" - "199", "`paddle.fluid.layers.leaky_relu `_ ", "`paddle.nn.functional.leaky_relu `_" - "200", "`paddle.fluid.layers.less_equal `_ ", "`paddle.less_equal `_" - "201", "`paddle.fluid.layers.less_than `_ ", "`paddle.less_than `_" - "202", "`paddle.fluid.layers.linear_lr_warmup `_ ", "`paddle.optimizer.lr.LinearWarmup `_" - "203", "`paddle.fluid.layers.linspace `_ ", "`paddle.linspace `_" - "204", "`paddle.fluid.layers.log `_ ", "`paddle.log `_" - "205", "`paddle.fluid.layers.log1p `_ ", "`paddle.log1p `_" - "206", "`paddle.fluid.layers.log_loss `_ ", "`paddle.nn.functional.log_loss `_" - "207", "`paddle.fluid.layers.log_softmax `_ ", "`paddle.nn.functional.log_softmax `_" - "208", "`paddle.fluid.layers.logical_and `_ ", "`paddle.logical_and `_" - "209", "`paddle.fluid.layers.logical_not `_ ", "`paddle.logical_not `_" - "210", "`paddle.fluid.layers.logical_or `_ ", "`paddle.logical_or `_" - "211", "`paddle.fluid.layers.logical_xor `_ ", "`paddle.logical_xor `_" - "212", "`paddle.fluid.layers.logsigmoid `_ ", "`paddle.nn.functional.log_sigmoid `_" - "213", "`paddle.fluid.layers.logsumexp `_ ", "`paddle.logsumexp `_" - "214", "`paddle.fluid.layers.lrn `_ ", "`paddle.nn.functional.local_response_norm `_" - "215", "`paddle.fluid.layers.lstm `_ ", "`paddle.nn.LSTM `_" - "216", "`paddle.fluid.layers.margin_rank_loss `_ ", "`paddle.nn.functional.margin_ranking_loss `_" - "217", "`paddle.fluid.layers.maxout `_ ", "`paddle.nn.functional.maxout `_" - "218", "`paddle.fluid.layers.mean_iou `_ ", "`paddle.metric.mean_iou `_" - "219", "`paddle.fluid.layers.meshgrid `_ ", "`paddle.meshgrid `_" - "220", "`paddle.fluid.layers.mse_loss `_ ", "`paddle.nn.functional.mse_loss `_" - "221", "`paddle.fluid.layers.mul `_ ", "`paddle.matmul `_" - "222", "`paddle.fluid.layers.multi_box_head `_ ", "`paddle.static.nn.multi_box_head `_" - "223", "`paddle.fluid.layers.multiplex `_ ", "`paddle.multiplex `_" - "224", "`paddle.fluid.layers.nce `_ ", "`paddle.static.nn.nce `_" - "225", "`paddle.fluid.layers.nonzero `_ ", "`paddle.nonzero `_" - "226", "`paddle.fluid.layers.Normal `_ ", "`paddle.distribution.Normal `_" - "227", "`paddle.fluid.layers.not_equal `_ ", "`paddle.not_equal `_" - "228", "`paddle.fluid.layers.npair_loss `_ ", "`paddle.nn.functional.npair_loss `_" - "229", "`paddle.fluid.layers.one_hot `_ ", "`paddle.nn.functional.one_hot `_" - "230", "`paddle.fluid.layers.ones `_ ", "`paddle.ones `_" - "231", "`paddle.fluid.layers.ones_like `_ ", "`paddle.ones_like `_" - "232", "`paddle.fluid.layers.pad2d `_ ", "`paddle.nn.functional.pad `_" - "233", "`paddle.fluid.layers.piecewise_decay `_ ", "`paddle.optimizer.lr.PiecewiseDecay `_" - "234", "`paddle.fluid.layers.pixel_shuffle `_ ", "`paddle.nn.functional.pixel_shuffle `_" - "235", "`paddle.fluid.layers.pool2d `_ ", "`paddle.nn.functional.avg_pool2d `_, `paddle.nn.functional.max_pool2d `_" - "236", "`paddle.fluid.layers.pool3d `_ ", "`paddle.nn.functional.avg_pool3d `_, `paddle.nn.functional.max_pool3d `_" - "237", "`paddle.fluid.layers.pow `_ ", "`paddle.pow `_" - "238", "`paddle.fluid.layers.prelu `_ ", "`paddle.nn.functional.prelu(动态图) `_, `paddle.static.nn.prelu(静态图) `_" - "239", "`paddle.fluid.layers.Print `_ ", "`paddle.static.Print `_" - "240", "`paddle.fluid.layers.py_func `_ ", "`paddle.static.py_func `_" - "241", "`paddle.fluid.layers.randint `_ ", "`paddle.randint `_" - "242", "`paddle.fluid.layers.randn `_ ", "`paddle.randn `_" - "243", "`paddle.fluid.layers.random_crop `_ ", "`paddle.vision.RandomCrop `_" - "244", "`paddle.fluid.layers.randperm `_ ", "`paddle.randperm `_" - "245", "`paddle.fluid.layers.rank `_ ", "`paddle.rank `_" - "246", "`paddle.fluid.layers.reciprocal `_ ", "`paddle.reciprocal `_" - "247", "`paddle.fluid.layers.reduce_all `_ ", "`paddle.all `_" - "248", "`paddle.fluid.layers.reduce_any `_ ", "`paddle.any `_" - "249", "`paddle.fluid.layers.reduce_max `_ ", "`paddle.max `_" - "250", "`paddle.fluid.layers.reduce_mean `_ ", "`paddle.mean `_" - "251", "`paddle.fluid.layers.reduce_min `_ ", "`paddle.min `_" - "252", "`paddle.fluid.layers.reduce_prod `_ ", "`paddle.prod `_" - "253", "`paddle.fluid.layers.reduce_sum `_ ", "`paddle.sum `_" - "254", "`paddle.fluid.layers.relu `_ ", "`paddle.nn.functional.relu `_" - "255", "`paddle.fluid.layers.relu6 `_ ", "`paddle.nn.functional.relu6 `_" - "256", "`paddle.fluid.layers.reshape `_ ", "`paddle.reshape `_" - "257", "`paddle.fluid.layers.rnn `_ ", "`paddle.nn.RNN `_" - "258", "`paddle.fluid.layers.roll `_ ", "`paddle.roll `_" - "259", "`paddle.fluid.layers.round `_ ", "`paddle.round `_" - "260", "`paddle.fluid.layers.row_conv `_ ", "`paddle.static.nn.row_conv `_" - "261", "`paddle.fluid.layers.rsqrt `_ ", "`paddle.rsqrt `_" - "262", "`paddle.fluid.layers.RNNCell `_ ", "`paddle.nn.RNNCellBase `_" - "263", "`paddle.fluid.layers.scale `_ ", "`paddle.scale `_" - "264", "`paddle.fluid.layers.scatter `_ ", "`paddle.scatter `_" - "265", "`paddle.fluid.layers.scatter_nd_add `_ ", "`paddle.scatter_nd_add `_" - "266", "`paddle.fluid.layers.scatter_nd `_ ", "`paddle.scatter_nd `_" - "267", "`paddle.fluid.layers.selu `_ ", "`paddle.nn.functional.selu `_" - "268", "`paddle.fluid.layers.shape `_ ", "`paddle.shape `_" - "269", "`paddle.fluid.layers.shard_index `_ ", "`paddle.shard_index `_" - "270", "`paddle.fluid.layers.sigmoid `_ ", "`paddle.nn.functional.sigmoid `_" - "271", "`paddle.fluid.layers.sigmoid_cross_entropy_with_logits `_ ", "`paddle.nn.functional.binary_cross_entropy `_" - "272", "`paddle.fluid.layers.sigmoid_focal_loss `_ ", "`paddle.nn.functional.sigmoid_focal_loss `_" - "273", "`paddle.fluid.layers.sign `_ ", "`paddle.sign `_" - "274", "`paddle.fluid.layers.sin `_ ", "`paddle.sin `_" - "275", "`paddle.fluid.layers.size `_ ", "`paddle.numel `_" - "276", "`paddle.fluid.layers.slice `_ ", "`paddle.slice `_" - "277", "`paddle.fluid.layers.smooth_l1 `_ ", "`paddle.nn.functional.smooth_l1_loss `_" - "278", "`paddle.fluid.layers.softmax `_ ", "`paddle.nn.functional.softmax `_" - "279", "`paddle.fluid.layers.softmax_with_cross_entropy `_ ", "`paddle.nn.functional.cross_entropy `_" - "280", "`paddle.fluid.layers.softplus `_ ", "`paddle.nn.functional.softplus `_" - "281", "`paddle.fluid.layers.softshrink `_ ", "`paddle.nn.functional.softshrink `_" - "282", "`paddle.fluid.layers.softsign `_ ", "`paddle.nn.functional.softsign `_" - "283", "`paddle.fluid.layers.spectral_norm `_ ", "`paddle.static.nn.spectral_norm `_" - "284", "`paddle.fluid.layers.split `_ ", "`paddle.split `_" - "285", "`paddle.fluid.layers.sqrt `_ ", "`paddle.sqrt `_" - "286", "`paddle.fluid.layers.square `_ ", "`paddle.square `_" - "287", "`paddle.fluid.layers.square_error_cost `_ ", "`paddle.nn.functional.square_error_cost `_" - "288", "`paddle.fluid.layers.squeeze `_ ", "`paddle.squeeze `_" - "289", "`paddle.fluid.layers.ssd_loss `_ ", "`paddle.nn.functional.ssd_loss `_" - "290", "`paddle.fluid.layers.stack `_ ", "`paddle.stack `_" - "291", "`paddle.fluid.layers.stanh `_ ", "`paddle.stanh `_" - "292", "`paddle.fluid.layers.strided_slice `_ ", "`paddle.strided_slice `_" - "293", "`paddle.fluid.layers.sums `_ ", "`paddle.add_n `_" - "294", "`paddle.fluid.layers.swish `_ ", "`paddle.nn.functional.swish `_" - "295", "`paddle.fluid.layers.switch_case `_ ", "`paddle.static.nn.switch_case `_" - "296", "`paddle.fluid.layers.t `_ ", "`paddle.t `_" - "297", "`paddle.fluid.layers.tanh `_ ", "`paddle.tanh `_" - "298", "`paddle.fluid.layers.tanh_shrink `_ ", "`paddle.nn.functional.tanhshrink `_" - "299", "`paddle.fluid.layers.thresholded_relu `_ ", "`paddle.nn.functional.thresholded_relu `_" - "300", "`paddle.fluid.layers.topk `_ ", "`paddle.topk `_" - "301", "`paddle.fluid.layers.trace `_ ", "`paddle.trace `_" - "302", "`paddle.fluid.layers.transpose `_ ", "`paddle.transpose `_" - "303", "`paddle.fluid.layers.tril `_ ", "`paddle.tril `_" - "304", "`paddle.fluid.layers.triu `_ ", "`paddle.triu `_" - "305", "`paddle.fluid.layers.unfold `_ ", "`paddle.nn.functional.unfold `_" - "306", "`paddle.fluid.layers.Uniform `_ ", "`paddle.distribution.Uniform `_" - "307", "`paddle.fluid.layers.unique `_ ", "`paddle.unique `_" - "308", "`paddle.fluid.layers.unsqueeze `_ ", "`paddle.unsqueeze `_" - "309", "`paddle.fluid.layers.unstack `_ ", "`paddle.unstack `_" - "310", "`paddle.fluid.layers.warpctc `_ ", "`paddle.nn.functional.ctc_loss `_" - "311", "`paddle.fluid.layers.where `_ ", "`paddle.where `_" - "312", "`paddle.fluid.layers.while_loop `_ ", "`paddle.static.nn.while_loop `_" - "313", "`paddle.fluid.layers.zeros `_ ", "`paddle.zeros `_" - "314", "`paddle.fluid.layers.zeros_like `_ ", "`paddle.zeros_like `_" - "315", "`paddle.fluid.metrics.Accuracy `_ ", "`paddle.metric.Accuracy `_" - "316", "`paddle.fluid.metrics.Precision `_ ", "`paddle.metric.Precision `_" - "317", "`paddle.fluid.metrics.Recall `_ ", "`paddle.metric.Recall `_" - "318", "`paddle.fluid.optimizer.Adadelta `_ ", "`paddle.optimizer.Adadelta `_" - "319", "`paddle.fluid.optimizer.AdadeltaOptimizer `_ ", "`paddle.optimizer.Adadelta `_" - "320", "`paddle.fluid.optimizer.Adagrad `_ ", "`paddle.optimizer.Adagrad `_" - "321", "`paddle.fluid.optimizer.AdagradOptimizer `_ ", "`paddle.optimizer.Adagrad `_" - "322", "`paddle.fluid.optimizer.Adam `_ ", "`paddle.optimizer.Adam `_" - "323", "`paddle.fluid.optimizer.Adamax `_ ", "`paddle.optimizer.Adamax `_" - "324", "`paddle.fluid.optimizer.AdamaxOptimizer `_ ", "`paddle.optimizer.Adamax `_" - "325", "`paddle.fluid.optimizer.AdamOptimizer `_ ", "`paddle.optimizer.Adam `_" - "326", "`paddle.fluid.optimizer.Momentum `_ ", "`paddle.optimizer.Momentum `_" - "327", "`paddle.fluid.optimizer.MomentumOptimizer `_ ", "`paddle.optimizer.Momentum `_" - "328", "`paddle.fluid.optimizer.RMSPropOptimizer `_ ", "`paddle.optimizer.RMSProp `_" - "329", "`paddle.fluid.optimizer.SGD `_ ", "`paddle.optimizer.SGD `_" - "330", "`paddle.fluid.optimizer.SGDOptimizer `_ ", "`paddle.optimizer.SGD `_" - "331", "`paddle.fluid.regularizer.L1Decay `_ ", "`paddle.regularizer.L1Decay `_" - "332", "`paddle.fluid.regularizer.L1DecayRegularizer `_ ", "`paddle.regularizer.L1Decay `_" - "333", "`paddle.fluid.regularizer.L2Decay `_ ", "`paddle.regularizer.L2Decay `_" - "334", "`paddle.fluid.regularizer.L2DecayRegularizer `_ ", "`paddle.regularizer.L2Decay `_" + "0", "`paddle.fluid.BuildStrategy `_ ", "`paddle.static.BuildStrategy `_" + "1", "`paddle.fluid.CompiledProgram `_ ", "`paddle.static.CompiledProgram `_" + "2", "`paddle.fluid.cpu_places `_ ", "`paddle.static.cpu_places `_" + "3", "`paddle.fluid.CPUPlace `_ ", "`paddle.CPUPlace `_" + "4", "`paddle.fluid.cuda_places `_ ", "`paddle.static.cuda_places `_" + "5", "`paddle.fluid.CUDAPinnedPlace `_ ", "`paddle.CUDAPinnedPlace `_" + "6", "`paddle.fluid.CUDAPlace `_ ", "`paddle.CUDAPlace `_" + "7", "`paddle.fluid.default_main_program `_ ", "`paddle.static.default_main_program `_" + "8", "`paddle.fluid.default_startup_program `_ ", "`paddle.static.default_startup_program `_" + "9", "`paddle.fluid.disable_dygraph `_ ", "`paddle.enable_static `_" + "10", "`paddle.fluid.embedding `_ ", "`paddle.nn.functional.embedding(动态图) `_, `paddle.static.nn.embedding(静态图) `_" + "11", "`paddle.fluid.enable_dygraph `_ ", "`paddle.disable_static `_" + "12", "`paddle.fluid.enable_imperative `_ ", "`paddle.disable_static `_" + "13", "`paddle.fluid.ExecutionStrategy `_ ", "`paddle.static.ExecutionStrategy `_" + "14", "`paddle.fluid.Executor `_ ", "`paddle.static.Executor `_" + "15", "`paddle.fluid.global_scope `_ ", "`paddle.static.global_scope `_" + "16", "`paddle.fluid.gradients `_ ", "`paddle.static.gradients `_" + "17", "`paddle.fluid.in_dygraph_mode `_ ", "`paddle.in_dynamic_mode `_" + "18", "`paddle.fluid.is_compiled_with_cuda `_ ", "`paddle.is_compiled_with_cuda `_" + "19", "`paddle.fluid.load `_ ", "`paddle.static.load `_" + "20", "`paddle.fluid.load_op_library `_ ", "`paddle.utils.load_op_library `_" + "21", "`paddle.fluid.name_scope `_ ", "`paddle.static.name_scope `_" + "22", "`paddle.fluid.one_hot `_ ", "`paddle.nn.functional.one_hot `_" + "23", "`paddle.fluid.ParallelExecutor `_ ", "`paddle.static.ParallelExecutor `_" + "24", "`paddle.fluid.ParamAttr `_ ", "`paddle.ParamAttr `_" + "25", "`paddle.fluid.Program `_ ", "`paddle.static.Program `_" + "26", "`paddle.fluid.program_guard `_ ", "`paddle.static.program_guard `_" + "27", "`paddle.fluid.require_version `_ ", "`paddle.utils.require_version `_" + "28", "`paddle.fluid.save `_ ", "`paddle.save `_ " + "29", "`paddle.fluid.scope_guard `_ ", "`paddle.static.scope_guard `_" + "30", "`paddle.fluid.Variable `_ ", "`paddle.static.Variable `_" + "31", "`paddle.fluid.WeightNormParamAttr `_ ", "`paddle.static.WeightNormParamAttr `_" + "32", "`paddle.fluid.backward.append_backward `_ ", "`paddle.static.append_backward `_" + "33", "`paddle.fluid.backward.gradients `_ ", "`paddle.static.gradients `_" + "34", "`paddle.fluid.clip.GradientClipByGlobalNorm `_ ", "`paddle.nn.ClipGradByGlobalNorm `_" + "35", "`paddle.fluid.clip.GradientClipByNorm `_ ", "`paddle.nn.ClipGradByNorm `_" + "36", "`paddle.fluid.clip.GradientClipByValue `_ ", "`paddle.nn.ClipGradByValue `_" + "37", "`paddle.fluid.dataset.InMemoryDataset `_ ", "`paddle.distributed.InMemoryDataset `_" + "38", "`paddle.fluid.dataset.QueueDataset `_ ", "`paddle.distributed.QueueDataset `_" + "39", "`paddle.fluid.dygraph.BatchNorm `_ ", "`paddle.nn.BatchNorm1D `_, `paddle.nn.BatchNorm2D `_, `paddle.nn.BatchNorm3D `_" + "40", "`paddle.fluid.dygraph.BCELoss `_ ", "`paddle.nn.BCELoss `_" + "41", "`paddle.fluid.dygraph.BilinearTensorProduct `_ ", "`paddle.nn.Bilinear `_" + "42", "`paddle.fluid.dygraph.Conv2D `_ ", "`paddle.nn.Conv2D `_" + "43", "`paddle.fluid.dygraph.Conv2DTranspose `_ ", "`paddle.nn.Conv2DTranspose `_" + "44", "`paddle.fluid.dygraph.Conv3D `_ ", "`paddle.nn.Conv3D `_" + "45", "`paddle.fluid.dygraph.Conv3DTranspose `_ ", "`paddle.nn.Conv3DTranspose `_" + "46", "`paddle.fluid.dygraph.CosineDecay `_ ", "`paddle.optimizer.lr.CosineAnnealingDecay `_" + "47", "`paddle.fluid.dygraph.DataParallel `_ ", "`paddle.DataParallel `_" + "48", "`paddle.fluid.dygraph.disable_dygraph `_ ", "`paddle.enable_static `_" + "49", "`paddle.fluid.dygraph.Dropout `_ ", "`paddle.nn.Dropout `_, `paddle.nn.Dropout2D `_, `paddle.nn.Dropout3D `_" + "50", "`paddle.fluid.dygraph.Embedding `_ ", "`paddle.nn.Embedding `_" + "51", "`paddle.fluid.dygraph.enable_dygraph `_ ", "`paddle.disable_static `_" + "52", "`paddle.fluid.dygraph.enable_imperative `_ ", "`paddle.disable_static `_" + "53", "`paddle.fluid.dygraph.grad `_ ", "`paddle.grad `_" + "54", "`paddle.fluid.dygraph.GroupNorm `_ ", "`paddle.nn.GroupNorm `_" + "55", "`paddle.fluid.dygraph.InstanceNorm `_ ", "`paddle.nn.InstanceNorm1D `_, `paddle.nn.InstanceNorm2D `_, `paddle.nn.InstanceNorm3D `_" + "56", "`paddle.fluid.dygraph.L1Loss `_ ", "`paddle.nn.L1Loss `_" + "57", "`paddle.fluid.dygraph.Layer `_ ", "`paddle.nn.Layer `_" + "58", "`paddle.fluid.dygraph.LayerList `_ ", "`paddle.nn.LayerList `_" + "59", "`paddle.fluid.dygraph.LayerNorm `_ ", "`paddle.nn.LayerNorm `_" + "60", "`paddle.fluid.dygraph.Linear `_ ", "`paddle.nn.Linear `_" + "61", "`paddle.fluid.dygraph.load_dygraph `_ ", "`paddle.load `_" + "62", "`paddle.fluid.dygraph.MSELoss `_ ", "`paddle.nn.MSELoss `_" + "63", "`paddle.fluid.dygraph.NaturalExpDecay `_ ", "`paddle.optimizer.lr.NaturalExpDecay `_" + "64", "`paddle.fluid.dygraph.NLLLoss `_ ", "`paddle.nn.NLLLoss `_" + "65", "`paddle.fluid.dygraph.NoamDecay `_ ", "`paddle.optimizer.lr.NoamDecay `_" + "66", "`paddle.fluid.dygraph.ParameterList `_ ", "`paddle.nn.ParameterList `_" + "67", "`paddle.fluid.dygraph.no_grad `_ ", "`paddle.no_grad `_" + "68", "`paddle.fluid.dygraph.PolynomialDecay `_ ", "`paddle.optimizer.lr.PolynomialDecay `_" + "69", "`paddle.fluid.dygraph.Pool2D `_ ", "`paddle.nn.MaxPool2D `_, `paddle.nn.AvgPool2D `_" + "70", "`paddle.fluid.dygraph.PRelu `_ ", "`paddle.nn.PReLU `_" + "71", "`paddle.fluid.dygraph.ProgramTranslator `_ ", "`paddle.jit.ProgramTranslator `_" + "72", "`paddle.fluid.dygraph.Sequential `_ ", "`paddle.nn.Sequential `_" + "73", "`paddle.fluid.dygraph.SpectralNorm `_ ", "`paddle.nn.SpectralNorm `_" + "74", "`paddle.fluid.dygraph.to_variable `_ ", "`paddle.to_tensor `_" + "75", "`paddle.fluid.dygraph.TracedLayer `_ ", "`paddle.jit.TracedLayer `_" + "76", "`paddle.fluid.executor.Executor `_ ", "`paddle.static.Executor `_" + "77", "`paddle.fluid.executor.global_scope `_ ", "`paddle.static.global_scope `_" + "78", "`paddle.fluid.executor.scope_guard `_ ", "`paddle.static.scope_guard `_" + "79", "`paddle.fluid.initializer.Bilinear `_ ", "`paddle.nn.initializer.Bilinear `_" + "80", "`paddle.fluid.initializer.BilinearInitializer `_ ", "`paddle.nn.initializer.Bilinear `_" + "81", "`paddle.fluid.initializer.Constant `_ ", "`paddle.nn.initializer.Constant `_" + "82", "`paddle.fluid.initializer.ConstantInitializer `_ ", "`paddle.nn.initializer.Constant `_" + "83", "`paddle.fluid.initializer.MSRA `_ ", "`paddle.nn.initializer.KaimingNormal `_, `paddle.nn.initializer.KaimingUniform `_" + "84", "`paddle.fluid.initializer.MSRAInitializer `_ ", "`paddle.nn.initializer.KaimingNormal `_, `paddle.nn.initializer.KaimingUniform `_" + "85", "`paddle.fluid.initializer.Normal `_ ", "`paddle.nn.initializer.Normal `_" + "86", "`paddle.fluid.initializer.NormalInitializer `_ ", "`paddle.nn.initializer.Normal `_" + "87", "`paddle.fluid.initializer.NumpyArrayInitializer `_ ", "`paddle.nn.initializer.Assign `_" + "88", "`paddle.fluid.initializer.TruncatedNormal `_ ", "`paddle.nn.initializer.TruncatedNormal `_" + "89", "`paddle.fluid.initializer.TruncatedNormalInitializer `_ ", "`paddle.nn.initializer.TruncatedNormal `_" + "90", "`paddle.fluid.initializer.Uniform `_ ", "`paddle.nn.initializer.Uniform `_" + "91", "`paddle.fluid.initializer.UniformInitializer `_ ", "`paddle.nn.initializer.Uniform `_" + "92", "`paddle.fluid.initializer.Xavier `_ ", "`paddle.nn.initializer.XavierNormal `_, `paddle.nn.initializer.XavierUniform `_" + "93", "`paddle.fluid.initializer.XavierInitializer `_ ", "`paddle.nn.initializer.XavierNormal `_, `paddle.nn.initializer.XavierUniform `_" + "94", "`paddle.fluid.io.DataLoader `_ ", "`paddle.io.DataLoader `_" + "95", "`paddle.fluid.io.load `_ ", "`paddle.static.load `_" + "96", "`paddle.fluid.io.load_inference_model `_ ", "`paddle.static.load_inference_model `_" + "97", "`paddle.fluid.io.load_program_state `_ ", "`paddle.static.load_program_state `_" + "98", "`paddle.fluid.io.save `_ ", "`paddle.save `_, `paddle.fluid.io.save `_, `paddle.static.save `_" + "99", "`paddle.fluid.io.save_inference_model `_ ", "`paddle.static.save_inference_model `_" + "100", "`paddle.fluid.io.set_program_state `_ ", "`paddle.static.set_program_state `_" + "101", "`paddle.fluid.layers.abs `_ ", "`paddle.abs `_" + "102", "`paddle.fluid.layers.accuracy `_ ", "`paddle.metric.accuracy `_" + "103", "`paddle.fluid.layers.acos `_ ", "`paddle.acos `_" + "104", "`paddle.fluid.layers.adaptive_pool2d `_ ", "`paddle.nn.functional.adaptive_avg_pool2d `_, `paddle.nn.functional.adaptive_max_pool2d `_" + "105", "`paddle.fluid.layers.adaptive_pool3d `_ ", "`paddle.nn.functional.adaptive_max_pool3d `_, `paddle.nn.functional.adaptive_avg_pool3d `_" + "106", "`paddle.fluid.layers.addcmul `_ ", "`paddle.tensor.math.addcmul `_" + "107", "`paddle.fluid.layers.addmm `_ ", "`paddle.addmm `_" + "108", "`paddle.fluid.layers.affine_grid `_ ", "`paddle.nn.functional.affine_grid `_" + "109", "`paddle.fluid.layers.allclose `_ ", "`paddle.allclose `_" + "110", "`paddle.fluid.layers.arange `_ ", "`paddle.arange `_" + "111", "`paddle.fluid.layers.argmax `_ ", "`paddle.argmax `_" + "112", "`paddle.fluid.layers.argmin `_ ", "`paddle.argmin `_" + "113", "`paddle.fluid.layers.argsort `_ ", "`paddle.argsort `_" + "114", "`paddle.fluid.layers.asin `_ ", "`paddle.asin `_" + "115", "`paddle.fluid.layers.atan `_ ", "`paddle.atan `_" + "116", "`paddle.fluid.layers.auc `_ ", "`paddle.metric.Auc `_" + "117", "`paddle.fluid.layers.batch_norm `_ ", "`paddle.static.nn.batch_norm `_" + "118", "`paddle.fluid.layers.bilinear_tensor_product `_ ", "`paddle.nn.functional.bilinear `_" + "119", "`paddle.fluid.layers.bmm `_ ", "`paddle.bmm `_" + "120", "`paddle.fluid.layers.case `_ ", "`paddle.static.nn.case `_" + "121", "`paddle.fluid.layers.cast `_ ", "`paddle.cast `_" + "122", "`paddle.fluid.layers.Categorical `_ ", "`paddle.distribution.Categorical `_" + "123", "`paddle.fluid.layers.ceil `_ ", "`paddle.ceil `_" + "124", "`paddle.fluid.layers.chunk_eval `_ ", "`paddle.metric.chunk_eval `_" + "125", "`paddle.fluid.layers.clamp `_ ", "`paddle.clip `_" + "126", "`paddle.fluid.layers.clip_by_norm `_ ", "`paddle.nn.clip_by_norm `_" + "127", "`paddle.fluid.layers.concat `_ ", "`paddle.concat `_" + "128", "`paddle.fluid.layers.cond `_ ", "`paddle.static.nn.cond `_" + "129", "`paddle.fluid.layers.conv2d `_ ", "`paddle.nn.functional.conv2d(动态图) `_, `paddle.static.nn.conv2d(静态图) `_, " + "130", "`paddle.fluid.layers.conv2d_transpose `_ ", "`paddle.nn.functional.conv2d_transpose(动态图) `_, `paddle.static.nn.conv2d_transpose(静态图) `_" + "131", "`paddle.fluid.layers.conv3d `_ ", "`paddle.nn.functional.conv3d(动态图) `_, `paddle.static.nn.conv3d(静态图) `_" + "132", "`paddle.fluid.layers.conv3d_transpose `_ ", "`paddle.nn.functional.conv3d_transpose(动态图) `_, `paddle.static.nn.conv3d_transpose(静态图) `_" + "133", "`paddle.fluid.layers.cos `_ ", "`paddle.cos `_" + "134", "`paddle.fluid.layers.cos_sim `_ ", "`paddle.nn.functional.cosine_similarity `_" + "135", "`paddle.fluid.layers.create_parameter `_ ", "`paddle.create_parameter `_" + "136", "`paddle.fluid.layers.crf_decoding `_ ", "`paddle.static.nn.crf_decoding `_" + "137", "`paddle.fluid.layers.crop `_ ", "`paddle.crop `_" + "138", "`paddle.fluid.layers.cross `_ ", "`paddle.cross `_" + "139", "`paddle.fluid.layers.cumsum `_ ", "`paddle.cumsum `_" + "140", "`paddle.fluid.layers.data `_ ", "`paddle.static.data `_" + "141", "`paddle.fluid.layers.data_norm `_ ", "`paddle.static.nn.data_norm `_" + "142", "`paddle.fluid.layers.deformable_conv `_ ", "`paddle.static.nn.deform_conv2d `_" + "143", "`paddle.fluid.layers.diag `_ ", "`paddle.diag `_" + "144", "`paddle.fluid.layers.diag_embed `_ ", "`paddle.nn.functional.diag_embed `_" + "145", "`paddle.fluid.layers.dice_loss `_ ", "`paddle.nn.functional.dice_loss `_" + "146", "`paddle.fluid.layers.dist `_ ", "`paddle.dist `_" + "147", "`paddle.fluid.layers.dot `_ ", "`paddle.dot `_" + "148", "`paddle.fluid.layers.dropout `_ ", "`paddle.nn.functional.dropout `_, `paddle.nn.functional.dropout2d `_, `paddle.nn.functional.dropout3d `_" + "149", "`paddle.fluid.layers.dynamic_gru `_ ", "`paddle.nn.GRU `_" + "150", "`paddle.fluid.layers.dynamic_decode `_ ", "`paddle.nn.dynamic_decode `_" + "151", "`paddle.fluid.layers.elementwise_add `_ ", "`paddle.add `_" + "152", "`paddle.fluid.layers.elementwise_div `_ ", "`paddle.divide `_" + "153", "`paddle.fluid.layers.elementwise_equal `_ ", "`paddle.equal `_" + "154", "`paddle.fluid.layers.elementwise_floordiv `_ ", "`paddle.floor_divide `_" + "155", "`paddle.fluid.layers.elementwise_max `_ ", "`paddle.maximum `_" + "156", "`paddle.fluid.layers.elementwise_min `_ ", "`paddle.minimum `_" + "157", "`paddle.fluid.layers.elementwise_mod `_ ", "`paddle.mod `_" + "158", "`paddle.fluid.layers.elementwise_mul `_ ", "`paddle.multiply `_" + "159", "`paddle.fluid.layers.elu `_ ", "`paddle.nn.functional.elu `_" + "160", "`paddle.fluid.layers.embedding `_ ", "`paddle.nn.functional.embedding(动态图) `_, `paddle.static.nn.embedding(静态图) `_" + "161", "`paddle.fluid.layers.erf `_ ", "`paddle.erf `_" + "162", "`paddle.fluid.layers.exp `_ ", "`paddle.exp `_" + "163", "`paddle.fluid.layers.expand `_ ", "`paddle.expand `_" + "164", "`paddle.fluid.layers.expand_as `_ ", "`paddle.expand_as `_" + "165", "`paddle.fluid.layers.exponential_decay `_ ", "`paddle.optimizer.lr.ExponentialDecay `_" + "166", "`paddle.fluid.layers.eye `_ ", "`paddle.eye `_" + "167", "`paddle.fluid.layers.fc `_ ", "`paddle.nn.functional.linear(动态图) `_, `paddle.static.nn.fc(静态图) `_" + "168", "`paddle.fluid.layers.flatten `_ ", "`paddle.flatten `_" + "169", "`paddle.fluid.layers.flip `_ ", "`paddle.flip `_" + "170", "`paddle.fluid.layers.floor `_ ", "`paddle.floor `_" + "171", "`paddle.fluid.layers.full_like `_ ", "`paddle.full_like `_" + "172", "`paddle.fluid.layers.gather `_ ", "`paddle.gather `_" + "173", "`paddle.fluid.layers.gather_nd `_ ", "`paddle.gather_nd `_" + "174", "`paddle.fluid.layers.gelu `_ ", "`paddle.nn.functional.gelu `_" + "175", "`paddle.fluid.layers.greater_equal `_ ", "`paddle.greater_equal `_" + "176", "`paddle.fluid.layers.greater_than `_ ", "`paddle.greater_than `_" + "177", "`paddle.fluid.layers.group_norm `_ ", "`paddle.static.nn.group_norm `_" + "178", "`paddle.fluid.layers.GRUCell `_ ", "`paddle.nn.GRUCell `_" + "179", "`paddle.fluid.layers.hard_shrink `_ ", "`paddle.nn.functional.hardshrink `_" + "180", "`paddle.fluid.layers.hard_sigmoid `_ ", "`paddle.nn.functional.hardsigmoid `_" + "181", "`paddle.fluid.layers.hard_swish `_ ", "`paddle.nn.functional.hardswish `_" + "182", "`paddle.fluid.layers.has_inf `_ ", "`paddle.isinf `_" + "183", "`paddle.fluid.layers.has_nan `_ ", "`paddle.isnan `_" + "184", "`paddle.fluid.layers.hsigmoid `_ ", "`paddle.nn.functional.hsigmoid_loss `_" + "185", "`paddle.fluid.layers.increment `_ ", "`paddle.increment `_" + "186", "`paddle.fluid.layers.inverse_time_decay `_ ", "`paddle.optimizer.lr.InverseTimeDecay `_" + "187", "`paddle.fluid.layers.index_select `_ ", "`paddle.index_select `_" + "188", "`paddle.fluid.layers.instance_norm `_ ", "`paddle.static.nn.instance_norm `_" + "189", "`paddle.fluid.layers.interpolate `_ ", "`paddle.nn.functional.interpolate `_" + "190", "`paddle.fluid.layers.is_empty `_ ", "`paddle.is_empty `_" + "191", "`paddle.fluid.layers.isfinite `_ ", "`paddle.isfinite `_" + "192", "`paddle.fluid.layers.kldiv_loss `_ ", "`paddle.nn.functional.kl_div `_" + "193", "`paddle.fluid.layers.kron `_ ", "`paddle.kron `_" + "194", "`paddle.fluid.layers.label_smooth `_ ", "`paddle.nn.functional.label_smooth `_" + "195", "`paddle.fluid.layers.layer_norm `_ ", "`paddle.static.nn.layer_norm `_" + "196", "`paddle.fluid.layers.leaky_relu `_ ", "`paddle.nn.functional.leaky_relu `_" + "197", "`paddle.fluid.layers.less_equal `_ ", "`paddle.less_equal `_" + "198", "`paddle.fluid.layers.less_than `_ ", "`paddle.less_than `_" + "199", "`paddle.fluid.layers.linspace `_ ", "`paddle.linspace `_" + "200", "`paddle.fluid.layers.log `_ ", "`paddle.log `_" + "201", "`paddle.fluid.layers.log1p `_ ", "`paddle.log1p `_" + "202", "`paddle.fluid.layers.log_loss `_ ", "`paddle.nn.functional.log_loss `_" + "203", "`paddle.fluid.layers.log_softmax `_ ", "`paddle.nn.functional.log_softmax `_" + "204", "`paddle.fluid.layers.logical_and `_ ", "`paddle.logical_and `_" + "205", "`paddle.fluid.layers.logical_not `_ ", "`paddle.logical_not `_" + "206", "`paddle.fluid.layers.logical_or `_ ", "`paddle.logical_or `_" + "207", "`paddle.fluid.layers.logical_xor `_ ", "`paddle.logical_xor `_" + "208", "`paddle.fluid.layers.logsigmoid `_ ", "`paddle.nn.functional.log_sigmoid `_" + "209", "`paddle.fluid.layers.logsumexp `_ ", "`paddle.logsumexp `_" + "210", "`paddle.fluid.layers.lrn `_ ", "`paddle.nn.functional.local_response_norm `_" + "211", "`paddle.fluid.layers.lstm `_ ", "`paddle.nn.LSTM `_" + "212", "`paddle.fluid.layers.margin_rank_loss `_ ", "`paddle.nn.functional.margin_ranking_loss `_" + "213", "`paddle.fluid.layers.maxout `_ ", "`paddle.nn.functional.maxout `_" + "214", "`paddle.fluid.layers.mean_iou `_ ", "`paddle.metric.mean_iou `_" + "215", "`paddle.fluid.layers.meshgrid `_ ", "`paddle.meshgrid `_" + "216", "`paddle.fluid.layers.mse_loss `_ ", "`paddle.nn.functional.mse_loss `_" + "217", "`paddle.fluid.layers.mul `_ ", "`paddle.matmul `_" + "218", "`paddle.fluid.layers.multi_box_head `_ ", "`paddle.static.nn.multi_box_head `_" + "219", "`paddle.fluid.layers.multiplex `_ ", "`paddle.multiplex `_" + "220", "`paddle.fluid.layers.nce `_ ", "`paddle.static.nn.nce `_" + "221", "`paddle.fluid.layers.nonzero `_ ", "`paddle.nonzero `_" + "222", "`paddle.fluid.layers.Normal `_ ", "`paddle.distribution.Normal `_" + "223", "`paddle.fluid.layers.not_equal `_ ", "`paddle.not_equal `_" + "224", "`paddle.fluid.layers.npair_loss `_ ", "`paddle.nn.functional.npair_loss `_" + "225", "`paddle.fluid.layers.one_hot `_ ", "`paddle.nn.functional.one_hot `_" + "226", "`paddle.fluid.layers.ones `_ ", "`paddle.ones `_" + "227", "`paddle.fluid.layers.ones_like `_ ", "`paddle.ones_like `_" + "228", "`paddle.fluid.layers.pad2d `_ ", "`paddle.nn.functional.pad `_" + "229", "`paddle.fluid.layers.piecewise_decay `_ ", "`paddle.optimizer.lr.PiecewiseDecay `_" + "230", "`paddle.fluid.layers.pixel_shuffle `_ ", "`paddle.nn.functional.pixel_shuffle `_" + "231", "`paddle.fluid.layers.pool2d `_ ", "`paddle.nn.functional.avg_pool2d `_, `paddle.nn.functional.max_pool2d `_" + "232", "`paddle.fluid.layers.pool3d `_ ", "`paddle.nn.functional.avg_pool3d `_, `paddle.nn.functional.max_pool3d `_" + "233", "`paddle.fluid.layers.pow `_ ", "`paddle.pow `_" + "234", "`paddle.fluid.layers.prelu `_ ", "`paddle.nn.functional.prelu(动态图) `_, `paddle.static.nn.prelu(静态图) `_" + "235", "`paddle.fluid.layers.Print `_ ", "`paddle.static.Print `_" + "236", "`paddle.fluid.layers.py_func `_ ", "`paddle.static.py_func `_" + "237", "`paddle.fluid.layers.randint `_ ", "`paddle.randint `_" + "238", "`paddle.fluid.layers.randn `_ ", "`paddle.randn `_" + "239", "`paddle.fluid.layers.random_crop `_ ", "`paddle.vision.RandomCrop `_" + "240", "`paddle.fluid.layers.randperm `_ ", "`paddle.randperm `_" + "241", "`paddle.fluid.layers.rank `_ ", "`paddle.rank `_" + "242", "`paddle.fluid.layers.reciprocal `_ ", "`paddle.reciprocal `_" + "243", "`paddle.fluid.layers.reduce_all `_ ", "`paddle.all `_" + "244", "`paddle.fluid.layers.reduce_any `_ ", "`paddle.any `_" + "245", "`paddle.fluid.layers.reduce_max `_ ", "`paddle.max `_" + "246", "`paddle.fluid.layers.reduce_mean `_ ", "`paddle.mean `_" + "247", "`paddle.fluid.layers.reduce_min `_ ", "`paddle.min `_" + "248", "`paddle.fluid.layers.reduce_prod `_ ", "`paddle.prod `_" + "249", "`paddle.fluid.layers.reduce_sum `_ ", "`paddle.sum `_" + "250", "`paddle.fluid.layers.relu `_ ", "`paddle.nn.functional.relu `_" + "251", "`paddle.fluid.layers.relu6 `_ ", "`paddle.nn.functional.relu6 `_" + "252", "`paddle.fluid.layers.reshape `_ ", "`paddle.reshape `_" + "253", "`paddle.fluid.layers.rnn `_ ", "`paddle.nn.RNN `_" + "254", "`paddle.fluid.layers.roll `_ ", "`paddle.roll `_" + "255", "`paddle.fluid.layers.round `_ ", "`paddle.round `_" + "256", "`paddle.fluid.layers.rsqrt `_ ", "`paddle.rsqrt `_" + "257", "`paddle.fluid.layers.RNNCell `_ ", "`paddle.nn.RNNCellBase `_" + "258", "`paddle.fluid.layers.scale `_ ", "`paddle.scale `_" + "259", "`paddle.fluid.layers.scatter `_ ", "`paddle.scatter `_" + "260", "`paddle.fluid.layers.scatter_nd_add `_ ", "`paddle.scatter_nd_add `_" + "261", "`paddle.fluid.layers.scatter_nd `_ ", "`paddle.scatter_nd `_" + "262", "`paddle.fluid.layers.selu `_ ", "`paddle.nn.functional.selu `_" + "263", "`paddle.fluid.layers.shape `_ ", "`paddle.shape `_" + "264", "`paddle.fluid.layers.shard_index `_ ", "`paddle.shard_index `_" + "265", "`paddle.fluid.layers.sigmoid `_ ", "`paddle.nn.functional.sigmoid `_" + "266", "`paddle.fluid.layers.sigmoid_cross_entropy_with_logits `_ ", "`paddle.nn.functional.binary_cross_entropy `_" + "267", "`paddle.fluid.layers.sigmoid_focal_loss `_ ", "`paddle.nn.functional.sigmoid_focal_loss `_" + "268", "`paddle.fluid.layers.sign `_ ", "`paddle.sign `_" + "269", "`paddle.fluid.layers.sin `_ ", "`paddle.sin `_" + "270", "`paddle.fluid.layers.size `_ ", "`paddle.numel `_" + "271", "`paddle.fluid.layers.slice `_ ", "`paddle.slice `_" + "272", "`paddle.fluid.layers.smooth_l1 `_ ", "`paddle.nn.functional.smooth_l1_loss `_" + "273", "`paddle.fluid.layers.softmax `_ ", "`paddle.nn.functional.softmax `_" + "274", "`paddle.fluid.layers.softmax_with_cross_entropy `_ ", "`paddle.nn.functional.cross_entropy `_" + "275", "`paddle.fluid.layers.softplus `_ ", "`paddle.nn.functional.softplus `_" + "276", "`paddle.fluid.layers.softshrink `_ ", "`paddle.nn.functional.softshrink `_" + "277", "`paddle.fluid.layers.softsign `_ ", "`paddle.nn.functional.softsign `_" + "278", "`paddle.fluid.layers.spectral_norm `_ ", "`paddle.static.nn.spectral_norm `_" + "279", "`paddle.fluid.layers.split `_ ", "`paddle.split `_" + "280", "`paddle.fluid.layers.sqrt `_ ", "`paddle.sqrt `_" + "281", "`paddle.fluid.layers.square `_ ", "`paddle.square `_" + "282", "`paddle.fluid.layers.square_error_cost `_ ", "`paddle.nn.functional.square_error_cost `_" + "283", "`paddle.fluid.layers.squeeze `_ ", "`paddle.squeeze `_" + "284", "`paddle.fluid.layers.stack `_ ", "`paddle.stack `_" + "285", "`paddle.fluid.layers.stanh `_ ", "`paddle.stanh `_" + "286", "`paddle.fluid.layers.strided_slice `_ ", "`paddle.strided_slice `_" + "287", "`paddle.fluid.layers.sums `_ ", "`paddle.add_n `_" + "288", "`paddle.fluid.layers.swish `_ ", "`paddle.nn.functional.swish `_" + "289", "`paddle.fluid.layers.switch_case `_ ", "`paddle.static.nn.switch_case `_" + "290", "`paddle.fluid.layers.t `_ ", "`paddle.t `_" + "291", "`paddle.fluid.layers.tanh `_ ", "`paddle.tanh `_" + "292", "`paddle.fluid.layers.tanh_shrink `_ ", "`paddle.nn.functional.tanhshrink `_" + "293", "`paddle.fluid.layers.thresholded_relu `_ ", "`paddle.nn.functional.thresholded_relu `_" + "294", "`paddle.fluid.layers.topk `_ ", "`paddle.topk `_" + "295", "`paddle.fluid.layers.trace `_ ", "`paddle.trace `_" + "296", "`paddle.fluid.layers.transpose `_ ", "`paddle.transpose `_" + "297", "`paddle.fluid.layers.tril `_ ", "`paddle.tril `_" + "298", "`paddle.fluid.layers.triu `_ ", "`paddle.triu `_" + "299", "`paddle.fluid.layers.unfold `_ ", "`paddle.nn.functional.unfold `_" + "300", "`paddle.fluid.layers.Uniform `_ ", "`paddle.distribution.Uniform `_" + "301", "`paddle.fluid.layers.unique `_ ", "`paddle.unique `_" + "302", "`paddle.fluid.layers.unsqueeze `_ ", "`paddle.unsqueeze `_" + "303", "`paddle.fluid.layers.unstack `_ ", "`paddle.unstack `_" + "304", "`paddle.fluid.layers.warpctc `_ ", "`paddle.nn.functional.ctc_loss `_" + "305", "`paddle.fluid.layers.where `_ ", "`paddle.where `_" + "306", "`paddle.fluid.layers.while_loop `_ ", "`paddle.static.nn.while_loop `_" + "307", "`paddle.fluid.layers.zeros `_ ", "`paddle.zeros `_" + "308", "`paddle.fluid.layers.zeros_like `_ ", "`paddle.zeros_like `_" + "309", "`paddle.fluid.metrics.Accuracy `_ ", "`paddle.metric.Accuracy `_" + "310", "`paddle.fluid.metrics.Precision `_ ", "`paddle.metric.Precision `_" + "311", "`paddle.fluid.metrics.Recall `_ ", "`paddle.metric.Recall `_" + "312", "`paddle.fluid.optimizer.Adadelta `_ ", "`paddle.optimizer.Adadelta `_" + "313", "`paddle.fluid.optimizer.AdadeltaOptimizer `_ ", "`paddle.optimizer.Adadelta `_" + "314", "`paddle.fluid.optimizer.Adagrad `_ ", "`paddle.optimizer.Adagrad `_" + "315", "`paddle.fluid.optimizer.AdagradOptimizer `_ ", "`paddle.optimizer.Adagrad `_" + "316", "`paddle.fluid.optimizer.Adam `_ ", "`paddle.optimizer.Adam `_" + "317", "`paddle.fluid.optimizer.Adamax `_ ", "`paddle.optimizer.Adamax `_" + "318", "`paddle.fluid.optimizer.AdamaxOptimizer `_ ", "`paddle.optimizer.Adamax `_" + "319", "`paddle.fluid.optimizer.AdamOptimizer `_ ", "`paddle.optimizer.Adam `_" + "320", "`paddle.fluid.optimizer.Momentum `_ ", "`paddle.optimizer.Momentum `_" + "321", "`paddle.fluid.optimizer.MomentumOptimizer `_ ", "`paddle.optimizer.Momentum `_" + "322", "`paddle.fluid.optimizer.RMSPropOptimizer `_ ", "`paddle.optimizer.RMSProp `_" + "323", "`paddle.fluid.optimizer.SGD `_ ", "`paddle.optimizer.SGD `_" + "324", "`paddle.fluid.optimizer.SGDOptimizer `_ ", "`paddle.optimizer.SGD `_" + "325", "`paddle.fluid.regularizer.L1Decay `_ ", "`paddle.regularizer.L1Decay `_" + "326", "`paddle.fluid.regularizer.L1DecayRegularizer `_ ", "`paddle.regularizer.L1Decay `_" + "327", "`paddle.fluid.regularizer.L2Decay `_ ", "`paddle.regularizer.L2Decay `_" + "328", "`paddle.fluid.regularizer.L2DecayRegularizer `_ ", "`paddle.regularizer.L2Decay `_" \ No newline at end of file diff --git a/doc/paddle/guides/images/inference_ecosystem.png b/doc/paddle/guides/images/inference_ecosystem.png new file mode 100644 index 00000000000..5f1800fa093 Binary files /dev/null and b/doc/paddle/guides/images/inference_ecosystem.png differ diff --git a/doc/paddle/guides/index_cn.rst b/doc/paddle/guides/index_cn.rst index 098b66283f8..b1550cde449 100644 --- a/doc/paddle/guides/index_cn.rst +++ b/doc/paddle/guides/index_cn.rst @@ -4,9 +4,9 @@ 飞桨开源框架(PaddlePaddle)是一个易用、高效、灵活、可扩展的深度学习框架。 -您可参考飞桨框架的 `Github `_ 了解详情,也可阅读 `版本说明 <../release_note_cn.html>`_ 了解2.0rc版本的特性。 +你可参考飞桨框架的 `Github `_ 了解详情,也可阅读 `版本说明 <../release_note_cn.html>`_ 了解2.0版本的特性。 -让我们从学习飞桨的基本概念这里开始: +使用教程分为如下的模块: - `整体介绍 <./01_paddle2.0_introduction/index_cn.html>`_ : 飞桨框架2.0新特性的介绍与飞桨框架2.0升级指南的说明。 - `模型开发 <./02_paddle2.0_develop/index_cn.html>`_ : 飞桨框架2.0模型开发全流程说明。 @@ -14,6 +14,7 @@ - `动态图转静态图 <./04_dygraph_to_static/index_cn.html>`_ : 介绍飞桨框架动态图转静态图的方法。 - `预测部署 <./05_inference_deployment/index_cn.html>`_ : 介绍如何使用训练好的模型进行预测。 - `分布式训练 <./06_distributed_training/index_cn.html>`_ : 介绍如何使用分布式进行训练。 +- `昆仑XPU芯片运行飞桨 <./xpu_docs/index_cn.html>`_ : 介绍如何在昆仑XPU芯片环境上安装和使用飞桨。 - `自定义OP <./07_new_op/index_cn.html>`_ : 介绍飞桨框架自定义OP的方法。 - `参与开发 <./08_contribution/index_cn.html>`_ : 介绍如何参与飞桨框架的开发。 - `其他说明 <./09_others_information/index_cn.html>`_ : 飞桨框架的其他说明文档。 @@ -27,6 +28,7 @@ 04_dygraph_to_static/index_cn.rst 05_inference_deployment/index_cn.rst 06_distributed_training/index_cn.rst + xpu_docs/index_cn.rst 07_new_op/index_cn.rst 08_contribution/index_cn.rst 09_others_information/index_cn.rst diff --git a/doc/paddle/guides/xpu_docs/index_cn.rst b/doc/paddle/guides/xpu_docs/index_cn.rst new file mode 100644 index 00000000000..e08fda89a21 --- /dev/null +++ b/doc/paddle/guides/xpu_docs/index_cn.rst @@ -0,0 +1,19 @@ +.. _cn_xpu_information: + +#################### +昆仑XPU芯片运行飞桨 +#################### + +百度昆仑AI计算处理器(Baidu KUNLUN AI Computing Processor)是百度集十年AI产业技术实践于2019年推出的全功能AI芯片。基于自主研发的先进XPU架构,为云端和边缘端的人工智能业务而设计。 百度昆仑与飞桨及其他国产软硬件强强组合,打造一个全面领先的国产化AI技术生态,部署和应用于诸多 “人工智能+“的行业领域,包括智能云和高性能计算,智慧制造、智慧城市和安防等。更多昆仑XPU芯片详情及技术指标请 `点击这里 `_ 。 +参考以下内容可快速了解和体验昆仑XPU芯片上运行飞桨: + +- `飞桨对昆仑XPU芯片的支持 <./paddle_2.0_xpu_cn.html>`_ : 飞桨支持昆仑XPU芯片运行 +- `飞桨框架昆仑xpu版安装说明 <./paddle_install_cn.html>`_ : 飞桨框架昆仑xpu版安装说明 +- `飞桨框架昆仑XPU版训练示例 <./train_example_cn.html>`_ : 飞桨框架昆仑XPU版训练示例 + +.. toctree:: + :hidden: + + paddle_2.0_xpu_cn.md + paddle_install_cn.md + train_example_cn.md \ No newline at end of file diff --git a/doc/paddle/guides/xpu_docs/paddle_2.0_xpu_cn.md b/doc/paddle/guides/xpu_docs/paddle_2.0_xpu_cn.md new file mode 100644 index 00000000000..9ca1dd9b673 --- /dev/null +++ b/doc/paddle/guides/xpu_docs/paddle_2.0_xpu_cn.md @@ -0,0 +1,32 @@ +# 飞桨对昆仑XPU芯片的支持 + +自飞桨2.0版本起支持昆仑XPU,目前基于昆仑XPU和X86(Intel)CPU可实现12个模型单机单卡/单机多卡的训练,如下图所示: + +| 模型 | 领域 | 模型readme | 编程范式 | 可用的CPU类型 | 单机多卡支持 | +| ------------------ | -------- | ---------- | ------------- | ----------------------- | -------------- | +| VGG16/19 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/dygraph/docs/zh_CN/extension/train_on_xpu.md) | 静态图 | X86(Intel) | 支持 | +| ResNet50 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/dygraph/docs/zh_CN/extension/train_on_xpu.md) | 静态图 | X86(Intel)ARM(飞腾) | 支持 | +| MobileNet_v3 | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/dygraph/docs/zh_CN/extension/train_on_xpu.md) | 静态图 | X86(Intel) | 支持 | +| HRNet | 图像分类 | [模型链接](https://github.com/PaddlePaddle/PaddleClas/blob/dygraph/docs/zh_CN/extension/train_on_xpu.md) | 静态图 | X86(Intel) | 支持 | +| Yolov3-DarkNet53 | 目标检测 | [模型链接](https://github.com/PaddlePaddle/PaddleDetection/blob/master/docs/tutorials/train_on_kunlun.md) | 静态图 | X86(Intel) | 支持 | +| Yolov3-MobileNetv1 | 目标检测 | [模型链接](https://github.com/PaddlePaddle/PaddleDetection/blob/master/docs/tutorials/train_on_kunlun.md) | 静态图 | X86(Intel) | 支持 | +| Mask_RCNN | 目标检测 | [模型链接](https://github.com/PaddlePaddle/PaddleDetection/blob/master/docs/tutorials/train_on_kunlun.md) | 静态图 | X86(Intel) | 支持 | +| Deeplab_v3 | 图像分割 | [模型链接](https://github.com/PaddlePaddle/PaddleSeg/blob/release/v2.0.0-rc/legacy/docs/train_on_xpu.md) | 静态图 | X86(Intel) | 支持 | +| Unet | 图像分割 | [模型链接](https://github.com/PaddlePaddle/PaddleSeg/blob/release/v2.0.0-rc/legacy/docs/train_on_xpu.md) | 静态图 | X86(Intel) | 支持 | +| Bert-Base | NLP | [模型链接](https://github.com/PaddlePaddle/models/blob/6bb6834cf399254d59d67cf9f9d4c92b41eb6678/PaddleNLP/examples/language_model/bert/README.md) | 静态图/动态图 | X86(Intel) | 支持(静态图) | +| Ernie-Base | NLP | | 静态图/动态图 | X86(Intel) | 支持(静态图) | +| DQN | 强化学习 | [模型链接](https://github.com/PaddlePaddle/PARL/blob/develop/examples/DQN/README.md) | 静态图 | X86(Intel) | 支持 | + +模型放置在飞桨模型套件中,各领域套件是 github.com/PaddlePaddle 下的独立repo,clone下载即可获取所需的模型文件: + +| 领域 | 套件名称 | 分支/版本 | +| -------- | --------------- | ---------------- | +| 图像分类 | PaddleClas | release/2.0 | +| 目标检测 | PaddleDetection | release/2.0-beta | +| 图像分割 | PaddleSeg | release/2.0-beta | +| NLP | models | develop | +| 强化学习 | PARL | r1.4 | + +随着ARM架构的高性能、低功耗、低成本的优势日益突显,ARM CPU更多地进入PC和服务器领域,众多新锐国产CPU也纷纷采用ARM架构。在这一趋势下,我们开始尝试在飞腾CPU和昆仑XPU上运行飞桨,当前已验证ResNet50的训练效果。 + +更多的常用模型以及动态图组网将在后续版本增加。高性能预测库PaddleInference、PaddleLite、PaddleServing将在近期发布的新版本中支持昆仑XPU。敬请期待。 diff --git a/doc/paddle/guides/xpu_docs/paddle_install_cn.md b/doc/paddle/guides/xpu_docs/paddle_install_cn.md new file mode 100644 index 00000000000..93d83a0b123 --- /dev/null +++ b/doc/paddle/guides/xpu_docs/paddle_install_cn.md @@ -0,0 +1,213 @@ +# 飞桨框架昆仑XPU版安装说明 + +飞桨提供两种安装方式: + +**1. 预编译的支持昆仑XPU的wheel包** + +目前此wheel包只支持两种环境: + +英特尔CPU+昆仑XPU+Ubuntu系统 + +飞腾CPU+昆仑XPU+麒麟V10系统 + +**2. 源码编译安装** + +其他环境请选择源码编译安装。 + +## 安装方式一:通过Wheel包安装 + +### 下载安装包 + +**环境1:英特尔CPU+昆仑XPU+Ubuntu系统** + +Python3.7 +``` +wget https://paddle-wheel.bj.bcebos.com/kunlun/paddlepaddle-2.0.0-cp37-cp37m-linux_x86_64.whl +``` +``` +python3.7 -m pip install -U paddlepaddle-2.0.0-cp37-cp37m-linux_x86_64.whl +``` +Python3.6 +``` +wget https://paddle-wheel.bj.bcebos.com/kunlun/paddlepaddle-2.0.0-cp36-cp36m-linux_x86_64.whl +``` +``` +python3.6 -m pip install -U ``paddlepaddle-2.0.0-cp36-cp36m-linux_x86_64.whl +``` +Python2.7 +``` +Wget https://paddle-wheel.bj.bcebos.com/kunlun/paddlepaddle-2.0.0-cp27-cp27mu-linux_x86_64.whl +``` +``` +python2.7 -m pip install -U ``paddlepaddle-2.0.0-cp27-cp27m-linux_x86_64.whl +``` + +**环境2:飞腾CPU+昆仑XPU+麒麟V10系统** + +Python3.7 +``` +wget https://paddle-wheel.bj.bcebos.com/kunlun/paddlepaddle-2.0.0-cp37-cp37m-linux_aarch64.whl +``` + +``` +python3.7 -m pip install -U paddlepaddle-2.0.0-cp37-cp37m-linux_aarch64.whl +``` +Python3.6 +``` +wget https://paddle-wheel.bj.bcebos.com/kunlun/paddlepaddle-2.0.0-cp36-cp36m-linux_aarch64.whl +``` + +``` +python3.6 -m pip install -U paddlepaddle-2.0.0-cp36-cp36m-linux_aarch64.whl +``` +如果使用预编译的支持昆仑XPU的wheel包出现环境问题,推荐使用源码自行编译支持昆仑XPU的包。 + +###验证安装 +安装完成后您可以使用 python 或 python3 进入python解释器,输入 + +``` +import paddle +``` +再输入 +``` +paddle.utils.run_check() +``` +如果出现PaddlePaddle is installed successfully!,说明您已成功安装。 + +## 安装方式二:从源码编译支持昆仑XPU的包 + +### 环境准备 + +**英特尔CPU+昆仑XPU+Ubuntu系统** + +- **处理器:Intel(R) Xeon(R) Gold 6148 CPU @2.40GHz** +- **操作系统:Ubuntu 16.04.6 LTS** +- **Python版本: 2.7/3.6/3.7 (64 bit)** +- **pip或pip3版本:9.0.1+ (64 bit)** +- **cmake版本:3.10+** +- **gcc/g++版本:8.2+** + +**飞腾CPU+昆仑XPU+麒麟V10系统** + +- **处理器:Phytium,FT-2000+/64** +- **操作系统:Kylin release V10 (SP1)/(Tercel)-aarch64-Build04/20200711** +- **Python版本:3.6/3.7 (64 bit)** +- **pip或pip3版本: 9.0.1+ (64 bit)** +- **cmake版本:3.10+** +- **gcc/g++版本:8.2+** + +### 源码编译安装步骤: + +1. Paddle依赖cmake进行编译构建,需要cmake版本>=3.10,如果操作系统提供的源包括了合适版本的cmake,直接安装即可,否则需要 + +``` +wget https://github.com/Kitware/CMake/releases/download/v3.16.8/cmake-3.16.8.tar.gz +tar -xzf cmake-3.16.8.tar.gz && cd cmake-3.16.8 +./bootstrap && make && sudo make install +``` + +2. Paddle内部使用patchelf来修改动态库的rpath,如果操作系统提供的源包括了patchelf,直接安装即可,否则需要源码安装,请参考 + +``` +./bootstrap.sh +./configure +make +make check +sudo make install +``` + +3. 根据[requirments.txt](https://github.com/PaddlePaddle/Paddle/blob/develop/python/requirements.txt)安装Python依赖库 +4. 将Paddle的源代码克隆到当下目录下的Paddle文件夹中,并进入Paddle目录 + +``` +git clone https://github.com/PaddlePaddle/Paddle.git +cd Paddle +``` + +5. 建议切换到release2.0分支下进行编译: + +``` +git checkout [``分支名``] +``` + +例如: + +``` +git checkout release/2.0 +``` + +6. 并且请创建并进入一个叫build的目录下 + +``` +mkdir build && cd build +``` + +7. 链接过程中打开文件数较多,可能超过系统默认限制导致编译出错,设置进程允许打开的最大文件数: + +``` +ulimit -n 4096 +``` +8. 执行cmake + +9. 具体编译选项含义请参见[编译选项表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/install/Tables.html#Compile) + +**英特尔CPU+昆仑XPU+Ubuntu系统** + + +Python3 +``` +cmake .. -DPY_VERSION=3 -DPYTHON_EXECUTABLE=`which python3` -DWITH_MKL=OFF -DWITH_XPU=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -DWITH_XPU_BKCL=ON +``` + +Python2 +``` +cmake .. -DPY_VERSION=2 -DPYTHON_EXECUTABLE=`which python2` -DWITH_MKL=OFF -DWITH_XPU=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -DWITH_XPU_BKCL=ON +``` + +**飞腾CPU+昆仑XPU+麒麟V10系统** + +Python3 +``` +cmake .. -DPY_VERSION=3 -DPYTHON_EXECUTABLE=`which python3` -DWITH_ARM=ON -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -DON_INFER=ON -DWITH_XBYAK=OFF -DWITH_XPU=ON -DWITH_GPU=OFF -DWITH_LITE=ON -DLITE_GIT_TAG=develop -DWITH_AARCH64=ON +``` +10. 使用以下命令来编译 + +``` +make -j$(nproc) +``` + +11. 编译成功后进入Paddle/build/python/dist目录下找到生成的.whl包 。 + +12. 将生成的.whl包copy至带有昆仑XPU的目标机器上,并在目标机器上根据[requirments.txt](https://github.com/PaddlePaddle/Paddle/blob/develop/python/requirements.txt)安装Python依赖库。(如果编译机器同时为带有昆仑XPU的目标机器,略过此步) + +13. 在带有昆仑XPU的目标机器安装编译好的.whl包:pip install -U(whl包的名字)或pip3 install -U(whl包的名字)。恭喜,至此您已完成昆仑XPU机器上PaddlePaddle的编译安装。 + +**验证安装** + +安装完成后您可以使用 python 或 python3 进入python解释器,输入 + +``` +import paddle +``` + +再输入 + +``` +paddle.utils.run_check() +``` + +如果出现PaddlePaddle is installed successfully!,说明您已成功安装。 + +### 如何卸载 + +使用以下命令卸载PaddlePaddle: + +``` +pip uninstall paddlepaddle +``` + +或 + +``` +pip3 uninstall paddlepaddle +``` diff --git a/doc/paddle/guides/xpu_docs/train_example_cn.md b/doc/paddle/guides/xpu_docs/train_example_cn.md new file mode 100644 index 00000000000..e05c810b275 --- /dev/null +++ b/doc/paddle/guides/xpu_docs/train_example_cn.md @@ -0,0 +1,23 @@ +# 飞桨框架昆仑XPU版训练示例 + +使用XPU训练与cpu/gpu相同,只需要加上-o use_xpu=True, 表示执行在昆仑设备上。 + +#### ResNet50下载并运行示例: + +模型文件下载命令: + +``` +cd path_to_clone_PaddleClas +git clone -b release/static https://github.com/PaddlePaddle/PaddleClas.git +``` +也可以访问PaddleClas的[github repo](https://github.com/PaddlePaddle/PaddleClas/tree/release/static)直接下载源码。 + +运行训练: +``` +#FLAGS指定单卡或多卡训练,此示例运行2个卡 +export FLAGS_selected_xpus=0,1 +#启动训练 +Python3.7 tools/train_multi_platform.py -c configs/kunlun/ResNet50.yaml -o use_gpu=False -o use_xpu=True +``` + +注意:飞腾CPU+昆仑XPU的环境下暂未支持多卡训练。 diff --git a/doc/paddle/install/Tables.md b/doc/paddle/install/Tables.md index afd9b23c8f3..af6ba5f79f5 100644 --- a/doc/paddle/install/Tables.md +++ b/doc/paddle/install/Tables.md @@ -223,11 +223,11 @@ PaddePaddle通过编译时指定路径来实现引用各种BLAS/CUDA/cuDNN库。 - paddlepaddle==[版本号] 例如 paddlepaddle==2.0.0rc1 + paddlepaddle==[版本号] 例如 paddlepaddle==2.0.0 只支持CPU对应版本的PaddlePaddle,具体版本请参见Pypi - paddlepaddle-gpu==[版本号] 例如 paddlepaddle-gpu==2.0.0rc1 + paddlepaddle-gpu==[版本号] 例如 paddlepaddle-gpu==2.0.0 默认安装支持CUDA 10.0和cuDNN 7的对应[版本号]的PaddlePaddle安装包 @@ -237,7 +237,7 @@ PaddePaddle通过编译时指定路径来实现引用各种BLAS/CUDA/cuDNN库。 您可以在 [Release History](https://pypi.org/project/paddlepaddle-gpu/#history) 中找到PaddlePaddle-gpu的各个发行版本。 > 其中`postXX` 对应的是CUDA和cuDNN的版本,`postXX`之前的数字代表Paddle的版本 -需要注意的是,命令中 paddlepaddle-gpu==2.0.0rc1 在windows环境下,会默认安装支持CUDA 10.2和cuDNN 7的对应[版本号]的PaddlePaddle安装包 +需要注意的是,命令中 paddlepaddle-gpu==2.0.0 在windows环境下,会默认安装支持CUDA 10.2和cuDNN 7的对应[版本号]的PaddlePaddle安装包

@@ -260,211 +260,347 @@ PaddePaddle通过编译时指定路径来实现引用各种BLAS/CUDA/cuDNN库。 cpu-mkl - paddlepaddle-2.0.0rc1-cp27-cp27mu-linux_x86_64.whl - paddlepaddle-2.0.0rc1-cp27-cp27m-linux_x86_64.whl - paddlepaddle-2.0.0rc1-cp35-cp35m-linux_x86_64.whl - paddlepaddle-2.0.0rc1-cp36-cp36m-linux_x86_64.whl - paddlepaddle-2.0.0rc1-cp37-cp37m-linux_x86_64.whl - paddlepaddle-2.0.0rc1-cp38-cp38-linux_x86_64.whl + paddlepaddle-2.0.0-cp27-cp27mu-linux_x86_64.whl + - + paddlepaddle-2.0.0-cp35-cp35m-linux_x86_64.whl + paddlepaddle-2.0.0-cp36-cp36m-linux_x86_64.whl + paddlepaddle-2.0.0-cp37-cp37m-linux_x86_64.whl + paddlepaddle-2.0.0-cp38-cp38-linux_x86_64.whl cuda9.0_cudnn7-mkl - - paddlepaddle_gpu-2.0.0rc1.post90-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post90-cp27-cp27m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post90-cp35-cp35m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post90-cp36-cp36m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post90-cp37-cp37m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post90-cp38-cp38-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post90-cp27-cp27mu-linux_x86_64.whl + - + + paddlepaddle_gpu-2.0.0.post90-cp35-cp35m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post90-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post90-cp37-cp37m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post90-cp38-cp38-linux_x86_64.whl cuda10.0_cudnn7-mkl - - paddlepaddle_gpu-2.0.0rc1.post100-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post100-cp27-cp27m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post100-cp35-cp35m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post100-cp36-cp36m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post100-cp37-cp37m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post100-cp38-cp38-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post100-cp27-cp27mu-linux_x86_64.whl + - + + paddlepaddle_gpu-2.0.0.post100-cp35-cp35m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post100-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post100-cp37-cp37m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post100-cp38-cp38-linux_x86_64.whl cuda10.1_cudnn7-mkl - - paddlepaddle_gpu-2.0.0rc1.post101-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post101-cp27-cp27m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post101-cp35-cp35m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post101-cp36-cp36m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post101-cp37-cp37m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post101-cp38-cp38-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post101-cp27-cp27mu-linux_x86_64.whl + - + + paddlepaddle_gpu-2.0.0.post101-cp35-cp35m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post101-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post101-cp37-cp37m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post101-cp38-cp38-linux_x86_64.whl cuda10.2_cudnn7-mkl - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1-cp35-cp35m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1-cp37-cp37m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1-cp38-cp38-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_x86_64.whl + - + + paddlepaddle_gpu-2.0.0-cp35-cp35m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0-cp37-cp37m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0-cp38-cp38-linux_x86_64.whl + + + cuda11.0-cudnn8-mkl + + paddlepaddle_gpu-2.0.0.post110-cp27-cp27mu-linux_x86_64.whl + - + + paddlepaddle_gpu-2.0.0.post110-cp35-cp35m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post110-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post110-cp37-cp37m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post110-cp38-cp38-linux_x86_64.whl + + + cuda10.0-cudnn7.6-trt6.0.1.5 + - + - + - + + paddlepaddle_gpu-2.0.0.post100-cp36-cp36m-linux_x86_64.whl + - + - cuda10.1-cudnn7.6-trt6.0.1.5 - - paddlepaddle_gpu-2.0.0rc1.post101-cp27-cp27mu-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post101-cp27-cp27mu-linux_x86_64.whl - - - - paddlepaddle_gpu-2.0.0rc1.post101-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post101-cp36-cp36m-linux_x86_64.whl - - cuda10.2-cudnn8.0-trt7.1.3 - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27mu-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_x86_64.whl - - - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_x86_64.whl - - - nv-jetson-jetpack4.3-nano - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27mu-linux_aarch64.whl + 2.0.0-nv-jetson-jetpack4.3-all + + paddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_aarch64.whl - - - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-linux_aarch64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_aarch64.whl - - - nv-jetson-jetpack4.3-tx2 - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27mu-linux_aarch64.whl + 2.0.0-nv-jetson-jetpack4.3-nano + + paddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_aarch64.whl - - - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-linux_aarch64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_aarch64.whl - - - nv-jetson-jetpack4.3-xavier (for AGX Xavier and Xavier NX) - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27mu-linux_aarch64.whl + 2.0.0-nv-jetson-jetpack4.3-tx2 + + paddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_aarch64.whl - - - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-linux_aarch64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_aarch64.whl - - - win_cpu_mkl + 2.0.0-nv-jetson-jetpack4.3-xavier + + paddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_aarch64.whl + - + - + + paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_aarch64.whl + - - - - paddlepaddle-2.0.0rc1-cp27-cp27m-win_amd64.whl - - paddlepaddle-2.0.0rc1-cp35-cp35m-win_amd64.whl - - paddlepaddle-2.0.0rc1-cp36-cp36m-win_amd64.whl - - paddlepaddle-2.0.0rc1-cp37-cp37m-win_amd64.whl - - paddlepaddle-2.0.0rc1-cp38-cp38-win_amd64.whl - win_cuda9.0_cudnn7_mkl + win-cpu-mkl-avx + - + + paddlepaddle-2.0.0-cp27-cp27m-win_amd64.whl + + paddlepaddle-2.0.0-cp35-cp35m-win_amd64.whl + + paddlepaddle-2.0.0-cp36-cp36m-win_amd64.whl + + paddlepaddle-2.0.0-cp37-cp37m-win_amd64.whl + + paddlepaddle-2.0.0-cp38-cp38-win_amd64.whl + + + win-cpu-mkl-noavx + - + + paddlepaddle-2.0.0-cp27-cp27m-win_amd64.whl + - + - + - - - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp35-cp35m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp37-cp37m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp38-cp38m-win_amd64.whl - win_cuda10.0_cudnn7_mkl + win-cpu-openblas-avx + - + + paddlepaddle-2.0.0-cp27-cp27m-win_amd64.whl + - + + paddlepaddle-2.0.0-cp36-cp36m-win_amd64.whl + - - - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp35-cp35m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp37-cp37m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp38-cp38m-win_amd64.whl - win_cuda10.1_cudnn7_mkl + win-cpu-openblas-noavx + - + + paddlepaddle-2.0.0-cp27-cp27m-win_amd64.whl + - + - + - - - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp35-cp35m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp37-cp37m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp38-cp38m-win_amd64.whl - win_cuda10.2_cudnn7_mkl + win-cuda9.0-cudnn7-mkl-avx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp38-cp38m-win_amd64.whl + + + win-cuda9.0-cudnn7-mkl-noavx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + - + - + - - - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp35-cp35m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp37-cp37m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp37-cp37m-win_amd64.whl - mac_cpu + win-cuda9.0-cudnn7-openblas-avx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + - + + paddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whl + - - - - paddlepaddle-2.0.0rc1-cp27-cp27m-macosx_10_6_intel.whl - - paddlepaddle-2.0.0rc1-cp35-cp35m-macosx_10_6_intel.whl - - paddlepaddle-2.0.0rc1-cp36-cp36m-macosx_10_6_intel.whl - - paddlepaddle-2.0.0rc1-cp37-cp37m-macosx_10_6_intel.whl - - paddlepaddle-2.0.0rc1-cp38-cp38-macosx_10_14_x86_64.whl + + + win-cuda9.0-cudnn7-openblas-noavx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + - + - + - + - + + + win-cuda10.0-cudnn7-mkl-avx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp38-cp38m-win_amd64.whl + + + win-cuda10.0-cudnn7-mkl-noavx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + - + - + - + - + + + win-cuda10.1-cudnn7-mkl-avx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp38-cp38m-win_amd64.whl + + + win-cuda10.1-cudnn7-mkl-noavx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + - + - + - + - + + + win-cuda10.2-cudnn7-mkl-avx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whl + + + win-cuda10.2-cudnn7-mkl-noavx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + - + - + - + - + + + win-cuda11.0-cudnn8-mkl-avx + - + - + + paddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp38-cp38m-win_amd64.whl + + + mac-cpu + - + + paddlepaddle-2.0.0-cp27-cp27m-macosx_10_6_intel.whl + + paddlepaddle-2.0.0-cp35-cp35m-macosx_10_6_intel.whl + + paddlepaddle-2.0.0-cp36-cp36m-macosx_10_6_intel.whl + + paddlepaddle-2.0.0-cp37-cp37m-macosx_10_6_intel.whl + + paddlepaddle-2.0.0-cp38-cp38-macosx_10_14_x86_64.whl @@ -522,48 +658,48 @@ platform tag: 类似 'linux_x86_64', 'any' cpu-mkl - paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl - paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl - paddlepaddle-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle-latest-cp37-cp37m-linux_x86_64.whl - paddlepaddle-latest-cp38-cp38-linux_x86_64.whl + paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl + - + paddlepaddle-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle-latest-cp38-cp38-linux_x86_64.whl cpu-openblas - paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl - paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl - paddlepaddle-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle-latest-cp37-cp37m-linux_x86_64.whl - paddlepaddle-latest-cp38-cp38-linux_x86_64.whl + paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl + - + paddlepaddle-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle-latest-cp38-cp38-linux_x86_64.whl cuda9-cudnn7-openblas - paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl cuda9-cudnn7-mkl - paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl cuda10.0-cudnn7-mkl - paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl @@ -590,21 +726,30 @@ platform tag: 类似 'linux_x86_64', 'any' cuda10.1-cudnn7-mkl - paddlepaddle_gpu-0.0.0-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-0.0.0-cp35-cp35m-linux_x86_64.whl - paddlepaddle_gpu-0.0.0-cp36-cp36m-linux_x86_64.whl - paddlepaddle_gpu-0.0.0-cp37-cp37m-linux_x86_64.whl - paddlepaddle_gpu-0.0.0-cp38-cp38m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp38-cp38m-linux_x86_64.whl cuda10.2-cudnn7-mkl - paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl + - + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl + + + cuda11.0-cudnn8-mkl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl diff --git a/doc/paddle/install/Tables_en.md b/doc/paddle/install/Tables_en.md index e05b532673a..7f303438f3a 100644 --- a/doc/paddle/install/Tables_en.md +++ b/doc/paddle/install/Tables_en.md @@ -220,11 +220,11 @@ PaddePaddle implements references to various BLAS/CUDA/cuDNN libraries by specif - paddlepaddle==[version code] such as paddlepaddle==2.0.0rc1 + paddlepaddle==[version code] such as paddlepaddle==2.0.0 Only support the corresponding version of the CPU PaddlePaddle, please refer to Pypi for the specific version. - paddlepaddle-gpu==[version code], such as paddlepaddle-gpu==2.0.0rc1 + paddlepaddle-gpu==[version code], such as paddlepaddle-gpu==2.0.0 The default installation supports the PaddlePaddle installation package corresponding to [version number] of CUDA 10.0 and cuDNN 7 @@ -234,7 +234,7 @@ PaddePaddle implements references to various BLAS/CUDA/cuDNN libraries by specif You can find various distributions of PaddlePaddle-gpu in [the Release History](https://pypi.org/project/paddlepaddle-gpu/#history). > 'postxx' corresponds to CUDA and cuDNN versions, and the number before 'postxx' represents the version of Paddle -Please note that: in the commands, paddlepaddle-gpu==2.0.0rc1 will install the installation package of PaddlePaddle that supports CUDA 10.0 and cuDNN 7 by default under Windows environment. +Please note that: in the commands, paddlepaddle-gpu==2.0.0 will install the installation package of PaddlePaddle that supports CUDA 10.0 and cuDNN 7 by default under Windows environment. @@ -259,202 +259,352 @@ Please note that: in the commands, paddlepaddle-gpu==2.0.0rc1 wil cpu-mkl - - paddlepaddle-2.0.0rc1-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle-2.0.0rc1-cp27-cp27m-linux_x86_64.whl - - paddlepaddle-2.0.0rc1-cp35-cp35m-linux_x86_64.whl - - paddlepaddle-2.0.0rc1-cp36-cp36m-linux_x86_64.whl - - paddlepaddle-2.0.0rc1-cp37-cp37m-linux_x86_64.whl - - paddlepaddle-2.0.0rc1-cp38-cp38-linux_x86_64.whl - - - cuda10_cudnn7-mkl - - paddlepaddle_gpu-2.0.0rc1.post100-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post100-cp27-cp27m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post100-cp35-cp35m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post100-cp36-cp36m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post100-cp37-cp37m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post100-cp38-cp38-linux_x86_64.whl + + paddlepaddle-2.0.0-cp27-cp27mu-linux_x86_64.whl + - + + paddlepaddle-2.0.0-cp35-cp35m-linux_x86_64.whl + + paddlepaddle-2.0.0-cp36-cp36m-linux_x86_64.whl + + paddlepaddle-2.0.0-cp37-cp37m-linux_x86_64.whl + + paddlepaddle-2.0.0-cp38-cp38-linux_x86_64.whl + + + cuda9.0-cudnn7-mkl + + paddlepaddle_gpu-2.0.0.post90-cp27-cp27mu-linux_x86_64.whl + - + + paddlepaddle_gpu-2.0.0.post90-cp35-cp35m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post90-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post90-cp37-cp37m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post90-cp38-cp38-linux_x86_64.whl + + + cuda10.0-cudnn7-mkl + + paddlepaddle_gpu-2.0.0.post100-cp27-cp27mu-linux_x86_64.whl + - + + paddlepaddle_gpu-2.0.0.post100-cp35-cp35m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post100-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post100-cp37-cp37m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post100-cp38-cp38-linux_x86_64.whl cuda10.1_cudnn7-mkl - - paddlepaddle_gpu-2.0.0rc1.post101-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post101-cp27-cp27m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post101-cp35-cp35m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post101-cp36-cp36m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post101-cp37-cp37m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1.post101-cp38-cp38-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post101-cp27-cp27mu-linux_x86_64.whl + - + + paddlepaddle_gpu-2.0.0.post101-cp35-cp35m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post101-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post101-cp37-cp37m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post101-cp38-cp38-linux_x86_64.whl cuda10.2_cudnn7-mkl - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1-cp35-cp35m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1-cp37-cp37m-linux_x86_64.whl - - paddlepaddle_gpu-2.0.0rc1-cp38-cp38-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_x86_64.whl + - + + paddlepaddle_gpu-2.0.0-cp35-cp35m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0-cp37-cp37m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0-cp38-cp38-linux_x86_64.whl + + + cuda11.0-cudnn8-mkl + + paddlepaddle_gpu-2.0.0.post110-cp27-cp27mu-linux_x86_64.whl + - + + paddlepaddle_gpu-2.0.0.post110-cp35-cp35m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post110-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post110-cp37-cp37m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post110-cp38-cp38-linux_x86_64.whl + + + cuda10.0-cudnn7.6-trt6.0.1.5 + - + - + - + + paddlepaddle_gpu-2.0.0.post100-cp36-cp36m-linux_x86_64.whl + - + - cuda10.1-cudnn7.6-trt6.0.1.5 - - paddlepaddle_gpu-2.0.0rc1.post101-cp27-cp27mu-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post101-cp27-cp27mu-linux_x86_64.whl - - - - paddlepaddle_gpu-2.0.0rc1.post101-cp36-cp36m-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0.post101-cp36-cp36m-linux_x86_64.whl - - cuda10.2-cudnn8.0-trt7.1.3 - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27mu-linux_x86_64.whl + + paddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_x86_64.whl + - + - + + paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_x86_64.whl + - + - + + + 2.0.0-nv-jetson-jetpack4.3-all + + paddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_aarch64.whl + - + - + + paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_aarch64.whl + - + - + + + 2.0.0-nv-jetson-jetpack4.3-nano + + paddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_aarch64.whl + - + - + + paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_aarch64.whl + - + - + + + 2.0.0-nv-jetson-jetpack4.3-tx2 + + paddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_aarch64.whl + - + - + + paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_aarch64.whl + - + - + + + 2.0.0-nv-jetson-jetpack4.3-xavier + + paddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_aarch64.whl + - + - + + paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_aarch64.whl + - + - + + + win-cpu-mkl-avx + - + + paddlepaddle-2.0.0-cp27-cp27m-win_amd64.whl + + paddlepaddle-2.0.0-cp35-cp35m-win_amd64.whl + + paddlepaddle-2.0.0-cp36-cp36m-win_amd64.whl + + paddlepaddle-2.0.0-cp37-cp37m-win_amd64.whl + + paddlepaddle-2.0.0-cp38-cp38-win_amd64.whl + + + win-cpu-mkl-noavx + - + + paddlepaddle-2.0.0-cp27-cp27m-win_amd64.whl - - - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-linux_x86_64.whl - - - nv-jetson-jetpack4.3-nano - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27mu-linux_aarch64.whl + win-cpu-openblas-avx - + + paddlepaddle-2.0.0-cp27-cp27m-win_amd64.whl - - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-linux_aarch64.whl + + paddlepaddle-2.0.0-cp36-cp36m-win_amd64.whl - - - nv-jetson-jetpack4.3-tx2 - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27mu-linux_aarch64.whl + win-cpu-openblas-noavx + - + + paddlepaddle-2.0.0-cp27-cp27m-win_amd64.whl - - - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-linux_aarch64.whl - - - nv-jetson-jetpack4.3-xavier (for AGX Xavier and Xavier NX) - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27mu-linux_aarch64.whl + win-cuda9.0-cudnn7-mkl-avx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp38-cp38m-win_amd64.whl + + + win-cuda9.0-cudnn7-mkl-noavx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl - - - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-linux_aarch64.whl - - - win_cpu_mkl + win-cuda9.0-cudnn7-openblas-avx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + - + + paddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whl + - - - - paddlepaddle-2.0.0rc1-cp27-cp27m-win_amd64.whl - - paddlepaddle-2.0.0rc1-cp35-cp35m-win_amd64.whl - - paddlepaddle-2.0.0rc1-cp36-cp36m-win_amd64.whl - - paddlepaddle-2.0.0rc1-cp37-cp37m-win_amd64.whl - - paddlepaddle-2.0.0rc1-cp38-cp38-win_amd64.whl - win_cuda9.0_cudnn7_mkl + win-cuda9.0-cudnn7-openblas-noavx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + - + - + - - - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp35-cp35m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp37-cp37m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp38-cp38m-win_amd64.whl - win_cuda10.0_cudnn7_mkl + win-cuda10.0-cudnn7-mkl-avx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp38-cp38m-win_amd64.whl + + + win-cuda10.0-cudnn7-mkl-noavx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + - + - + - + - + + + win-cuda10.1-cudnn7-mkl-avx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp38-cp38m-win_amd64.whl + + + win-cuda10.1-cudnn7-mkl-noavx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + - + - + - - - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp35-cp35m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp37-cp37m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp38-cp38m-win_amd64.whl - win_cuda10.1_cudnn7_mkl + win-cuda10.2-cudnn7-mkl-avx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whl + + + win-cuda10.2-cudnn7-mkl-noavx + - + + paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl + - + - + - - - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp35-cp35m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp37-cp37m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp38-cp38m-win_amd64.whl - win_cuda10.2_cudnn7_mkl + win-cuda11.0-cudnn8-mkl-avx + - - - - paddlepaddle_gpu-2.0.0rc1-cp27-cp27m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp35-cp35m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp36-cp36m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp37-cp37m-win_amd64.whl - - paddlepaddle_gpu-2.0.0rc1-cp37-cp37m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whl + + paddlepaddle_gpu-2.0.0-cp38-cp38m-win_amd64.whl mac_cpu - - - paddlepaddle-2.0.0rc1-cp27-cp27m-macosx_10_6_intel.whl - - paddlepaddle-2.0.0rc1-cp35-cp35m-macosx_10_6_intel.whl - - paddlepaddle-2.0.0rc1-cp36-cp36m-macosx_10_6_intel.whl - - paddlepaddle-2.0.0rc1-cp37-cp37m-macosx_10_6_intel.whl - - paddlepaddle-2.0.0rc1-cp38-cp38-macosx_10_14_x86_64.whl + + paddlepaddle-2.0.0-cp27-cp27m-macosx_10_6_intel.whl + + paddlepaddle-2.0.0-cp35-cp35m-macosx_10_6_intel.whl + + paddlepaddle-2.0.0-cp36-cp36m-macosx_10_6_intel.whl + + paddlepaddle-2.0.0-cp37-cp37m-macosx_10_6_intel.whl + + paddlepaddle-2.0.0-cp38-cp38-macosx_10_14_x86_64.whl @@ -516,48 +666,48 @@ platform tag: similar to 'linux_x86_64', 'any' cpu-mkl - paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl - paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl - paddlepaddle-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle-latest-cp37-cp37m-linux_x86_64.whl - paddlepaddle-latest-cp38-cp38-linux_x86_64.whl + paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl + - + paddlepaddle-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle-latest-cp38-cp38-linux_x86_64.whl cpu-openblas - paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl - paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl - paddlepaddle-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle-latest-cp37-cp37m-linux_x86_64.whl - paddlepaddle-latest-cp38-cp38-linux_x86_64.whl + paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl + - + paddlepaddle-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle-latest-cp38-cp38-linux_x86_64.whl cuda9-cudnn7-openblas - paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl cuda9-cudnn7-mkl - paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl cuda10.0-cudnn7-mkl - paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl @@ -584,21 +734,30 @@ platform tag: similar to 'linux_x86_64', 'any' cuda10.1-cudnn7-mkl - paddlepaddle_gpu-0.0.0-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-0.0.0-cp35-cp35m-linux_x86_64.whl - paddlepaddle_gpu-0.0.0-cp36-cp36m-linux_x86_64.whl - paddlepaddle_gpu-0.0.0-cp37-cp37m-linux_x86_64.whl - paddlepaddle_gpu-0.0.0-cp38-cp38m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp38-cp38m-linux_x86_64.whl cuda10.2-cudnn7-mkl - paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl + - + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl + + + cuda11.0-cudnn8-mkl + paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl - - paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl - paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl + paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl + paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl diff --git a/doc/paddle/install/compile/arm-compile.md b/doc/paddle/install/compile/arm-compile.md index 4acd46b4915..371165605cc 100644 --- a/doc/paddle/install/compile/arm-compile.md +++ b/doc/paddle/install/compile/arm-compile.md @@ -64,10 +64,16 @@ cd Paddle ``` -5. 切换到`develop`分支下进行编译: +5. 切换到较稳定release分支下进行编译: ``` - git checkout develop + git checkout [分支名] + ``` + + 例如: + + ``` + git checkout release/2.0 ``` 6. 并且请创建并进入一个叫build的目录下: diff --git a/doc/paddle/install/compile/linux-compile.md b/doc/paddle/install/compile/linux-compile.md index 01321a561fa..16adb06c3bb 100644 --- a/doc/paddle/install/compile/linux-compile.md +++ b/doc/paddle/install/compile/linux-compile.md @@ -125,10 +125,16 @@ cd /paddle ``` -5. 切换到develop版本进行编译: +5. 切换到较稳定版本下进行编译: ``` - git checkout develop + git checkout [分支名] + ``` + + 例如: + + ``` + git checkout release/2.0 ``` 注意:python3.6、python3.7版本从release/1.2分支开始支持, python3.8版本从release/1.8分支开始支持 @@ -451,10 +457,16 @@ cd Paddle ``` -8. 切换到develop分支下进行编译: +8. 切换到较稳定release分支下进行编译: + + ``` + git checkout [分支名] + ``` + + 例如: ``` - git checkout develop + git checkout release/2.0 ``` 9. 并且请创建并进入一个叫build的目录下: diff --git a/doc/paddle/install/compile/linux-compile_en.md b/doc/paddle/install/compile/linux-compile_en.md index 7d163b61ed0..3d3e3bb64ee 100644 --- a/doc/paddle/install/compile/linux-compile_en.md +++ b/doc/paddle/install/compile/linux-compile_en.md @@ -132,12 +132,16 @@ Please follow the steps below to install: cd /paddle ``` -5. Switch to `develop` version to compile: +5. Switch to a more stable version to compile: + + ``` + git checkout [name of the branch] + ``` For example: ``` - git checkout develop + git checkout release/2.0 ``` Note: python3.6、python3.7 version started supporting from release/1.2 branch, python3.8 version started supporting from release/1.8 branch @@ -442,10 +446,16 @@ Congratulations, now that you have successfully installed PaddlePaddle using Doc cd Paddle ``` -8. Switch to `develop` branch for compilation (support for Python 3.6 and 3.7 is added from the 1.2 branch, support for Python 3.8 is added from the 1.8 branch): +8. Switch to a more stable release branch for compilation (support for Python 3.6 and 3.7 is added from the 1.2 branch, support for Python 3.8 is added from the 1.8 branch): + + ``` + git checkout [name of target branch] + ``` + + For example: ``` - git checkout develop + git checkout release/2.0 ``` 9. And please create and enter a directory called build: diff --git a/doc/paddle/install/compile/macos-compile.md b/doc/paddle/install/compile/macos-compile.md index 72251d9e88c..8f398ed752f 100644 --- a/doc/paddle/install/compile/macos-compile.md +++ b/doc/paddle/install/compile/macos-compile.md @@ -56,10 +56,16 @@ cd paddle ``` -6. 切换到`develop`版本进行编译: +6. 切换到较稳定版本下进行编译: ``` - git checkout develop + git checkout [分支名] + ``` + + 例如: + + ``` + git checkout release/2.0 ``` 注意:python3.6、python3.7版本从release/1.2分支开始支持, python3.8版本从release/1.8分支开始支持 @@ -232,10 +238,16 @@ cd Paddle ``` -7. 切换到`develop`分支下进行编译: +7. 切换到较稳定release分支下进行编译: + + ``` + git checkout [分支名] + ``` + + 例如: ``` - git checkout develop + git checkout release/2.0 ``` 注意:python3.6、python3.7版本从release/1.2分支开始支持, python3.8版本从release/1.8分支开始支持 diff --git a/doc/paddle/install/compile/macos-compile_en.md b/doc/paddle/install/compile/macos-compile_en.md index 4eae9ab9689..7f9ca66bad8 100644 --- a/doc/paddle/install/compile/macos-compile_en.md +++ b/doc/paddle/install/compile/macos-compile_en.md @@ -60,10 +60,16 @@ Please follow the steps below to install: cd paddle ``` -6. Switch to `develop` version to compile: +6. Switch to a more stable version to compile: ``` - git checkout develop + git checkout [name of the branch] + ``` + + For example: + + ``` + git checkout release/2.0 ``` Note: python3.6、python3.7 version started supporting from release/1.2 branch, python3.8 version started supporting from release/1.8 branch @@ -238,10 +244,16 @@ Congratulations, now that you have successfully installed PaddlePaddle using Doc cd Paddle ``` -7. Switch to `develop` branch to compile: (Note that python 3.6, python 3.7 version are supported from the 1.2 branch, python3.8 version started supporting from release/1.8 branch) +7. Switch to a more stable release branch to compile: (Note that python 3.6, python 3.7 version are supported from the 1.2 branch, python3.8 version started supporting from release/1.8 branch) + + ``` + git checkout [name of the branch] + ``` + + For example: ``` - git checkout develop + git checkout release/2.0 ``` Note: python3.6、python3.7 version started supporting from release/1.2 branch, python3.8 version started supporting from release/1.8 branch diff --git a/doc/paddle/install/compile/sw-compile.md b/doc/paddle/install/compile/sw-compile.md index 85a8ae01bfa..bd9b8d9ef51 100644 --- a/doc/paddle/install/compile/sw-compile.md +++ b/doc/paddle/install/compile/sw-compile.md @@ -26,10 +26,16 @@ cd Paddle ``` -2. 切换到`develop`分支下进行编译: +2. 切换到较稳定release分支下进行编译: ``` - git checkout develop + git checkout [分支/标签名] + ``` + + 例如: + + ``` + git checkout release/2.0 ``` 3. Paddle依赖cmake进行编译构建,需要cmake版本>=3.10,检查操作系统源提供cmake的版本,使用源的方式直接安装cmake, `apt install cmake`, 检查cmake版本, `cmake --version`, 如果cmake >= 3.10则不需要额外的操作,否则请修改Paddle主目录的`CMakeLists.txt`, `cmake_minimum_required(VERSION 3.10)` 修改为 `cmake_minimum_required(VERSION 3.0)`. diff --git a/doc/paddle/install/compile/windows-compile.md b/doc/paddle/install/compile/windows-compile.md index 2768da10bb0..78c1a2fd504 100644 --- a/doc/paddle/install/compile/windows-compile.md +++ b/doc/paddle/install/compile/windows-compile.md @@ -60,10 +60,16 @@ cd Paddle ``` -3. 切换到`develop`分支下进行编译: +3. 切换到较稳定release分支下进行编译: ``` - git checkout develop + git checkout [分支名] + ``` + + 例如: + + ``` + git checkout release/2.0 ``` 注意:python3.6、python3.7版本从release/1.2分支开始支持, python3.8版本从release/1.8分支开始支持 diff --git a/doc/paddle/install/compile/windows-compile_en.md b/doc/paddle/install/compile/windows-compile_en.md index 125d0db81a4..131f31acac5 100644 --- a/doc/paddle/install/compile/windows-compile_en.md +++ b/doc/paddle/install/compile/windows-compile_en.md @@ -64,10 +64,16 @@ There is one compilation methods in Windows system: cd Paddle ``` -3. Switch to `develop` branch for compilation: +3. Switch to a more stable release branch for compilation: ``` - git checkout develop + git checkout [name of the branch] + ``` + + For example: + + ``` + git checkout release/2.0 ``` Note: python3.6、python3.7 version started supporting from release/1.2, python3.8 version started supporting from release/1.8 diff --git a/doc/paddle/install/compile/zhaoxin-compile.md b/doc/paddle/install/compile/zhaoxin-compile.md index 9a050ec7e1a..3eb86e75210 100644 --- a/doc/paddle/install/compile/zhaoxin-compile.md +++ b/doc/paddle/install/compile/zhaoxin-compile.md @@ -62,10 +62,16 @@ cd Paddle ``` -4. 切换到`develop`分支下进行编译: +4. 切换到较稳定release分支下进行编译: ``` - git checkout develop + git checkout [分支/标签名] + ``` + + 例如: + + ``` + git checkout release/2.0 ``` 5. 根据[requirments.txt](https://github.com/PaddlePaddle/Paddle/blob/develop/python/requirements.txt)安装Python依赖库。 diff --git a/doc/paddle/install/conda/linux-conda.md b/doc/paddle/install/conda/linux-conda.md index e52734adfe7..5a28f40ba1b 100644 --- a/doc/paddle/install/conda/linux-conda.md +++ b/doc/paddle/install/conda/linux-conda.md @@ -180,7 +180,7 @@ python3 -c "import platform;print(platform.architecture()[0]);print(platform.mac #### 2.1 CPU版的PaddlePaddle ``` -conda install paddlepaddle==2.0.0rc1 -c paddle +conda install paddlepaddle -c paddle ``` @@ -190,33 +190,33 @@ conda install paddlepaddle==2.0.0rc1 -c paddle * 如果您是使用 CUDA 9,cuDNN 7.6+,安装GPU版本的命令为: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=9.0 -c paddle + conda install paddlepaddle-gpu cudatoolkit=9.0 -c paddle ``` * 如果您是使用 CUDA 10.0,cuDNN 7.6+,安装GPU版本的命令为: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=10.0 -c paddle + conda install paddlepaddle-gpu cudatoolkit=10.0 -c paddle ``` * 如果您是使用 CUDA 10.1,cuDNN 7.6+,安装GPU版本的命令为: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=10.1 -c paddle + conda install paddlepaddle-gpu cudatoolkit=10.1 -c paddle ``` * 如果您是使用 CUDA 10.2,cuDNN 7.6+,安装GPU版本的命令为: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=10.2 -c paddle + conda install paddlepaddle-gpu cudatoolkit=10.2 -c paddle ``` * 如果您是使用 CUDA 11,cuDNN 8.0.4+,安装GPU版本的命令为: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=11.0 -c paddle + conda install paddlepaddle-gpu cudatoolkit=11.0 -c paddle ``` diff --git a/doc/paddle/install/conda/linux-conda_en.md b/doc/paddle/install/conda/linux-conda_en.md index 32b3250bf94..702dfd6ffb2 100644 --- a/doc/paddle/install/conda/linux-conda_en.md +++ b/doc/paddle/install/conda/linux-conda_en.md @@ -202,7 +202,7 @@ You can choose the following version of PaddlePaddle to start installation: #### 2.1 CPU version of PaddlePaddle ``` -conda install paddlepaddle==2.0.0rc1 -c paddle +conda install paddlepaddle -c paddle ``` @@ -212,31 +212,31 @@ conda install paddlepaddle==2.0.0rc1 -c paddle * If you are using CUDA 9,cuDNN 7.6+: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=9.0 -c paddle + conda install paddlepaddle-gpu cudatoolkit=9.0 -c paddle ``` * If you are using CUDA 10.0,cuDNN 7.6+ ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=10.0 -c paddle + conda install paddlepaddle-gpu cudatoolkit=10.0 -c paddle ``` * If you are using CUDA 10.1,cuDNN 7.6+ ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=10.1 -c paddle + conda install paddlepaddle-gpu cudatoolkit=10.1 -c paddle ``` * If you are usingCUDA 10.2,cuDNN 7.6+: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=10.2 -c paddle + conda install paddlepaddle-gpu cudatoolkit=10.2 -c paddle ``` * If you are using CUDA 11,cuDNN 8.0.4+: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=11.0 -c paddle + conda install paddlepaddle-gpu cudatoolkit=11.0 -c paddle ``` diff --git a/doc/paddle/install/conda/macos-conda.md b/doc/paddle/install/conda/macos-conda.md index d072863cae9..a424c152e53 100644 --- a/doc/paddle/install/conda/macos-conda.md +++ b/doc/paddle/install/conda/macos-conda.md @@ -152,7 +152,7 @@ python3 -c "import platform;print(platform.architecture()[0]);print(platform.mac * 请参考如下命令安装: ``` - conda install paddlepaddle==2.0.0rc1 -c paddle + conda install paddlepaddle -c paddle ``` ## **三、验证安装** diff --git a/doc/paddle/install/conda/macos-conda_en.md b/doc/paddle/install/conda/macos-conda_en.md index 4ada72971d6..7fcfa98c0fa 100644 --- a/doc/paddle/install/conda/macos-conda_en.md +++ b/doc/paddle/install/conda/macos-conda_en.md @@ -152,7 +152,7 @@ You can choose the following version of PaddlePaddle to start installation: * Please use the following command to install PaddlePaddle: ``` - conda install paddlepaddle==2.0.0rc1 -c paddle + conda install paddlepaddle -c paddle ``` diff --git a/doc/paddle/install/conda/windows-conda.md b/doc/paddle/install/conda/windows-conda.md index 1e081f8d51e..fd1e7af6be8 100644 --- a/doc/paddle/install/conda/windows-conda.md +++ b/doc/paddle/install/conda/windows-conda.md @@ -180,7 +180,7 @@ python3 -c "import platform;print(platform.architecture()[0]);print(platform.mac #### 2.1 CPU版的PaddlePaddle ``` -conda install paddlepaddle==2.0.0rc1 -c paddle +conda install paddlepaddle -c paddle ``` @@ -190,32 +190,32 @@ conda install paddlepaddle==2.0.0rc1 -c paddle * 如果您是使用 CUDA 9,cuDNN 7.6+,安装GPU版本的命令为: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=9.0 -c paddle + conda install paddlepaddle-gpu cudatoolkit=9.0 -c paddle ``` * 如果您是使用 CUDA 10.0,cuDNN 7.6+,安装GPU版本的命令为: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=10.0 -c paddle + conda install paddlepaddle-gpu cudatoolkit=10.0 -c paddle ``` * 如果您是使用 CUDA 10.1,cuDNN 7.6+,安装GPU版本的命令为: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=10.1 -c paddle + conda install paddlepaddle-gpu cudatoolkit=10.1 -c paddle ``` * 如果您是使用 CUDA 10.2,cuDNN 7.6+,安装GPU版本的命令为: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=10.2 -c paddle + conda install paddlepaddle-gpu cudatoolkit=10.2 -c paddle ``` * 如果您是使用 CUDA 11,cuDNN 8.0.4+,安装GPU版本的命令为: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=11.0 -c paddle + conda install paddlepaddle-gpu cudatoolkit=11.0 -c paddle ``` diff --git a/doc/paddle/install/conda/windows-conda_en.md b/doc/paddle/install/conda/windows-conda_en.md index 259ffcbaece..2dd1b72a1cb 100644 --- a/doc/paddle/install/conda/windows-conda_en.md +++ b/doc/paddle/install/conda/windows-conda_en.md @@ -174,7 +174,7 @@ You can choose the following version of PaddlePaddle to start installation: #### 2.1 CPU version of PaddlePaddle ``` -conda install paddlepaddle==2.0.0rc1 -c paddle +conda install paddlepaddle -c paddle ``` @@ -185,31 +185,31 @@ conda install paddlepaddle==2.0.0rc1 -c paddle * If you are using CUDA 9,cuDNN 7.6+: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=9.0 -c paddle + conda install paddlepaddle-gpu cudatoolkit=9.0 -c paddle ``` * If you are using CUDA 10.0,cuDNN 7.6+ ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=10.0 -c paddle + conda install paddlepaddle-gpu cudatoolkit=10.0 -c paddle ``` * If you are using CUDA 10.1,cuDNN 7.6+ ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=10.1 -c paddle + conda install paddlepaddle-gpu cudatoolkit=10.1 -c paddle ``` * If you are usingCUDA 10.2,cuDNN 7.6+: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=10.2 -c paddle + conda install paddlepaddle-gpu cudatoolkit=10.2 -c paddle ``` * If you are using CUDA 11,cuDNN 8.0.4+: ``` - conda install paddlepaddle-gpu==2.0.0rc1 cudatoolkit=11.0 -c paddle + conda install paddlepaddle-gpu cudatoolkit=11.0 -c paddle ``` diff --git a/doc/paddle/install/docker/linux-docker.md b/doc/paddle/install/docker/linux-docker.md index 119f37f5bcb..d3678b767c0 100644 --- a/doc/paddle/install/docker/linux-docker.md +++ b/doc/paddle/install/docker/linux-docker.md @@ -21,7 +21,7 @@ * GPU版的PaddlePaddle: ``` - docker pull hub.baidubce.com/paddlepaddle/paddle:[版本号]-gpu-cuda9.0-cudnn7 + docker pull hub.baidubce.com/paddlepaddle/paddle:[版本号]-gpu-cuda10.2-cudnn7 ``` 如果您的机器不在中国大陆地区,可以直接从DockerHub拉取镜像: @@ -33,10 +33,10 @@ * GPU版的PaddlePaddle: ``` - docker pull paddlepaddle/paddle:[版本号]-gpu-cuda9.0-cudnn7 + docker pull paddlepaddle/paddle:[版本号]-gpu-cuda10.2-cudnn7 ``` - 在`:`后请您填写PaddlePaddle版本号,例如当前版本,更多请见[镜像简介](#dockers),上例中,`cuda9.0-cudnn7` 也仅作示意用,您可以访问[DockerHub](https://hub.docker.com/r/paddlepaddle/paddle/tags/)获取与您机器适配的镜像。 + 在`:`后请您填写PaddlePaddle版本号,例如当前版本,更多请见[镜像简介](#dockers),上例中,`cuda10.2-cudnn7` 也仅作示意用,您可以访问[DockerHub](https://hub.docker.com/r/paddlepaddle/paddle/tags/)获取与您机器适配的镜像。 2. 构建、进入Docker容器 diff --git a/doc/paddle/install/docker/linux-docker_en.md b/doc/paddle/install/docker/linux-docker_en.md index 49e3a4e11d4..1e7bb7c5c03 100644 --- a/doc/paddle/install/docker/linux-docker_en.md +++ b/doc/paddle/install/docker/linux-docker_en.md @@ -21,7 +21,7 @@ * GPU version of PaddlePaddle: ``` - docker pull hub.baidubce.com/paddlepaddle/paddle:[version number]-gpu-cuda9.0-cudnn7 + docker pull hub.baidubce.com/paddlepaddle/paddle:[version number]-gpu-cuda10.2-cudnn7 ``` If your machine is not in mainland China, you can pull the image directly from DockerHub: @@ -33,10 +33,10 @@ * GPU version of PaddlePaddle: ``` - docker pull paddlepaddle/paddle:[version number]-gpu-cuda9.0-cudnn7 + docker pull paddlepaddle/paddle:[version number]-gpu-cuda10.2-cudnn7 ``` - After `:', please fill in the PaddlePaddle version number, such as the current version. For more details, please refer to [image profile](#dockers), in the above example, `cuda9.0-cudnn7` is only for illustration. you can see [DockerHub](https://hub.docker.com/r/paddlepaddle/paddle/tags/) to get the image that matches your machine. + After `:', please fill in the PaddlePaddle version number, such as the current version. For more details, please refer to [image profile](#dockers), in the above example, `cuda10.2-cudnn7` is only for illustration. you can see [DockerHub](https://hub.docker.com/r/paddlepaddle/paddle/tags/) to get the image that matches your machine. 2. Build and enter Docker container diff --git a/doc/paddle/install/index_cn.rst b/doc/paddle/install/index_cn.rst index ad356df70df..89cc7e1c1cf 100644 --- a/doc/paddle/install/index_cn.rst +++ b/doc/paddle/install/index_cn.rst @@ -175,15 +175,15 @@ 如果您是使用 Python 2,安装CPU版本的命令为: :: - python -m pip install paddlepaddle==2.0.0rc1 -i https://mirror.baidu.com/pypi/simple + python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple 或 - python -m pip install paddlepaddle==2.0.0rc1 -i https://pypi.tuna.tsinghua.edu.cn/simple + python -m pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple 如果您是使用Windows系统请使用以下指令: - pip install paddlepaddle==2.0.0rc1 -f https://paddlepaddle.org.cn/whl/stable.html + pip install paddlepaddle==2.0.0 -f https://paddlepaddle.org.cn/whl/stable.html 如果您是使用 Python 3,请将上述命令中的 **python** 更换为 **python3** 进行安装 @@ -196,15 +196,15 @@ 如果您是使用 Python2,请注意用以下指令安装的PaddlePaddle在Windows、Ubuntu、CentOS下只支持CUDA10.2: :: - python -m pip install paddlepaddle-gpu==2.0.0rc1 -i https://mirror.baidu.com/pypi/simple + python -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple 或 - python -m pip install paddlepaddle-gpu==2.0.0rc1 -i https://pypi.tuna.tsinghua.edu.cn/simple + python -m pip install paddlepaddle-gpu -i https://pypi.tuna.tsinghua.edu.cn/simple 如果您是使用Windows系统请使用以下指令: - python -m pip install paddlepaddle_gpu==2.0.0rc1 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle_gpu==2.0.0 -f https://paddlepaddle.org.cn/whl/stable.html 如果您是使用 Python 3,请将上述命令中的 **python** 更换为 **python3** 进行安装。 @@ -233,6 +233,8 @@ :hidden: pip/frompip.rst + conda/fromconda.rst + docker/fromdocker.rst compile/fromsource.rst install_Kunlun_zh.md Tables.md diff --git a/doc/paddle/install/index_en.rst b/doc/paddle/install/index_en.rst index ab8b16c2d9b..94e1c0dcdb7 100644 --- a/doc/paddle/install/index_en.rst +++ b/doc/paddle/install/index_en.rst @@ -183,15 +183,15 @@ This section describes how to use pip to install. If you are using Python 2, command to install CPU version is: :: - python -m pip install paddlepaddle==2.0.0rc1 -i https://mirror.baidu.com/pypi/simple + python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple or - python -m pip install paddlepaddle==2.0.0rc1 -i https://pypi.tuna.tsinghua.edu.cn/simple + python -m pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple If you are using Windows environment, please use the following instruction: - python -m pip install paddlepaddle==2.0.0rc1 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle==2.0.0 -f https://paddlepaddle.org.cn/whl/stable.html If you are using Python 3, please change **python** in the above command to **python3** and install. @@ -206,15 +206,15 @@ This section describes how to use pip to install. If you are using Python2, please attention that PaddlePaddle installed through command below only supports CUDA10.2 under Windows、Ubuntu、CentOS: :: - python -m pip install paddlepaddle-gpu==2.0.0rc1 -i https://mirror.baidu.com/pypi/simple + python -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple or - python -m pip install paddlepaddle-gpu==2.0.0rc1 -i https://pypi.tuna.tsinghua.edu.cn/simple + python -m pip install paddlepaddle-gpu -i https://pypi.tuna.tsinghua.edu.cn/simple If you are using Windows environment, please use the following instruction: - python -m pip install paddlepaddle_gpu==2.0.0rc1 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle_gpu==2.0.0 -f https://paddlepaddle.org.cn/whl/stable.html If you are using Python 3, please change **python** in the above command to **python3** and install. @@ -244,6 +244,8 @@ The second way to install: compile and install with source code :hidden: pip/frompip_en.rst + conda/fromconda_en.rst + docker/fromdocker_en.rst compile/fromsource_en.rst install_Kunlun_en.md Tables_en.md diff --git a/doc/paddle/install/install_Kunlun_zh.md b/doc/paddle/install/install_Kunlun_zh.md index 24a7b5ed361..5f478d9d23b 100644 --- a/doc/paddle/install/install_Kunlun_zh.md +++ b/doc/paddle/install/install_Kunlun_zh.md @@ -1,190 +1,9 @@ -# 支持昆仑XPU的Paddle安装 -## 安装方式一:通过Wheel包安装 +# 昆仑XPU芯片安装及运行飞桨 -安装预编译的支持昆仑XPU的wheel包,目前此wheel包只支持Ubuntu环境,其他环境请选择安装方式二,源码编译安装。 +百度昆仑AI计算处理器(Baidu KUNLUN AI Computing Processor)是百度集十年AI产业技术实践于2019年推出的全功能AI芯片。基于自主研发的先进XPU架构,为云端和边缘端的人工智能业务而设计。 百度昆仑与飞桨及其他国产软硬件强强组合,打造一个全面领先的国产化AI技术生态,部署和应用于诸多 “人工智能+“的行业领域,包括智能云和高性能计算,智慧制造、智慧城市和安防等。更多昆仑XPU芯片详情及技术指标请 [点击这里](https://cloud.baidu.com/product/kunlun.html) 。 +参考以下内容可快速了解和体验昆仑XPU芯片上运行飞桨: -#### 下载安装包 - -Python3.7 - -o ```wget https://paddle-wheel.bj.bcebos.com/kunlun/paddlepaddle-2.0.0rc1-cp37-cp37m-linux_x86_64.whl``` - -o ```python3.7 -m pip install -U paddlepaddle-2.0.0rc1-cp37-cp37m-linux_x86_64.whl ``` - -Python2.7 - -o ```wget https://paddle-wheel.bj.bcebos.com/kunlun/paddlepaddle-2.0.0rc1-cp27-cp27mu-linux_x86_64.whl``` - -o ```python2.7 -m pip install -U paddlepaddle-2.0.0rc1-cp27-cp27mu-linux_x86_64.whl``` - - - -#### 验证安装 - -安装完成后您可以使用 python 或 python3 进入python解释器,输入 - -```import paddle ``` - -再输入 - -``` paddle.utils.run_check()``` - -如果出现PaddlePaddle is installed successfully!,说明您已成功安装。 - - - -#### 训练示例 - -下载并运行示例: - -o ```wget https://fleet.bj.bcebos.com/kunlun/mnist_example.py ``` - -o ```python mnist_example.py --use_device=xpu --num_epochs=5``` - -注:后端有cpu/gpu/xpu三种设备可以自行配置 - - -#### 如何卸载 - -请使用以下命令卸载PaddlePaddle: - - ```pip uninstall paddlepaddle``` - -或 - - ```pip3 uninstall paddlepaddle ``` - -另外,如果使用预编译的支持昆仑XPU的wheel包出现环境问题,推荐使用源码自行编译支持昆仑XPU的包。 - - - - - -## 安装方式二:从源码编译支持昆仑XPU的包 - -#### 环境准备 - -- **处理器:****Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz** -- **操作系统:****Ubuntu 16.04.6 LTS** -- **Python** **版本** **2.7.15+/3.5.1+/3.6/3.7/3.8 (64 bit)** -- **pip** **或** **pip3** **版本** **9.0.1+ (64 bit)** -- **cmake** **版本** **3.10+** -- **gcc/g++** **版本** **8.2+** - -#### 安装步骤 - -目前在昆仑 XPU机器上面运行Paddle,必须要先安装从源码编译支持昆仑XPU的Paddle包,接下来详细介绍各个步骤。 - -##### **源码编译** - -1. Paddle依赖cmake进行编译构建,需要cmake版本>=3.10,如果操作系统提供的源包括了合适版本的cmake,直接安装即可,否则需要 - - o ```wget https://github.com/Kitware/CMake/releases/download/v3.16.8/cmake-3.16.8.tar.gz``` - - o ```tar -xzf cmake-3.16.8.tar.gz && cd cmake-3.16.8 ``` - - o ```./bootstrap && make && sudo make install``` - -2. Paddle内部使用patchelf来修改动态库的rpath,如果操作系统提供的源包括了patchelf,直接安装即可,否则需要源码安装,请参考 - - o ```./bootstrap.sh ``` - - o ``` ./configure ``` - - o ``` make ``` - - o ``` make check ``` - - o ```sudo make install``` - -3. 根据[requirments.txt](https://github.com/PaddlePaddle/Paddle/blob/develop/python/requirements.txt)安装Python依赖库。 - -4. 将Paddle的源代码克隆到当下目录下的Paddle文件夹中,并进入Paddle目录 - - o ``` git clone https://github.com/PaddlePaddle/Paddle.git``` - - o ```cd Paddle``` - -5. 切换到较稳定release分支下进行编译: - - ```git checkout [分支名]``` - - 例如: - - ```git checkout release/2.0-rc1``` - - 目前仅有2.0-rc1及其以后发版的分支支持昆仑XPU。 - -6. 并且请创建并进入一个叫build的目录下: - - ```mkdir build && cd build``` - -7. 链接过程中打开文件数较多,可能超过系统默认限制导致编译出错,设置进程允许打开的最大文件数: - - ```ulimit -n 4096``` -8. 执行cmake: -9. 具体编译选项含义请参见[编译选项表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/install/Tables.html#Compile) - -For Python2: ```cmake .. -DPY_VERSION=2 -DPYTHON_EXECUTABLE=`which python2` -DWITH_MKL=OFF -DWITH_XPU=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release ``` - -For Python3: ```cmake .. -DPY_VERSION=3 -DPYTHON_EXECUTABLE=`which python3` -DWITH_MKL=OFF -DWITH_XPU=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF -DCMAKE_BUILD_TYPE=Release ``` - -10. 使用以下命令来编译: - - ```make -j$(nproc)``` - -11. 编译成功后进入Paddle/build/python/dist目录下找到生成的.whl包 。 - -12. 将生成的.whl包copy至带有昆仑XPU的目标机器上,并在目标机器上根据[requirments.txt](https://github.com/PaddlePaddle/Paddle/blob/develop/python/requirements.txt)安装Python依赖库。(如果编译机器同时为带有昆仑XPU的目标机器,略过此步) - -13. 在带有昆仑XPU的目标机器安装编译好的.whl包:pip install -U(whl包的名字)或pip3 install -U(whl包的名字)恭喜,至此您已完成昆仑XPU机器上PaddlePaddle的编译安装。 - - - -#### 验证安装 - -安装完成后您可以使用 python 或 python3 进入python解释器,输入 - -```import paddle ``` - -再输入 - -``` paddle.utils.run_check()``` - -如果出现PaddlePaddle is installed successfully!,说明您已成功安装。 - - - -#### 训练示例 - -下载并运行示例: - -o ```wget https://fleet.bj.bcebos.com/kunlun/mnist_example.py ``` - -o ```python mnist_example.py --use_device=xpu --num_epochs=5``` - -注:后端有cpu/gpu/xpu三种设备可以自行配置 - -#### 如何卸载 - -请使用以下命令卸载PaddlePaddle: - - ```pip uninstall paddlepaddle``` - -或 - - ```pip3 uninstall paddlepaddle ``` - -另外,如果使用预编译的支持昆仑XPU的wheel包出现环境问题,推荐使用源码自行编译支持昆仑XPU的包。 - - -## 附录:当前昆仑XPU适配支持的模型 - -| 模型名称 | 模型地址 | -| ---- | ---- | -| ResNet50 | [模型地址](https://github.com/PaddlePaddle/PaddleClas/tree/dygraph/docs/zh_CN/extension/train_on_xpu.md) | -| MobileNetv3 | [模型地址](https://github.com/PaddlePaddle/PaddleClas/tree/dygraph/docs/zh_CN/extension/train_on_xpu.md) | -| Deeplabv3 | [模型地址](https://github.com/PaddlePaddle/PaddleSeg/blob/develop/legacy/docs/train_on_xpu.md) | -| DQN | [模型地址](https://github.com/PaddlePaddle/PARL/blob/develop/examples/DQN/README.md) | -| Bertbase | [模型地址](https://github.com/PaddlePaddle/models/blob/develop/PaddleNLP/legacy/pretrain_language_models/BERT/README.md) | +- [飞桨对昆仑XPU芯片的支持](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/xpu_docs/paddle_2.0_xpu_cn.html) +- [飞桨框架昆仑XPU版安装说明](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/xpu_docs/paddle_install_cn.html) +- [飞桨框架昆仑XPU版训练示例](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/xpu_docs/train_example_cn.html) diff --git a/doc/paddle/install/pip/linux-pip.md b/doc/paddle/install/pip/linux-pip.md index 242ac2c2131..215ee570f5c 100644 --- a/doc/paddle/install/pip/linux-pip.md +++ b/doc/paddle/install/pip/linux-pip.md @@ -169,13 +169,13 @@ * 如果您是使用 Python 2 ``` - python -m pip install paddlepaddle==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple ``` * 如果您是使用 Python 3 ``` - python3 -m pip install paddlepaddle==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple ``` @@ -189,13 +189,13 @@ * 如果您是使用 Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html ``` * 如果您是使用 Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html ``` @@ -205,13 +205,13 @@ * 如果您是使用 Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html ``` * 如果您是使用 Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html ``` @@ -221,13 +221,13 @@ * 如果您是使用 Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html ``` * 如果您是使用 Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html ``` @@ -237,13 +237,13 @@ * 如果您是使用 Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple ``` * 如果您是使用 Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple ``` @@ -253,13 +253,13 @@ * 如果您是使用 Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html ``` * 如果您是使用 Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html ``` @@ -274,7 +274,11 @@ python3 -m pip install paddlepaddle-gpu==[版本号] -i https://pypi.tuna.tsinghua.edu.cn/simple ``` +* 如果你想安装联编`tensorrt`的Paddle包,可以通过以下命令 + ``` + python3 -m pip install paddlepaddle-gpu==[版本号] -f https://paddlepaddle.org.cn/whl/stable/tensorrt.html + ``` diff --git a/doc/paddle/install/pip/linux-pip_en.md b/doc/paddle/install/pip/linux-pip_en.md index c01ec53703b..78a16060404 100644 --- a/doc/paddle/install/pip/linux-pip_en.md +++ b/doc/paddle/install/pip/linux-pip_en.md @@ -172,13 +172,13 @@ You can choose the following version of PaddlePaddle to start installation: * If you are using Python 2 ``` - python -m pip install paddlepaddle==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple ``` * If you are using Python 3 ``` - python3 -m pip install paddlepaddle==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple ``` @@ -192,13 +192,13 @@ You can choose the following version of PaddlePaddle to start installation: * If you are using Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html ``` * If you are using Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html ``` @@ -208,13 +208,13 @@ You can choose the following version of PaddlePaddle to start installation: * If you are using Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html ``` * If you are using Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html ``` @@ -224,13 +224,13 @@ You can choose the following version of PaddlePaddle to start installation: * If you are using Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html ``` * If you are using Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html ``` @@ -240,13 +240,13 @@ You can choose the following version of PaddlePaddle to start installation: * If you are using Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple ``` * If you are using Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple ``` @@ -256,13 +256,13 @@ You can choose the following version of PaddlePaddle to start installation: * If you are using Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html ``` * If you are using Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html ``` @@ -277,6 +277,11 @@ Note: python3 -m pip install paddlepaddle-gpu==[Version] -i https://pypi.tuna.tsinghua.edu.cn/simple ``` +* If you want to install the Paddle package built with `tensorrt`, you can use the following command: + + ``` + python3 -m pip install paddlepaddle-gpu==[版本号] -f https://paddlepaddle.org.cn/whl/stable/tensorrt.html + ``` ## Verify installation diff --git a/doc/paddle/install/pip/macos-pip.md b/doc/paddle/install/pip/macos-pip.md index 44f8f795fc4..533922110bd 100644 --- a/doc/paddle/install/pip/macos-pip.md +++ b/doc/paddle/install/pip/macos-pip.md @@ -113,13 +113,13 @@ * 对于Python 2,您可以执行: ``` - python -m pip install paddlepaddle==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple ``` * 对于Python 3,您可以执行: ``` - python3 -m pip install paddlepaddle==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple ``` * 注: diff --git a/doc/paddle/install/pip/macos-pip_en.md b/doc/paddle/install/pip/macos-pip_en.md index d8b338a2ea1..fe53e95eb8e 100644 --- a/doc/paddle/install/pip/macos-pip_en.md +++ b/doc/paddle/install/pip/macos-pip_en.md @@ -111,13 +111,13 @@ You can choose the following version of PaddlePaddle to start installation: * If you are using Python 2: ``` -python -m pip install paddlepaddle==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html +python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple ``` * If you are using Python 3: ``` -python3 -m pip install paddlepaddle==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html +python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple ``` diff --git a/doc/paddle/install/pip/windows-pip.md b/doc/paddle/install/pip/windows-pip.md index b209d800f9c..978e0a14416 100644 --- a/doc/paddle/install/pip/windows-pip.md +++ b/doc/paddle/install/pip/windows-pip.md @@ -13,43 +13,27 @@ ### 1.2如何查看您的环境 -* 可以使用以下命令查看本机的操作系统和位数信息: - - ``` - uname -m && cat /ect/*release - ``` - +* 可以通过【控制面板】-【系统和安全】-【系统】查看本机的操作系统和位数信息: * 确认需要安装 PaddlePaddle 的 Python 是您预期的位置,因为您计算机可能有多个 Python - * 如果您是使用 Python 2,使用以下命令输出 Python 路径,根据的环境您可能需要将说明中所有命令行中的 python 替换为具体的 Python 路径 - - ``` - which python - ``` - - * 如果您是使用 Python 3,使用以下命令输出 Python 路径,根据您的环境您可能需要将说明中所有命令行中的 python3 替换为 python 或者替换为具体的 Python 路径 - - ``` - which python3 - ``` + ``` + where python + ``` + * 需要确认python的版本是否满足要求 * 如果您是使用 Python 2,使用以下命令确认是 2.7.15+ - ``` python --version - ``` - + * 如果您是使用 Python 3,使用以下命令确认是 3.5.1+/3.6/3.7/3.8 - ``` python3 --version - ``` * 需要确认pip的版本是否满足要求,要求pip版本为20.2.2+ @@ -135,13 +119,13 @@ * 如果您是使用 Python 2 ``` - python -m pip install paddlepaddle==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple ``` * 如果您是使用 Python 3 ``` - python3 -m pip install paddlepaddle==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple ``` #### 2.2 GPU版的PaddlePaddle @@ -151,13 +135,13 @@ * 如果您是使用 Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html ``` * 如果您是使用 Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html ``` 2.2.2 CUDA10.0的PaddlePaddle @@ -165,13 +149,13 @@ * 如果您是使用 Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html ``` * 如果您是使用 Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html ``` 2.2.3 CUDA10.1的PaddlePaddle @@ -179,13 +163,13 @@ * 如果您是使用 Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html ``` * 如果您是使用 Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html ``` 2.2.4 CUDA10.2的PaddlePaddle @@ -193,30 +177,42 @@ * 如果您是使用 Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0 -f https://paddlepaddle.org.cn/whl/stable.html ``` * 如果您是使用 Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0 -f https://paddlepaddle.org.cn/whl/stable.html ``` 2.2.5 CUDA11的PaddlePaddle * 如果您是使用 Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html ``` * 如果您是使用 Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html ``` * 注: -`python -m pip install paddlepaddle_gpu==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html`此命令将安装支持CUDA 10.2(配合cuDNN v7.4+)的PaddlePaddle。 +`python -m pip install paddlepaddle_gpu==2.0.0 -f https://paddlepaddle.org.cn/whl/stable.html`此命令将安装支持CUDA 10.2(配合cuDNN v7.4+)的PaddlePaddle。 + +上述命令默认安装`avx`的包,如果希望安装`noavx`的包,请使用 `-f https://paddlepaddle.org.cn/whl/stable/noavx.html`。 +例如安装支持CUDA 10.2的noavx的PaddlePaddle,请使用 + ``` + python -m pip install paddlepaddle_gpu==2.0.0 -f https://paddlepaddle.org.cn/whl/stable/noavx.html + ``` + +如果你想安装联编`tensorrt`的Paddle包,请使用 + + ``` + python -m pip install paddlepaddle-gpu==[版本号] -f https://paddlepaddle.org.cn/whl/stable/tensorrt.html + ``` ## **三、验证安装** diff --git a/doc/paddle/install/pip/windows-pip_en.md b/doc/paddle/install/pip/windows-pip_en.md index 12b2fe8138f..831ba346df6 100644 --- a/doc/paddle/install/pip/windows-pip_en.md +++ b/doc/paddle/install/pip/windows-pip_en.md @@ -13,28 +13,16 @@ ### 1.2 How to check your environment -* You can use the following commands to view the local operating system and bit information - - ``` - uname -m && cat /ect/*release - ``` - +* Confirm the local operating system and bit information * Confirm that the Python where you need to install PaddlePaddle is your expected location, because your computer may have multiple Python - * If you are using Python 2, use the following command to output Python path. Depending on the environment, you may need to replace Python in all command lines in the description with specific Python path - - ``` - which python - ``` - - * If you are using Python 3, use the following command to output Python path. Depending on your environment, you may need to replace Python 3 in all command lines in the instructions with Python or specific Python path - - ``` - which python3 - ``` + ``` + where python + ``` + * You need to confirm whether the version of Python meets the requirements @@ -133,13 +121,13 @@ You can choose the following version of PaddlePaddle to start installation: * If you are using Python 2 ``` - python -m pip install paddlepaddle==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple ``` * If you are using Python 3 ``` - python3 -m pip install paddlepaddle==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple ``` @@ -153,13 +141,13 @@ You can choose the following version of PaddlePaddle to start installation: * If you are using Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html ``` * If you are using Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post90 -f https://paddlepaddle.org.cn/whl/stable.html ``` @@ -169,13 +157,13 @@ You can choose the following version of PaddlePaddle to start installation: * If you are using Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html ``` * If you are using Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post100 -f https://paddlepaddle.org.cn/whl/stable.html ``` @@ -185,13 +173,13 @@ You can choose the following version of PaddlePaddle to start installation: * If you are using Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html ``` * If you are using Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post101 -f https://paddlepaddle.org.cn/whl/stable.html ``` @@ -201,13 +189,13 @@ You can choose the following version of PaddlePaddle to start installation: * If you are using Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0 -f https://paddlepaddle.org.cn/whl/stable.html ``` * If you are using Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0 -f https://paddlepaddle.org.cn/whl/stable.html ``` @@ -217,13 +205,13 @@ You can choose the following version of PaddlePaddle to start installation: * If you are using Python 2 ``` - python -m pip install paddlepaddle-gpu==0.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle-gpu==2.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html ``` * If you are using Python 3 ``` - python3 -m pip install paddlepaddle-gpu==0.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html + python3 -m pip install paddlepaddle-gpu==2.0.0.post110 -f https://paddlepaddle.org.cn/whl/stable.html ``` * Note: @@ -231,9 +219,20 @@ You can choose the following version of PaddlePaddle to start installation: If you want to install PaddlePaddle which support CUDA10.2 with cuDNN v7.4+,you can use the following command: ``` - python -m pip install paddlepaddle_gpu==0.0.0 -f https://paddlepaddle.org.cn/whl/stable.html + python -m pip install paddlepaddle_gpu==2.0.0 -f https://paddlepaddle.org.cn/whl/stable.html ``` +The above commands install the `avx` package by default. If you want to install the `noavx` package, please use `-f https://paddlepaddle.org.cn/whl/stable/noavx.html`. +For example, to install PaddlePaddle that supports CUDA 10.2 with noavx, please use the following command: + ``` + python -m pip install paddlepaddle_gpu==2.0.0 -f https://paddlepaddle.org.cn/whl/stable/noavx.html + ``` + +If you want to install the Paddle package built with `tensorrt`, please use the following command: + + ``` + python -m pip install paddlepaddle-gpu==[版本号] -f https://paddlepaddle.org.cn/whl/stable/tensorrt.html + ``` ## Verify installation diff --git a/doc/paddle/release_note_cn.md b/doc/paddle/release_note_cn.md index 01f30bd5d79..f97dcf3be5f 100644 --- a/doc/paddle/release_note_cn.md +++ b/doc/paddle/release_note_cn.md @@ -2,303 +2,278 @@ ## 重要更新 -飞桨框架2.0-RC1版本有如下重要更新: +飞桨框架2.0.0版本有如下重要更新: + +- 编程范式:默认开启动态图模式进行模型开发和训练,通过动转静的方式进行模型部署和训练加速。如果需要使用静态图编程范式,可以通过paddle.enable_static()来切换到静态图模式。 +- API体系:对API进行了补充,对目录结构进行了调整,使得更加易用,详情请见:[API文档](https://www.paddlepaddle.org.cn/documentation/docs/zh/api/index_cn.html),同时,提供高层API简化使用流程;详情请见: [飞桨高层API使用指南](https://www.paddlepaddle.org.cn/documentation/docs/zh/tutorial/quick_start/high_level_api/high_level_api.html)。 +- 框架功能:对数据加载、动态图执行,OP性能,混合精度训练,分布式训练,动静转换,等进行了功能增强和性能优化。 +- 环境适配: 提供了对ARM架构CPU的支持,增加了对Python 3.8、CUDA 10.1/10.2的支持,发布支持CUDA11的安装包(experimental),发布支持[百度昆仑芯片](https://cloud.baidu.com/product/kunlun.html)的安装包(experimental),详情请见:[开始使用](https://www.paddlepaddle.org.cn/install/quick)。 +- 模型库及开发套件:飞桨的官方模型库和套件已经完成绝大部分模型升级至飞桨框架2.0.0版本。 + - [PaddleHub](https://github.com/PaddlePaddle/PaddleHub):支持2.0动态图,全面迁移动态图编程模式,模型开发调试更加方便,finetune接口更加灵活易用。 + - [PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection): 支持2.0动态图,覆盖检测方向主流算法(PP-YOLO、Faster-RCNN、SOLOv2),支持动静转换,打通预测部署,提供了更加模块化的组网方式。 + - [PaddleClas](https://github.com/PaddlePaddle/PaddleClas): 支持2.0动态图,提供了29个系列的分类算法和134个预训练模型,提供了基于SSLD知识蒸馏的优化方案,将分类模型的精度普遍提升3%以上。 + - [PaddleSeg](https://github.com/PaddlePaddle/PaddleSeg): 支持2.0动态图,提供了50+的高质量预训练模型,支持15+主流分割网络,提供了业界的SOTA模型OCRNet,很好的提升了产品易用性。 + - [PaddleOCR](https://github.com/PaddlePaddle/PaddleOCR): 支持2.0动态图,PPOCR系统、文字检测模型(DB,EAST,SAST)与文字识别模型(Rosetta,CRNN,StarNet)完成2.0动态图适配。 + - [PaddleGAN](https://github.com/PaddlePaddle/PaddleGAN):支持2.0动态图,所有模型,包括风格迁移、视频增强、唇形迁移、人脸动漫化等九种模型均基于动态图开发。 + - [PaddleRec](https://github.com/PaddlePaddle/PaddleRec):支持2.0动态图,免安装,动静组网统一,方便用户的调研和上线,同时整理发布了推荐系统经典数据集。 + - [PaddleNLP](https://github.com/PaddlePaddle/PaddleNLP):支持2.0动态图,提供25+预训练模型和易用的API方式提升文本建模效率。 + - [Parakeet](https://github.com/PaddlePaddle/Parakeet):支持2.0动态图,已发布的声学模型及声码器均良好支持动态图版本。 + - [PaddleVideo](https://github.com/PaddlePaddle/PaddleVideo):支持2.0动态图,包含了视频分类和视频动作定位方向模型,包括: TSN、TSM、SlowFast、AttentionLSTM、BMN模型以及特色应用预训练模型VideoTag和FootballAction。 + - [AmazonDJL](https://github.com/awslabs/djl):易用流畅的 Java 推理接口,支持各操作系统平台(Mac / Windows / Linux),支持 Paddle 预训练模型读取。 -- **安装环境** 官方发布支持CUDA11的安装包(experimental);官方发布支持[百度昆仑芯片](https://cloud.baidu.com/product/kunlun.html)的安装包(experimental) -- **API功能** 支持numpy兼容的`paddle.Tensor` 索引和切片操作(基本索引);去除部分API中的axis参数,支持numpy兼容的广播语义;新增了部分API,完善了部分API的功能,修复了部分API的bug -- **动静转换** 支持动态图转静态图的更多python语法,并支持通过 `paddle.jit.not_to_static ` 标识不进行动转静的函数 -- **框架功能** 支持多次调用`paddle.Tensor.backward()` 进行累计梯度,效果等同于增加batch size后计算的梯度;默认隐藏了C++报错栈,并优化了报错格式;分布式训练支持heterbox异构训练 -- **框架性能** 混合精度训练支持纯FP16模式,ResNet50模型V100单卡训练性能达1400+ samples/sec;分布式训练做了性能优化 ## 前瞻性预告 -- 飞桨框架计划在未来的某个版本起,放弃对python2和python3.5的支持,建议您升级python到3.8版本来使用飞桨 -- 飞桨框架计划在未来的某个版本起,放弃对CUDA9.0的支持,建议您升级CUDA版本来使用飞桨 - -## 训练框架 - -### 基础API(含分布式) - -#### 新增API -- 新增paddle.log2 -- 新增paddle.log10 -- 新增paddle.nn.initializer.set_global_initializer -- 新增paddle.median -- 新增paddle.broadcast_shape,可以计算两个tensor shape经过broadcast计算后的shape -- 新增paddle.vision.ops.deform_conv2d, paddle.vision.ops.DeformConv2d -- 新增paddle.subtract -- 新增paddle.optimizer.lamb -- 新增Tensor相关API,Tensor.cpu、Tensor.cuda(idx)、Tensor.pin_memory、Tensor.is_leaf、Tensor.clone - - -#### 修复和完善API -- paddle.multiply 去掉axis -- paddle.pow 去掉 type promotion -- paddle.add, paddle.subtract, paddle.multiply, paddle.divide, paddle.matmul, paddle.reshape, paddle.transpose, paddle.kron, paddle.trace, paddle.sum 支持complex64 和complex128 数据类型 -- 移除paddle.maximum, paddle.minimum的axis参数 -- multiplex支持动态图 -- CrossEntropyLoss增加soft_label and axis,修改形状,并提升性能 -- paddle.nn.functional.interpolate size参数支持Tensor格式输入 -- paddle.nn.functional.pad添加在constant模式时,对N和C维度的padding -- paddle.optimizer.momentum支持恢复训练 -- 修复转换前对BatchNorm指定weight_param名字,再使用paddle.nn.SyncBatchNorm.convert_sync_batchnorm 转换成SyncBatchNorm时报错 -- paddle.to_tensor选择设备时,支持直接输入其他Tensor的place -- 优化Tensor.detach的性能,与原Tensor共享内存,减少1次内存拷贝,并且不保留在原计算图中 -- 静态图模式下,新增支持通过paddle.optimizer.get_lr()获取学习率 -- 修复paddle.Embedding在GPU下使用超范围ID报错异常 - - -#### 移除API(包括别名) -- 移除complex module下的api: paddle.complex.matmul, paddle.complex.reshape, paddle.complex.transpose, paddle.complex.kron, paddle.complex.trace, paddle.complex.sum, paddle.complex.elementwise_add, paddle.complex.elementwise_sub, paddle.complex.elementwise_mul, paddle.complex.elementwise_div -- 移除paddle.nn.functional下的sigmoid_cross_entropy_with_logits - - -### 高层API -- 新增api paddle.callbacks.ReduceLROnPlateau -- 新增api paddle.callbacks.LRScheduler -- 新增api paddle.vision.datasets.FashionMnist -- paddle.io.DataLoader中places参数变更为可选参数,当为默认值None时,自动选择paddle.CPUPlace()或paddle.CUDAPlace(0),places参数将在后续版本删除 -- paddle.io.DataLoader支持通过设置batch_size=None来禁用DataLoader自动组batch功能 -- 新增api paddle.io.ComposeDataset 用于将多个数据集按字段拼接为一个数据集 -- 新增api paddle.io.ChainDataset 用于将多个数据集按sample整合为一个数据集 -- 新增api paddle.io.WeightedRadnomSampler 用于通过指定权重进行随机采样 -- 新增api paddle.vison.ops.yolo_loss和paddle.vision.ops.yolo_box -- 新增api paddle.flops -- 新增api paddle.callbacks.EarlyStopping -- 更新api model.save,保存文件格式与底层保持一致 -- 修复api 修复动态图input dtype为非float32且Model初始化不提供inputs时,保存预测模型报错的bug -- paddle.metric.Accuracy支持输入多维Tensor,支持rank为1的label和one-hot表示的label +- 飞桨框架计划在未来的某个版本起,放弃对python2和python3.5的支持,建议您升级python到3.8版本来使用飞桨。 +- 飞桨框架计划在未来的某个版本起,放弃对CUDA9的支持,建议您升级CUDA版本来使用飞桨。 + +## 训练框架 + +### 兼容性说明 + +- 编程范式:飞桨2.0.0默认开启了命令式编程范式(动态图),但仍然保留对静态图的支持,静态图代码(包括1.8版本的静态图代码),可以通过添加`paddle.enable_static()`后来运行。 +- API:飞桨框架2.0.0版本推荐用户使用位于paddle根目录下的API,同时在paddle.fluid目录下保留了所有的1.x版本的API,保留对之前版本API体系的支持。因此,1.x版本的静态图训练代码,添加`paddle.enable_static()`即可在2.0.0版本上正常运行;1.x版本训练保存的模型,可以使用2.0.0版本进行推理。 +- 我们整理了1.8版本API到2.0版本API的[对应关系表](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/09_others_information/api_mapping_cn.html)。 +- 我们提供了迁移工具,来方便您将基于旧版本的代码迁移为2.0.0版本的代码,详情请见:[版本迁移工具](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/01_paddle2.0_introduction/migration_cn.html)。 + +### 动态图模式 + +默认开启动态图模式进行模型开发和训练,通过动转静的方式进行模型部署和训练加速。详情,请参看:[动态图](https://www.paddlepaddle.org.cn/documentation/docs/zh/tutorial/quick_start/dynamic_graph/dynamic_graph.html),[动态图转静态图](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/04_dygraph_to_static/index_cn.html)。 + +### API体系 + +- 基础API + - API目录结构调整,1.x 版本的API主要位于paddle.fluid目录,本版本对API目录结构进行调整,使得分类更为合理,具体调整后的目录说明请参见[API文档](https://www.paddlepaddle.org.cn/documentation/docs/zh/api/index_cn.html)。 + - 新增API共186个,修复和完善API共260个:详情请参考2.0.0 pre release版本的release notes,以及[API文档](https://www.paddlepaddle.org.cn/documentation/docs/zh/api/index_cn.html)。 + - 新增分布式基础通信类API到paddle.distributed: broadcast, all_reduce, reduce, all_gather, scatter, barrier;动态图多卡训练启动API spawn, init_parallel_env,动静统一启动方式fleetrun + - 组网类API实现动静统一,支持在动态图模式和静态图模式两种模式下运行。 +- 高层API + - 新增飞桨高层API,对模型开发过程中常见的组网、训练、评估、预测、存取等操作进行封装,实现低代码开发,请参见[飞桨高层API使用指南](https://www.paddlepaddle.org.cn/documentation/docs/zh/tutorial/quick_start/high_level_api/high_level_api.html)。 + - 新增分布式高层API paddle.distributed.fleet,支持通过配置DistributedStrategy来支持多种优化策略组合和自动并行、分布式指标计算、InMemoryDataset ### 功能优化(含分布式) #### 动态图基础功能 -- 支持Tensor和Scalar在使用运算符运算时进行正确的类型提升 -- 修复了多个模型train/eval模型切换互相干扰的问题。动态图Layer.eval()与no_grad解耦,改动前调用Layer.eval()后Tracer不会自动记录反向,改动后调用Layer.eval()仍会自动记录反向,如果需要反向,可以使用paddle.no_grad -- 支持通过索引或切片修改 Tensor数据 -- 增加 inplace 反向检测模块,检测是否前向inplace 操作会影响梯度计算的正确性 -- 新增Tensor.backward()自动求导时,梯度会累加在之前的梯度上,可以实现变相扩大“batch_size” -- 支持了 SE-ResNext oneDNN 动态图训练 +- 易用性优化: + - Tensor功能增强:新增Tensor拷贝接口Tensor.clone(),及120余个Tensor计算操作接口(如Tensor.cos()等);新增使用索引或切片原地修改Tensor的功能;新增Tensor与Scalar运算时自动类型提升的功能;动态图Tensor打印信息优化,展示形式与Numpy保持相同。 + - Layer功能增强:新增Layer深拷贝接口Layer.deepcopy();新增Layer属性和函数查看接口Layer.dir();自本版本起,Layer.eval()调用后,Trace功能仍会自动记录反向操作,如不需要记录反向,需要显式调用paddle.no_grad()。 + - Optimizer新增set_lr()接口,可在动态图模式下灵活调整学习率。 + - 新增set_global_initializer()接口,可定义全局的参数初始化方法。 + - 多卡运行代码简化,不需要再显式调用scale_loss和apply_collective_grads。 +- 性能优化: + - 多卡训练时Embedding等API支持使用稀疏参数梯度更新的功能。 + - 动态图训练和推理新增对Intel加速库oneDNN(原MKL-DNN)的支持,CPU训练场景Resnet50模型可提速6倍。 + - 新增动态图Inplace计算功能,可复用Tensor存储空间,减小显存占用,并新增View方法,可以在共享底层存储的情况下改变Tensor描述。 + - 【不兼容升级】新增动态图梯度累加功能,起到变相“扩大BatchSize”的作用,backward()接口默认不清空梯度,**需要显式调用optimizer.clear_grad()来清空梯度**。 +- Bug修复: + - 修复了多个模型在train/eval切换时会互相干扰的问题。 #### 动态图转静态图 -**新增语法** - -- 增加在动转静循环中使用isinstance语法的支持 -- 添加对赋值shape给tuple的动转静语法支持,如a, b, c, d = tensor.shape -- python的 and/or 语句的左右操作数的执行是有先后顺序的,若左操作数的结果能够确定逻辑值,将不执行右操作数。过去动转静图中的logical_and/logical_or对这种情况处理有问题。增加了这种支持。 -- 增加支持了函数 signature中含有**kwargs的情况 -- 支持使用 jit.not_to_static 装饰函数,在动转静过程中,不转化该函数 -- 支持python字典语法 dict.pop() - -**bug修复** - -- 修复动转静存储lstm接口时一个表示drop_state的变量没有初始化导致模型存储失败的问题 -- 修复嵌套循环在变量分析上的问题 -- 修复return在一些特殊情况的问题 -- 修复if-else中处理列表生成式及变量分析上的问题 -- 修复迭代变量在一些特殊情况的问题 -- 修复transpose API 在动态图和静态图行为不一致问题,使之支持动转静 -- 修复concat API 在动态图和静态图行为不一致问题,使之支持动转静 -- 优化部分动转静报错信息,使报错位置更准确 -- 修复convert_call在特殊情况下会重复递归调用问题 -- 修复由于2.0 API对out.dtype判断不同导致的动转静问题 -- 修复了x.shape == y.shape在动态图是判断list相等,返回True/False,但静态图下会被重载成elementwise的问题,这种转为静态图后对elementwise结果进行reduce。 -- 修复了param_guard覆盖不到hook的问题。 -- 修复了init运行动态图一些参数变量在静态图因为类型不是静态图变量不能赋值的问题 -- 修复了用户在\__init__函数中定义的非参数类型变量值无法正确修改和更新的问题 -- 修复了动转静过程中错误转化第三方库logging的问题 -- 修复了for-enumerate语法AST转写有误的问题 -- 修复了部分warning信息循环显示多次的问题 +- **动静转换新增语法支持** + - 新增return语法支持,可以在if-elif-else或者循环条件中提前return,并能够return不同类型的tensor或None。 + - 新增对函数signature中含有**kwargs参数的支持。 + - 新增for、for enumerate遍历Tensor和TensorList的语法支持,遍历Tensor的操作更加灵活。 + - 新增更多python语法支持,如print,assert,cast,isinstance,tuple,dict.pop()等。 +- **动静转换易用性优化** + - 动转静的返回类型从callable函数改为Class,可以调用Class的code,main_program等接口更轻松获取转化后的静态图信息。 + - 动转静装饰器to_static新增支持直接装饰model实例,如to_static(model, input_spec) 。 + - 新增jit.not_to_static装饰器,可以在动转静过程中,不转化该函数。 + - 增加set_verbosity()和set_code_level()接口,可以设置不同级别来查看动转静过程的log或者中间状态的代码。 + - 新增InputSpec,可以指定动转静时输入Tensor变量的形状和数据类型。 + - 报错信息优化,可以定位到原动态图错误的代码行,并隐藏与用户无关的报错信息。 + - 支持用 pdb.set_trace() 进行断点调试。 +- **优化部署模型存储载入接口** + - 新增paddle.jit.save接口用于动转静模型的保存,该接口同时兼容存储未经paddle.jit.to_static转写的Layer对象以及paddle.DataParallel模型,删除旧接口ProgramTranslator.save_inference_model。 + - 新增 paddle.jit.load 接口用于载入静态图格式存储的预测模型,包括paddle.jit.save和paddle.io.save_inference_model保存的模型,模型载入后可在动态图下用于模型推理或者模型训练调优。 + - paddle.jit.TransLatedLayer新增program方法,用于获取paddle.jit.load载入模型的program,便于了解模型结构。 + - 【不兼容升级】paddle.jit.save, paddle.jit.load接口参数model_path含义变更,改为存储文件前缀而非目录。 #### 混合精度训练 -- 支持更为激进的FP16训练模式(即纯FP16训练)。为保证模型的收敛性在Momentum优化器中新增`multi_precision`和`rescale_grad`属性,`multi_precision`主要指示优化器需要维护一份master weights -- 使用纯FP16训练,ResNet50模型在配有16GB显存的V100上单卡训练性能可达1400+ samples / sec - -#### 模型量化 -- 动态图量化支持skip指定Layer -- 动态图量化支持2.0 API Conv 以及Linear +- 混合精度策略升级:黑白名单策略(下简称“O1策略”)之外,新增“Almost FP16(下简称O2策略)”支持,即尽可能多使用FP16进行计算。 + - 新增FP16 Guard功能(`paddle.static.amp.fp16_guard`),支持用户自由控制模型中单个Op是否选用FP16计算类型。 + - 用户可自定义`custom_black_list`,以控制某一类Op保持FP32计算。 + - 使用O2策略,Resnet50和Bert base在V100单卡训练速度分别可达1400images/s和590sequences/s。 +- 易用性优化: + - 使用`paddle.static.amp`包统一管理与静态图混合精度训练相关的接口。 + - 为`AutoMixedPrecisionLists`提供简化名称`CustomOpLists`,即用户可使用`CustomOpLists`自定义AMP黑白名单Op列表。 #### 分布式训练优化 -- 支持使用`paddle.distibuted.spawn`接口启动`all_gather`等分布式低阶API -- 支持heterbox异构训练 -- 流水线并行支持Executor.run接口,提升易用性 -- Launch接口升级,支持指定单节点的进程数 -- Sharding支持百亿参数模型多卡训练 - +- 集合通信All Reduce + - 支持千亿语言模型混合并行训练:支持基于executor接口的流水线并行训练,sharding-DP策略,GradientMerge+AMP策略,Recompute+Offload策略,megatron策略 + - 支持动态图:支持多流通信策略,自动rebuild group策略,高性能稀疏参数通信,多卡梯度顺序一致性策略 +- 参数服务器PS + - 大规模稀疏功能升级:升级大规模稀疏PS-API,抽象通信组件/参数表/优化器基类,方便用户通过子类派生方式进行二次开发;同时还支持千亿特征流式训练,含特征准入,退场,增量训练,分布式指标预测等;通信方式从GRPC切换成了BRPC + - 开源异构参数服务器,既支持传统的纯CPU机器PS,也支持基于三级存储(SSD/内存/显存)的纯GPU机器PS,还支持CPU机器+GPU机器/昆仑机器混布PS,可以完成万亿参数点击率预估模型的分钟级训练 +- 新训练机制支持: + - 支持基于控制流的多任务分布式训练,性能较基于Intag的多任务提升50%以上 +- 分布式启动方式优化 + - 支持使用`paddle.distibuted.spawn`接口启动`all_gather`等分布式低阶API; + - `paddle.distributed.launch`接口升级,支持指定单节点的进程数,并可简化为`fleetrun`; + - 优化`gen_nccl_id`,去除grpc依赖,添加一定的容错性,提升分布式任务启动的稳定性; + - 支持Gloo方式启动集合通信多CPU #### 模型保存与载入 +- 规范Layer、Optimzier等API的set_dict方法名,统一改为set_state_dict。 +- paddle.load兼容性增强:支持从fluid.io.save_inference_model和fluid.io.save_params/persistables等接口的存储结果中载入Layer的state_dict。 +- 修改paddle.save/load接口行为,paddle.save不再为存储结果添加后缀,paddle.load每次载入仅返回一个结果,规范接口语义。 +- 移除paddle.SaveLoadConfig,对于paddle.jit.save, paddle.jit.load, paddle.load等接口兼容载入的场景,使用**kwargs传入额外的配置,简化接口的使用。 +- 原静态图API paddle.io.save, paddle.io.load, paddle.io.save_inference_model, paddle.io.load_inference_model移动到paddle.static模块下。 +- 优化paddle.static.load_program_state接口使用体验,在不指定载入var_list的使用场景中,载入目录存在干扰文件时仅警告而不报错。 -- 支持有多个方法声明由`paddle.jit.to_static`转写的Layer在使用`paddle.jit.save`存储后,仍然能够通过`paddle.jit.load`载入,并且由`paddle.jit.to_static`转写的多个方法仍然能够使用 -- 支持由`paddle.jit.load`载入的Layer在fine-tune或者作为其他Layer的子Layer使用之后,仍然能够通过`paddle.jit.save`正确存储 -- 拓展`paddle.jit.save`支持存储`paddle.DataParallel`模型 -- 优化`paddle.static.load_program_state`接口使用体验,在不指定载入`var_list`的使用场景中,载入目录存在干扰文件时仅警告而不报错 -- 支持`paddle.jit.save`处理dict类型的InputSpec -- 支持`paddle.onnx.export`将动态图模型导出为ONNX文件格式 +#### 复数计算 +- 扩展动静态图执行引擎,支持复数神经网络训练与复数梯度累加。 +- 新增mul, div, matmul, kron, abs等Op对复数计算支持。 -#### 性能优化(含分布式) -- 提升RNN类OP在CPU上的性能(LSTM,GRU,SimpleRNN),对比2.0-rc版本,LSTM、GRU、SimpleRNN前向性能与后向性能均有显著提升 -- 优化FastThreadedSSAGraphExecutor调度,修复通信同步场景下,通信计算不重叠的情况,4机32卡resnet50提升约0.3% -- 优化paddle.fleet amp分布式性能,修复最后一个通信和计算不重叠的情况,fp16 4机32卡性能提升约0.5% -- 优化分布式通信组件Communicator性能。GEO-400模式下,W2V模型吞吐率、Simnet-Bow模型性能均有显著提升。Async模式下,相较于飞桨框架1.8按本,W2V模型吞吐率提升11%,CTR-DNN模型性能提升14% -- 优化参数服务器模式下Worker为GPU设备时的性能,降低Embedding查表的拷贝耗时,在CTR-DNN模型中,训练吞吐率有显著提升 -- 分布式GPU动态图实现计算和通信overlap,并支持用户细粒度配置梯度fuse的group大小等选项。在ResNet152、Bert两个模型上,多节点性能提升在5%以上。在ResNet50也有3%以上的提升 -- 提升cumsum在GPU上的性能。 -- 提高了Resnet50 oneDNN 动态图训练的性能。目前Resnet50 oneDNN drgraph训练比CPU训练快 6.4 倍 -- 新增GRU和SimpleRNN的cudnn支持 - +#### ONNX功能升级 -#### 调试分析 - -- 优化Paddle Python端报错异常类型与Python原生报错类型对齐 -- 默认隐藏C++报错栈,优化隐藏C++栈之后的报错格式,去掉分界标志`Error Message Summary`,与Python原生报错格式对齐 -- 优化部分static模块下API在非静态图模式下使用报错提示,包括static.append_backward, static.gradients, static.scope_guard, static.Print, static.nn.embedding, static.nn.data_norm, static.nn.multi_box_head, static.nn.nce, static.nn.py_func共9个API -- 优化了动态图模型下传入Tensor为None时的报错信息 -- 动态图print tensor的格式进一步优化 +- 新增API: `paddle.onnx.export`支持paddle2.0动态图转换到ONNX协议 +- 新增PPOCR,PPYOLO,FasterRCNN,ERNIE等模型转换 +- 更丰富的Paddle op覆盖,支持88个Paddle OP算子,同时支持导出为ONNX 1~12不同版本的算子集 +#### 性能优化(含分布式) -### 编译安装 +- 动态图性能优化: + - 数据读取性能优化:简化动态图模式下DataLoader底层实现逻辑,降低读取线程开销,进一步提升数据读取效率,提升模型整体训练速度。MobileNetV1在V100单卡、BatchSize=128的场景下整体训练速度提升34%。 + - 动态图组网API升级和性能优化,大量动态图API将直接调用自动生成的Pybind接口,性能显著提升。 + - 提高了Resnet50 oneDNN动态图训练的性能。目前CPU场景Resnet50 oneDNN 动态图训练速度提升6.4 倍。 +- OP性能优化: + - argsort:优化输入Tensor的元素个数等于其`axis`维长度时的性能,前向速度提升34倍,反向速度提升10倍。 + - dropout:优化GPU性能,FP32性能提升约20%,FP16性能提升约50%。 + - cast:优化GPU性能,性能提升10%~20%。 + - softmax:优化axis=-1的情况下的GPU性能,针对不同shape有3倍~96倍的提升。 + - 其他OP性能优化:cumsum,reshape,Flatten,IndexSelect,Roll,elementwise_add,AdamW及RNN类(LSTM,GRU,SimpleRNN)等OP,均有明显性能提升。 +- 策略优化: + - 新增fused_bn_add_act融合策略,可以自动对batch_norm+elementwise_add+activation的组合模式进行自动融合加速。 + - 新增梯度聚合的inplace addto策略,支持原位梯度累加,在ResNet-50混合精度训练中性能提升6.3%。 + +- 优化FastThreadedSSAGraphExecutor调度,修复通信同步场景下,通信计算不重叠的情况,4机32卡resnet50提升约0.3%。 + +- 分布式性能优化: + - 优化lars策略, ResNet50 分布式多卡训练 16k batch size 的 time2train 指标小于 10 分钟。 + - 优化paddle.fleet amp分布式性能,修复最后一个通信和计算不重叠的情况,fp16 4机32卡性能提升约0.5%。 + - 优化paddle.fleet.gradient_merge分布式性能,先聚合梯度再通信,多机性能可提升20%-40%,达到线性加速比。 + - 优化参数服务器通信组件Communicator性能。GEO-400batch通信一次的情况下,W2V模型吞吐率、Simnet-Bow模型性能均有显著提升。Async模式下,相较于飞桨框架1.8按本,W2V模型吞吐率提升11%,CTR-DNN模型性能提升14% 。 -#### 新增支持 -- (experimental)发布支持cuda11的安装包 -- 将cuda10.1及以上的Paddle镜像以及CI系统镜像中的NCCL版本到2.7.8 -- 发布支持xpu的安装包 -- 发布支持jetpack的安装包,以及支持nv_jetson的C++预测库。 +#### 调试分析 -#### 体验优化 -- 修复联编策略,单独发布包含tensorrt的gpu包,避免用户在安装其他GPU版本的包出现没有tensorrt的报错 -- 删除安装依赖包:scipy、rarfile、prettytable、pathlib -- 安装文档优化 +- 将框架内仅100处使用LOG(FATAL)抛出异常的写法统一改为使用PADDLE_THROW,优化由于框架不支持某种行为而导致的报错格式与内容。 +- 完善框架内Signal Handler实现,优化执行遇到系统Signal错误时的报错格式与内容。 +- 优化框架报错栈格式,将编译时python报错栈移至原生报错栈下方,提升报错信息阅读体验。 +- 累计进一步完善约1500余条框架内检查报错的错误类型与提示文案,提升框架整体调试易用性。 +- 动态图报错信息增强,动态图下Pybind层的报错信息进行系统性增强,提升用户体验。 +- 优化Paddle Python端报错异常类型,与Python原生报错类型对齐。 +- 默认隐藏C++报错栈,优化隐藏C++栈之后的报错格式,去掉分界标志`Error Message Summary`,与Python原生报错格式对齐。 +- 优化部分static模块下API在非静态图模式下使用报错提示,包括static.append_backward, static.gradients, static.scope_guard, static.Print, static.nn.embedding, static.nn.data_norm, static.nn.multi_box_head, static.nn.nce, static.nn.py_func共9个API。 +- 优化了动态图模型下传入Tensor为None时的报错信息。 +- 优化了Layer的打印信息,支持打印Layer中的各个层次结构关系。 +## 推理部署 -### Bug修复 +#### 模型量化 -- 修复多卡训练时0号GPU卡显存占用多于其他卡的Bug -- 修复了tile op计算时shape推导错误的问题 -- 修复了使用paddle时出现的大量invalid escape sequence的warning信息 -- 修复了paddle.full设置INF、NAN、NINF等时的bug -- 修复paddle.fleet多nccl comm设置不生效的问题,添加同步模式下多nccl comm通信不重叠的警告 -- 修复paddle.framework.seed在TruncatedNormal初始化不符合预期的问题 -- 修复AvgPool 相关 API动转静exclusive参数行为不一致问题;修复MaxPool 相关 API ceil_mode传参问题 -- 修复paddle.topk在GPU下结果不正确的bug -- 修复 fluid.layers.nn.gather 动态图API,缺少了 overwrite 选项 bug -- 修复Windows下终端不识别CUDA_VISIBLE_DEVICES为空字符的bug,通过设置空字符串可以使框架以CPU模式执行 -- 修复当LinearLrWarmup中递归包含Learning Rate Scheduler时,optimizer.state_dict/set_dict时的无法递归保存加载的Bug -- 修复了ptb lm模型单机训练性能下降的问题 -- 修复了softmax_with_cross_entropy使用ignore_index时梯度计算的bug -- 修复了AdamW第一次执行后再次获取要进行decay的参数为空的bug +- 动态图训练时量化功能增强,新增`ImperativeQuantAware`类统一管理动态图量化功能。目前支持对Conv2D、Linear等带权重层的量化,并支持对权重进行分channel求取量化参数,同时也支持无权重层如ReLU,Tanh的量化,以及skip指定Layer量化的功能。 +- 新增动态图量化训练过程中对模型layer求取output scale参数功能,供Server端量化推理部署使用 +- 动态图量化模型支持使用Paddle-Lite进行预测部署。 +- 离线量化功能支持提前融合conv+bn,及产出LSTM量化模型的功能,移除保存采样数据到临时文件的功能。 +- 静态图量化支持Conv2d_tranpose量化,支持Linear使用per-channel形式量化。 +### Paddle Inference -## 推理 +预测库默认命名从fluid_inference改为paddle_inference。 -### Paddle Inference +#### API +- 全面升级推理C++ API,推荐使用新版API。原API暂时保留,但使用时会报 warning,计划未来会删除;新版API主要是从规范命名、简化使用方法角度做的升级,重要变化包括: + - C++ 接口新增 `paddle_infer` 命名空间,包含推理相关接口; + - `ZeroCopyTensor` 更名为 `Tensor`,作为推理接口默认输入输出表示方式; + - 简化 `CreatePaddlePredictor` 为 `CreatePredictor`,只保留 对`AnalysisConfig` 的支持,不再支持其他多种Config; + - 新增服务相关的工具类,比如 `PredictorPool`,便于创建多个predictor 时使用。 #### 功能升级 -- Paddle 在 2.0 中新增或升级了部分算子。从本版本起,对前向算子版本规则进行定义与兼容约束。通过框架间算子版本的对齐,确保不同框架中同一算子版本的定义和行为一致,从而增强框架整体的健壮性 -- 新增TryShrinkMemory接口,通过释放临时tensor的方式减少应用显/内存占用,demo示例可参考[Paddle-Inference-Demo](https://github.com/PaddlePaddle/Paddle-Inference-Demo/tree/master/c%2B%2B/test/shrink_memory) -- Paddle-TRT支持clip op,支持分类模型GhostNet在Paddle-TRT下运行 -- Paddle-TRT int8预测支持含有channelwise量化的mul op的模型,支持PaddleOCR检测和识别的PaddleSlim量化模型在Paddle-TRT int8下运行 -- `load_inference_model` 和 `save_inference_model` 两个API迁移到 `paddle.static` 下,提升了易用性,兼容旧接口。 -- 新增 `serialize_program`, `deserialize_program`, `serialize_persistables`, `deserialize_persistables`, `save_to_file`, `load_from_file` 六个API,用来满足用户执行序列化/反序列化 program,序列化/反序列化 params,以及将模型/参数保存到文件,或从文件中加载模型/参数的需求。 -- 支持部分模型的BF16预测。目前支持resnet50,googlenet,mobilenetv1和mobilenetv2模型的BF16预测 -- 添加了一些oneDNN 算子的版本兼容性支持 +- 算子版本信息相关 + - Paddle 在 2.0 中新增或升级了部分算子。从本版本起,对前向算子版本进行定义与兼容约束。通过框架间算子版本的对齐,确保不同框架中同一算子版本的定义和行为一致,从而增强框架整体的健壮性。 + - 增加推理前向算子版本的注册机制,并将算子的不兼容升级行为纳入统计。 + - 增加预测模型的算子版本信息。预测库通过模型文件,将可以对此模型对应的算子定义进行识别,避免定义不同导致计算错误。 +- 模型接口 + - `load_inference_model` 和 `save_inference_model` 两个API迁移到 `paddle.static` 下,兼容旧接口,提升易用性。 + - 新增 `serialize_program`, `deserialize_program`, `serialize_persistables`, `deserialize_persistables`, `save_to_file`, `load_from_file` 六个API,用来满足用户执行序列化/反序列化 program,序列化/反序列化 params,以及将模型/参数保存到文件,或从文件中加载模型/参数的需求。 + +- NV GPU 推理相关 + - 新增对TRT 7.1版本的适配支持。 + - 新增对Jetson Nx硬件的适配支持。 + - Paddle-TensorRT增强对 PaddleSlim 量化模型的支持,涵盖CV上检测,分类,分割等多个任务。 + - Paddle-TRT支持clip op,支持分类模型GhostNet在Paddle-TRT下运行。 + - Paddle-TRT 支持含有channelwise量化的mul op的模型,支持PaddleOCR检测和识别量化模型在Paddle-TRT int8下运行。 + - Paddle-TRT 动态shape功能支持PaddleSlim量化Int8模型。 +- X86 CPU 推理相关 + - 添加了对oneDNN BF16的支持:支持conv2d 和gru bf16 计算,目前支持resnet50,googlenet,mobilenetv1和mobilenetv2模型的BF16预测。 + - 在oneDNN INT8量化策略中增加对有偏移scales的量化和反量化的支持。 + - 添加了一些oneDNN 算子的版本兼容性支持。 + - CPU端增加了`elementwise_add` 和`elementwise_mul` INT8 oneDNN 内核支持。 + - 提升CPU端测试量化模型的易用性,支持同时对比测试原始模型和量化模型。 + +- 自定义OP + - Python端推理新增对用户自定义OP支持。 +- 内存 /显存相关 + - 新增TryShrinkMemory接口,通过释放临时tensor的方式减少应用显/内存占用,demo示例可参考[Paddle-Inference-Demo](https://github.com/PaddlePaddle/Paddle-Inference-Demo/tree/master/c%2B%2B/test/shrink_memory)。 +- 动态图量化模型支持 + - X86 推理支持动态图量化模型。 + - NVIDIA GPU 推理支持动态图量化模型。 +- 报错信息 + - 编译打开ON_INFER时,FLAGS_call_stack_level默认为打开,报错信息显示调用栈。 #### 性能优化 -- ERNIE模型在开启TenorRT时增加变长输入的支持,带来性能提升147%。在软件版本cuda10.1、cudnn 7.6、tensorrt 6.0、[OSS 7.2.1](https://github.com/NVIDIA/TensorRT/tree/7.2.1),模型ernie-base-2.0,数据集QNLI,输入BatchSize = 32时,Nvidia Telsa T4上的性能从905 sentences/s提升到2237 sentences/s。示例代码:[Paddle-Inference-Demo/c++](https://github.com/PaddlePaddle/Paddle-Inference-Demo/tree/master/c++) -- 提高了oneDNN INT8 GRU性能。GRU INT8 模型的预测速度是原Paddle NativeConfig float32 模型的 1.65倍(线程= 1,batch_size = 50) -- 添加了oneDNN batchnorem + activation的fuse支持,pvanet_ocr模型性能因此提高了2.8% - +- 升级了量化模型的转换和优化 +- NV GPU 相关 + - 优化了CUDA 的ArgMin, ArgMax OP,使得该OP的二进制大小从60M下降至1.3M。 + - ERNIE模型在T4上使用Paddle-TRT FP16推理性能提升15%。 + - ERNIE模型在开启TenorRT时增加变长输入的支持,带来性能提升147%。在软件版本cuda10.1、cudnn 7.6、tensorrt 6.0、[OSS 7.2.1](https://github.com/NVIDIA/TensorRT/tree/7.2.1),模型ernie-base-2.0,数据集QNLI,输入BatchSize = 32时,Nvidia Telsa T4上的性能从905 sentences/s提升到2237 sentences/s。示例代码:[Paddle-Inference-Demo/c++](https://github.com/PaddlePaddle/Paddle-Inference-Demo/tree/master/c++)。 +- X86 CPU相关 + - 新增 conv + affine_op pass,在6248机器上,MASK-RCNN fp32单线程性能提高了26%。 + - 新增fc + gru pass和oneDNN(原MKL-DNN) GRU fp32内核,使得GRU fp32模型4线程推断速度在机器Intel Xeon 6248上提高 20%。 + - 通过支持oneDNN INT8 GRU,GRU INT8模型的速度与NativeConfig推理相比,提高了约1.65倍(线程= 1,batch_size = 50)。 + - 添加了oneDNN batchnorm + activation的fuse支持,pvanet_ocr模型性能因此提高了2.8%。 + - 增加了oneDNN FC + Gelu,FC + Sigmoid 和 FC + tanh 算子融合,将BERT推理模型提高了4.5%。 + - 增加了对部分Op的oneDNN inplace支持。 + - 优化的oneDNN LRN op,使得GoogleNet fp32模型提速1%。 + - 通过oneDNN升级到1.6,Ernie Large oneDNN在Skylake上(Intel Core 6148)推理的速度提高了约2.7倍(即单元测试 test_analyzer_ernie_large)。 + - 增加了插值interpolate oneDNN前向算子支持,目前ocr_det模型推理性能相比单纯CPU Native推理提高了2.04倍。 + +## Paddle Lite +端侧推理引擎Paddle Lite v2.8适配主框架v2.0 + +## 环境适配 -#### Bug修复 -- 修复含有avg pooling或global pooling的模型在jetson设备上出现计算结果错误、报错跳出或hang住的问题 -- 修复使用TensorRT动态shape推理时,TensorRT子图输出Tensor的shape结尾是x1时会被错误的删除的问题 -- 修复当使用TensorRT推理时,config.pass_builder()->DeletePass()不生效的问题 -- 解决了某些模型的性能取决于 matmul 算子的 weights 数值的问题 -- 修复了当CPU oneDNN加载多个模型预测时性能变慢的问题 - -## 模型升级 - -### PaddleDetection -- 升级动态图模型: - - Faster RCNN, Faster FPN, Mask RCNN, Mask FPN, Cascade RCNN, Cascade Mask, YOLOv3模型精度打平静态图 - - 支持动转静功能,并打通Paddle Inference,精度速度打平静态图 -- 发布实时实例分割模型SOLOv2,相较竞品精度提升2.4个点,预测速度提升31.2%, 训练速度为竞品2.4倍 -- 新增Android移动端检测demo,包括SSD、YOLO系列模型 -- 新增PACT新量化策略,YOLOv3-Mobilenetv3在COCO数据集上比普通量化相比提升0.7%。 - -### PaddleSlim - -- 动态图压缩功能支持 - - 新增动态图剪裁、量化训练功能 - - 剪裁新增通道数对齐功能,使产出模型更容易被预测库加速 - - PACT量化训练方法改为内置方法,方便用户直接调用 -- 新增OFA模型压缩技术,TinyERNIE经压缩后加速40%,精度无损 - -### PaddleSeg - -- 全新发布2.0-rc版本,全面升级至动态图,支持15+分割模型,4个骨干网络,3个数据集,4种Loss: - - 分割模型:ANN, BiSeNetV2, DANet, DeeplabV3, DeeplabV3+, FCN, FastSCNN, Gated-scnn, GCNet, HarDNet, OCRNet, PSPNet, UNet, UNet++, U^2Net, Attention UNet - - 骨干网络:ResNet, HRNet, MobileNetV3, Xception - - 数据集:Cityscapes, ADE20K, Pascal VOC - - Loss:CrossEntropy Loss、BootstrappedCrossEntropy Loss、Dice Loss、BCE Loss -- 提供基于Cityscapes和Pascal Voc数据集的高质量预训练模型 40+ -- 支持多卡GPU并行评估,提供了高效的指标计算功能。支持多尺度评估/翻转评估/滑动窗口评估等多种评估方式。 - -### PaddleClas - -- 全新发布2.0-rc1,全面升级至动态图,支持23个系列分类网络结构,135个图像分类预训练模型。其中包含14个实用的SSLD蒸馏模型,效果普遍比基准模型提升3%以上,新增ResNeSt、RegNet和GhostNet三个系列模型。 -- 基于动态图,提供混合精度训练方式和基于DALI的训练方式。 -- 基于动态图,提供离线预测部署、服务化部署以及端侧部署三种部署方式。 - -### PaddleOCR - -- 全新发布2.0-rc1,PP-OCR系列模型升级至动态图。提供8.1M超轻量中英文OCR模型,通用中英文OCR模型以及效果更优的多种语言识别模型(纯英文数字、法、德、日、韩),并支持离线预测部署和服务化部署两种部署方式。 -- 发布Style-Text通用文本数据合成工具。 -- 发布PPOCRLabel文本数据标注工具。 - -### PaddleRec - -- 发布模型:gru4rec, deepfm, mmoe, dnn, LR 支持动态图 - -### PaddleGAN - -- 发布模型:Pixel2Pixel, CyclGAN, PSGAN, UGATIT, ESRGAN, CGAN, DCGAN -- 提供风格迁移,妆容迁移,上色,超分,人物、场景动漫化等预训练模型10个 - -### PaddleNLP - -- 发布2.0-beta版本,全面支持动态图模式,提供PaddleNLP核心库,与高阶API深入融合,支持pip安装,为开发者提供飞桨2.0文本领域的最佳实践。 -- 新增文本图学习模型ERNIESage,生成式预训练模型ERNIE-Gen,开放域对话生成模型PLATO-2,语义匹配模型SentenceTransformer,时间序列预估模型TCN等。 -- 预训练语言模型进一步丰富,包括ERNIE, BERT, RoBERTa, ELECTRA等共计22个预训练模型,其中包含11个中文预训练模型。 -- 新增Perplexity, BLEU, Rouge-L等8种常用的文本任务评估指标,适配飞桨2.0 Metrics API体系,提升易用性。 -- 新增文本分类、序列标注、机器翻译、阅读理解等共25个数据集,适配飞桨2.0 Dataset API体系,一键快速加载。 -- 新增Embedding API功能,包含38个中文词向量,支持快速加载和词粒度语义距离计算。 - -### Parakeet - -- 发布 2.0-alpha 版本,提供 Parakeet 核心库,完善了中文文档,支持 pip 安装。 -- 语音合成模型框架全新升级,统一文本前端的接口使用,模型全面升级为 Paddle 2.0 API,包括TransformerTTS、Waveflow、Wavenet 模型,新增 Tacotron2 模型。 -- 提供了更多可复用的组网模块,方便灵活搭建模型。优化数据处理及加载流程,提升训练速度。 -- 新增 experiment 模块,标准化实验流程,方便实验管理和二次开发,对已有模型提供的实验样例代码。 +### 编译安装 -## 工具组件 +#### 训练框架Paddle +- 发布支持使用x86 CPU及飞腾CPU下使用昆仑芯片的安装包。 +- 新增安装包对python3.8的支持。 +- 新增安装包对cuda10.1、cuda10.2的支持。 +- (experimental)发布支持cuda11的安装包。 +- 将cuda10.1及以上的Paddle镜像以及CI系统镜像中的NCCL版本到2.7.8。 +- 升级oneDNN(原MKL-DNN)从1.3至1.5版本。 +- 镜像中新增预装openssl-dev依赖。 +- 删除安装依赖包:nltk、opencv、scipy、rarfile、prettytable、pathlib、matplotlib、graphviz、objgraph。 +- Paddle的avx与no_avx单独发版,whl包减小40%,默认安装avx版本,优化了安装报错信息,会检查用户的CPU类型与Paddle版本,自动给出对应的安装报错提示。 +- Paddle develop版本pypi安装用户体验提升,缩减用户安装路径,用pip --pre方式即可进行安装。 + +#### 推理引擎Paddle Inference +- 预测库支持cuda10.2-cudnn8-trt7.1的版本。 +- 发布支持jetpack的安装包,以及支持nv_jetson的C++预测库。 +- 新增发布联编tensorrt的两个wheel包,cuda10.0-cudnn7.6-trt6.0.1.5-python36、cuda10.0-cudnn7.6-trt6.0.1.5-python36。 +- 修复联编策略,单独发布包含tensorrt的gpu包,避免用户在安装其他GPU版本的包出现没有tensorrt的报错。 +- 修复预测库打包有重复的问题。 -### PaddleHub -- 发布 2.0-rc版本,全面迁移动态图编程模式,模型开发调试更加方便,finetune接口更加灵活易用。 -- 视觉类任务迁移学习能力全面升级,支持图像分类、图像着色、风格迁移等多种任务。 -- BERT、ERNIE、RoBERTa等Transformer类模型升级至动态图,支持文本分类的Fine-Tune能力。 -- 优化服务化部署Serving能力,支持多卡预测、自动负载均衡,性能大幅度提升。 -- 新增自动数据增强能力Auto Augment,能高效地搜索适合数据集的数据增强策略组合。 -### X2Paddle -- 发布 1.0.0-rc0版本,全面支持PaddlePaddle动态图API。 -- 新增PyTorch模型转换,支持Tracing和Scripting两种方式进行转换。 -- 新增Caffe/ONNX/Tensorflow到Paddle2.0 动态图的转换支持。 -- 新增Optimizer模块,主要包括op融合、op消除功能,提升转换后模型代码的可读性以及模型的预测性能。 +### 新硬件训练支持 +- 昆仑芯片:支持单卡训练,静态图多卡训练,并发布10+模型。 +- 昇腾910芯片:支持单卡训练。 -## [昆仑硬件](https://cloud.baidu.com/product/kunlun.html) +## 已知问题 -### 模型适配昆仑硬件 -- Resnet50, mobilenetv3, deeplabv3, bertbase, DQN 静态图模型适配昆仑硬件 +- 由于cuDNN 8.0.x自身的问题,使用cuDNN 8.0.x编译推理库且没有使用TensorRT加速时,在很多模型上有性能退化现象,等待cuDNN后续版本解决。可以尝试使用TensorRT加速,或者使用cuDNN7.6版本。 +- 由于cuDNN 8.0.x自身的问题,使用cuDNN 8.0.x版本进行推理时,在某些模型会发生内存泄露现象,当前发现可能发生的为使用cuDNN的convolutionBiasActivationForward时。可以尝试通过推理配置文件config.pass_builder()->DeletePass()禁用conv_elementwise_add_act_fuse_pass、conv_elementwise_add_act_fuse_pass。如果还有泄露现象,可以尝试cuDNN7.6,并将发现问题的模型通过issue方式发给我们分析。 diff --git a/doc/paddle/release_note_en.md b/doc/paddle/release_note_en.md index 14353bfdd51..ac718e065b1 100644 --- a/doc/paddle/release_note_en.md +++ b/doc/paddle/release_note_en.md @@ -1,304 +1,278 @@ -# Release Note - -## Release note - -The Paddle framework 2.0-RC1 version has the following updates: - -- **Installation environment** Official release of the binary package supporting CUDA11(experimental) ; Official release of the binary package supporting [Baidu Kunlun chip](https://cloud.baidu.com/product/kunlun.html) (experimental) -- **API function** Support numpy-compatible `paddle.Tensor` indexing and slicing operations(basic indexing); removes the axis parameter in some APIs, support numpy-compatible broadcast semantics; add some new APIs, improve some APIs' functions, and fix some API bugs -- **Dynamic to static conversion** Support more python syntax for dynamic to static graphs, and support for marking functions that do not perform dynamic to static conversion by running `paddle.jit.not_to_static` -- **Framework function** Support multiple executions of `paddle.Tensor.backward()` to accumulate the gradient. The effect is equivalent to the gradient calculated after increasing the batch size. By default, the C++ error stack is hidden, and the error reporting format is optimized. The distributed training supports the heterbox training -- **Framework performance** The mixed precision training supports pure FP16 mode. The ResNet50 model V100 single card training performance reaches up to 1400+ samples/sec. The performance of the distributed training is optimized - -## Forward-looking preview -- The Paddle Framework plans to drop the support for python2 and python3.5 from a certain version in the future. It is recommended that you upgrade python to V3.8 for Paddle -- The Paddle Framework plans to drop the support for CUDA 9.0 from a certain version in the future. It is recommended that you upgrade the CUDA for Paddle - -## Training framework - -### Basic API (including the distributed) - -#### New APIs -- Add the paddle.log2 -- Add the paddle.log10 -- Add the paddle.nn.initializer.set_global_initializer -- Add the paddle.median -- Add the paddle.broadcast_shape. You can calculate the shape of two tensor shapes after broadcast calculation -- Add the paddle.vision.ops.deform_conv2d, paddle.vision.ops.DeformConv2d -- Add the paddle.subtract -- Add the paddle.optimizer.lamb -- Add the Tensor related APIs, Tensor.cpu, Tensor.cuda(idx), Tensor.pin_memory, Tensor.is_leaf, Tensor.clone - - -#### Fix and improve APIs -- In the paddle.multiply, remove the axis -- In the paddle.pow, remove the type promotion -- The paddle.add, paddle.subtract, paddle.multiply, paddle.divide, paddle.matmul, paddle.reshape, paddle.transpose, paddle.kron, paddle.trace, and paddle.sum support complex64 and complex128 data types -- Remove the axis parameter from the paddle.maximum and paddle.minimum -- In the multiplex, support the dynamic graphs -- In the CrossEntropyLoss, add the soft_label and axis, modify shape and improve performance -- The paddle.nn.functional.interpolate size parameter supports the input in the Tensor format -- In the paddle.nn.functional.pad, add the padding for N and C dimensions in constant mode -- In the paddle.optimizer.momentum, support the resume training -- Fix the error when converting a BatchNorm to a SyncBatchNorm using paddle.nn.SyncBatchNorm.convert_sync_batchnorm after specifying the weight_param name before conversion -- paddle.to_tensor supports direct input of other Tensor's place when selecting devices -- Optimize the performance of Tensor.detach, share memory with the original Tensor, reduce one memory copy, without keeping in the original computational graph -- In static graph mode, add the acquisition of the learning rate by paddle.optimizer.get_lr() -- Fix the exceeding-range ID error exception in the use of GPU in the paddle.Embedding - - -#### Remove API (including aliases) -- Remove the api under complex module: paddle.complex.matmul, paddle.complex.reshape, paddle.complex.transpose, paddle.complex.kron, paddle.complex.trace, paddle.complex.sum, paddle.complex.elementwise_add, paddle.complex.elementwise_sub, paddle.complex.elementwise_mul, paddle.complex.elementwise_div -- Remove the sigmoid_cross_entropy_with_logits in the paddle.nn.functional - - -### High-level API -- Add api paddle.callbacks.ReduceLROnPlateau -- Add api paddle.callbacks.LRScheduler -- Add api paddle.vision.datasets.FashionMnist -- In the paddle.io.DataLoader, change the places parameter to an optional parameter. When the default value is None, paddle.CPUPlace() or paddle.CUDAPlace(0) is automatically selected, and the places parameter will be deleted in later versions -- paddle.io.DataLoader supports disabling the DataLoader automatic group batch function by setting batch_size=None -- Add the api paddle.io. ComposeDataset for stitching multiple datasets into one dataset by field -- Add the api paddle.io. ChainDataset to integrate multiple datasets into one dataset by sample -- Add the api paddle.io. WeightedRadnomSampler for random sampling with the specified weights -- Add the api paddle.vison.ops.yolo_loss and paddle.vision.ops.yolo_box -- Add the api paddle.flops -- Add the api paddle.callbacks.EarlyStopping -- Update the api model.save. The saved file format is consistent with the bottom -- Fix the bug of saving prediction model when input dtype in the api dynamic graph is non-float32 and inputs are not provided in the Model initialization -- The paddle. metric. Accuracy supports input multi-dimensional Tensor, supports the label whose rank is 1 and the label represented by one-hot - - -### Function optimization (including distributed) -#### Dynamic graph basic functions -- Support Tensor and Scalar for correct type improvement when using operators for operations -- Fix the bug of the interference with each other in the switching between multiple model train/eval models.Dynamic graph Layer.eval() is decoupled from no_grad, Tracer will not automatically record the reverse after calling Layer.eval() before the change, but will still automatically record the reverse after calling Layer.eval() after the change. If the reverse is needed, you can use paddle.no_grad -- Support the change of Tensor data by index or slice -- Add inplace reverse detection module to detect whether the forward inplace operation will affect the correctness of the gradient calculation -- Add that in the Tensor.backward() automatic derivation, the gradient will be added to the previous gradient. This can increase the "batch_size" -- Enabled SE-ResNext oneDNN dygraph training - - -#### Dynamic graph to static graph - -**New syntax** - -- Add the support for using the isinstance syntax in the dynamic to static loop -- Add the support for dynamic to static syntax for assigning shape to tuples, such as a, b, c, d = tensor.shape -- Python's and/or statements have sequential execution of the left and right operands. If the result of the left operation can determine the logical value, the right operand will not be executed.In the past, logical_and/logical_or in dynamic to static graphs had problems in handling this case.This support is added -- Add the support for the case where the function signature contains **kwargs -- Support the use of jit.not_to_static decorative function. The function is not converted in the dynamic to static process -- Support python dictionary syntax dict.pop() - -**Bug fixing** - -- Fix the bug of model storage failure when a variable representing drop_state is not initialized in the dynamic to static storage lstm interface -- Fix the bug of nested loops in the variable analysis -- Fix the bug of return in some special cases -- Fix the bug of if-else in the handling of list generation and variable analysis -- Fix the bug of iterative variables in some special cases -- Fix the bug of inconsistent behavior of transpose API in dynamic and static graphs, and make it support dynamic to static -- Fix the bug of inconsistent behavior of concat API in dynamic and static graphs, and make it support dynamic to static -- Optimize some dynamic to static error messages, so that the error location is more accurate -- Fix the bug that convert_call will be repeatedly called recursively under special circumstances -- Fix the dynamic to static bug caused by different judgments of out.dtype in 2.0 API -- Fix the bug that x.shape == y.shape is judged to be equal to list in the dynamic graph and returns True/False, but will be re-loaded to elementwise in the static graph, and the elementwise result will be reduced after such conversion to static graph -- Fix the bug that param_guard does not cover hook -- Fix the bug of having some parameter variables in the init running in the static graph can not be assigned because the type is not static graph variables -- Fix the bug of the value of non-parameter type variables being defined by users in \__init__ function cannot be modified and updated correctly -- Fix the bug of wrongly converting third-party library logging in the dynamic to static process -- Fix the bug of incorrect transcription of AST in the for-enumerate syntax -- Fix the bug that some warning information is displayed multiple times in a loop - -#### Mixed precision training -- Support more aggressive FP16 training mode (i.e., pure FP16 training).To ensure the convergence of the model in Momentum optimizer, add the new `multi_precision` and `rescale_grad` attributes. The `multi_precision` mainly indicates that the optimizer needs to maintain a copy of master weights -- Use the pure FP16 training. The ResNet50 model can reach 1400+ samples/sec on a single card with 16GB video memory on V100 - -#### Model quantization -- Dynamic graph quantization supports skip to specify the Layer -- Dynamic graph quantization supports 2.0 API Conv and Linear - -#### Distributed training optimization - -- Support the distributed low-order APIs such as `all_gather` using `paddle.distibuted.spawn` interface -- Support the heterbox heterogeneous training -- Pipeline supports Executor.run interface in parallel to improve the usability -- Launch interface is upgraded, support for specifying the number of processes of a single node -- Sharding supports multi-card training for 10 billion parameter models - - -#### Model saving and loading - -- Support multiple methods declaring that Layers overridden by `paddle.jit.to_static` can still be loaded by `paddle.jit.load` after being stored by `paddle.jit.save`, and multiple methods overridden by `paddle.jit.to_static` can still be used -- Support that Layers loaded by `paddle.jit.load` can still be stored correctly by `paddle.jit.save` after fine-tune or used as sub-Layers of other Layers -- Expand `paddle.jit.save` to support storing the `paddle.DataParallel` model -- Optimize `paddle.static.load_program_state` interface experience. In the scenarios that do not specify to load `var_list`, only a warning is given when loading a directory with interfering files and no error is reported -- Support `paddle.jit.save` to handle InputSpec of dict type -- Support `paddle.onnx.export` to export dynamic model to ONNX file type - - -#### Performance optimization (including the distributed) -- Improve the performance of RNN class OP on CPU (LSTM, GRU, SimpleRNN). Compared with version 2.0-rc, the forward performance and backward performance of the LSTM, GRU, SimpleRNN have been significantly improved -- Optimize the FastThreadedSSAGraphExecutor scheduling. Fix the performance of the 4-engine 32-card resnet50 that is improved by about 0.3% in the communication synchronization scenario without the overlapping of the communication calculation -- Optimize the paddle. fleet amp distributed performance. Fix the performance of the 4-engine 32-card fp16 that is improved by about 0.5% in the case that the last communication and calculation are not overlapping -- Optimize the performance of the distributed communication component Communicator. In the GEO-400 mode, the W2V model throughput rate, Simnet-Bow model performance have been significantly improved. In the Async mode, compared to the Paddle Framework 1.8, the throughput rate of W2V model is improved by 11% and the performance of CTR-DNN model is improved by 14% -- Optimize the performance when the Worker is a GPU device in parameter server mode, reduce the copy time of Embedding table query. Significantly improve the training throughput rate in the CTR-DNN model -- The distributed GPU dynamic graph realizes the computation and communication overlap, and support the user fine-grained configuration of gradient fuse group size and other options. On the two models ResNet152 and Bert, the multi-node performance improvement is more than 5%.The performance of the ResNet50 is also improved by more than 3% -- Improve the performance of cumsum on GPU -- mproved performance of Resnet50 oneDNN dygraph training. Currently Resnet50 oneDNN drgraph training is 6.4X faster than Native CPU training -- Add the support of cudnn on the GRU and SimpleRNN - - -#### Debug analysis - -- Optimize the alignment of the error exception type on the Paddle Python side with Python native error type -- Hide the C++ error stack by default, optimize the error reporting format after hiding the C++ stack, remove the demarcation flag `Error Message Summary`, and align with the native Python error reporting format -- Optimize some static module APIs in non-static graph mode, including 9 APIs such as static.append_backward, static.gradients, static.scope_guard, static. Print, static.nn.embedding, static.nn.data_norm, static.nn.multi_box_head, static.nn.nce, and static.nn.py_func -- Optimize the error message when the pass-in Tensor is None under the dynamic graph model -- Further optimize the print tensor format of the dynamic graph - - -### Compile and install - -#### New support -- (experimental) Release the binary package supporting cuda11 -- Mirror the Paddle of cuda10.1 or later and NCCL to version 2.7.8 in the CI system images -- Release the binary package supporting xpu -- Release the binary package supporting jetpack and C++ prediction library supporting nv_jetson - -#### Experience optimization -- Fix the build strategy, separately release the gpu package containing tensorrt, to avoid the error of no tensorrt when users install other GPU versions of the package -- Remove installation dependencies: scipy, rarfile, prettytable, pathlib -- Installation documentation optimization - - -### Bug fixing - -- Fix the bug that GPU card 0 occupies more video memory than other cards during multi-card training -- Fix the bug of wrong shape derivation in the tile op calculation -- Fix the bug of the large number of warning messages of invalid escape sequence in the use of paddle -- Fix the bug when paddle. full is set to INF, NAN, NINF, etc. -- Fix the bug that multiple-nccl comm settings of paddle. fleet do not take effect, and add the non-overlapping warning of multi-nccl comm communication in synchronous mode -- Fix the bug that the paddle. framework.seed in TruncatedNormal initialization does not meet the expectation -- Fix the inconsistent behavior of AvgPool related API dynamic to static exclusive parameters; fix the MaxPool related API ceil_mode transmission parameter problem -- Fix the bug that paddle. topk result is incorrect under GPU -- option in the fluid.layers.nn.gather dynamic graph API -- Fix the bug that the Window-based terminal does not recognize CUDA_VISIBLE_DEVICES as null character, and the frame can be executed in CPU mode by setting the null string -- Fix the bug that the recursive saving and loading of optimizer.state_dict/set_dict fails when LinearLrWarmup recursively contains Learning Rate Scheduler -- Fixed the ptb lm training performance decrease issue -- Fix the bug of gradient calculation when softmax_with_cross_entropy uses ignore_index -- Fix the bug that the parameter to be decayed is empty in the second acquisition after the first execution of AdamW - - -## Inference - -### Paddle Inference - - -#### Function upgrade -- In Paddle V2.0, add or upgrade some operators. Starting from this version, the forward operator versioning rules are defined by compatibility constraints. Through the alignment of operator versions between frameworks, ensure consistent definition and behavior of the same operator version in different frameworks, thus enhancing the overall robustness of the framework -- Add the TryShrinkMemory interface to reduce the application display/memory consumption by releasing temporary tensor. For the demo example, refer to [Paddle-Inference-Demo](https://github.com/PaddlePaddle/Paddle-Inference-Demo/tree/master/c%2B%2B/test/shrink_memory) -- Paddle-TRT supports clip op. Support the classification model GhostNet running under Paddle-TRT -- Paddle-TRT int8 prediction support models containing channelwise quantization of mul op. Support the PaddleOCR detection and recognition of PaddleSlim quantization model running under Paddle-TRT int8 -- `load_inference_model` and `save_inference_model` APIs are migrated to `paddle.static` to improve ease of use and compatibility with old interfaces -- Add six APIs such as `serialize_program`, `deserialize_program`, `serialize_persistables`, `deserialize_persistables`, `save_to_file`, `load_from_ file` six APIs for users to perform serialize/deserialize program, serialize/deserialize params, and save models/parameters to file, or load models/parameters from files -- Enabled BF16 inference for models: resnet50, googlenet, mobilenetv1 and mobilenetv2 -- Added oneDNN operators version compatibility support - -#### Performance optimization -- When TenorRT is enabled, ERNIE models add the support for variable-length inputs, resulting in the performance improving by 147%.In software versions cuda10.1, cudnn 7.6, tensorrt 6.0, [OSS 7.2.1](https://github.com/NVIDIA/TensorRT/tree/7.2.1), model ernie-base-2.0, dataset QNLI, the performance on Nvidia Telsa T4 improves from 905 sentences/s to 2237 sentences/s when input BatchSize = 32.Example code: [Paddle-Inference-Demo/c++](https://github.com/PaddlePaddle/Paddle-Inference-Demo/tree/master/c++) -- Improved oneDNN INT8 GRU performance. The GRU INT8 model has 1.65X speed-up compared with NativeConfig inference. (with thread=1, batch_size=50) -- Added oneDNN batchnorm + activation fuse, hence improved pvanet_ocr model performance by 2.8% - - -#### Bug fixing -- Fix the bug that models with avg pooling or global pooling have wrong computation results, error popups or hang -- Fix the bug that the shape of TensorRT subgraph output Tensor ended with x1 will be deleted incorrectly when using the TensorRT dynamic shape inference -- Fix the bug that config.pass_builder()->DeletePass() is not effective when the TensorRT inference is used -- Fix the issue that some models performance depends on the matmul ops' weights -- Fix the issue that CPU oneDNN predictin many models will report error or cause performance regression - -## Model upgrade - -### PaddleDetection -- Upgrade dynamic graph models: - - Faster RCNN, Faster FPN, Mask RCNN, Mask FPN, Cascade RCNN, Cascade Mask, YOLOv3 model accuracy flattening static graphs - - Support the dynamic to static function. Enable the Paddle Inference. The precision speed flattens the static graphs -- Release the SOLOv2, a real-time instance segmentation model. Compared to competing models, it is improved by 2.4% in accuracy and 31.2% in prediction speed. The training speed is as fast as 2.4 times of the competing models -- Add the Android mobile detection demos, including SSD and YOLO series models -- Add the PACT new quantification strategy. Compared to the ordinary quantification, YOLOv3-Mobilenetv3 on COCO dataset is improved by 0.7% - -### PaddleSlim - -- Support the dynamic graph compression function - - Add the dynamic graph cropping and quantization training function - - Add the cropping of the channel quantity alignment function, so that the output model is more easily accelerated by the prediction library - - PACT quantization training method is changed to built-in method. It is convenient for users to call directly -- Add the OFA model compression technology. The TinyERNIE is accelerated by 40% after compression, with no loss of accuracy - -### PaddleSeg - -- Newly release 1.0-rc version, fully upgraded to dynamic graph. It supports 13 segmentation models, 4 backbone networks, and 3 datasets: - - Segmentation models: ANN, BiSeNetV2, DANet, DeeplabV3, DeeplabV3+, FCN, FastSCNN, Gated-scnn, GCNet, OCRNet, PSPNet, UNet, and U^2Net - - Backbone networks: ResNet, HRNet, MobileNetV3, and Xception - - Datasets: Cityscapes, ADE20K, and Pascal VOC - - Loss: CrossEntropy Loss、BootstrappedCrossEntropy Loss、Dice Loss、BCE Loss -- Provide 40+ high quality pre-trained models based on Cityscapes and Pascal Voc datasets -- Support multi-card GPU parallel evaluation. This provides the efficient index calculation function. Support multiple evaluation methods such as multi-scale evaluation/flip evaluation/sliding window evaluation - -### PaddleClas - -- Newly released 2.0-rc1, fully upgraded to dynamic graph. It supports 23 series of classification network structures and 135 image classification pre-training models. Among them, 14 practical SSLD distillation models are included, and the effect is generally improved by more than 3% compared with the benchmark model. Three new series of ResNeSt, RegNet and GhostNet models are added -- Based on dynamic graph, provide the mixed precision training method and DALI-based training method -- Provide the off-line predictive deployment, service-oriented deployment and end-side deployment based on the dynamic graphs - -### PaddleOCR - -- Newly released 2.0-rc1. PP-OCR series models are upgraded to dynamic graphs. Provide 8.1M ultra-lightweight Chinese and English OCR models, universal Chinese and English OCR models and better multilingual recognition models (pure English numbers, French, German, Japanese, Korean). Support the offline predictive deployment and service-oriented deployment -- Release the Style-Text universal text data synthesis tool -- Release the PPOCRLabel text data annotation tool - -### PaddleRec - -- Release models: gru4rec, deepfm, mmoe, dnn, LR supporting dynamic graph - -### PaddleGAN - -- Release models: Pixel2Pixel, CycleGAN, PSGAN, UGATIT, ESRGAN, CGAN, DCGAN -- Provide 10 pre-trained models for style migration, makeup migration, coloring, super score, character and scene animation, etc. - -### PaddleNLP - -- Release 2.0-beta version: support all-around dynamic graph models; provide the PaddleNLP core library, with deeply integrating with higher-order APIs; support the pip installation; provide developers with best practices in the text domain of PaddlePaddle 2.0. -- Add the text graph learning model ERNIESage, generative pre-training model ERNIE-Gen, open domain dialogue generation model PLATO-2, semantic matching model SentenceTransformer, time sequence prediction model TCN, and so on. -- Enrich the pre-training language models further, including a total of 22 pre-training models such as ERNIE, BERT, RoBERTa, and ELECTRA (containing 11 Chinese pre-training models). -- Add 8 common text task evaluation metrics such as Perplexity, BLEU, Rouge-L, and so on, adapted to the PaddlePaddle 2.0 Metrics API system to improve ease of use. -- Add 25 new datasets for text classification, sequence annotation, machine translation, reading comprehension, and so on, adapted to the PaddlePaddle 2.0 Dataset API system, with fast loading by pressing one key. -- Add the Embedding API function, including 38 Chinese word vectors, supporting fast loading and word granularity semantic distance calculation. - -### Parakeet - -- Release 2.0-alpha version: provide Parakeet core library; improve Chinese documentation; support pip installation. -- Upgrade the text-to-speech model framework to unify the text front-end interface. The model is fully upgraded to Paddle 2.0 API, including TransformerTTS, Waveflow, Wavenet model, and new Tacotron2 model. -- Provide more reusable networking modules. This facilitates the combination of model flexibly. Optimize the data processing and loading process. This improves the training speed. -- Add the experiment module to standardize the experiment process. This facilitates the experiment management and secondary development. The sample codes for experiments are provided for existing models. - -## Utility Component - -### PaddleHub -- Release 2.0-rc version: fully migrate the dynamic graph programming mode. It is more convenient for model development and debugging. The finetune interface is more flexible and easy to use. -- Upgrade the visual class task migration learning capability fully, supporting a variety of tasks such as image classification, image coloring, and style migration. -- Upgrade Transformer class models such as BERT, ERNIE and RoBERTa to dynamic graph. Support the Fine-Tune capability for text classification. -- Optimize the Serving capability for service-oriented deployment, supporting multi-card prediction and automatic load balancing. The performance is improved greatly. -- Add the Auto Augment (automatic data augment capability). This allows the efficient search for the proper combination of data augment policies for the datasets. - -### X2Paddle -- Release version 1.0.0-rc0: It fully supports PaddlePaddle dynamic graph API. -- Add the PyTorch model conversion: supports the conversion between Tracing and Scripting. -- Add the support of conversion from Caffe/ONNX/Tensorflow to Paddle2.0 dynamic graph. -- Add the Optimizer module, mainly including op fusions and op elimination functions, to improve the readability of the converted model code and the prediction performance of the model. - -## [Kunlun hardware](https://cloud.baidu.com/product/kunlun.html) - -### Models adapted to Kunlun hardware -- Resnet50, mobilenetv3, deeplabv3, bertbase, DQN static graphs model adapted to Kunlun hardware +# 2.0.0 Release Note + +## **Update** + +The PaddlePaddle framework V2.0.0 has the following updates: + +- Programming Paradigm: Enable dynamic graph mode for model development and training by default, and perform the model deployment and training acceleration through the dynamic to static mode.If you need to use static graph programming paradigm, you can switch to static graph mode by running paddle.enable_static(). +- API system: The API has been supplemented and the directory structure has been adjusted to make it easier to use, please see [API documentation](https://www.paddlepaddle.org.cn/documentation/docs/en/api/index_en.html) for more details. A high-level API is provided to simplify the process. See [PaddlePaddle High-Level API Usage Guide](https://www.paddlepaddle.org.cn/documentation/docs/zh/tutorial/quick_start/high_level_api/high_level_api.html) for more details. +- Framework features: Data loading, dynamic graph execution, OP performance, mixed precision training, distributed training, dynamic-static conversion, etc. have been enhanced and optimized. +- Environment adaptation: Supported ARM-based CPU. Added support for Python 3.8, CUDA 10.1/10.2. Released the installation package (experimental) supporting CUDA11, and released the installation package (experimental) supporting [Baidu Kunlun](https://cloud.baidu.com/product/kunlun.html) chip. For details, see [Start](https://www.paddlepaddle.org.cn/install/quick). +- Model zoo and development kits: The official model zoo and kits for PaddlePaddle have been upgraded to PaddlePaddle framework V2.0.0. + - [PaddleHub](https://github.com/PaddlePaddle/PaddleHub): Support dynamic graph V2.0. Fully migrate the dynamic graph programming mode, make model development and debugging more convenient. The finetune interface is more flexible and easy to use. + - [PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection): Support dynamic graph V2.0. Cover the mainstream algorithm of detection direction (PP-YOLO, Faster-RCNN, SOLOv2), support dynamic-static conversion, hit the inference deployment, and provide a more modular way of networking. + - [PaddleClas](https://github.com/PaddlePaddle/PaddleClas): Support dynamic graph V2.0. Provide 29 series of classification algorithms and 134 pre-training models, provide an optimization scheme based on SSLD knowledge distillation, and generally improve the precision of classification models by more than 3%. + - [PaddleSeg](https://github.com/PaddlePaddle/PaddleSeg): Support dynamic graph V2.0. Provide 50+ high quality pre-training models, support 15+ mainstream segmentation networks, and provide the industry's SOTA model OCRNet, which well enhances the usability of the product. + - [PaddleOCR](https://github.com/PaddlePaddle/PaddleOCR): Support dynamic graph V2.0. PPOCR system, text detection models (DB, EAST, SAST) and text recognition models (Rosetta, CRNN, StarNet) , and complete the adaptation of dynamic graph V2.0. + - [PaddleGAN](https://github.com/PaddlePaddle/PaddleGAN):Support dynamic graph V2.0. Nine models, including style migration, video enhancement, lip migration, face animation and others are developed based on dynamic graph. + - [PaddleRec](https://github.com/PaddlePaddle/PaddleRec): Support dynamic graph V2.0. The installation-free and unified dynamic and static networking are provided, convenient for user's research and going online. Release the classic dataset of the recommendation system. + - [PaddleNLP](https://github.com/PaddlePaddle/PaddleNLP):Support dynamic graph V2.0. Provide 25+ pre-training models and easy-to-use API way to enhance the efficiency of text modeling. + - [Parakeet](https://github.com/PaddlePaddle/Parakeet):Support dynamic graph 2.0. The released acoustic models and vocoder well support dynamic graph version. + - [PaddleVideo](https://github.com/PaddlePaddle/PaddleVideo):Support dynamic graph V2.0. The video classification and video motion positioning direction models are included, such as TSN, TSM, SlowFast, AttentionLSTM, BMN models and featured application pre-training models VideoTag and FootballAction. + - [AmazonDJL](https://github.com/awslabs/djl): Easy-to-use Java inference interface, supports various operating system platforms (Mac / Windows / Linux), and supports Paddle pre-training model loading. + +## **Forward-looking Preview** + +- The PaddlePaddle Framework plans to drop the support for python2 and python3.5 from a certain version in the future. It is recommended that you upgrade python to V3.8 for PaddlePaddle. +- The PaddlePaddle Framework plans to drop the support for CUDA 9.0 from a certain version in the future. It is recommended that you upgrade the CUDA for PaddlePaddle. + +## **Training Framework** + +### **Compatibility instructions** + +- Programming paradigm: PaddlePaddle 2.0.0 has the imperative programming paradigm (dynamic graphs) enabled by default, but still retains support for static graphs. static graph code (including static graph code from version 1.8) can be executed by running paddle. enable_static(). +- API: The PaddlePaddle Framework Version 2.0.0 recommends users to use the API located in the paddle root directory, while all the APIs from version 1.x are retained in the paddle.fluid directory, retaining support for the API system of earlier versions. Therefore, the static graph training code version 1.x can run normally on version 2.0.0 by running paddle.enable_static(). The model saved by training of version 1.x can be used for inference in version 2.0.0. +- A [table](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/09_others_information/api_mapping_cn.html) of correspondence from version 1.8 API to version 2.0 API is prepared. +- We provide a migration tool to facilitate the migration of codes based on earlier version to codes of version 2.0.0. See Version Migration Tool. + +### **dynamic graph mode** + +By default, the dynamic graph mode is enabled for model development and training, which allows you to perform model deployment and training acceleration in the dynamic-to-static mode.For details, please see [dynamic graph](https://www.paddlepaddle.org.cn/documentation/docs/zh/tutorial/quick_start/dynamic_graph/dynamic_graph.html), [Dynamic-to-static graph](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/04_dygraph_to_static/index_cn.html). + +### **API system** + +- Basic APIs + - API directory structure adjustment: The API V1.x is mainly located in the paddle.fluid directory. In this version, the API directory structure is adjusted so that the classification can be more reasonable. For the specific adjusted directory, see the [API documentation](https://www.paddlepaddle.org.cn/documentation/docs/en/api/index_en.html). + - Added 186 new APIs. Fixed and revised 260 APIs. See Release Notes of 2.0.0 pre release version and [API documentation](https://www.paddlepaddle.org.cn/documentation/docs/en/api/index_en.html). + - Added the distributed basic communication class API to paddle.distributed:broadcast, all_reduce, reduce, all_gather, scatter, barrier; dynamic graph multi-card training startup API spawn, init_parallel_ env, dynamic-static unified startup method fleetrun + - Networking class API for dynamic and static unification: supports running in both dynamic graph mode and static graph mode. +- High-level API + - Added PaddlePaddle high-level API, and encapsulated the common operations such as networking, training, evaluation, prediction, access, etc. in the process of model development, to achieve low code development. See [PaddlePaddle high level API instructions](https://www.paddlepaddle.org.cn/documentation/docs/zh/tutorial/quick_start/high_level_api/high_level_api.html). + - Added distributed high-level API paddle.distributed.fleet. Supported multiple optimization strategy combinations and automatic parallelism, distributed metrics calculation, InMemoryDataset by configuring the DistributedStrategy. + +### **Function optimization (including distributed)** +#### **dynamic graph basic functions** + +- Usability optimization: + - Tensor function enhancements: Added Tensor copy interface Tensor.clone(), and more than 120 Tensor computation interfaces (e.g. Tensor.cos(), etc.). Added the new function to modify the Tensor function by using index or slice. Added the new function of automatic type boost in case of Tensor and Scalar operation. Optimized the printing information of dynamic graph Tensor. The display form remains the same as Numpy. + - Layer function enhancement: Added the new Layer deep copy interface Layer.deepcopy(). Added the new Layer property and function to view interface Layer.dir(). From this version, the Trace function still records reverse operation automatically after the invoking of Layer.eval(). If you don't need to record reverse, you need to explicitly call paddle. no_grad(). + - Added a set_lr() interface for Optimizer so that users can flexibly adjust a learning rate in dynamic graph mode. + - Added a new set_global_initializer() interface to define global parameter initialization methods. + - Simplified the code for multi-card operation without needing to explicitly call scale_loss and apply_collective_grads. +- Performance optimization: + - Supported the function of gradient updating by using sparse parameters for APIs (for example, embedding) in case of multi-card training. + - For dynamic graph training and inference, added the support for Intel acceleration library oneDNN (former MKL-DNN). The speed of Resnet50 model in CPU training scenario can improve by 6 times. + - New dynamic graph Inplace calculation function: The Tensor storage space can be reused, reducing the occupation of video memory. Added the new View method. You can change the Tensor description in case of shared underlying storage. + - [Incompatible upgrade] new dynamic graph gradient accumulation function, with disguised "expand BatchSize" role. By default, the gradient of backward() interface is not clear, with needing to explicitly call optimizer.clear_grad() to clear the gradient. +- Fixing bugs: + - Fixed the bug of train and eval interference with each other when switching between them in multiple models. + +#### **Dynamic-to-static graph** + +- **Added the grammar support for dynamic-to-static conversion** + - Added the support for the return grammar. In the if-elif-else or loop conditions, the loop can return earlier, with return different types of tensor or None. + - Added support for the **kwargs parameter contained in the signature function. + - Added the grammar support of “for”, “for enumerate” traversing Tensor and TensorList, more flexible operation for traversing Tensor. + - Added the support for more python grammars, such as print, assert, cast, isinstance, tuple, dict.pop(), etc. +- **Optimized the usability of dynamic-static conversion** + - Changed the return type of dynamic-to-static from callable function to Class. The code and main_program interfaces invoking the Class can obtain the converted static graph information more easily. + - The dynamic-to-static decorator to_static is added with the directly decorating model instances, such as to_static (model, input_spec). + - Added the jit.not_to_static decorator. The function is not converted in the dynamic-to-static process. + - Added set_verbosity() and set_code_level() interfaces. You can set different levels to view the log or intermediate state code of the dynamic to static process. + - Added InputSpec. You can specify the shape and data type of input Tensor variables in the dynamic to static process. + - Error message optimization: Locate the specific wrong line of code in the original dynamic graph and hide the user-unrelated error message. + - Support break point debugging by using pdb.set_trace(). +- **Optimized deployment of model storage and loading APIs** + - Added paddle.jit.save interface for storing dynamic-to-static models: The interface is compatible with and used to store both the Layer object not transcribed by paddle.jit.to_static and paddle.DataParallel models. Remove the old interface ProgramTranslator. save_ inference_model. + - Added the paddle.jit.load interface for loading prediction models stored in static graph format, including models saved by paddle.jit.save and paddle.io.save_inference_model. This can be used for model inference or model training optimization under dynamic graph after loading. + - Added the program method for opaddle.jit. TransLatedLayer for obtaining the program of the paddle.jit.load loading model. It is for understanding of the model structure. + - [Incompatible upgrade] changed the meaning of the interface parameter model_path of paddle.jit.save and paddle.jit.load: That is, changed to the prefix of storage files instead of that of directory. + +#### **Mixed precision training** +- Mixed precision policy upgrade: In addition to the black and white list policy (hereinafter referred to as "O1 policy"), "Almost FP16 (hereinafter referred to as O2 policy)" is added. That is, use FP16 for calculation as much as possible. + - Added the FP16 Guard function (`paddle.static.amp.fp16_guard`): Support users to freely control whether a single Op in the model chooses FP16 calculation type. + - User can customize `custom_black_list` to control a certain type of Op to keep FP32 computation. + - Using the O2 policy: Resnet50 and Bert base can be trained at 1400 images/s and 590 sequences/s, respectively, on a single card V100. +- Usability optimization: + - Use the `paddle.static.amp` package to manage the interfaces related to static graph mixed precision training in a unified manner. + - Provide the simplified name `CustomOpLists` for `AutoMixedPrecisionLists`: That is, users can customize the AMP black and white list Op list by using `CustomOpLists`. + +#### **Optimization of the distributed training** + +- Integrated communication All Reduce + - Support mixed parallel training of 100 billion language models: support pipeline parallel training based on the executor interface, with sharding-DP strategy, GradientMerge+AMP strategy, Recompute+Offload strategy, and megatron strategy. + - Support dynamic graph: support multi-stream communication strategy, automatic rebuild group strategy, high performance sparse parameter communication, and multi-card gradient sequential consistency strategy. +- Parameter server PS + - Upgraded the large-scale sparse function: Upgrade large-scale sparse PS-API, and abstract communication component/parameter table/optimizer base class. It is convenient for users to carry out secondary development in a subclass derivation mode. Meanwhile, it also supports 100 billion features streaming training, including feature access, exit, incremental training, distributed metrics prediction, etc. The communication mode switches from GRPC to BRPC. + - Open source heterogeneous parameter server: Support both traditional pure CPU machine PS, and pure GPU machine PS based on three levels of storage (SSD/memory/video memory). It also supports CPU machine + GPU machine/Kunlun machine mixing distributed PS, with completing the minute-level training of trillions of parameter hit rate prediction models +- Support of new training mechanism: + - Support control flow-based multitasking distributed training: The performance is improved by more than 50% compared to the Intag-based multitasking. +- Optimization of the distributed startup method + - Supported distributed low-order APIs such as all_gather using the `paddle.distibuted.spawn` interface + - Upgraded the `paddle.distributed.launch` interface: Support specifying the number of processes in a single node with simplifying as `fleetrun`. + - Optimized `gen_nccl_id`: Removed the grpc dependency, added some fault tolerance, and improved the stability of starting distributed tasks. + - Supported the startup of multi-CPU in the integrated communication in the Gloo method + +#### **Model saving and loading** +- Standardized the set_dict method name of APIs such as Layer and Optimzier: That is, changed to set_state_dict in a unified manner. +- Enhanced paddle.load compatibility: support the loading of Layer's state_dict from storage results of interfaces such as fluid.io.save_inference_model and fluid.io.save_params/persistables. +- Modified the paddle. save/load interface behavior: For the paddle.save, A suffix is not added to the storage results. In each loading, paddle.load returns only one result. Standardize the interface semantics. +- Removed paddle.SaveLoadConfig: For the interface compatibility loading scenarios of paddle.jit.save, paddle.jit.load, and paddle.load, use **kwargs to pass in additional configuration to simplify the use of the interface. +- Moved the original static graph APIs such as paddle.io.save, paddle.io.load, paddle.io.save_inference_model, and paddle.io.load_inference_model to the paddle.static module. +- Optimized the paddle.static.load_program_state interface experience. In the scenarios without specifying the loading var_list, only a warning (instead of error report) is given when there is an interference file in the loading of a directory. + +#### **Plural computation** + +- Extended the dynamic static graph execution engine: Support the plural neural network training and plural gradient accumulation. +- Added Op such as mul, div, matmul, kron, and abs for supporting the plural computation. + +#### **ONNX function upgrade** + +- Added API: `paddle.onnx.export` for supporting the conversion from Paddle2.0 dynamic graph to ONNX protocol. +- Added PPOCR, PPYOLO, FasterRCNN, and ERNIE for model conversion. +- Richer Paddle op coverage: Support 88 Paddle OP operators. Support the export as different versions of ONNX 1~12 operator sets. + +#### **Performance optimization (including the distributed)** + +- dynamic graph performance optimization: + - Optimized the data read performance: Simplify the DataLoader underlying implementation logic in dynamic graph mode, reduce the thread reading overhead, and further improve the data reading efficiency and the overall model training speed. The overall training speed of MobileNetV1 in a scenario of single card V100 and BatchSize = 128 is improved by 34%. + - Upgraded and performance optimization of dynamic graph networking API: A large number of dynamic graph APIs directly call an automatically generated Pybind API. As a result, the performance is improved significantly. + - Improved the training performance of Resnet50 oneDNN dynamic graph. The dynamic graph training speed of the current CPU scenario Resnet50 oneDNN is improved by 6.4 times. +- OP performance optimization: + - argsort: The number of elements of the input Tensor is optimized as the number equal to its `axis` dimensional length. In this way, the forward speed is improved by 34 times, and the reverse speed is improved by 10 times. + - dropout: Optimized GPU performance. The FP32 performance is improved by 20%. The FP16 performance is improved by 50%. + - cast: Optimized GPU performance. The performance is improved by 10% to 20%. + - softmax: Optimized GPU performance in case of axis=-1. The performance is improved by 3 times to 96 times for different shapes. + - Performance optimization of other OPs: Significantly improved the performance of other OPs such as cumsum, reshape, Flatten, IndexSelect, Roll, elementwise_add, AdamW and RNN class (LSTM, GRU, SimpleRNN). +- Optimization strategy: + - Added fused_bn_add_act fusion strategy: Performed the automatic fusion acceleration for the combined pattern of batch_norm+elementwise_add+activation. + - Added inplace addto strategy for gradient aggregation: Support in-situ gradient accumulation. Improve the performance by 6.3% in ResNet-50 mixed precision training. + +- Optimized FastThreadedSSAGraphExecutor scheduling: Fixed the bug that the communication calculation does not overlap in the communication synchronization scenario. The performance of 4 machines and 32 cards resnet50 is improved by about 0.3%. + +- Distributed performance optimization: + - Optimized lars strategy: The time2train index of 16k batch size in the ResNet50 distributed multi-card training is smaller than 10 minutes. + - Optimized the paddle.fleet amp distributed performance: Fixed the bug that the last communication and calculation are not overlapping. The performance of the 4-machine 32-card FP16 is improved by about 0.5%. + - Optimized paddle. fleet.gradient_merge distributed performance: Aggregate gradients before communication. The multi-machine performance can be improved by 20%-40% to achieve linear acceleration ratio. + - Optimized the performance of the parameter server communication component Communicator. In case of GEO-400batch communication once, the W2V model throughput rate and Simnet-Bow model performance are significantly improved. In the Async mode, compared to the PaddlePaddle Framework 1.8, the throughput rate of W2V model is improved by 11% and the performance of CTR-DNN model is improved by 14% + +#### **Debugging analysis** + +- Uniformly changed the wording of LOG(FATAL) throw exception at just 100 points to PADDLE_THROW: Optimize the error format and content caused by non-support of a framework behavior. +- Improved the Signal Handler implementation within the framework. Optimized the error format and content when system signal error occurs during the execution. +- Optimized the framework error stack format: In the compiling, the python error stack is moved below the native error stack to improve error message reading experience. +- An accumulative total of about 1500 error type and prompt copywritings of check errors within the framework. This enhances the overall debugging usability of the framework. +- Enhanced dynamic graph error messages: Error messages on the Pybind layer under a dynamic graph are systematically enhanced to improve user experience. +- Optimized exception types of Paddle Python side error report: Align with Python native error report types. +- Hide the C++ error stack by default: Optimized the error format after hiding the C++ stack, removed the demarcation flag `Error Message Summary`, and aligned with the native Python error format. +- Optimized the error prompts of APIs in non-static graph mode in some static modules, including 9 APIs such as static. append_backward, static.gradients, static.scope_guard, static.Print, static.nn.embedding, static.nn. data_norm, static.nn.multi_box_head, static.nn.nce, and static.nn.py_func. +- Optimized the error message when passing in Tensor as None under dynamic graph model. +- Optimized the printing information of Layers, and supported printing the relationship of each hierarchy in Layers. + +## **Inference Deployment** + +#### **Model quantification** + +- Enhanced the quantification function in case of the training of dynamic graphs: Added the quantification function of dynamic graphs for the `ImperativeQuantAware` class in the unified manner. Currently, it supports quantification of weighted layers such as Conv2D, Linear, etc. Support the obtaining the channel-based quantification parameters of weighted layers, quantification of weightless layers such as ReLU, Tanh, and Layer quantification specified by skip. +- Added the function to obtain the output scale parameter for the model layer during the training of dynamic graph quantification, for the deployment of quantification inference on the Server side. +- dynamic graph quantitative model supports inference deployment using Paddle-Lite. +- For the offline quantification function, support the advance fusion of conv+bn and output LSTM quantitative models. Remove the function of saving sampled data to temporary files. +- For the static graph quantification, support Conv2d_tranpose quantification. Support Linear quantification in the form of per-channel. + +### Paddle Inference + +The default naming of inference library is changed from fluid_inference to paddle_inference. + +#### API + +- The inference C++ API is upgraded fully. The new APIs are recommended. The old APIs remain temporarily. There is warning reported in the use of old APIs. The old APIs are planned to be deleted in the future. The new APIs include changes of naming standardization and simplification of usage method, including: + - A new `paddle_infer` namespace for the C++ interface, containing inference-related interfaces. + - Renamed `ZeroCopyTensor` to `Tensor` as the default input/output representation of the inference interface. + - Simplify `CreatePaddlePredictor` to `CreatePredictor`, with keeping the support for only `AnalysisConfig`. Other multiple Configs are not supported. + - Added service-related utility classes such as `PredictorPool`, which can be used when multiple predictors are created. + +#### **Function upgrade** +- Operator-related version information + - Some operators are newly added or upgraded in Paddle V2.0. Starting from this version, the forward operator version is defined with compatibility constraints. Through the alignment of operator versions between frameworks, ensure consistent definition and behavior of the same operator, thus enhancing the overall robustness of the framework. + - Added the registration mechanism for inference forward operator versions and included the incompatible upgrade behavior of operators for the statistics. + - Added the operator version information for the prediction models. Through the model file, the inference library is able to identify the definition of the operator corresponding to this model, so as to avoid calculation errors caused by different definitions. +- Model interface + - The `load_inference_model` and `save_inference_model` APIs are migrated to `paddle.static` to improve the usability, with compatibility with the old interfaces. + - Added six APIs such as `serialize_program`, `deserialize_program`, `serialize_persistables`, `deserialize_persistables`, `save_to_file`, and `load_from_file` for users to perform serialize/deserialize programs, serialize/deserialize params, and saved models/parameters to file, or loaded models/parameters from files. + +- Inference-related NV GPU + - Added the adaptive support for TRT 7.1. + - Added the adaptive support for Jetson Nx hardware. + - Paddle-TensorRT enhances the support for the PaddleSlim quantitative model. Cover multiple tasks such as detection, classification, and segmentation on CV. + - Paddle-TRT supports clip op, and supports the classification model GhostNet running on the Paddle-TRT. + - Paddle-TRT supports mul op models with channelwise quantification, and supports the PaddleOCR detection. Identified the quantitative models running in the Paddle-TRT int8. + - Paddle-TRT dynamic shape function supports PaddleSlim quantification Int8 models. +- X86 CPU-related inference + - Added the support for oneDNN BF16: support the computation of conv2d and gru bf16. It currently supports BF16 prediction for resnet50, googlenet, mobilenetv1 and mobilenetv2 models. + - Added support for quantification and inverse quantification of scales with bias in oneDNN INT8 quantification strategy. + - Added version compatibility support for some oneDNN operators. + - Added the kernel support for `elementwise_add` and `elementwise_mul` INT8 oneDNN on the CPU side. + - Improved the usability of CPU-side test quantification models. Supported the comparative test of original models and quantitative models at the same time. + +- Custom OP + - Added the support for user-defined Ops on Python-side inference. +- Memory/GPU memory correlation + - Added the TryShrinkMemory interface. Reduced the occupation of application's memory/video memory by releasing temporary tensors. For the demo, see [Paddle-Inference-Demo](https://github.com/PaddlePaddle/Paddle-Inference-Demo/tree/master/c%2B%2B/test/shrink_memory). +- dynamic graph quantitative model support + - X86 inference supports dynamic graph quantitative models. + - NVIDIA GPU inference supports dynamic graph quantitative model. +- Error message: + - In the Compiling, when enabling ON_INFER, FLAGS_call_stack_level is on by default. The error message indicates that the stack is invoked. + +#### **Performance optimization** +- Improved the transformation and optimization of quantitative models. +- NV GPU correlation + - Optimized the ArgMin and ArgMax OP of CUDA so that the binary system size of the OP is decreased from 60 M to 1.3 M. + - For the ERNIE model on T4 with using the Paddle-TRT FP16 inference, the performance is improved by 15%. + - The ERNIE model adds the support for variable-length inputs when TenorRT is enabled. The performance is improved by 147%.In software versions cuda10.1, cudnn 7.6, tensorrt 6.0, [OSS 7.2.1](https://github.com/NVIDIA/TensorRT/tree/7.2.1), model ernie- base-2.0, dataset QNLI, the performance on Nvidia Telsa T4 improves from 905 sentences/s to 2237 sentences/s when input BatchSize = 32.Sample code: [Paddle-Inference-Demo/c++](https://github.com/PaddlePaddle/Paddle-Inference-Demo/tree/master/c++). +- X86 CPU related + - Added the conv + affine_op pass. The MASK-RCNN fp32 single-threaded performance is improved by 26% on machine 6248. + - Added the fc + gru pass and enable oneDNN (former MKL-DNN) GRU fp32 kernel, speeding up GRU fp32 model inference on 4 CRU threads by 20% on machine Intel Xeon 6248. + - By supporting oneDNN INT8 GRU, the GRU INT8 model is about 1.65 times faster compared to NativeConfig inference (threads = 1, batch_size = 50). + - Added the fuse support for oneDNN batchnorm + activation. The pvanet_ocr model performance is improved by 2.8% as a result. + - Added the oneDNN FC + Gelu, FC + Sigmoid and FC + tanh operator fusion. The BERT inference model is improved by 4.5%. + - Added oneDNN inplace support for partial Op + - Optimized oneDNN LRN op (speedup 1% for the GoogleNet fp32 model). + - With oneDNN upgraded to 1.6, Ernie Large oneDNN inference on Skylake (Intel Core 6148) is about 2.7x faster (i.e. unit test test_analyzer_ernie_large). + - Added the interpolate oneDNN forward operator support. Now ocr_det model inference performance improved by 2.04x compared to CPU Native inference alone. + +## Paddle Lite +End-side inference engine Paddle Lite v2.8 is adapted to the main framework v2.0 + +## **Environment Adaptation** + +### **Compile and install** + +#### **Training Framework Paddle** +- Released the installation package supporting the use of x86 CPUs and the use of Kunlun chips under the FT CPU. +- Added the support for python3.8 in the installation package. +- Added the installation package for cuda10.1 and cuda 10.2. +- (experimental) Released the installation package for cuda11. +- Upgraded the Paddle image of cuda 10.1 and later, and the NCCL version in the CI system image to V2.7.8 +- Upgraded oneDNN (former MKL-DNN) from V1.3 to V1.5. +- Added the pre-installed openssl-dev dependencies to the image. +- Removed installed dependencies: nltk, opencv, scipy, rarfile, prettytable, pathlib, matplotlib, graphviz, objgraph. +- Paddle's avx and no_avx are released separately. whl package is reduced by 40%. avx version is installed by default. Optimized installation error message. The system checks the user's CPU type and Paddle version, automatically prompting the corresponding installation error. +- Improved the pypi installation user experience for the Paddle develop version. Reduced the user installation path. You can run pip --pre for installation. + +#### **Paddle inference engine** +- The inference library supports cuda10.2-cudnn8-trt7.1 version. +- Release the installation package supporting jetpack and C++ inference library supporting nv_jetson. +- Newly release the joint compilation of two wheel packages for tensorrt, that is, cuda10.0-cudnn7.6-trt6.0.1.5-python36 and cuda10.0-cudnn7.6-trt6.0.1.5-python36. +- Fixed the joint compilation strategy, released the gpu package containing tensorrt separately to avoid the error of no tensorrt when users install the packages of other GPU versions. +- Fixed a bug of duplicate in the inference library packages. + + +### **Support of new hardware training** +- Kunlun chip: support single card training, static graph multi-card training. Release 10+ models. +- Centerm 910 chip: support single card training. + +## **Known Issues** + +- Due to cuDNN 8.0.x's own limitations, when using cuDNN 8.0.x to compile inference library and not using TensorRT acceleration, there is performance degradation on many models. This bug is to be fixed in cuDNN's subsequent versions. You can try to use TensorRT acceleration or use cuDNN 7.6. +- Due to cuDNN 8.0.x’s own limitation, memory leak occurs in some models when using cuDNN 8.0.x for inference. Currently, it is found that the problem occurs when the convolutionBiasActivationForward of cuDNN is used. You can try to disable conv_elementwise_add_act_fuse_pass and conv_elementwise_add_act_fuse_pass by using the inference config file config. pass_builder()->DeletePass().If there is still leakage, you can try cuDNN7.6 and send us the model where you found the problem by issue for analysis. diff --git a/doc/paddle/tutorial/cv_case/convnet_image_classification/convnet_image_classification.rst b/doc/paddle/tutorial/cv_case/convnet_image_classification/convnet_image_classification.rst index c11c373556a..97783addf59 100644 --- a/doc/paddle/tutorial/cv_case/convnet_image_classification/convnet_image_classification.rst +++ b/doc/paddle/tutorial/cv_case/convnet_image_classification/convnet_image_classification.rst @@ -1,12 +1,18 @@ 使用卷积神经网络进行图像分类 ============================ -本示例教程将会演示如何使用飞桨的卷积神经网络来完成图像分类任务。这是一个较为简单的示例,将会使用一个由三个卷积层组成的网络完成\ `cifar10 `__\ 数据集的图像分类任务。 +**作者:** `PaddlePaddle `__ -设置环境 --------- +**日期:** 2021.01 -我们将使用飞桨2.0rc1版本。 +**摘要:** 本示例教程将会演示如何使用飞桨的卷积神经网络来完成图像分类任务。这是一个较为简单的示例,将会使用一个由三个卷积层组成的网络完成\ `cifar10 `__\ 数据集的图像分类任务。 + +一、环境配置 +------------ + +本教程基于Paddle 2.0 +编写,如果您的环境不是本版本,请先参考官网\ `安装 `__ +Paddle 2.0 。 .. code:: ipython3 @@ -21,11 +27,11 @@ .. parsed-literal:: - 2.0.0-rc1 + 2.0.0 -加载数据集 ----------- +二、加载数据集 +-------------- 我们将会使用飞桨提供的API完成数据集的下载并为后续的训练任务准备好数据迭代器。cifar10数据集由60000张大小为32 \* @@ -34,16 +40,18 @@ .. code:: ipython3 transform = ToTensor() - cifar10_train = paddle.vision.datasets.Cifar10(mode='train', + cifar10_train = paddle.vision.datasets.Cifar10(mode='train', transform=transform) - cifar10_test = paddle.vision.datasets.Cifar10(mode='test', + cifar10_test = paddle.vision.datasets.Cifar10(mode='test', transform=transform) +三、组建网络 +------------ -组建网络 --------- - -接下来我们使用飞桨定义一个使用了三个二维卷积(\ ``Conv2D``)且每次卷积之后使用\ ``relu``\ 激活函数,两个二维池化层(\ ``MaxPool2D``\ ),和两个线性变换层组成的分类网络,来把一个\ ``(32, 32, 3)``\ 形状的图片通过卷积神经网络映射为10个输出,这对应着10个分类的类别。 +接下来我们使用飞桨定义一个使用了三个二维卷积( ``Conv2D`` ) +且每次卷积之后使用 ``relu`` 激活函数,两个二维池化层( ``MaxPool2D`` +),和两个线性变换层组成的分类网络,来把一个(32, 32, +3)形状的图片通过卷积神经网络映射为10个输出,这对应着10个分类的类别。 .. code:: ipython3 @@ -53,26 +61,26 @@ self.conv1 = paddle.nn.Conv2D(in_channels=3, out_channels=32, kernel_size=(3, 3)) self.pool1 = paddle.nn.MaxPool2D(kernel_size=2, stride=2) - + self.conv2 = paddle.nn.Conv2D(in_channels=32, out_channels=64, kernel_size=(3,3)) - self.pool2 = paddle.nn.MaxPool2D(kernel_size=2, stride=2) - + self.pool2 = paddle.nn.MaxPool2D(kernel_size=2, stride=2) + self.conv3 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=(3,3)) self.flatten = paddle.nn.Flatten() - + self.linear1 = paddle.nn.Linear(in_features=1024, out_features=64) self.linear2 = paddle.nn.Linear(in_features=64, out_features=num_classes) - + def forward(self, x): x = self.conv1(x) x = F.relu(x) x = self.pool1(x) - + x = self.conv2(x) x = F.relu(x) x = self.pool2(x) - + x = self.conv3(x) x = F.relu(x) @@ -82,13 +90,12 @@ x = self.linear2(x) return x -模型训练 --------- +四、模型训练&预测 +----------------- -接下来,我们用一个循环来进行模型的训练,我们将会: - -使用\ ``paddle.optimizer.Adam``\ 优化器来进行优化。 - -使用\ ``F.cross_entropy``\ 来计算损失值。 - -使用\ ``paddle.io.DataLoader``\ 来加载数据并组建batch。 +接下来,我们用一个循环来进行模型的训练,我们将会: - 使用 +``paddle.optimizer.Adam`` 优化器来进行优化。 - 使用 ``F.cross_entropy`` +来计算损失值。 - 使用 ``paddle.io.DataLoader`` 来加载数据并组建batch。 .. code:: ipython3 @@ -106,13 +113,13 @@ # turn into training mode model.train() - opt = paddle.optimizer.Adam(learning_rate=learning_rate, + opt = paddle.optimizer.Adam(learning_rate=learning_rate, parameters=model.parameters()) train_loader = paddle.io.DataLoader(cifar10_train, - shuffle=True, + shuffle=True, batch_size=batch_size) - + valid_loader = paddle.io.DataLoader(cifar10_test, batch_size=batch_size) for epoch in range(epoch_num): @@ -120,10 +127,10 @@ x_data = data[0] y_data = paddle.to_tensor(data[1]) y_data = paddle.unsqueeze(y_data, 1) - + logits = model(x_data) loss = F.cross_entropy(logits, y_data) - + if batch_id % 1000 == 0: print("epoch: {}, batch_id: {}, loss is: {}".format(epoch, batch_id, loss.numpy())) loss.backward() @@ -134,17 +141,17 @@ model.eval() accuracies = [] losses = [] - for batch_id, data in enumerate(valid_loader()): + for batch_id, data in enumerate(valid_loader()): x_data = data[0] y_data = paddle.to_tensor(data[1]) y_data = paddle.unsqueeze(y_data, 1) - logits = model(x_data) + logits = model(x_data) loss = F.cross_entropy(logits, y_data) acc = paddle.metric.accuracy(logits, y_data) accuracies.append(acc.numpy()) losses.append(loss.numpy()) - + avg_acc, avg_loss = np.mean(accuracies), np.mean(losses) print("[validation] accuracy/loss: {}/{}".format(avg_acc, avg_loss)) val_acc_history.append(avg_acc) @@ -158,25 +165,36 @@ .. parsed-literal:: start training ... - epoch: 0, batch_id: 0, loss is: [2.2958596] - epoch: 0, batch_id: 1000, loss is: [1.1936836] - [validation] accuracy/loss: 0.591154158115387/1.1523455381393433 - epoch: 1, batch_id: 0, loss is: [1.2599835] - epoch: 1, batch_id: 1000, loss is: [1.1489952] - [validation] accuracy/loss: 0.6487619876861572/1.0029116868972778 - epoch: 2, batch_id: 0, loss is: [0.8802061] - epoch: 2, batch_id: 1000, loss is: [1.4021301] - [validation] accuracy/loss: 0.6770167946815491/0.9360101222991943 - ... - epoch: 7, batch_id: 0, loss is: [0.48263282] - epoch: 7, batch_id: 1000, loss is: [0.79164064] - [validation] accuracy/loss: 0.7098641991615295/0.8723703026771545 - epoch: 8, batch_id: 0, loss is: [0.51289064] - epoch: 8, batch_id: 1000, loss is: [0.34993857] - [validation] accuracy/loss: 0.7143570184707642/0.8866704106330872 - epoch: 9, batch_id: 0, loss is: [0.62089384] - epoch: 9, batch_id: 1000, loss is: [0.7540835] - [validation] accuracy/loss: 0.7209464907646179/0.8900741934776306 + epoch: 0, batch_id: 0, loss is: [2.2362428] + epoch: 0, batch_id: 1000, loss is: [1.206327] + [validation] accuracy/loss: 0.5383386611938477/1.2577064037322998 + epoch: 1, batch_id: 0, loss is: [1.370784] + epoch: 1, batch_id: 1000, loss is: [1.0781252] + [validation] accuracy/loss: 0.6376796960830688/1.0298848152160645 + epoch: 2, batch_id: 0, loss is: [0.9192907] + epoch: 2, batch_id: 1000, loss is: [0.7311921] + [validation] accuracy/loss: 0.6576477885246277/0.9908456802368164 + epoch: 3, batch_id: 0, loss is: [0.61424184] + epoch: 3, batch_id: 1000, loss is: [0.8268999] + [validation] accuracy/loss: 0.6778154969215393/0.9368402361869812 + epoch: 4, batch_id: 0, loss is: [0.8788361] + epoch: 4, batch_id: 1000, loss is: [1.139102] + [validation] accuracy/loss: 0.7055711150169373/0.8624006509780884 + epoch: 5, batch_id: 0, loss is: [0.4790781] + epoch: 5, batch_id: 1000, loss is: [0.46481135] + [validation] accuracy/loss: 0.7040734887123108/0.8620880246162415 + epoch: 6, batch_id: 0, loss is: [0.8061414] + epoch: 6, batch_id: 1000, loss is: [0.8912587] + [validation] accuracy/loss: 0.7112619876861572/0.8590201139450073 + epoch: 7, batch_id: 0, loss is: [0.5126707] + epoch: 7, batch_id: 1000, loss is: [0.70433134] + [validation] accuracy/loss: 0.7098641991615295/0.8762255907058716 + epoch: 8, batch_id: 0, loss is: [0.70113385] + epoch: 8, batch_id: 1000, loss is: [0.58052105] + [validation] accuracy/loss: 0.7064696550369263/0.9035584330558777 + epoch: 9, batch_id: 0, loss is: [0.34707433] + epoch: 9, batch_id: 1000, loss is: [0.59680617] + [validation] accuracy/loss: 0.7041733264923096/0.945155143737793 .. code:: ipython3 @@ -193,12 +211,12 @@ .. parsed-literal:: - + -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/cv_case/convnet_image_classification/convnet_image_classification_files/convnet_image_classification_10_1.png?raw=true +.. image:: convnet_image_classification_files/convnet_image_classification_10_1.png The End diff --git a/doc/paddle/tutorial/cv_case/convnet_image_classification/convnet_image_classification_files/convnet_image_classification_10_1.png b/doc/paddle/tutorial/cv_case/convnet_image_classification/convnet_image_classification_files/convnet_image_classification_10_1.png index e48fc462592..0e271549332 100644 Binary files a/doc/paddle/tutorial/cv_case/convnet_image_classification/convnet_image_classification_files/convnet_image_classification_10_1.png and b/doc/paddle/tutorial/cv_case/convnet_image_classification/convnet_image_classification_files/convnet_image_classification_10_1.png differ diff --git a/doc/paddle/tutorial/cv_case/image_classification/image_classification.rst b/doc/paddle/tutorial/cv_case/image_classification/image_classification.rst index 23134ffa443..a0f00f5dd3b 100644 --- a/doc/paddle/tutorial/cv_case/image_classification/image_classification.rst +++ b/doc/paddle/tutorial/cv_case/image_classification/image_classification.rst @@ -1,13 +1,18 @@ -MNIST数据集使用LeNet进行图像分类 -================================ +使用LeNet在MNIST数据集实现图像分类 +================================== -本示例教程演示如何在MNIST数据集上用LeNet进行图像分类。 -手写数字的MNIST数据集,包含60,000个用于训练的示例和10,000个用于测试的示例。这些数字已经过尺寸标准化并位于图像中心,图像是固定大小(28x28像素),其值为0到1。该数据集的官方地址为:http://yann.lecun.com/exdb/mnist/ +**作者:** `PaddlePaddle `__ -1、环境 -------- +**日期:** 2021.01 -本教程基于paddle-2.0rc1编写,如果您的环境不是本版本,请先安装paddle-2.0rc1版本。 +**摘要:** 本示例教程演示如何在MNIST数据集上用LeNet进行图像分类。 + +一、环境配置 +------------ + +本教程基于Paddle 2.0 +编写,如果您的环境不是本版本,请先参考官网\ `安装 `__ +Paddle 2.0 。 .. code:: ipython3 @@ -17,13 +22,17 @@ MNIST数据集使用LeNet进行图像分类 .. parsed-literal:: - 2.0.0-rc1 + 2.0.0 + +二、数据加载 +------------ -2、加载数据集 -------------- +手写数字的MNIST数据集,包含60,000个用于训练的示例和10,000个用于测试的示例。这些数字已经过尺寸标准化并位于图像中心,图像是固定大小(28x28像素),其值为0到1。该数据集的官方地址为:http://yann.lecun.com/exdb/mnist +。 -我们使用飞桨自带的paddle.dataset完成mnist数据集的加载。 +我们使用飞桨框架自带的 ``paddle.vision.datasets.MNIST`` +完成mnist数据集的加载。 .. code:: ipython3 @@ -64,11 +73,11 @@ MNIST数据集使用LeNet进行图像分类 -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/cv_case/image_classification/image_classification_files/image_classification_6_1.png?raw=true +.. image:: image_classification_files/image_classification_6_1.png -3、组网 -------- +三、组网 +-------- 用paddle.nn下的API,如\ ``Conv2D``\ 、\ ``MaxPool2D``\ 、\ ``Linear``\ 完成LeNet的构建。 @@ -103,14 +112,14 @@ MNIST数据集使用LeNet进行图像分类 x = self.linear3(x) return x -4、方式一:基于高层API,完成模型的训练与预测 +四、方式1:基于高层API,完成模型的训练与预测 -------------------------------------------- 通过paddle提供的\ ``Model`` 构建实例,使用封装好的训练与测试接口,快速完成模型训练与测试。 -4.1、使用 ``Model.fit``\ 来训练模型 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +4.1 使用 ``Model.fit``\ 来训练模型 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code:: ipython3 @@ -139,13 +148,13 @@ MNIST数据集使用LeNet进行图像分类 The loss value printed in the log is the current step, and the metric is the average value of previous step. Epoch 1/2 - step 938/938 [==============================] - loss: 0.0466 - acc: 0.9509 - 21ms/step + step 938/938 [==============================] - loss: 0.0159 - acc: 0.9521 - 19ms/step Epoch 2/2 - step 938/938 [==============================] - loss: 0.0038 - acc: 0.9828 - 21ms/step + step 938/938 [==============================] - loss: 0.0029 - acc: 0.9834 - 19ms/step -4.2、使用 ``Model.evaluate`` 来预测模型 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +4.2 使用 ``Model.evaluate`` 来预测模型 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code:: ipython3 @@ -173,11 +182,11 @@ MNIST数据集使用LeNet进行图像分类 以上就是方式一,可以快速、高效的完成网络模型训练与预测。 -5、方式二:基于基础API,完成模型的训练与预测 +五、方式2:基于基础API,完成模型的训练与预测 -------------------------------------------- -5.1、 模型训练 -~~~~~~~~~~~~~~ +5.1 模型训练 +~~~~~~~~~~~~ 组网后,开始对模型进行训练,先构建\ ``train_loader``\ ,加载训练数据,然后定义\ ``train``\ 函数,设置好损失函数后,按batch加载数据,完成模型的训练。 @@ -210,18 +219,18 @@ MNIST数据集使用LeNet进行图像分类 .. parsed-literal:: - epoch: 0, batch_id: 0, loss is: [2.9329956], acc is: [0.09375] - epoch: 0, batch_id: 300, loss is: [0.1275514], acc is: [0.953125] - epoch: 0, batch_id: 600, loss is: [0.11902139], acc is: [0.9375] - epoch: 0, batch_id: 900, loss is: [0.05746497], acc is: [0.96875] - epoch: 1, batch_id: 0, loss is: [0.07559228], acc is: [0.96875] - epoch: 1, batch_id: 300, loss is: [0.02273748], acc is: [1.] - epoch: 1, batch_id: 600, loss is: [0.17519505], acc is: [0.953125] - epoch: 1, batch_id: 900, loss is: [0.0435793], acc is: [0.96875] + epoch: 0, batch_id: 0, loss is: [3.292166], acc is: [0.046875] + epoch: 0, batch_id: 300, loss is: [0.05979356], acc is: [0.984375] + epoch: 0, batch_id: 600, loss is: [0.04557724], acc is: [0.984375] + epoch: 0, batch_id: 900, loss is: [0.09153229], acc is: [0.96875] + epoch: 1, batch_id: 0, loss is: [0.01268834], acc is: [1.] + epoch: 1, batch_id: 300, loss is: [0.22756869], acc is: [0.921875] + epoch: 1, batch_id: 600, loss is: [0.00377245], acc is: [1.] + epoch: 1, batch_id: 900, loss is: [0.00929211], acc is: [1.] -5.2、模型验证 -~~~~~~~~~~~~~ +5.2 模型验证 +~~~~~~~~~~~~ 训练完成后,需要验证模型的效果,此时,加载测试数据集,然后用训练好的模对测试集进行预测,计算损失与精度。 @@ -246,14 +255,14 @@ MNIST数据集使用LeNet进行图像分类 .. parsed-literal:: - batch_id: 0, loss is: [0.00826053], acc is: [1.] - batch_id: 20, loss is: [0.15725465], acc is: [0.96875] - batch_id: 40, loss is: [0.11518502], acc is: [0.96875] - batch_id: 60, loss is: [0.07907856], acc is: [0.96875] - batch_id: 80, loss is: [0.00329849], acc is: [1.] - batch_id: 100, loss is: [0.00080635], acc is: [1.] - batch_id: 120, loss is: [0.01714545], acc is: [1.] - batch_id: 140, loss is: [0.17275977], acc is: [0.953125] + batch_id: 0, loss is: [0.01291558], acc is: [1.] + batch_id: 20, loss is: [0.07833393], acc is: [0.96875] + batch_id: 40, loss is: [0.04836973], acc is: [0.984375] + batch_id: 60, loss is: [0.11191542], acc is: [0.984375] + batch_id: 80, loss is: [0.04298809], acc is: [0.984375] + batch_id: 100, loss is: [0.00484229], acc is: [1.] + batch_id: 120, loss is: [0.00393359], acc is: [1.] + batch_id: 140, loss is: [0.02711521], acc is: [0.984375] 方式二结束 @@ -261,7 +270,7 @@ MNIST数据集使用LeNet进行图像分类 以上就是方式二,通过底层API,可以清楚的看到训练和测试中的每一步过程。但是,这种方式比较复杂。因此,我们提供了训练方式一,使用高层API来完成模型的训练与预测。对比底层API,高层API能够更加快速、高效的完成模型的训练与测试。 -6、总结 -------- +六、总结 +-------- 以上就是用LeNet对手写数字数据及MNIST进行分类。本示例提供了两种训练模型的方式,一种可以快速完成模型的组建与预测,非常适合新手用户上手。另一种则需要多个步骤来完成模型的训练,适合进阶用户使用。 diff --git a/doc/paddle/tutorial/cv_case/image_classification/image_classification_files/image_classification_6_1.png b/doc/paddle/tutorial/cv_case/image_classification/image_classification_files/image_classification_6_1.png index 91327f435ad..58728de3bec 100644 Binary files a/doc/paddle/tutorial/cv_case/image_classification/image_classification_files/image_classification_6_1.png and b/doc/paddle/tutorial/cv_case/image_classification/image_classification_files/image_classification_6_1.png differ diff --git a/doc/paddle/tutorial/cv_case/image_ocr/OCR_files/OCR_04.png b/doc/paddle/tutorial/cv_case/image_ocr/OCR_files/OCR_04.png deleted file mode 100644 index f4ec2b5f63a..00000000000 Binary files a/doc/paddle/tutorial/cv_case/image_ocr/OCR_files/OCR_04.png and /dev/null differ diff --git a/doc/paddle/tutorial/cv_case/image_ocr/image_ocr.rst b/doc/paddle/tutorial/cv_case/image_ocr/image_ocr.rst index 503aaa03c8b..937230e2a95 100644 --- a/doc/paddle/tutorial/cv_case/image_ocr/image_ocr.rst +++ b/doc/paddle/tutorial/cv_case/image_ocr/image_ocr.rst @@ -1,31 +1,55 @@ 通过OCR实现验证码识别 ===================== -| 作者: `GT_老张 `__ -| 时间: 2020.11 +**作者:** `GT_老张 `__ -| 本篇将介绍如何通过飞桨实现简单的CRNN+CTC自定义数据集OCR识别模型,数据集采用\ `CaptchaDataset `__\ 中OCR部分的9453张图像,其中前8453张图像在本案例中作为训练集,后1000张则作为测试集。 +**时间:** 2021.01 + +| **摘要:** + 本篇将介绍如何通过飞桨实现简单的CRNN+CTC自定义数据集OCR识别模型,数据集采用\ `CaptchaDataset `__\ 中OCR部分的9453张图像,其中前8453张图像在本案例中作为训练集,后1000张则作为测试集。 | 在更复杂的场景中推荐使用\ `PaddleOCR `__\ 产出工业级模型,模型轻量且精度大幅提升。 | 同样也可以在\ `PaddleHub `__\ 中快速使用PaddleOCR。 -**数据展示** +一、环境配置 +------------ + +本教程基于Paddle 2.0 +编写,如果您的环境不是本版本,请先参考官网\ `安装 `__ +Paddle 2.0 。 + +.. code:: ipython3 + + import paddle + print(paddle.__version__) + + +.. parsed-literal:: + + 2.0.0 -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/cv_case/image_ocr/OCR_files/OCR_01.png?raw=true -自定义数据集读取器 ------------------- +二、自定义数据集读取器 +---------------------- 常见的开发任务中,我们并不一定会拿到标准的数据格式,好在我们可以通过自定义Reader的形式来随心所欲读取自己想要数据。 | 设计合理的Reader往往可以带来更好的性能,我们可以将读取标签文件列表、制作图像文件列表等必要操作在\ ``__init__``\ 特殊方法中实现。这样就可以在实例化\ ``Reader``\ 时装入内存,避免使用时频繁读取导致增加额外开销。同样我们可以在\ ``__getitem__``\ 特殊方法中实现如图像增强、归一化等个性操作,完成数据读取后即可释放该部分内存。 | 需要我们注意的是,如果不能保证自己数据十分纯净,可以通过\ ``try``\ 和\ ``expect``\ 来捕获异常并指出该数据的位置。当然也可以制定一个策略,使其在发生数据读取异常后依旧可以正常进行训练。 +2.1 数据展示 +~~~~~~~~~~~~ + +|image1| + +点此\ `快速获取本节数据集 `__\ ,待数据集下载完毕后可使用\ ``!unzip OCR_Dataset.zip -d data/``\ 命令或熟悉的解压软件进行解压,待数据准备工作完成后修改本文“训练准备”中的\ ``DATA_PATH = 解压后数据集路径``\ 。 + +.. |image1| image:: ./images/image1.png + .. code:: ipython3 # 解压数据集 !unzip OCR_Dataset.zip -d data/ - .. code:: ipython3 import os @@ -83,11 +107,11 @@ # 返回每个Epoch中图片数量 return len(self.img_paths) -模型配置 --------- +三、模型配置 +------------ -定义模型结构以及模型输入 ------------------------- +3.1 定义模型结构以及模型输入 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 模型方面使用的简单的CRNN-CTC结构,输入形为CHW的图像在经过CNN->Flatten->Linear->RNN->Linear后输出图像中每个位置所对应的字符概率。考虑到CTC解码器在面对图像中元素数量不一、相邻元素重复时会存在无法正确对齐等情况,故额外添加一个类别代表“分隔符”进行改善。 @@ -95,14 +119,20 @@ CTC相关论文:\ `Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neu `__ -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/cv_case/image_ocr/OCR_files/OCR_02.png?raw=true +|image1| 网络部分,因本篇采用数据集较为简单且图像尺寸较小并不适合较深层次网络。若在对尺寸较大的图像进行模型构建,可以考虑使用更深层次网络/注意力机制来完成。当然也可以通过目标检测形式先检出文本位置,然后进行OCR部分模型构建。 -PaddleOCR 效果图如下: +|image2| + +PaddleOCR效果图 + +.. raw:: html -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/cv_case/image_ocr/OCR_files/OCR_03.png?raw=true +

+.. |image1| image:: ./images/image2.png +.. |image2| image:: ./images/image3.png .. code:: ipython3 @@ -174,13 +204,15 @@ PaddleOCR 效果图如下: if self.is_infer: # 输出层 - Shape = (Batch Size, Max label len, Prob) x = paddle.nn.functional.softmax(x) + # 转换为标签 + x = paddle.argmax(x, axis=-1) return x -训练准备 --------- +四、训练准备 +------------ -定义label输入以及超参数 -~~~~~~~~~~~~~~~~~~~~~~~ +4.1 定义label输入以及超参数 +~~~~~~~~~~~~~~~~~~~~~~~~~~~ 监督训练需要定义label,预测则不需要该步骤。 @@ -197,8 +229,8 @@ PaddleOCR 效果图如下: dtype="int32", name="label") -定义CTC Loss -~~~~~~~~~~~~ +4.2 定义CTC Loss +~~~~~~~~~~~~~~~~ 了解CTC解码器效果后,我们需要在训练中让模型尽可能接近这种类型输出形式,那么我们需要定义一个CTC Loss来计算模型损失。不必担心,在飞桨框架中内置了多种Loss,无需手动复现即可完成损失计算。 @@ -223,8 +255,8 @@ Loss来计算模型损失。不必担心,在飞桨框架中内置了多种Loss loss = paddle.nn.functional.ctc_loss(ipt, label, input_lengths, label_lengths, blank=10) return loss -实例化模型并配置优化策略 -~~~~~~~~~~~~~~~~~~~~~~~~ +4.3 实例化模型并配置优化策略 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code:: ipython3 @@ -240,8 +272,8 @@ Loss来计算模型损失。不必担心,在飞桨框架中内置了多种Loss model.prepare(optimizer=optimizer, loss=CTCLoss()) -开始训练 --------- +五、开始训练 +------------ .. code:: ipython3 @@ -259,28 +291,83 @@ Loss来计算模型损失。不必担心,在飞桨框架中内置了多种Loss The loss value printed in the log is the current step, and the metric is the average value of previous step. Epoch 1/10 - step 529/529 [==============================] - loss: 0.1363 - 36ms/step - save checkpoint at /Users/tclong/online_repo/paddle2.0_docs/image_ocr/output/0 + step 529/529 [==============================] - loss: 0.1299 - 10ms/step + save checkpoint at /home/aistudio/output/0 Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 63/63 [==============================] - loss: 0.1189 - 13ms/step + step 63/63 [==============================] - loss: 0.1584 - 6ms/step Eval samples: 1000 Epoch 2/10 + step 529/529 [==============================] - loss: 0.0300 - 9ms/step + save checkpoint at /home/aistudio/output/1 + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 63/63 [==============================] - loss: 0.0663 - 6ms/step + Eval samples: 1000 + Epoch 3/10 + step 529/529 [==============================] - loss: 0.2056 - 9ms/step + save checkpoint at /home/aistudio/output/2 + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 63/63 [==============================] - loss: 0.0392 - 6ms/step + Eval samples: 1000 + Epoch 4/10 + step 529/529 [==============================] - loss: 0.0115 - 9ms/step + save checkpoint at /home/aistudio/output/3 + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 63/63 [==============================] - loss: 0.0281 - 6ms/step + Eval samples: 1000 + Epoch 5/10 + step 529/529 [==============================] - loss: 0.0121 - 10ms/step + save checkpoint at /home/aistudio/output/4 + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 63/63 [==============================] - loss: 0.0251 - 6ms/step + Eval samples: 1000 + Epoch 6/10 + step 529/529 [==============================] - loss: 0.0090 - 9ms/step + save checkpoint at /home/aistudio/output/5 + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 63/63 [==============================] - loss: 0.0170 - 6ms/step + Eval samples: 1000 + Epoch 7/10 + step 529/529 [==============================] - loss: 0.0049 - 9ms/step + save checkpoint at /home/aistudio/output/6 + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 63/63 [==============================] - loss: 0.0149 - 6ms/step Eval samples: 1000 - ... Epoch 8/10 - step 529/529 [==============================] - loss: 0.0146 - 36ms/step - save checkpoint at /Users/tclong/online_repo/paddle2.0_docs/image_ocr/output/7 + step 529/529 [==============================] - loss: 0.0081 - 9ms/step + save checkpoint at /home/aistudio/output/7 + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 63/63 [==============================] - loss: 0.0113 - 6ms/step + Eval samples: 1000 + Epoch 9/10 + step 529/529 [==============================] - loss: 0.0051 - 9ms/step + save checkpoint at /home/aistudio/output/8 Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 63/63 [==============================] - loss: 0.0172 - 12ms/step + step 63/63 [==============================] - loss: 0.0221 - 6ms/step Eval samples: 1000 + Epoch 10/10 + step 529/529 [==============================] - loss: 0.0135 - 9ms/step + save checkpoint at /home/aistudio/output/9 + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 63/63 [==============================] - loss: 0.0111 - 6ms/step + Eval samples: 1000 + save checkpoint at /home/aistudio/output/final + -预测前准备 ----------- +六、预测前准备 +-------------- -像定义训练Reader一样定义预测Reader -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +6.1 像定义训练Reader一样定义预测Reader +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code:: ipython3 @@ -320,20 +407,20 @@ Loss来计算模型损失。不必担心,在飞桨框架中内置了多种Loss def __len__(self): return len(self.img_paths) -参数设置 -~~~~~~~~ +6.2 参数设置 +~~~~~~~~~~~~ .. code:: ipython3 - # 待预测目录 + # 待预测目录 - 可在测试数据集中挑出\b3张图像放在该目录中进行推理 INFER_DATA_PATH = "./sample_img" # 训练后存档点路径 - final 代表最终训练所得模型 CHECKPOINT_PATH = "./output/final.pdparams" # 每批次处理数量 BATCH_SIZE = 32 -展示待预测数据 -~~~~~~~~~~~~~~ +6.3 展示待预测数据 +~~~~~~~~~~~~~~~~~~ .. code:: ipython3 @@ -352,20 +439,34 @@ Loss来计算模型损失。不必担心,在飞桨框架中内置了多种Loss -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/cv_case/image_ocr/image_ocr_files/image_ocr_24_0.png?raw=true +.. image:: image_ocr_files/image_ocr_26_0.png -开始预测 --------- +七、开始预测 +------------ - 飞桨2.0 CTC Decoder - 相关API正在迁移中,暂时使用\ `第三方解码器 `__\ 进行解码。 + 飞桨2.0 CTC Decoder 相关API正在迁移中,本节暂时使用简易版解码器。 .. code:: ipython3 - from ctc import decode + # 编写简易版解码器 + def ctc_decode(text, blank=10): + """ + 简易CTC解码器 + :param text: 待解码数据 + :param blank: 分隔符索引值 + :return: 解码后数据 + """ + result = [] + cache_idx = -1 + for char in text: + if char != blank and char != cache_idx: + result.append(char) + cache_idx = char + return result + - # 实例化预测模型 + # 实例化推理模型 model = paddle.Model(Net(is_infer=True), inputs=input_define) # 加载训练好的参数模型 model.load(CHECKPOINT_PATH) @@ -377,19 +478,19 @@ Loss来计算模型损失。不必担心,在飞桨框架中内置了多种Loss img_names = infer_reader.get_names() results = model.predict(infer_reader, batch_size=BATCH_SIZE) index = 0 - for result in results[0]: - for prob in result: - out, _ = decode(prob, blank=10) - print(f"文件名:{img_names[index]},预测结果为:{out}") + for text_batch in results[0]: + for prob in text_batch: + out = ctc_decode(prob, blank=10) + print(f"文件名:{img_names[index]},推理结果为:{out}") index += 1 .. parsed-literal:: Predict begin... - step 1/1 [==============================] - 12ms/step + step 1/1 [==============================] - 6ms/step Predict samples: 3 - 文件名:9451.jpg,预测结果为:(3, 4, 6, 3) - 文件名:9450.jpg,预测结果为:(8, 2, 0, 5) - 文件名:9452.jpg,预测结果为:(0, 3, 0, 0) + 文件名:9450.jpg,推理结果为:[8, 2, 0, 5] + 文件名:9452.jpg,推理结果为:[0, 3, 0, 0] + 文件名:9451.jpg,推理结果为:[3, 4, 6, 3] diff --git a/doc/paddle/tutorial/cv_case/image_ocr/image_ocr_files/image_ocr_24_0.png b/doc/paddle/tutorial/cv_case/image_ocr/image_ocr_files/image_ocr_24_0.png deleted file mode 100644 index f4ec2b5f63a..00000000000 Binary files a/doc/paddle/tutorial/cv_case/image_ocr/image_ocr_files/image_ocr_24_0.png and /dev/null differ diff --git a/doc/paddle/tutorial/cv_case/image_ocr/image_ocr_files/image_ocr_26_0.png b/doc/paddle/tutorial/cv_case/image_ocr/image_ocr_files/image_ocr_26_0.png new file mode 100644 index 00000000000..b2a7de8a9bf Binary files /dev/null and b/doc/paddle/tutorial/cv_case/image_ocr/image_ocr_files/image_ocr_26_0.png differ diff --git a/doc/paddle/tutorial/cv_case/image_ocr/OCR_files/OCR_01.png b/doc/paddle/tutorial/cv_case/image_ocr/images/image1.png similarity index 100% rename from doc/paddle/tutorial/cv_case/image_ocr/OCR_files/OCR_01.png rename to doc/paddle/tutorial/cv_case/image_ocr/images/image1.png diff --git a/doc/paddle/tutorial/cv_case/image_ocr/OCR_files/OCR_02.png b/doc/paddle/tutorial/cv_case/image_ocr/images/image2.png similarity index 100% rename from doc/paddle/tutorial/cv_case/image_ocr/OCR_files/OCR_02.png rename to doc/paddle/tutorial/cv_case/image_ocr/images/image2.png diff --git a/doc/paddle/tutorial/cv_case/image_ocr/OCR_files/OCR_03.png b/doc/paddle/tutorial/cv_case/image_ocr/images/image3.png similarity index 100% rename from doc/paddle/tutorial/cv_case/image_ocr/OCR_files/OCR_03.png rename to doc/paddle/tutorial/cv_case/image_ocr/images/image3.png diff --git a/doc/paddle/tutorial/cv_case/image_search/image_search.rst b/doc/paddle/tutorial/cv_case/image_search/image_search.rst index be11f921fa6..867888cde0f 100644 --- a/doc/paddle/tutorial/cv_case/image_search/image_search.rst +++ b/doc/paddle/tutorial/cv_case/image_search/image_search.rst @@ -1,17 +1,25 @@ 基于图片相似度的图片搜索 ======================== -简要介绍 --------- +**作者:** `PaddlePaddle `__ + +**日期:** 2021.01 + +**摘要:** 本示例简要介绍如何通过飞桨开源框架,实现图片搜索的功能。 + +一、简要介绍 +------------ 图片搜索是一种有着广泛的应用场景的深度学习技术的应用,目前,无论是工程图纸的检索,还是互联网上相似图片的搜索,都基于深度学习算法能够实现很好的基于给定图片,检索出跟该图片相似的图片的效果。 本示例简要介绍如何通过飞桨开源框架,实现图片搜索的功能。其基本思路是,先将图片使用卷积神经网络转换为高维空间的向量表示,然后计算两张图片的高维空间的向量表示之间的相似程度(本示例中,我们使用余弦相似度)。在模型训练阶段,其训练目标是让同一类别的图片的相似程度尽可能的高,不同类别的图片的相似程度尽可能的低。在模型预测阶段,对于用户上传的一张图片,会计算其与图片库中图片的相似程度,返回给用户按照相似程度由高到低的图片的列表作为检索的结果。 -环境设置 --------- +二、环境配置 +------------ -本示例基于飞桨开源框架2.0RC1版本。 +本教程基于Paddle 2.0 +编写,如果您的环境不是本版本,请先参考官网\ `安装 `__ +Paddle 2.0 。 .. code:: ipython3 @@ -28,11 +36,14 @@ .. parsed-literal:: - 2.0.0-rc1 + 2.0.0 + +三、数据加载 +------------ -数据集 ------- +3.1 数据集介绍 +~~~~~~~~~~~~~~ 本示例采用\ `CIFAR-10 `__\ 数据集。这是一个经典的数据集,由50000张图片的训练数据,和10000张图片的测试数据组成,其中每张图片是一个RGB的长和宽都为32的图片。使用\ ``paddle.vision.datasets.Cifar10``\ 可以方便的完成数据的下载工作,把数据归一化到\ ``(0, 1.0)``\ 区间内,并提供迭代器供按顺序访问数据。我们会把训练数据和测试数据分别存放在两个\ ``numpy``\ 数组中,供后面的训练和评估来使用。 @@ -58,14 +69,6 @@ print(y_train.shape) -.. parsed-literal:: - - Cache file /home/aistudio/.cache/paddle/dataset/cifar/cifar-10-python.tar.gz not found, downloading https://dataset.bj.bcebos.com/cifar/cifar-10-python.tar.gz - Begin to download - - Download finished - - .. parsed-literal:: (50000, 3, 32, 32) @@ -97,8 +100,8 @@ (10000,) -数据探索 --------- +3.2 数据探索 +~~~~~~~~~~~~ 接下来我们随机从训练数据里找一些图片,浏览一下这些图片。 @@ -137,8 +140,8 @@ -构建训练数据 ------------- +3.3 构建训练数据 +---------------- 图片检索的模型的训练样本跟我们常见的分类任务的训练样本不太一样的地方在于,每个训练样本并不是一个\ ``(image, class)``\ 这样的形式。而是(image0, image1, @@ -214,8 +217,8 @@ similary_or_not)的形式,即,每一个训练样本由两张图片组成, -把图片转换为高维的向量表示的网络 --------------------------------- +四、模型组网:把图片转换为高维的向量表示的网络 +---------------------------------------------- 我们的目标是首先把图片转换为高维空间的表示,然后计算图片在高维空间表示时的相似度。 下面的网络结构用来把一个形状为\ ``(3, 32, 32)``\ 的图片转换成形状为\ ``(8,)``\ 的向量。在有些资料中也会把这个转换成的向量称为\ ``Embedding``\ ,请注意,这与自然语言处理领域的词向量的区别。 @@ -258,6 +261,9 @@ similary_or_not)的形式,即,每一个训练样本由两张图片组成, x = x / paddle.norm(x, axis=1, keepdim=True) return x +五、模型训练 +------------ + 在模型的训练过程中如下面的代码所示: - ``inverse_temperature``\ 参数起到的作用是让softmax在计算梯度时,能够处于梯度更显著的区域。(可以参考\ `attention @@ -310,50 +316,50 @@ similary_or_not)的形式,即,每一个训练样本由两张图片组成, .. parsed-literal:: start training ... - epoch: 0, batch_id: 0, loss is: [2.308973] - epoch: 0, batch_id: 500, loss is: [2.1715643] - epoch: 1, batch_id: 0, loss is: [2.2405038] - epoch: 1, batch_id: 500, loss is: [1.7425933] - epoch: 2, batch_id: 0, loss is: [2.2761073] - epoch: 2, batch_id: 500, loss is: [1.8646128] - epoch: 3, batch_id: 0, loss is: [2.0105839] - epoch: 3, batch_id: 500, loss is: [2.1285064] - epoch: 4, batch_id: 0, loss is: [1.9750721] - epoch: 4, batch_id: 500, loss is: [2.7026405] - epoch: 5, batch_id: 0, loss is: [1.9730712] - epoch: 5, batch_id: 500, loss is: [1.9468365] - epoch: 6, batch_id: 0, loss is: [1.9853971] - epoch: 6, batch_id: 500, loss is: [1.9933486] - epoch: 7, batch_id: 0, loss is: [2.28084] - epoch: 7, batch_id: 500, loss is: [2.035228] - epoch: 8, batch_id: 0, loss is: [2.4355981] - epoch: 8, batch_id: 500, loss is: [1.9757481] - epoch: 9, batch_id: 0, loss is: [1.7824882] - epoch: 9, batch_id: 500, loss is: [1.7308222] - epoch: 10, batch_id: 0, loss is: [1.6952913] - epoch: 10, batch_id: 500, loss is: [1.7937721] - epoch: 11, batch_id: 0, loss is: [1.9583824] - epoch: 11, batch_id: 500, loss is: [1.954584] - epoch: 12, batch_id: 0, loss is: [1.9372938] - epoch: 12, batch_id: 500, loss is: [1.923907] - epoch: 13, batch_id: 0, loss is: [2.0790615] - epoch: 13, batch_id: 500, loss is: [1.879385] - epoch: 14, batch_id: 0, loss is: [1.6512644] - epoch: 14, batch_id: 500, loss is: [1.6813613] - epoch: 15, batch_id: 0, loss is: [1.7223592] - epoch: 15, batch_id: 500, loss is: [1.8162235] - epoch: 16, batch_id: 0, loss is: [1.7605373] - epoch: 16, batch_id: 500, loss is: [1.9162548] - epoch: 17, batch_id: 0, loss is: [2.070904] - epoch: 17, batch_id: 500, loss is: [1.6421287] - epoch: 18, batch_id: 0, loss is: [2.260833] - epoch: 18, batch_id: 500, loss is: [1.7033148] - epoch: 19, batch_id: 0, loss is: [2.0115561] - epoch: 19, batch_id: 500, loss is: [2.305007] - - -模型预测 --------- + epoch: 0, batch_id: 0, loss is: [2.2846317] + epoch: 0, batch_id: 500, loss is: [2.0111878] + epoch: 1, batch_id: 0, loss is: [2.1171227] + epoch: 1, batch_id: 500, loss is: [2.1604505] + epoch: 2, batch_id: 0, loss is: [2.2643456] + epoch: 2, batch_id: 500, loss is: [1.9459085] + epoch: 3, batch_id: 0, loss is: [2.044874] + epoch: 3, batch_id: 500, loss is: [2.6040092] + epoch: 4, batch_id: 0, loss is: [2.2173238] + epoch: 4, batch_id: 500, loss is: [1.9844944] + epoch: 5, batch_id: 0, loss is: [1.8081882] + epoch: 5, batch_id: 500, loss is: [1.7608368] + epoch: 6, batch_id: 0, loss is: [2.3919208] + epoch: 6, batch_id: 500, loss is: [2.057749] + epoch: 7, batch_id: 0, loss is: [1.7965529] + epoch: 7, batch_id: 500, loss is: [1.8363149] + epoch: 8, batch_id: 0, loss is: [1.6242621] + epoch: 8, batch_id: 500, loss is: [2.052803] + epoch: 9, batch_id: 0, loss is: [1.7524099] + epoch: 9, batch_id: 500, loss is: [1.820884] + epoch: 10, batch_id: 0, loss is: [1.7788585] + epoch: 10, batch_id: 500, loss is: [1.9079857] + epoch: 11, batch_id: 0, loss is: [1.7813282] + epoch: 11, batch_id: 500, loss is: [1.7013695] + epoch: 12, batch_id: 0, loss is: [2.0464826] + epoch: 12, batch_id: 500, loss is: [1.6375948] + epoch: 13, batch_id: 0, loss is: [2.0308146] + epoch: 13, batch_id: 500, loss is: [1.7633543] + epoch: 14, batch_id: 0, loss is: [1.7758572] + epoch: 14, batch_id: 500, loss is: [1.6636188] + epoch: 15, batch_id: 0, loss is: [1.7562834] + epoch: 15, batch_id: 500, loss is: [1.9864613] + epoch: 16, batch_id: 0, loss is: [1.5613587] + epoch: 16, batch_id: 500, loss is: [1.7808621] + epoch: 17, batch_id: 0, loss is: [2.0996895] + epoch: 17, batch_id: 500, loss is: [1.7851509] + epoch: 18, batch_id: 0, loss is: [1.5448205] + epoch: 18, batch_id: 500, loss is: [1.7916664] + epoch: 19, batch_id: 0, loss is: [1.7407477] + epoch: 19, batch_id: 500, loss is: [1.47673] + + +六、模型预测 +------------ 前述的模型训练训练结束之后,我们就可以用该网络结构来计算出任意一张图片的高维向量表示(embedding),通过计算该图片与图片库中其他图片的高维向量表示之间的相似度,就可以按照相似程度进行排序,排序越靠前,则相似程度越高。 @@ -401,7 +407,7 @@ similary_or_not)的形式,即,每一个训练样本由两张图片组成, -The end +The End ------- 上面展示的结果当中,每一行里其余的图片都是跟第一张图片按照相似度进行排序相似的图片。但是,你也可以发现,在某些类别上,比如汽车、青蛙、马,可以有不错的效果,但在另外一些类别上,比如飞机,轮船,效果并不是特别好。你可以试着分析这些错误,进一步调整网络结构和超参数,以获得更好的结果。 diff --git a/doc/paddle/tutorial/cv_case/image_search/image_search_files/image_search_15_1.png b/doc/paddle/tutorial/cv_case/image_search/image_search_files/image_search_15_1.png index cfb8427350f..4e279bfd733 100644 Binary files a/doc/paddle/tutorial/cv_case/image_search/image_search_files/image_search_15_1.png and b/doc/paddle/tutorial/cv_case/image_search/image_search_files/image_search_15_1.png differ diff --git a/doc/paddle/tutorial/cv_case/image_search/image_search_files/image_search_22_0.png b/doc/paddle/tutorial/cv_case/image_search/image_search_files/image_search_22_0.png index 79175ba81a3..5f200089e05 100644 Binary files a/doc/paddle/tutorial/cv_case/image_search/image_search_files/image_search_22_0.png and b/doc/paddle/tutorial/cv_case/image_search/image_search_files/image_search_22_0.png differ diff --git a/doc/paddle/tutorial/cv_case/image_search/image_search_files/image_search_8_0.png b/doc/paddle/tutorial/cv_case/image_search/image_search_files/image_search_8_0.png index 4407fa345fa..0f2647ee845 100644 Binary files a/doc/paddle/tutorial/cv_case/image_search/image_search_files/image_search_8_0.png and b/doc/paddle/tutorial/cv_case/image_search/image_search_files/image_search_8_0.png differ diff --git a/doc/paddle/tutorial/cv_case/image_segmentation/image_segmentation.rst b/doc/paddle/tutorial/cv_case/image_segmentation/image_segmentation.rst index 8f6001e121b..7a14484fc0d 100644 --- a/doc/paddle/tutorial/cv_case/image_segmentation/image_segmentation.rst +++ b/doc/paddle/tutorial/cv_case/image_segmentation/image_segmentation.rst @@ -1,17 +1,21 @@ 基于U-Net卷积神经网络实现宠物图像分割 ===================================== -本示例教程当前是基于2.0-RC1版本Paddle做的案例实现,未来会随着2.0的系列版本发布进行升级。 +**作者:** `PaddlePaddle `__ -1.简要介绍 ----------- +**日期:** 2021.01 + +**摘要:** 本示例教程使用U-Net实现图像分割。 + +一、简要介绍 +------------ 在计算机视觉领域,图像分割指的是将数字图像细分为多个图像子区域的过程。图像分割的目的是简化或改变图像的表示形式,使得图像更容易理解和分析。图像分割通常用于定位图像中的物体和边界(线,曲线等)。更精确的,图像分割是对图像中的每个像素加标签的一个过程,这一过程使得具有相同标签的像素具有某种共同视觉特性。图像分割的领域非常多,无人车、地块检测、表计识别等等。 本示例简要介绍如何通过飞桨开源框架,实现图像分割。这里我们是采用了一个在图像分割领域比较熟知的U-Net网络结构,是一个基于FCN做改进后的一个深度学习网络,包含下采样(编码器,特征提取)和上采样(解码器,分辨率还原)两个阶段,因模型结构比较像U型而命名为U-Net。 -2.环境设置 ----------- +二、环境设置 +------------ 导入一些比较基础常用的模块,确认自己的飞桨版本。 @@ -34,12 +38,12 @@ .. parsed-literal:: - '2.0.0-rc1' + '2.0.0' -3.数据集 --------- +三、数据集 +---------- 3.1 数据集下载 ~~~~~~~~~~~~~~ @@ -66,27 +70,6 @@ Pet数据集,官网:https://www.robots.ox.ac.uk/~vgg/data/pets 。 !tar -xf images.tar.gz !tar -xf annotations.tar.gz - -.. parsed-literal:: - - % Total % Received % Xferd Average Speed Time Time Time Current - Dload Upload Total Spent Left Speed - 100 269 100 269 0 0 139 0 0:00:01 0:00:01 --:--:-- 139 - % Total % Received % Xferd Average Speed Time Time Time Current - Dload Upload Total Spent Left Speed - 100 274 100 274 0 0 142 0 0:00:01 0:00:01 --:--:-- 142 - tar: This does not look like a tar archive - - gzip: stdin: not in gzip format - tar: Child returned status 1 - tar: Error is not recoverable: exiting now - tar: This does not look like a tar archive - - gzip: stdin: not in gzip format - tar: Child returned status 1 - tar: Error is not recoverable: exiting now - - 3.2 数据集概览 ~~~~~~~~~~~~~~ @@ -328,8 +311,8 @@ DataLoader(多进程数据集加载)。 """ return len(self.train_images) -4.模型组网 ----------- +四、模型组网 +------------ U-Net是一个U型网络结构,可以看做两个大的阶段,图像先经过Encoder编码器进行下采样得到高级语义特征图,再经过Decoder解码器上采样将特征图恢复到原图片的分辨率。 @@ -589,90 +572,90 @@ Layer类,整个过程是把\ ``filter_size * filter_size * num_filters``\ 的C .. parsed-literal:: - ------------------------------------------------------------------------------ - Layer (type) Input Shape Output Shape Param # - ============================================================================== - Conv2D-19 [[1, 3, 160, 160]] [1, 32, 80, 80] 896 - BatchNorm2D-31 [[1, 32, 80, 80]] [1, 32, 80, 80] 128 - ReLU-31 [[1, 32, 80, 80]] [1, 32, 80, 80] 0 - ReLU-32 [[1, 32, 80, 80]] [1, 32, 80, 80] 0 - SeparableConv2D-13 [[1, 32, 80, 80]] [1, 64, 80, 80] 2,400 - BatchNorm2D-32 [[1, 64, 80, 80]] [1, 64, 80, 80] 256 - ReLU-33 [[1, 64, 80, 80]] [1, 64, 80, 80] 0 - SeparableConv2D-14 [[1, 64, 80, 80]] [1, 64, 80, 80] 4,736 - BatchNorm2D-33 [[1, 64, 80, 80]] [1, 64, 80, 80] 256 - MaxPool2D-7 [[1, 64, 80, 80]] [1, 64, 40, 40] 0 - Conv2D-20 [[1, 32, 80, 80]] [1, 64, 40, 40] 2,112 - Encoder-7 [[1, 32, 80, 80]] [1, 64, 40, 40] 0 - ReLU-34 [[1, 64, 40, 40]] [1, 64, 40, 40] 0 - SeparableConv2D-15 [[1, 64, 40, 40]] [1, 128, 40, 40] 8,896 - BatchNorm2D-34 [[1, 128, 40, 40]] [1, 128, 40, 40] 512 - ReLU-35 [[1, 128, 40, 40]] [1, 128, 40, 40] 0 - SeparableConv2D-16 [[1, 128, 40, 40]] [1, 128, 40, 40] 17,664 - BatchNorm2D-35 [[1, 128, 40, 40]] [1, 128, 40, 40] 512 - MaxPool2D-8 [[1, 128, 40, 40]] [1, 128, 20, 20] 0 - Conv2D-21 [[1, 64, 40, 40]] [1, 128, 20, 20] 8,320 - Encoder-8 [[1, 64, 40, 40]] [1, 128, 20, 20] 0 - ReLU-36 [[1, 128, 20, 20]] [1, 128, 20, 20] 0 - SeparableConv2D-17 [[1, 128, 20, 20]] [1, 256, 20, 20] 34,176 - BatchNorm2D-36 [[1, 256, 20, 20]] [1, 256, 20, 20] 1,024 - ReLU-37 [[1, 256, 20, 20]] [1, 256, 20, 20] 0 - SeparableConv2D-18 [[1, 256, 20, 20]] [1, 256, 20, 20] 68,096 - BatchNorm2D-37 [[1, 256, 20, 20]] [1, 256, 20, 20] 1,024 - MaxPool2D-9 [[1, 256, 20, 20]] [1, 256, 10, 10] 0 - Conv2D-22 [[1, 128, 20, 20]] [1, 256, 10, 10] 33,024 - Encoder-9 [[1, 128, 20, 20]] [1, 256, 10, 10] 0 - ReLU-38 [[1, 256, 10, 10]] [1, 256, 10, 10] 0 - Conv2DTranspose-17 [[1, 256, 10, 10]] [1, 256, 10, 10] 590,080 - BatchNorm2D-38 [[1, 256, 10, 10]] [1, 256, 10, 10] 1,024 - ReLU-39 [[1, 256, 10, 10]] [1, 256, 10, 10] 0 - Conv2DTranspose-18 [[1, 256, 10, 10]] [1, 256, 10, 10] 590,080 - BatchNorm2D-39 [[1, 256, 10, 10]] [1, 256, 10, 10] 1,024 - Upsample-17 [[1, 256, 10, 10]] [1, 256, 20, 20] 0 - Upsample-18 [[1, 256, 10, 10]] [1, 256, 20, 20] 0 - Conv2D-23 [[1, 256, 20, 20]] [1, 256, 20, 20] 65,792 - Decoder-9 [[1, 256, 10, 10]] [1, 256, 20, 20] 0 - ReLU-40 [[1, 256, 20, 20]] [1, 256, 20, 20] 0 - Conv2DTranspose-19 [[1, 256, 20, 20]] [1, 128, 20, 20] 295,040 - BatchNorm2D-40 [[1, 128, 20, 20]] [1, 128, 20, 20] 512 - ReLU-41 [[1, 128, 20, 20]] [1, 128, 20, 20] 0 - Conv2DTranspose-20 [[1, 128, 20, 20]] [1, 128, 20, 20] 147,584 - BatchNorm2D-41 [[1, 128, 20, 20]] [1, 128, 20, 20] 512 - Upsample-19 [[1, 128, 20, 20]] [1, 128, 40, 40] 0 - Upsample-20 [[1, 256, 20, 20]] [1, 256, 40, 40] 0 - Conv2D-24 [[1, 256, 40, 40]] [1, 128, 40, 40] 32,896 - Decoder-10 [[1, 256, 20, 20]] [1, 128, 40, 40] 0 - ReLU-42 [[1, 128, 40, 40]] [1, 128, 40, 40] 0 - Conv2DTranspose-21 [[1, 128, 40, 40]] [1, 64, 40, 40] 73,792 - BatchNorm2D-42 [[1, 64, 40, 40]] [1, 64, 40, 40] 256 - ReLU-43 [[1, 64, 40, 40]] [1, 64, 40, 40] 0 - Conv2DTranspose-22 [[1, 64, 40, 40]] [1, 64, 40, 40] 36,928 - BatchNorm2D-43 [[1, 64, 40, 40]] [1, 64, 40, 40] 256 - Upsample-21 [[1, 64, 40, 40]] [1, 64, 80, 80] 0 - Upsample-22 [[1, 128, 40, 40]] [1, 128, 80, 80] 0 - Conv2D-25 [[1, 128, 80, 80]] [1, 64, 80, 80] 8,256 - Decoder-11 [[1, 128, 40, 40]] [1, 64, 80, 80] 0 - ReLU-44 [[1, 64, 80, 80]] [1, 64, 80, 80] 0 - Conv2DTranspose-23 [[1, 64, 80, 80]] [1, 32, 80, 80] 18,464 - BatchNorm2D-44 [[1, 32, 80, 80]] [1, 32, 80, 80] 128 - ReLU-45 [[1, 32, 80, 80]] [1, 32, 80, 80] 0 - Conv2DTranspose-24 [[1, 32, 80, 80]] [1, 32, 80, 80] 9,248 - BatchNorm2D-45 [[1, 32, 80, 80]] [1, 32, 80, 80] 128 - Upsample-23 [[1, 32, 80, 80]] [1, 32, 160, 160] 0 - Upsample-24 [[1, 64, 80, 80]] [1, 64, 160, 160] 0 - Conv2D-26 [[1, 64, 160, 160]] [1, 32, 160, 160] 2,080 - Decoder-12 [[1, 64, 80, 80]] [1, 32, 160, 160] 0 - Conv2D-27 [[1, 32, 160, 160]] [1, 4, 160, 160] 1,156 - ============================================================================== + ----------------------------------------------------------------------------- + Layer (type) Input Shape Output Shape Param # + ============================================================================= + Conv2D-1 [[1, 3, 160, 160]] [1, 32, 80, 80] 896 + BatchNorm2D-1 [[1, 32, 80, 80]] [1, 32, 80, 80] 128 + ReLU-1 [[1, 32, 80, 80]] [1, 32, 80, 80] 0 + ReLU-2 [[1, 32, 80, 80]] [1, 32, 80, 80] 0 + SeparableConv2D-1 [[1, 32, 80, 80]] [1, 64, 80, 80] 2,400 + BatchNorm2D-2 [[1, 64, 80, 80]] [1, 64, 80, 80] 256 + ReLU-3 [[1, 64, 80, 80]] [1, 64, 80, 80] 0 + SeparableConv2D-2 [[1, 64, 80, 80]] [1, 64, 80, 80] 4,736 + BatchNorm2D-3 [[1, 64, 80, 80]] [1, 64, 80, 80] 256 + MaxPool2D-1 [[1, 64, 80, 80]] [1, 64, 40, 40] 0 + Conv2D-2 [[1, 32, 80, 80]] [1, 64, 40, 40] 2,112 + Encoder-1 [[1, 32, 80, 80]] [1, 64, 40, 40] 0 + ReLU-4 [[1, 64, 40, 40]] [1, 64, 40, 40] 0 + SeparableConv2D-3 [[1, 64, 40, 40]] [1, 128, 40, 40] 8,896 + BatchNorm2D-4 [[1, 128, 40, 40]] [1, 128, 40, 40] 512 + ReLU-5 [[1, 128, 40, 40]] [1, 128, 40, 40] 0 + SeparableConv2D-4 [[1, 128, 40, 40]] [1, 128, 40, 40] 17,664 + BatchNorm2D-5 [[1, 128, 40, 40]] [1, 128, 40, 40] 512 + MaxPool2D-2 [[1, 128, 40, 40]] [1, 128, 20, 20] 0 + Conv2D-3 [[1, 64, 40, 40]] [1, 128, 20, 20] 8,320 + Encoder-2 [[1, 64, 40, 40]] [1, 128, 20, 20] 0 + ReLU-6 [[1, 128, 20, 20]] [1, 128, 20, 20] 0 + SeparableConv2D-5 [[1, 128, 20, 20]] [1, 256, 20, 20] 34,176 + BatchNorm2D-6 [[1, 256, 20, 20]] [1, 256, 20, 20] 1,024 + ReLU-7 [[1, 256, 20, 20]] [1, 256, 20, 20] 0 + SeparableConv2D-6 [[1, 256, 20, 20]] [1, 256, 20, 20] 68,096 + BatchNorm2D-7 [[1, 256, 20, 20]] [1, 256, 20, 20] 1,024 + MaxPool2D-3 [[1, 256, 20, 20]] [1, 256, 10, 10] 0 + Conv2D-4 [[1, 128, 20, 20]] [1, 256, 10, 10] 33,024 + Encoder-3 [[1, 128, 20, 20]] [1, 256, 10, 10] 0 + ReLU-8 [[1, 256, 10, 10]] [1, 256, 10, 10] 0 + Conv2DTranspose-1 [[1, 256, 10, 10]] [1, 256, 10, 10] 590,080 + BatchNorm2D-8 [[1, 256, 10, 10]] [1, 256, 10, 10] 1,024 + ReLU-9 [[1, 256, 10, 10]] [1, 256, 10, 10] 0 + Conv2DTranspose-2 [[1, 256, 10, 10]] [1, 256, 10, 10] 590,080 + BatchNorm2D-9 [[1, 256, 10, 10]] [1, 256, 10, 10] 1,024 + Upsample-1 [[1, 256, 10, 10]] [1, 256, 20, 20] 0 + Upsample-2 [[1, 256, 10, 10]] [1, 256, 20, 20] 0 + Conv2D-5 [[1, 256, 20, 20]] [1, 256, 20, 20] 65,792 + Decoder-1 [[1, 256, 10, 10]] [1, 256, 20, 20] 0 + ReLU-10 [[1, 256, 20, 20]] [1, 256, 20, 20] 0 + Conv2DTranspose-3 [[1, 256, 20, 20]] [1, 128, 20, 20] 295,040 + BatchNorm2D-10 [[1, 128, 20, 20]] [1, 128, 20, 20] 512 + ReLU-11 [[1, 128, 20, 20]] [1, 128, 20, 20] 0 + Conv2DTranspose-4 [[1, 128, 20, 20]] [1, 128, 20, 20] 147,584 + BatchNorm2D-11 [[1, 128, 20, 20]] [1, 128, 20, 20] 512 + Upsample-3 [[1, 128, 20, 20]] [1, 128, 40, 40] 0 + Upsample-4 [[1, 256, 20, 20]] [1, 256, 40, 40] 0 + Conv2D-6 [[1, 256, 40, 40]] [1, 128, 40, 40] 32,896 + Decoder-2 [[1, 256, 20, 20]] [1, 128, 40, 40] 0 + ReLU-12 [[1, 128, 40, 40]] [1, 128, 40, 40] 0 + Conv2DTranspose-5 [[1, 128, 40, 40]] [1, 64, 40, 40] 73,792 + BatchNorm2D-12 [[1, 64, 40, 40]] [1, 64, 40, 40] 256 + ReLU-13 [[1, 64, 40, 40]] [1, 64, 40, 40] 0 + Conv2DTranspose-6 [[1, 64, 40, 40]] [1, 64, 40, 40] 36,928 + BatchNorm2D-13 [[1, 64, 40, 40]] [1, 64, 40, 40] 256 + Upsample-5 [[1, 64, 40, 40]] [1, 64, 80, 80] 0 + Upsample-6 [[1, 128, 40, 40]] [1, 128, 80, 80] 0 + Conv2D-7 [[1, 128, 80, 80]] [1, 64, 80, 80] 8,256 + Decoder-3 [[1, 128, 40, 40]] [1, 64, 80, 80] 0 + ReLU-14 [[1, 64, 80, 80]] [1, 64, 80, 80] 0 + Conv2DTranspose-7 [[1, 64, 80, 80]] [1, 32, 80, 80] 18,464 + BatchNorm2D-14 [[1, 32, 80, 80]] [1, 32, 80, 80] 128 + ReLU-15 [[1, 32, 80, 80]] [1, 32, 80, 80] 0 + Conv2DTranspose-8 [[1, 32, 80, 80]] [1, 32, 80, 80] 9,248 + BatchNorm2D-15 [[1, 32, 80, 80]] [1, 32, 80, 80] 128 + Upsample-7 [[1, 32, 80, 80]] [1, 32, 160, 160] 0 + Upsample-8 [[1, 64, 80, 80]] [1, 64, 160, 160] 0 + Conv2D-8 [[1, 64, 160, 160]] [1, 32, 160, 160] 2,080 + Decoder-4 [[1, 64, 80, 80]] [1, 32, 160, 160] 0 + Conv2D-9 [[1, 32, 160, 160]] [1, 4, 160, 160] 1,156 + ============================================================================= Total params: 2,059,268 Trainable params: 2,051,716 Non-trainable params: 7,552 - ------------------------------------------------------------------------------ + ----------------------------------------------------------------------------- Input size (MB): 0.29 Forward/backward pass size (MB): 117.77 Params size (MB): 7.86 Estimated Total Size (MB): 125.92 - ------------------------------------------------------------------------------ + ----------------------------------------------------------------------------- @@ -684,8 +667,8 @@ Layer类,整个过程是把\ ``filter_size * filter_size * num_filters``\ 的C -5.模型训练 ----------- +五、模型训练 +------------ 5.1 启动模型训练 ~~~~~~~~~~~~~~~~ @@ -715,99 +698,99 @@ Layer类,整个过程是把\ ``filter_size * filter_size * num_filters``\ 的C The loss value printed in the log is the current step, and the metric is the average value of previous step. Epoch 1/15 - step 197/197 [==============================] - loss: 0.6810 - 249ms/step + step 197/197 [==============================] - loss: 0.8845 - 247ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.6550 - 233ms/step + step 35/35 [==============================] - loss: 0.7308 - 228ms/step Eval samples: 1108 Epoch 2/15 - step 197/197 [==============================] - loss: 0.4590 - 250ms/step + step 197/197 [==============================] - loss: 0.4457 - 248ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.6143 - 230ms/step + step 35/35 [==============================] - loss: 0.6239 - 229ms/step Eval samples: 1108 Epoch 3/15 - step 197/197 [==============================] - loss: 0.4791 - 249ms/step + step 197/197 [==============================] - loss: 0.4924 - 245ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.5361 - 232ms/step + step 35/35 [==============================] - loss: 0.5226 - 228ms/step Eval samples: 1108 Epoch 4/15 - step 197/197 [==============================] - loss: 0.5653 - 248ms/step + step 197/197 [==============================] - loss: 0.5653 - 247ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.5085 - 231ms/step + step 35/35 [==============================] - loss: 0.5351 - 229ms/step Eval samples: 1108 Epoch 5/15 - step 197/197 [==============================] - loss: 0.5185 - 248ms/step + step 197/197 [==============================] - loss: 0.5002 - 244ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.4655 - 231ms/step + step 35/35 [==============================] - loss: 0.4558 - 228ms/step Eval samples: 1108 Epoch 6/15 - step 197/197 [==============================] - loss: 0.3978 - 249ms/step + step 197/197 [==============================] - loss: 0.3979 - 245ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.3986 - 231ms/step + step 35/35 [==============================] - loss: 0.3849 - 230ms/step Eval samples: 1108 Epoch 7/15 - step 197/197 [==============================] - loss: 0.2650 - 250ms/step + step 197/197 [==============================] - loss: 0.2664 - 247ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.3950 - 233ms/step + step 35/35 [==============================] - loss: 0.3900 - 228ms/step Eval samples: 1108 Epoch 8/15 - step 197/197 [==============================] - loss: 0.2900 - 249ms/step + step 197/197 [==============================] - loss: 0.2803 - 246ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.3803 - 231ms/step + step 35/35 [==============================] - loss: 0.3872 - 228ms/step Eval samples: 1108 Epoch 9/15 - step 197/197 [==============================] - loss: 0.5085 - 249ms/step + step 197/197 [==============================] - loss: 0.4651 - 246ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.4730 - 231ms/step + step 35/35 [==============================] - loss: 0.4824 - 228ms/step Eval samples: 1108 Epoch 10/15 - step 197/197 [==============================] - loss: 0.3497 - 249ms/step + step 197/197 [==============================] - loss: 0.3553 - 246ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.4735 - 232ms/step + step 35/35 [==============================] - loss: 0.4708 - 229ms/step Eval samples: 1108 Epoch 11/15 - step 197/197 [==============================] - loss: 0.3136 - 250ms/step + step 197/197 [==============================] - loss: 0.3170 - 251ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.3964 - 233ms/step + step 35/35 [==============================] - loss: 0.3867 - 230ms/step Eval samples: 1108 Epoch 12/15 - step 197/197 [==============================] - loss: 0.2949 - 251ms/step + step 197/197 [==============================] - loss: 0.3067 - 246ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.4410 - 231ms/step + step 35/35 [==============================] - loss: 0.4145 - 229ms/step Eval samples: 1108 Epoch 13/15 - step 197/197 [==============================] - loss: 0.3576 - 252ms/step + step 197/197 [==============================] - loss: 0.3447 - 249ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.4428 - 232ms/step + step 35/35 [==============================] - loss: 0.4658 - 230ms/step Eval samples: 1108 Epoch 14/15 - step 197/197 [==============================] - loss: 0.3878 - 250ms/step + step 197/197 [==============================] - loss: 0.3662 - 249ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.4347 - 230ms/step + step 35/35 [==============================] - loss: 0.3955 - 237ms/step Eval samples: 1108 Epoch 15/15 - step 197/197 [==============================] - loss: 0.3134 - 250ms/step + step 197/197 [==============================] - loss: 0.3253 - 247ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 35/35 [==============================] - loss: 0.4742 - 233ms/step + step 35/35 [==============================] - loss: 0.4501 - 229ms/step Eval samples: 1108 -6.模型预测 ----------- +六、模型预测 +------------ 6.1 预测数据集准备和预测 ~~~~~~~~~~~~~~~~~~~~~~~~ @@ -825,7 +808,7 @@ Layer类,整个过程是把\ ``filter_size * filter_size * num_filters``\ 的C .. parsed-literal:: Predict begin... - step 1108/1108 [==============================] - 14ms/step + step 1108/1108 [==============================] - 14ms/step Predict samples: 1108 @@ -880,13 +863,6 @@ Layer类,整个过程是把\ ``filter_size * filter_size * num_filters``\ 的C plt.show() -.. parsed-literal:: - - /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/numpy/lib/type_check.py:546: DeprecationWarning: np.asscalar(a) is deprecated since NumPy v1.16, use a.item() instead - 'a.item() instead', DeprecationWarning, stacklevel=1) - - - -.. image:: image_segmentation_files/image_segmentation_31_1.png +.. image:: image_segmentation_files/image_segmentation_31_0.png diff --git a/doc/paddle/tutorial/cv_case/image_segmentation/image_segmentation_files/image_segmentation_31_0.png b/doc/paddle/tutorial/cv_case/image_segmentation/image_segmentation_files/image_segmentation_31_0.png new file mode 100644 index 00000000000..8af4338275c Binary files /dev/null and b/doc/paddle/tutorial/cv_case/image_segmentation/image_segmentation_files/image_segmentation_31_0.png differ diff --git a/doc/paddle/tutorial/cv_case/image_segmentation/image_segmentation_files/image_segmentation_31_1.png b/doc/paddle/tutorial/cv_case/image_segmentation/image_segmentation_files/image_segmentation_31_1.png deleted file mode 100644 index 420135c4d9c..00000000000 Binary files a/doc/paddle/tutorial/cv_case/image_segmentation/image_segmentation_files/image_segmentation_31_1.png and /dev/null differ diff --git a/doc/paddle/tutorial/cv_case/landmark_detection/1_facial_landmark_files/1_facial_landmark_02.png b/doc/paddle/tutorial/cv_case/landmark_detection/1_facial_landmark_files/1_facial_landmark_02.png deleted file mode 100644 index 6af035807bb..00000000000 Binary files a/doc/paddle/tutorial/cv_case/landmark_detection/1_facial_landmark_files/1_facial_landmark_02.png and /dev/null differ diff --git a/doc/paddle/tutorial/cv_case/landmark_detection/1_facial_landmark_files/1_facial_landmark_03.png b/doc/paddle/tutorial/cv_case/landmark_detection/1_facial_landmark_files/1_facial_landmark_03.png deleted file mode 100644 index b740366aed0..00000000000 Binary files a/doc/paddle/tutorial/cv_case/landmark_detection/1_facial_landmark_files/1_facial_landmark_03.png and /dev/null differ diff --git a/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection.rst b/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection.rst index ed207e2b41d..4682ea0abd3 100644 --- a/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection.rst +++ b/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection.rst @@ -1,10 +1,14 @@ -关键点检测方法及应用1: 人脸关键点检测 -===================================== +人脸关键点检测 +============== -本示例教程当前是基于2.0-rc1版本Paddle做的案例实现,未来会随着2.0的系列版本发布进行升级。 +**作者:** `ssz95 `__ -1.简要介绍 ----------- +**日期:** 2021.01 + +**摘要:** 本示例教程将会演示如何使用飞桨实现人脸关键点检测。 + +一、简介 +-------- 在图像处理中,关键点本质上是一种特征。它是对一个固定区域或者空间物理关系的抽象描述,描述的是一定邻域范围内的组合或上下文关系。它不仅仅是一个点信息,或代表一个位置,更代表着上下文与周围邻域的组合关系。关键点检测的目标就是通过计算机从图像中找出这些点的坐标,作为计算机视觉领域的一个基础任务,关键点的检测对于高级别任务,例如识别和分类具有至关重要的意义。 @@ -12,10 +16,13 @@ 其中人脸关键点检测是关键点检测方法的一个成功实践,本示例简要介绍如何通过飞桨开源框架,实现人脸关键点检测的功能。这个案例用到的是第一种关键点检测方法——坐标回归。我们将使用到新版的paddle2.0的API,集成式的训练接口,能够很方便对模型进行训练和预测。 -2.环境设置 ----------- +二、环境设置 +------------ + +本教程基于Paddle 2.0 +编写,如果您的环境不是本版本,请先参考官网\ `安装 `__ +Paddle 2.0 。 -导入必要的模块,确认自己的飞桨版本。 如果是cpu环境,请安装cpu版本的paddle2.0环境,在 ``paddle.set_device()`` 输入对应运行设备。 @@ -32,17 +39,17 @@ from paddle.vision.models import resnet18 from paddle.nn import functional as F print(paddle.__version__) - device = paddle.set_device('cpu') - #device = paddle.set_device('gpu') + # evice = paddle.set_device('cpu') + device = paddle.set_device('gpu') .. parsed-literal:: - 2.0.0-rc1 + 2.0.0 -3.数据集 --------- +三、数据集 +---------- 3.1 数据集下载 ~~~~~~~~~~~~~~ @@ -58,16 +65,14 @@ training.csv: 包含了用于训练的人脸关键点坐标和图像。 test.csv .. code:: ipython3 - !unzip -o data/data60/test.zip -d data/data60/ - !unzip -o data/data60/training.zip -d data/data60 + !unzip -o ./test.zip -d data/data60 + !unzip -o ./training.zip -d data/data60 .. parsed-literal:: - Archive: data/data60/test.zip - inflating: data/data60/test.csv - Archive: data/data60/training.zip - inflating: data/data60/training.csv + unzip: cannot find or open ./test.zip, ./test.zip.zip or ./test.zip.ZIP. + unzip: cannot find or open ./training.zip, ./training.zip.zip or ./training.zip.ZIP. 3.2 数据集定义 @@ -80,9 +85,9 @@ DataLoader(多进程数据集加载)。 .. code:: ipython3 - Train_Dir = 'data/data60//training.csv' - Test_Dir = 'data/data60//test.csv' - lookid_dir = 'data/data60/IdLookupTable.csv' + Train_Dir = './data/data60/training.csv' + Test_Dir = './data/data60/test.csv' + lookid_dir = './data/data60/IdLookupTable.csv' class ImgTransforms(object): """ 图像预处理工具,用于将图像进行升维(96, 96) => (96, 96, 3), @@ -187,13 +192,14 @@ DataLoader(多进程数据集加载)。 -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_8_0.png?raw=true +.. image:: landmark_detection_files/landmark_detection_9_0.png -4.定义模型 ----------- +四、定义模型 +------------ -这里使用到paddle.vision.models中定义的resnet18网络模型。在ImageNet分类任务中,图像分成1000类,在模型后接一个全连接层,将输出的1000维向量映射成30维,对应15个关键点的横纵坐标。 +这里使用到 ``paddle.vision.models`` 中定义的 ``resnet18`` +网络模型。在ImageNet分类任务中,图像分成1000类,在模型后接一个全连接层,将输出的1000维向量映射成30维,对应15个关键点的横纵坐标。 .. code:: ipython3 @@ -231,71 +237,71 @@ DataLoader(多进程数据集加载)。 ------------------------------------------------------------------------------- Layer (type) Input Shape Output Shape Param # =============================================================================== - Conv2D-21 [[1, 3, 96, 96]] [1, 64, 48, 48] 9,408 - BatchNorm2D-21 [[1, 64, 48, 48]] [1, 64, 48, 48] 256 - ReLU-11 [[1, 64, 48, 48]] [1, 64, 48, 48] 0 - MaxPool2D-2 [[1, 64, 48, 48]] [1, 64, 24, 24] 0 - Conv2D-22 [[1, 64, 24, 24]] [1, 64, 24, 24] 36,864 - BatchNorm2D-22 [[1, 64, 24, 24]] [1, 64, 24, 24] 256 - ReLU-12 [[1, 64, 24, 24]] [1, 64, 24, 24] 0 - Conv2D-23 [[1, 64, 24, 24]] [1, 64, 24, 24] 36,864 - BatchNorm2D-23 [[1, 64, 24, 24]] [1, 64, 24, 24] 256 - BasicBlock-9 [[1, 64, 24, 24]] [1, 64, 24, 24] 0 - Conv2D-24 [[1, 64, 24, 24]] [1, 64, 24, 24] 36,864 - BatchNorm2D-24 [[1, 64, 24, 24]] [1, 64, 24, 24] 256 - ReLU-13 [[1, 64, 24, 24]] [1, 64, 24, 24] 0 - Conv2D-25 [[1, 64, 24, 24]] [1, 64, 24, 24] 36,864 - BatchNorm2D-25 [[1, 64, 24, 24]] [1, 64, 24, 24] 256 - BasicBlock-10 [[1, 64, 24, 24]] [1, 64, 24, 24] 0 - Conv2D-27 [[1, 64, 24, 24]] [1, 128, 12, 12] 73,728 - BatchNorm2D-27 [[1, 128, 12, 12]] [1, 128, 12, 12] 512 - ReLU-14 [[1, 128, 12, 12]] [1, 128, 12, 12] 0 - Conv2D-28 [[1, 128, 12, 12]] [1, 128, 12, 12] 147,456 - BatchNorm2D-28 [[1, 128, 12, 12]] [1, 128, 12, 12] 512 - Conv2D-26 [[1, 64, 24, 24]] [1, 128, 12, 12] 8,192 - BatchNorm2D-26 [[1, 128, 12, 12]] [1, 128, 12, 12] 512 - BasicBlock-11 [[1, 64, 24, 24]] [1, 128, 12, 12] 0 - Conv2D-29 [[1, 128, 12, 12]] [1, 128, 12, 12] 147,456 - BatchNorm2D-29 [[1, 128, 12, 12]] [1, 128, 12, 12] 512 - ReLU-15 [[1, 128, 12, 12]] [1, 128, 12, 12] 0 - Conv2D-30 [[1, 128, 12, 12]] [1, 128, 12, 12] 147,456 - BatchNorm2D-30 [[1, 128, 12, 12]] [1, 128, 12, 12] 512 - BasicBlock-12 [[1, 128, 12, 12]] [1, 128, 12, 12] 0 - Conv2D-32 [[1, 128, 12, 12]] [1, 256, 6, 6] 294,912 - BatchNorm2D-32 [[1, 256, 6, 6]] [1, 256, 6, 6] 1,024 - ReLU-16 [[1, 256, 6, 6]] [1, 256, 6, 6] 0 - Conv2D-33 [[1, 256, 6, 6]] [1, 256, 6, 6] 589,824 - BatchNorm2D-33 [[1, 256, 6, 6]] [1, 256, 6, 6] 1,024 - Conv2D-31 [[1, 128, 12, 12]] [1, 256, 6, 6] 32,768 - BatchNorm2D-31 [[1, 256, 6, 6]] [1, 256, 6, 6] 1,024 - BasicBlock-13 [[1, 128, 12, 12]] [1, 256, 6, 6] 0 - Conv2D-34 [[1, 256, 6, 6]] [1, 256, 6, 6] 589,824 - BatchNorm2D-34 [[1, 256, 6, 6]] [1, 256, 6, 6] 1,024 - ReLU-17 [[1, 256, 6, 6]] [1, 256, 6, 6] 0 - Conv2D-35 [[1, 256, 6, 6]] [1, 256, 6, 6] 589,824 - BatchNorm2D-35 [[1, 256, 6, 6]] [1, 256, 6, 6] 1,024 - BasicBlock-14 [[1, 256, 6, 6]] [1, 256, 6, 6] 0 - Conv2D-37 [[1, 256, 6, 6]] [1, 512, 3, 3] 1,179,648 - BatchNorm2D-37 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,048 - ReLU-18 [[1, 512, 3, 3]] [1, 512, 3, 3] 0 - Conv2D-38 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,359,296 - BatchNorm2D-38 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,048 - Conv2D-36 [[1, 256, 6, 6]] [1, 512, 3, 3] 131,072 - BatchNorm2D-36 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,048 - BasicBlock-15 [[1, 256, 6, 6]] [1, 512, 3, 3] 0 - Conv2D-39 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,359,296 - BatchNorm2D-39 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,048 - ReLU-19 [[1, 512, 3, 3]] [1, 512, 3, 3] 0 - Conv2D-40 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,359,296 - BatchNorm2D-40 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,048 - BasicBlock-16 [[1, 512, 3, 3]] [1, 512, 3, 3] 0 - AdaptiveAvgPool2D-2 [[1, 512, 3, 3]] [1, 512, 1, 1] 0 - Linear-4 [[1, 512]] [1, 1000] 513,000 - ResNet-2 [[1, 3, 96, 96]] [1, 1000] 0 - Linear-5 [[1, 1000]] [1, 512] 512,512 - ReLU-20 [[1, 512]] [1, 512] 0 - Dropout-2 [[1, 512]] [1, 512] 0 - Linear-6 [[1, 512]] [1, 30] 15,390 + Conv2D-1 [[1, 3, 96, 96]] [1, 64, 48, 48] 9,408 + BatchNorm2D-1 [[1, 64, 48, 48]] [1, 64, 48, 48] 256 + ReLU-1 [[1, 64, 48, 48]] [1, 64, 48, 48] 0 + MaxPool2D-1 [[1, 64, 48, 48]] [1, 64, 24, 24] 0 + Conv2D-2 [[1, 64, 24, 24]] [1, 64, 24, 24] 36,864 + BatchNorm2D-2 [[1, 64, 24, 24]] [1, 64, 24, 24] 256 + ReLU-2 [[1, 64, 24, 24]] [1, 64, 24, 24] 0 + Conv2D-3 [[1, 64, 24, 24]] [1, 64, 24, 24] 36,864 + BatchNorm2D-3 [[1, 64, 24, 24]] [1, 64, 24, 24] 256 + BasicBlock-1 [[1, 64, 24, 24]] [1, 64, 24, 24] 0 + Conv2D-4 [[1, 64, 24, 24]] [1, 64, 24, 24] 36,864 + BatchNorm2D-4 [[1, 64, 24, 24]] [1, 64, 24, 24] 256 + ReLU-3 [[1, 64, 24, 24]] [1, 64, 24, 24] 0 + Conv2D-5 [[1, 64, 24, 24]] [1, 64, 24, 24] 36,864 + BatchNorm2D-5 [[1, 64, 24, 24]] [1, 64, 24, 24] 256 + BasicBlock-2 [[1, 64, 24, 24]] [1, 64, 24, 24] 0 + Conv2D-7 [[1, 64, 24, 24]] [1, 128, 12, 12] 73,728 + BatchNorm2D-7 [[1, 128, 12, 12]] [1, 128, 12, 12] 512 + ReLU-4 [[1, 128, 12, 12]] [1, 128, 12, 12] 0 + Conv2D-8 [[1, 128, 12, 12]] [1, 128, 12, 12] 147,456 + BatchNorm2D-8 [[1, 128, 12, 12]] [1, 128, 12, 12] 512 + Conv2D-6 [[1, 64, 24, 24]] [1, 128, 12, 12] 8,192 + BatchNorm2D-6 [[1, 128, 12, 12]] [1, 128, 12, 12] 512 + BasicBlock-3 [[1, 64, 24, 24]] [1, 128, 12, 12] 0 + Conv2D-9 [[1, 128, 12, 12]] [1, 128, 12, 12] 147,456 + BatchNorm2D-9 [[1, 128, 12, 12]] [1, 128, 12, 12] 512 + ReLU-5 [[1, 128, 12, 12]] [1, 128, 12, 12] 0 + Conv2D-10 [[1, 128, 12, 12]] [1, 128, 12, 12] 147,456 + BatchNorm2D-10 [[1, 128, 12, 12]] [1, 128, 12, 12] 512 + BasicBlock-4 [[1, 128, 12, 12]] [1, 128, 12, 12] 0 + Conv2D-12 [[1, 128, 12, 12]] [1, 256, 6, 6] 294,912 + BatchNorm2D-12 [[1, 256, 6, 6]] [1, 256, 6, 6] 1,024 + ReLU-6 [[1, 256, 6, 6]] [1, 256, 6, 6] 0 + Conv2D-13 [[1, 256, 6, 6]] [1, 256, 6, 6] 589,824 + BatchNorm2D-13 [[1, 256, 6, 6]] [1, 256, 6, 6] 1,024 + Conv2D-11 [[1, 128, 12, 12]] [1, 256, 6, 6] 32,768 + BatchNorm2D-11 [[1, 256, 6, 6]] [1, 256, 6, 6] 1,024 + BasicBlock-5 [[1, 128, 12, 12]] [1, 256, 6, 6] 0 + Conv2D-14 [[1, 256, 6, 6]] [1, 256, 6, 6] 589,824 + BatchNorm2D-14 [[1, 256, 6, 6]] [1, 256, 6, 6] 1,024 + ReLU-7 [[1, 256, 6, 6]] [1, 256, 6, 6] 0 + Conv2D-15 [[1, 256, 6, 6]] [1, 256, 6, 6] 589,824 + BatchNorm2D-15 [[1, 256, 6, 6]] [1, 256, 6, 6] 1,024 + BasicBlock-6 [[1, 256, 6, 6]] [1, 256, 6, 6] 0 + Conv2D-17 [[1, 256, 6, 6]] [1, 512, 3, 3] 1,179,648 + BatchNorm2D-17 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,048 + ReLU-8 [[1, 512, 3, 3]] [1, 512, 3, 3] 0 + Conv2D-18 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,359,296 + BatchNorm2D-18 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,048 + Conv2D-16 [[1, 256, 6, 6]] [1, 512, 3, 3] 131,072 + BatchNorm2D-16 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,048 + BasicBlock-7 [[1, 256, 6, 6]] [1, 512, 3, 3] 0 + Conv2D-19 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,359,296 + BatchNorm2D-19 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,048 + ReLU-9 [[1, 512, 3, 3]] [1, 512, 3, 3] 0 + Conv2D-20 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,359,296 + BatchNorm2D-20 [[1, 512, 3, 3]] [1, 512, 3, 3] 2,048 + BasicBlock-8 [[1, 512, 3, 3]] [1, 512, 3, 3] 0 + AdaptiveAvgPool2D-1 [[1, 512, 3, 3]] [1, 512, 1, 1] 0 + Linear-1 [[1, 512]] [1, 1000] 513,000 + ResNet-1 [[1, 3, 96, 96]] [1, 1000] 0 + Linear-2 [[1, 1000]] [1, 512] 512,512 + ReLU-10 [[1, 512]] [1, 512] 0 + Dropout-1 [[1, 512]] [1, 512] 0 + Linear-3 [[1, 512]] [1, 30] 15,390 =============================================================================== Total params: 12,227,014 Trainable params: 12,207,814 @@ -317,15 +323,12 @@ DataLoader(多进程数据集加载)。 -5. 训练模型 ------------ +五、训练模型 +------------ 在这个任务是对坐标进行回归,我们使用均方误差(Mean Square error )损失函数\ ``paddle.nn.MSELoss()``\ 来做计算,飞桨2.0中,在nn下将损失函数封装成可调用类。我们这里使用paddle.Model相关的API直接进行训练,只需要定义好数据集、网络模型和损失函数即可。 -5.1 启动模型训练 ----------------- - 使用模型代码进行Model实例生成,使用prepare接口定义优化器、损失函数和评价指标等信息,用于后续训练使用。在所有初步配置完成后,调用fit接口开启训练执行过程,调用fit时只需要将前面定义好的训练数据集、测试数据集、训练轮次(Epoch)和批次大小(batch_size)配置好即可。 .. code:: ipython3 @@ -341,34 +344,369 @@ DataLoader(多进程数据集加载)。 The loss value printed in the log is the current step, and the metric is the average value of previous step. Epoch 1/60 - step 7/7 - loss: 0.0938 - 11s/step + step 7/7 - loss: 0.1134 - 611ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 2/2 - loss: 20.6454 - 4s/step + step 2/2 - loss: 6.2252 - 502ms/step Eval samples: 428 Epoch 2/60 - step 7/7 - loss: 0.0362 - 11s/step + step 7/7 - loss: 0.0331 - 591ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.4000 - 506ms/step + Eval samples: 428 + Epoch 3/60 + step 7/7 - loss: 0.0241 - 592ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0677 - 509ms/step + Eval samples: 428 + Epoch 4/60 + step 7/7 - loss: 0.0187 - 590ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0171 - 490ms/step + Eval samples: 428 + Epoch 5/60 + step 7/7 - loss: 0.0153 - 598ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0059 - 508ms/step + Eval samples: 428 + Epoch 6/60 + step 7/7 - loss: 0.0134 - 593ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0031 - 495ms/step + Eval samples: 428 + Epoch 7/60 + step 7/7 - loss: 0.0107 - 594ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0023 - 510ms/step + Eval samples: 428 + Epoch 8/60 + step 7/7 - loss: 0.0100 - 590ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0014 - 503ms/step + Eval samples: 428 + Epoch 9/60 + step 7/7 - loss: 0.0102 - 595ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0017 - 535ms/step + Eval samples: 428 + Epoch 10/60 + step 7/7 - loss: 0.0088 - 599ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0029 - 501ms/step + Eval samples: 428 + Epoch 11/60 + step 7/7 - loss: 0.0090 - 600ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0011 - 505ms/step + Eval samples: 428 + Epoch 12/60 + step 7/7 - loss: 0.0076 - 597ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0017 - 503ms/step + Eval samples: 428 + Epoch 13/60 + step 7/7 - loss: 0.0071 - 603ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0028 - 504ms/step + Eval samples: 428 + Epoch 14/60 + step 7/7 - loss: 0.0077 - 595ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0044 - 501ms/step + Eval samples: 428 + Epoch 15/60 + step 7/7 - loss: 0.0076 - 600ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0013 - 502ms/step + Eval samples: 428 + Epoch 16/60 + step 7/7 - loss: 0.0072 - 599ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 9.3609e-04 - 498ms/step + Eval samples: 428 + Epoch 17/60 + step 7/7 - loss: 0.0076 - 584ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0036 - 482ms/step + Eval samples: 428 + Epoch 18/60 + step 7/7 - loss: 0.0077 - 566ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0011 - 485ms/step + Eval samples: 428 + Epoch 19/60 + step 7/7 - loss: 0.0057 - 586ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0019 - 486ms/step + Eval samples: 428 + Epoch 20/60 + step 7/7 - loss: 0.0061 - 570ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0012 - 485ms/step + Eval samples: 428 + Epoch 21/60 + step 7/7 - loss: 0.0055 - 591ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0018 - 499ms/step + Eval samples: 428 + Epoch 22/60 + step 7/7 - loss: 0.0067 - 588ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 8.7753e-04 - 500ms/step + Eval samples: 428 + Epoch 23/60 + step 7/7 - loss: 0.0056 - 588ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 9.4301e-04 - 511ms/step + Eval samples: 428 + Epoch 24/60 + step 7/7 - loss: 0.0054 - 598ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0010 - 505ms/step + Eval samples: 428 + Epoch 25/60 + step 7/7 - loss: 0.0056 - 608ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 8.5451e-04 - 498ms/step + Eval samples: 428 + Epoch 26/60 + step 7/7 - loss: 0.0286 - 600ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0165 - 505ms/step + Eval samples: 428 + Epoch 27/60 + step 7/7 - loss: 0.0082 - 610ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0065 - 500ms/step + Eval samples: 428 + Epoch 28/60 + step 7/7 - loss: 0.0085 - 610ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0021 - 506ms/step + Eval samples: 428 + Epoch 29/60 + step 7/7 - loss: 0.0048 - 597ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0027 - 496ms/step + Eval samples: 428 + Epoch 30/60 + step 7/7 - loss: 0.0051 - 604ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0010 - 524ms/step + Eval samples: 428 + Epoch 31/60 + step 7/7 - loss: 0.0049 - 600ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 7.4699e-04 - 506ms/step + Eval samples: 428 + Epoch 32/60 + step 7/7 - loss: 0.0051 - 598ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 7.6433e-04 - 505ms/step + Eval samples: 428 + Epoch 33/60 + step 7/7 - loss: 0.0049 - 588ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0013 - 515ms/step + Eval samples: 428 + Epoch 34/60 + step 7/7 - loss: 0.0054 - 598ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 7.3304e-04 - 502ms/step + Eval samples: 428 + Epoch 35/60 + step 7/7 - loss: 0.0044 - 607ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 8.8994e-04 - 494ms/step + Eval samples: 428 + Epoch 36/60 + step 7/7 - loss: 0.0043 - 629ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0011 - 499ms/step + Eval samples: 428 + Epoch 37/60 + step 7/7 - loss: 0.0045 - 601ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 7.7268e-04 - 535ms/step + Eval samples: 428 + Epoch 38/60 + step 7/7 - loss: 0.0045 - 594ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 6.8808e-04 - 506ms/step + Eval samples: 428 + Epoch 39/60 + step 7/7 - loss: 0.0040 - 590ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 7.0140e-04 - 522ms/step + Eval samples: 428 + Epoch 40/60 + step 7/7 - loss: 0.0061 - 593ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0029 - 496ms/step + Eval samples: 428 + Epoch 41/60 + step 7/7 - loss: 0.0046 - 601ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 6.9420e-04 - 573ms/step + Eval samples: 428 + Epoch 42/60 + step 7/7 - loss: 0.0077 - 590ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0029 - 522ms/step + Eval samples: 428 + Epoch 43/60 + step 7/7 - loss: 0.0038 - 591ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 7.0032e-04 - 523ms/step + Eval samples: 428 + Epoch 44/60 + step 7/7 - loss: 0.0042 - 598ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0025 - 519ms/step + Eval samples: 428 + Epoch 45/60 + step 7/7 - loss: 0.0054 - 616ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 7.9877e-04 - 515ms/step + Eval samples: 428 + Epoch 46/60 + step 7/7 - loss: 0.0047 - 607ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0021 - 504ms/step + Eval samples: 428 + Epoch 47/60 + step 7/7 - loss: 0.0047 - 609ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 6.5195e-04 - 559ms/step + Eval samples: 428 + Epoch 48/60 + step 7/7 - loss: 0.0046 - 626ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0013 - 523ms/step + Eval samples: 428 + Epoch 49/60 + step 7/7 - loss: 0.0039 - 597ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 6.3211e-04 - 521ms/step + Eval samples: 428 + Epoch 50/60 + step 7/7 - loss: 0.0035 - 600ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 6.7967e-04 - 514ms/step + Eval samples: 428 + Epoch 51/60 + step 7/7 - loss: 0.0033 - 605ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 6.4899e-04 - 521ms/step + Eval samples: 428 + Epoch 52/60 + step 7/7 - loss: 0.0046 - 606ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0017 - 520ms/step + Eval samples: 428 + Epoch 53/60 + step 7/7 - loss: 0.0036 - 633ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 6.4985e-04 - 524ms/step + Eval samples: 428 + Epoch 54/60 + step 7/7 - loss: 0.0038 - 601ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0017 - 531ms/step + Eval samples: 428 + Epoch 55/60 + step 7/7 - loss: 0.0057 - 598ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0032 - 509ms/step + Eval samples: 428 + Epoch 56/60 + step 7/7 - loss: 0.0042 - 597ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 2/2 - loss: 1.0127 - 4s/step + step 2/2 - loss: 7.3378e-04 - 514ms/step + Eval samples: 428 + Epoch 57/60 + step 7/7 - loss: 0.0065 - 609ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 8.6400e-04 - 525ms/step + Eval samples: 428 + Epoch 58/60 + step 7/7 - loss: 0.0056 - 621ms/step + Eval begin... + The loss value printed in the log is the current batch, and the metric is the average value of previous step. + step 2/2 - loss: 0.0013 - 528ms/step Eval samples: 428 - ... Epoch 59/60 - step 7/7 - loss: 0.0037 - 12s/step + step 7/7 - loss: 0.0040 - 608ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 2/2 - loss: 6.9502e-04 - 4s/step + step 2/2 - loss: 7.8955e-04 - 507ms/step Eval samples: 428 Epoch 60/60 - step 7/7 - loss: 0.0036 - 12s/step + step 7/7 - loss: 0.0028 - 603ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 2/2 - loss: 7.2478e-04 - 4s/step + step 2/2 - loss: 0.0014 - 516ms/step Eval samples: 428 -6. 模型预测 ------------ +六、模型预测 +------------ 为了更好的观察预测结果,我们分别可视化验证集结果与标注点的对比,和在未标注的测试集的预测结果。 ### 6.1 验证集结果可视化 红色的关键点为网络预测的结果, @@ -382,7 +720,7 @@ DataLoader(多进程数据集加载)。 .. parsed-literal:: Predict begin... - step 428/428 [==============================] - 29ms/step + step 428/428 [==============================] - 15ms/step Predict samples: 428 @@ -411,8 +749,14 @@ DataLoader(多进程数据集加载)。 plt.show() +.. parsed-literal:: -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_17_1.png?raw=true + /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/ipykernel_launcher.py:5: DeprecationWarning: elementwise comparison failed; this will raise an error in the future. + """ + + + +.. image:: landmark_detection_files/landmark_detection_18_1.png 6.2 测试集结果可视化 @@ -426,9 +770,7 @@ DataLoader(多进程数据集加载)。 .. parsed-literal:: Predict begin... - step 1783/1783 [==============================] - 28ms/step - Predict samples: 1783 - + step 1142/1783 [==================>...........] - ETA: 9s - 15ms/st .. code:: ipython3 @@ -447,6 +789,5 @@ DataLoader(多进程数据集加载)。 -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_20_0.png?raw=true - +.. image:: landmark_detection_files/landmark_detection_21_0.png diff --git a/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_17_1.png b/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_17_1.png deleted file mode 100644 index 604b03cee81..00000000000 Binary files a/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_17_1.png and /dev/null differ diff --git a/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_18_1.png b/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_18_1.png new file mode 100644 index 00000000000..4811579ffa5 Binary files /dev/null and b/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_18_1.png differ diff --git a/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_20_0.png b/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_21_0.png similarity index 100% rename from doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_20_0.png rename to doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_21_0.png diff --git a/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_8_0.png b/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_8_0.png deleted file mode 100644 index a13f2c0a8de..00000000000 Binary files a/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_8_0.png and /dev/null differ diff --git a/doc/paddle/tutorial/cv_case/landmark_detection/1_facial_landmark_files/1_facial_landmark_01.png b/doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_9_0.png similarity index 100% rename from doc/paddle/tutorial/cv_case/landmark_detection/1_facial_landmark_files/1_facial_landmark_01.png rename to doc/paddle/tutorial/cv_case/landmark_detection/landmark_detection_files/landmark_detection_9_0.png diff --git a/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel.rst b/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel.rst index ab8039dbfa7..326ff791f69 100644 --- a/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel.rst +++ b/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel.rst @@ -1,7 +1,13 @@ 通过Sub-Pixel实现图像超分辨率 ============================= -1.简要介绍 +**作者:** `Ralph LU `__ + +**日期:** 2021.01 + +**摘要:** 本示例教程使用U-Net实现图像分割。 + +一、简要介绍 ------------ 在计算机视觉中,图像超分辨率(Image Super @@ -14,8 +20,8 @@ Efficient Sub-Pixel Convolutional Neural Network》 论文链接:https://arxiv.org/abs/1609.05158 -2.环境设置 ---------------- +二、环境设置 +------------ 导入一些比较基础常用的模块,确认自己的飞桨版本。 @@ -40,11 +46,11 @@ Efficient Sub-Pixel Convolutional Neural Network》 .. parsed-literal:: - 2.0.0-rc1 + 2.0.0 -3.数据集 -------------- +三、数据集 +---------- 3.1 数据集下载 ~~~~~~~~~~~~~~ @@ -57,9 +63,51 @@ Efficient Sub-Pixel Convolutional Neural Network》 !tar -zxvf BSR_bsds500.tgz +.. parsed-literal:: + + --2021-01-29 00:11:52-- http://www.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/BSR/BSR_bsds500.tgz + Resolving www.eecs.berkeley.edu (www.eecs.berkeley.edu)... 23.185.0.1, 2620:12a:8001::1, 2620:12a:8000::1 + Connecting to www.eecs.berkeley.edu (www.eecs.berkeley.edu)|23.185.0.1|:80... connected. + HTTP request sent, awaiting response... 301 Moved Permanently + Location: https://www.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/BSR/BSR_bsds500.tgz [following] + --2021-01-29 00:11:53-- https://www.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/BSR/BSR_bsds500.tgz + Connecting to www.eecs.berkeley.edu (www.eecs.berkeley.edu)|23.185.0.1|:443... connected. + HTTP request sent, awaiting response... 301 Moved Permanently + Location: https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/BSR/BSR_bsds500.tgz [following] + --2021-01-29 00:11:53-- https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/BSR/BSR_bsds500.tgz + Resolving www2.eecs.berkeley.edu (www2.eecs.berkeley.edu)... 128.32.244.190 + Connecting to www2.eecs.berkeley.edu (www2.eecs.berkeley.edu)|128.32.244.190|:443... connected. + ^C + tar (child): BSR_bsds500.tgz: Cannot open: No such file or directory + tar (child): Error is not recoverable: exiting now + tar: Child returned status 2 + tar: Error is not recoverable: exiting now + + 3.2 数据集概览 ~~~~~~~~~~~~~~ +:: + + BSR + ├── BSDS500 + │   └── data + │   ├── groundTruth + │   │   ├── test + │   │   ├── train + │   │   └── val + │   └── images + │   ├── test + │   ├── train + │   └── val + ├── bench + │   ├── benchmarks + │   ├── data + │   │   ├── ... + │   │   └── ... + │   └── source + └── documentation + 可以看到我们需要的图片文件在BSR/BSDS500/images文件夹下,train、test各200张,val为100张。 3.3 数据集类定义 @@ -224,7 +272,7 @@ DataLoader(多进程数据集加载)。 -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_files/super_resolution_sub_pixel_10_1.png?raw=true +.. image:: super_resolution_sub_pixel_files/super_resolution_sub_pixel_10_1.png @@ -234,7 +282,7 @@ DataLoader(多进程数据集加载)。 -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_files/super_resolution_sub_pixel_10_3.png?raw=true +.. image:: super_resolution_sub_pixel_files/super_resolution_sub_pixel_10_3.png @@ -243,8 +291,8 @@ DataLoader(多进程数据集加载)。 (300, 300) -4.模型组网 ---------------- +四、模型组网 +------------ Sub_Pixel_CNN是一个全卷积网络,网络结构比较简单,这里采用Layer类继承方式组网。 @@ -291,10 +339,10 @@ Sub_Pixel_CNN是一个全卷积网络,网络结构比较简单,这里采用L --------------------------------------------------------------------------- Layer (type) Input Shape Output Shape Param # =========================================================================== - Conv2D-5 [[1, 1, 100, 100]] [1, 64, 100, 100] 1,664 - Conv2D-6 [[1, 64, 100, 100]] [1, 64, 100, 100] 36,928 - Conv2D-7 [[1, 64, 100, 100]] [1, 32, 100, 100] 18,464 - Conv2D-8 [[1, 32, 100, 100]] [1, 9, 100, 100] 2,601 + Conv2D-1 [[1, 1, 100, 100]] [1, 64, 100, 100] 1,664 + Conv2D-2 [[1, 64, 100, 100]] [1, 64, 100, 100] 36,928 + Conv2D-3 [[1, 64, 100, 100]] [1, 32, 100, 100] 18,464 + Conv2D-4 [[1, 32, 100, 100]] [1, 9, 100, 100] 2,601 =========================================================================== Total params: 59,657 Trainable params: 59,657 @@ -316,8 +364,8 @@ Sub_Pixel_CNN是一个全卷积网络,网络结构比较简单,这里采用L -5.模型训练 ----------- +五、模型训练 +------------ 5.1 启动模型训练 ~~~~~~~~~~~~~~~~ @@ -347,22 +395,49 @@ Sub_Pixel_CNN是一个全卷积网络,网络结构比较简单,这里采用L The loss value printed in the log is the current step, and the metric is the average value of previous step. Epoch 1/20 - step 13/13 [==============================] - loss: 0.0423 - 2s/step + step 13/13 [==============================] - loss: 0.2466 - 2s/step Epoch 2/20 - step 13/13 [==============================] - loss: 0.0146 - 1s/step + step 13/13 [==============================] - loss: 0.0802 - 2s/step Epoch 3/20 - step 13/13 [==============================] - loss: 0.0069 - 1s/step - ... + step 13/13 [==============================] - loss: 0.0474 - 2s/step + Epoch 4/20 + step 13/13 [==============================] - loss: 0.0340 - 2s/step + Epoch 5/20 + step 13/13 [==============================] - loss: 0.0267 - 2s/step + Epoch 6/20 + step 13/13 [==============================] - loss: 0.0179 - 2s/step + Epoch 7/20 + step 13/13 [==============================] - loss: 0.0215 - 2s/step + Epoch 8/20 + step 13/13 [==============================] - loss: 0.0162 - 2s/step + Epoch 9/20 + step 13/13 [==============================] - loss: 0.0137 - 2s/step + Epoch 10/20 + step 13/13 [==============================] - loss: 0.0099 - 2s/step + Epoch 11/20 + step 13/13 [==============================] - loss: 0.0074 - 2s/step + Epoch 12/20 + step 13/13 [==============================] - loss: 0.0117 - 2s/step + Epoch 13/20 + step 13/13 [==============================] - loss: 0.0065 - 2s/step + Epoch 14/20 + step 13/13 [==============================] - loss: 0.0086 - 2s/step + Epoch 15/20 + step 13/13 [==============================] - loss: 0.0085 - 2s/step + Epoch 16/20 + step 13/13 [==============================] - loss: 0.0067 - 2s/step + Epoch 17/20 + step 13/13 [==============================] - loss: 0.0068 - 2s/step Epoch 18/20 - step 13/13 [==============================] - loss: 0.0019 - 2s/step + step 13/13 [==============================] - loss: 0.0044 - 2s/step Epoch 19/20 - step 13/13 [==============================] - loss: 0.0033 - 2s/step + step 13/13 [==============================] - loss: 0.0069 - 2s/step Epoch 20/20 - step 13/13 [==============================] - loss: 0.0043 - 1s/step + step 13/13 [==============================] - loss: 0.0087 - 2s/step -6.模型预测 ---------------- +六、模型预测 +------------ 6.1 预测 ~~~~~~~~ @@ -377,7 +452,7 @@ Sub_Pixel_CNN是一个全卷积网络,网络结构比较简单,这里采用L .. parsed-literal:: Predict begin... - step 100/100 [==============================] - 31ms/step + step 100/100 [==============================] - 38ms/step Predict samples: 100 @@ -503,15 +578,15 @@ Sub_Pixel_CNN是一个全卷积网络,网络结构比较简单,这里采用L -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_files/super_resolution_sub_pixel_26_1.png?raw=true +.. image:: super_resolution_sub_pixel_files/super_resolution_sub_pixel_26_1.png -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_files/super_resolution_sub_pixel_26_2.png?raw=true +.. image:: super_resolution_sub_pixel_files/super_resolution_sub_pixel_26_2.png -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_files/super_resolution_sub_pixel_26_3.png?raw=true +.. image:: super_resolution_sub_pixel_files/super_resolution_sub_pixel_26_3.png .. parsed-literal:: @@ -520,7 +595,7 @@ Sub_Pixel_CNN是一个全卷积网络,网络结构比较简单,这里采用L 7.模型保存 ------------------ +========== 将模型保存到 checkpoint/model_final ,并保留训练参数 diff --git a/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_01.png b/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_01.png deleted file mode 100644 index bb456b0604e..00000000000 Binary files a/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_01.png and /dev/null differ diff --git a/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_02.png b/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_02.png deleted file mode 100644 index 00d2757d99f..00000000000 Binary files a/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_02.png and /dev/null differ diff --git a/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_03.png b/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_03.png deleted file mode 100644 index 94a4a022326..00000000000 Binary files a/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_03.png and /dev/null differ diff --git a/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_04.png b/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_04.png deleted file mode 100644 index 0e7540a9cff..00000000000 Binary files a/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_04.png and /dev/null differ diff --git a/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_05.png b/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_05.png deleted file mode 100644 index 0aff8f84654..00000000000 Binary files a/doc/paddle/tutorial/cv_case/super_resolution_sub_pixel/super_resolution_sub_pixel_paddle2.0_files/super_resolution_sub_pixel_paddle2.0_05.png and /dev/null differ diff --git a/doc/paddle/tutorial/index_cn.rst b/doc/paddle/tutorial/index_cn.rst index aa9f29ca779..a2026206591 100644 --- a/doc/paddle/tutorial/index_cn.rst +++ b/doc/paddle/tutorial/index_cn.rst @@ -11,14 +11,13 @@ - `快速上手 <./quick_start/index_cn.html>`_ :快速了解Paddle 2的特性与功能。 - `计算机视觉 <./cv_case/index_cn.html>`_ :介绍使用 Paddle 解决计算机视觉领域的案例 - - `生成对抗网络 <./gan/index_cn.html>`_ :介绍使用 Paddle 在生成对抗网络中的应用 - `自然语言处理 <./nlp_case/index_cn.html>`_ :介绍使用 Paddle 解决自然语言处理领域的案例 - `时序数据 <./time_series/index_cn.html>`_ :介绍使用 Paddle 解决时序数据中的案例 + .. toctree:: :hidden: quick_start/index_cn.rst cv_case/index_cn.rst - gan/index_cn.rst nlp_case/index_cn.rst time_series/index_cn.rst diff --git a/doc/paddle/tutorial/nlp_case/addition_rnn/addition_rnn.rst b/doc/paddle/tutorial/nlp_case/addition_rnn/addition_rnn.rst index 68fe91e24db..81d4fe5615c 100644 --- a/doc/paddle/tutorial/nlp_case/addition_rnn/addition_rnn.rst +++ b/doc/paddle/tutorial/nlp_case/addition_rnn/addition_rnn.rst @@ -1,30 +1,29 @@ 使用序列到序列模型完成数字加法 ============================== -- 作者:\ `jm12138 `__ -- 日期:2020.10.21 +**作者:** `jm12138 `__ -简要介绍 --------- +**日期:** 2021.01 -- 本示例教程介绍如何使用飞桨完成一个数字加法任务 -- 我们将会使用飞桨提供的LSTM的API,组建一个序列到序列模型 -- 并在随机生成的数据集上完成数字加法任务的模型训练与预测 +**摘要:** 本示例教程介绍如何使用飞桨完成一个数字加法任务,我们将会使用飞桨提供的LSTM的API,组建一个序列到序列模型,并在随机生成的数据集上完成数字加法任务的模型训练与预测。 -环境设置 --------- +一、环境配置 +------------ -- 本示例教程基于飞桨2.0-rc版本 +本教程基于Paddle 2.0 +编写,如果您的环境不是本版本,请先参考官网\ `安装 `__ +Paddle 2.0 。 .. code:: ipython3 # 导入项目运行所需的包 - import random - import numpy as np import paddle import paddle.nn as nn + import random + import numpy as np + from visualdl import LogWriter # 打印Paddle版本 @@ -33,14 +32,14 @@ .. parsed-literal:: - paddle version: 2.0.0-rc1 + paddle version: 2.0.0 -构建数据集 ----------- +二、构建数据集 +-------------- - 随机生成数据,并使用生成的数据构造数据集 -- 通过继承paddle.io.Dataset来完成数据集的构造 +- 通过继承 ``paddle.io.Dataset`` 来完成数据集的构造 .. code:: ipython3 @@ -162,19 +161,19 @@ finish -模型组网 --------- +三、模型组网 +------------ -- 通过继承paddle.nn.Layer类来搭建模型 +- 通过继承 ``paddle.nn.Layer`` 类来搭建模型 -- 本次介绍的模型是一个简单的基于LSTM的Seq2Seq模型 +- 本次介绍的模型是一个简单的基于 ``LSTM`` 的 ``Seq2Seq`` 模型 - 一共有如下四个主要的网络层: - 1. 嵌入层(Embedding):将输入的文本序列转为嵌入向量 - 2. 编码层(LSTM):将嵌入向量进行编码 - 3. 解码层(LSTM):将编码向量进行解码 - 4. 全连接层(Linear):对解码完成的向量进行线性映射 + 1. 嵌入层(``Embedding``):将输入的文本序列转为嵌入向量 + 2. 编码层(``LSTM``):将嵌入向量进行编码 + 3. 解码层(``LSTM``):将编码向量进行解码 + 4. 全连接层(``Linear``):对解码完成的向量进行线性映射 - 损失函数为交叉熵损失函数 @@ -256,12 +255,12 @@ # 返回输出 return out -模型训练与评估 --------------- +四、模型训练与评估 +------------------ -- 使用Adam作为优化器进行模型训练 +- 使用 ``Adam`` 作为优化器进行模型训练 - 以模型准确率作为评价指标 -- 使用VisualDL对训练数据进行可视化 +- 使用 ``VisualDL`` 对训练数据进行可视化 - 训练过程中会同时进行模型评估和最佳模型的保存 .. code:: ipython3 @@ -275,9 +274,9 @@ num_layers=1 # 训练参数设置 - epoch_num = 200 + epoch_num = 50 learning_rate = 0.001 - log_iter = 20 + log_iter = 2000 eval_iter = 500 # 定义一些所需变量 @@ -359,719 +358,19 @@ .. parsed-literal:: - train epoch:0 step: 0 loss:2.486548 acc:0.072917 - eval epoch:0 step: 0 loss:2.486549 acc:0.072917 - saving the best_model... - train epoch:0 step: 20 loss:2.260141 acc:0.333333 - train epoch:0 step: 40 loss:2.139997 acc:0.333333 - train epoch:0 step: 60 loss:1.820772 acc:0.406250 - train epoch:0 step: 80 loss:1.765519 acc:0.406250 - train epoch:0 step: 100 loss:1.852962 acc:0.427083 - train epoch:0 step: 120 loss:1.875763 acc:0.395833 - train epoch:0 step: 140 loss:1.733827 acc:0.406250 - train epoch:1 step: 160 loss:1.641314 acc:0.385417 - train epoch:1 step: 180 loss:1.601028 acc:0.395833 - train epoch:1 step: 200 loss:1.590695 acc:0.395833 - train epoch:1 step: 220 loss:1.590466 acc:0.458333 - train epoch:1 step: 240 loss:1.461456 acc:0.489583 - train epoch:1 step: 260 loss:1.590603 acc:0.447917 - train epoch:1 step: 280 loss:1.437094 acc:0.458333 - train epoch:1 step: 300 loss:1.439966 acc:0.489583 - train epoch:2 step: 320 loss:1.422302 acc:0.489583 - train epoch:2 step: 340 loss:1.355924 acc:0.437500 - train epoch:2 step: 360 loss:1.304865 acc:0.520833 - train epoch:2 step: 380 loss:1.230000 acc:0.593750 - train epoch:2 step: 400 loss:1.370301 acc:0.531250 - train epoch:2 step: 420 loss:1.302810 acc:0.520833 - train epoch:2 step: 440 loss:1.258698 acc:0.572917 - train epoch:2 step: 460 loss:1.224450 acc:0.572917 - train epoch:3 step: 480 loss:1.301404 acc:0.531250 - train epoch:3 step: 500 loss:1.178292 acc:0.593750 - eval epoch:3 step: 500 loss:1.178292 acc:0.593750 - saving the best_model... - train epoch:3 step: 520 loss:1.138962 acc:0.666667 - train epoch:3 step: 540 loss:1.150443 acc:0.635417 - train epoch:3 step: 560 loss:1.240931 acc:0.593750 - train epoch:3 step: 580 loss:1.139939 acc:0.572917 - train epoch:3 step: 600 loss:1.162589 acc:0.520833 - train epoch:3 step: 620 loss:1.092722 acc:0.614583 - train epoch:4 step: 640 loss:1.183408 acc:0.572917 - train epoch:4 step: 660 loss:1.048823 acc:0.625000 - train epoch:4 step: 680 loss:1.121530 acc:0.614583 - train epoch:4 step: 700 loss:1.054723 acc:0.635417 - train epoch:4 step: 720 loss:1.028928 acc:0.614583 - train epoch:4 step: 740 loss:1.123822 acc:0.583333 - train epoch:4 step: 760 loss:1.042357 acc:0.593750 - train epoch:5 step: 780 loss:1.139612 acc:0.572917 - train epoch:5 step: 800 loss:0.970891 acc:0.635417 - train epoch:5 step: 820 loss:1.115770 acc:0.614583 - train epoch:5 step: 840 loss:0.989957 acc:0.625000 - train epoch:5 step: 860 loss:0.987128 acc:0.656250 - train epoch:5 step: 880 loss:0.974426 acc:0.614583 - train epoch:5 step: 900 loss:0.975975 acc:0.687500 - train epoch:5 step: 920 loss:1.016428 acc:0.656250 - train epoch:6 step: 940 loss:1.013526 acc:0.697917 - train epoch:6 step: 960 loss:0.998930 acc:0.645833 - train epoch:6 step: 980 loss:1.054841 acc:0.625000 - train epoch:6 step: 1000 loss:1.013767 acc:0.635417 - eval epoch:6 step: 1000 loss:1.013767 acc:0.635417 - saving the best_model... - train epoch:6 step: 1020 loss:1.071271 acc:0.531250 - train epoch:6 step: 1040 loss:0.980852 acc:0.635417 - train epoch:6 step: 1060 loss:1.026074 acc:0.625000 - train epoch:6 step: 1080 loss:0.976788 acc:0.656250 - train epoch:7 step: 1100 loss:1.018781 acc:0.625000 - train epoch:7 step: 1120 loss:0.960916 acc:0.697917 - train epoch:7 step: 1140 loss:0.966610 acc:0.666667 - train epoch:7 step: 1160 loss:1.040557 acc:0.604167 - train epoch:7 step: 1180 loss:0.917395 acc:0.687500 - train epoch:7 step: 1200 loss:0.926229 acc:0.656250 - train epoch:7 step: 1220 loss:0.934969 acc:0.697917 - train epoch:7 step: 1240 loss:1.016266 acc:0.604167 - train epoch:8 step: 1260 loss:0.969778 acc:0.656250 - train epoch:8 step: 1280 loss:1.002266 acc:0.645833 - train epoch:8 step: 1300 loss:0.892168 acc:0.708333 - train epoch:8 step: 1320 loss:0.934409 acc:0.656250 - train epoch:8 step: 1340 loss:0.930469 acc:0.677083 - train epoch:8 step: 1360 loss:0.874903 acc:0.729167 - train epoch:8 step: 1380 loss:0.991352 acc:0.635417 - train epoch:8 step: 1400 loss:0.964139 acc:0.666667 - train epoch:9 step: 1420 loss:0.928553 acc:0.697917 - train epoch:9 step: 1440 loss:0.986520 acc:0.656250 - train epoch:9 step: 1460 loss:1.041585 acc:0.604167 - train epoch:9 step: 1480 loss:0.880398 acc:0.666667 - train epoch:9 step: 1500 loss:0.930438 acc:0.625000 - eval epoch:9 step: 1500 loss:0.930438 acc:0.625000 - train epoch:9 step: 1520 loss:0.912419 acc:0.666667 - train epoch:9 step: 1540 loss:0.859487 acc:0.687500 - train epoch:10 step: 1560 loss:0.878251 acc:0.666667 - train epoch:10 step: 1580 loss:0.888359 acc:0.677083 - train epoch:10 step: 1600 loss:0.949538 acc:0.645833 - train epoch:10 step: 1620 loss:0.956788 acc:0.635417 - train epoch:10 step: 1640 loss:0.906302 acc:0.635417 - train epoch:10 step: 1660 loss:0.840698 acc:0.677083 - train epoch:10 step: 1680 loss:0.865750 acc:0.645833 - train epoch:10 step: 1700 loss:0.870429 acc:0.666667 - train epoch:11 step: 1720 loss:0.806834 acc:0.718750 - train epoch:11 step: 1740 loss:0.896025 acc:0.645833 - train epoch:11 step: 1760 loss:0.806666 acc:0.697917 - train epoch:11 step: 1780 loss:0.851698 acc:0.697917 - train epoch:11 step: 1800 loss:0.825811 acc:0.656250 - train epoch:11 step: 1820 loss:0.767079 acc:0.739583 - train epoch:11 step: 1840 loss:0.885001 acc:0.645833 - train epoch:11 step: 1860 loss:0.768653 acc:0.729167 - train epoch:12 step: 1880 loss:0.781827 acc:0.770833 - train epoch:12 step: 1900 loss:0.932543 acc:0.656250 - train epoch:12 step: 1920 loss:0.842592 acc:0.697917 - train epoch:12 step: 1940 loss:0.782290 acc:0.729167 - train epoch:12 step: 1960 loss:0.781843 acc:0.718750 - train epoch:12 step: 1980 loss:0.866786 acc:0.708333 - train epoch:12 step: 2000 loss:0.880332 acc:0.687500 - eval epoch:12 step: 2000 loss:0.880332 acc:0.687500 + train epoch:0 step: 0 loss:2.468403 acc:0.177083 + eval epoch:0 step: 0 loss:2.468403 acc:0.177083 saving the best_model... - train epoch:12 step: 2020 loss:0.823978 acc:0.697917 - train epoch:13 step: 2040 loss:0.901520 acc:0.697917 - train epoch:13 step: 2060 loss:0.765493 acc:0.750000 - train epoch:13 step: 2080 loss:0.812039 acc:0.697917 - train epoch:13 step: 2100 loss:0.792369 acc:0.739583 - train epoch:13 step: 2120 loss:0.717338 acc:0.729167 - train epoch:13 step: 2140 loss:0.764331 acc:0.729167 - train epoch:13 step: 2160 loss:0.771884 acc:0.739583 - train epoch:13 step: 2180 loss:0.758794 acc:0.739583 - train epoch:14 step: 2200 loss:0.742126 acc:0.708333 - train epoch:14 step: 2220 loss:0.676514 acc:0.791667 - train epoch:14 step: 2240 loss:0.709569 acc:0.718750 - train epoch:14 step: 2260 loss:0.831361 acc:0.666667 - train epoch:14 step: 2280 loss:0.717796 acc:0.739583 - train epoch:14 step: 2300 loss:0.692108 acc:0.760417 - train epoch:14 step: 2320 loss:0.721314 acc:0.697917 - train epoch:15 step: 2340 loss:0.650314 acc:0.812500 - train epoch:15 step: 2360 loss:0.717120 acc:0.708333 - train epoch:15 step: 2380 loss:0.691813 acc:0.718750 - train epoch:15 step: 2400 loss:0.671663 acc:0.750000 - train epoch:15 step: 2420 loss:0.648233 acc:0.781250 - train epoch:15 step: 2440 loss:0.610206 acc:0.802083 - train epoch:15 step: 2460 loss:0.646852 acc:0.760417 - train epoch:15 step: 2480 loss:0.694268 acc:0.770833 - train epoch:16 step: 2500 loss:0.632738 acc:0.791667 - eval epoch:16 step: 2500 loss:0.632738 acc:0.791667 + eval epoch:3 step: 500 loss:1.204414 acc:0.552083 saving the best_model... - train epoch:16 step: 2520 loss:0.608154 acc:0.760417 - train epoch:16 step: 2540 loss:0.580825 acc:0.812500 - train epoch:16 step: 2560 loss:0.641632 acc:0.760417 - train epoch:16 step: 2580 loss:0.557802 acc:0.864583 - train epoch:16 step: 2600 loss:0.614217 acc:0.770833 - train epoch:16 step: 2620 loss:0.735146 acc:0.666667 - train epoch:16 step: 2640 loss:0.543176 acc:0.833333 - train epoch:17 step: 2660 loss:0.556179 acc:0.843750 - train epoch:17 step: 2680 loss:0.511898 acc:0.843750 - train epoch:17 step: 2700 loss:0.619927 acc:0.781250 - train epoch:17 step: 2720 loss:0.497720 acc:0.875000 - train epoch:17 step: 2740 loss:0.585230 acc:0.739583 - train epoch:17 step: 2760 loss:0.480201 acc:0.854167 - train epoch:17 step: 2780 loss:0.422440 acc:0.864583 - train epoch:17 step: 2800 loss:0.486946 acc:0.854167 - train epoch:18 step: 2820 loss:0.416083 acc:0.885417 - train epoch:18 step: 2840 loss:0.428803 acc:0.864583 - train epoch:18 step: 2860 loss:0.433852 acc:0.885417 - train epoch:18 step: 2880 loss:0.395985 acc:0.895833 - train epoch:18 step: 2900 loss:0.383488 acc:0.895833 - train epoch:18 step: 2920 loss:0.377950 acc:0.937500 - train epoch:18 step: 2940 loss:0.381318 acc:0.895833 - train epoch:18 step: 2960 loss:0.319607 acc:0.927083 - train epoch:19 step: 2980 loss:0.325204 acc:0.916667 - train epoch:19 step: 3000 loss:0.368015 acc:0.864583 - eval epoch:19 step: 3000 loss:0.368015 acc:0.864583 + eval epoch:6 step: 1000 loss:0.900309 acc:0.687500 saving the best_model... - train epoch:19 step: 3020 loss:0.359933 acc:0.864583 - train epoch:19 step: 3040 loss:0.285664 acc:0.947917 - train epoch:19 step: 3060 loss:0.297231 acc:0.895833 - train epoch:19 step: 3080 loss:0.314498 acc:0.927083 - train epoch:19 step: 3100 loss:0.313615 acc:0.895833 - train epoch:20 step: 3120 loss:0.327905 acc:0.895833 - train epoch:20 step: 3140 loss:0.316967 acc:0.906250 - train epoch:20 step: 3160 loss:0.262745 acc:0.958333 - train epoch:20 step: 3180 loss:0.176449 acc:0.968750 - train epoch:20 step: 3200 loss:0.248395 acc:0.937500 - train epoch:20 step: 3220 loss:0.263848 acc:0.958333 - train epoch:20 step: 3240 loss:0.249777 acc:0.958333 - train epoch:20 step: 3260 loss:0.250117 acc:0.927083 - train epoch:21 step: 3280 loss:0.201102 acc:0.968750 - train epoch:21 step: 3300 loss:0.225758 acc:0.947917 - train epoch:21 step: 3320 loss:0.201160 acc:0.979167 - train epoch:21 step: 3340 loss:0.169917 acc:0.989583 - train epoch:21 step: 3360 loss:0.219832 acc:0.958333 - train epoch:21 step: 3380 loss:0.213279 acc:0.958333 - train epoch:21 step: 3400 loss:0.202735 acc:0.989583 - train epoch:21 step: 3420 loss:0.203242 acc:0.958333 - train epoch:22 step: 3440 loss:0.171061 acc:0.989583 - train epoch:22 step: 3460 loss:0.166415 acc:0.979167 - train epoch:22 step: 3480 loss:0.170711 acc:0.989583 - train epoch:22 step: 3500 loss:0.152972 acc:0.968750 - eval epoch:22 step: 3500 loss:0.152972 acc:0.968750 + eval epoch:9 step: 1500 loss:0.882398 acc:0.729167 saving the best_model... - train epoch:22 step: 3520 loss:0.103544 acc:0.989583 - train epoch:22 step: 3540 loss:0.130283 acc:0.989583 - train epoch:22 step: 3560 loss:0.186975 acc:0.937500 - train epoch:22 step: 3580 loss:0.168501 acc:0.968750 - train epoch:23 step: 3600 loss:0.160285 acc:0.968750 - train epoch:23 step: 3620 loss:0.140679 acc:0.979167 - train epoch:23 step: 3640 loss:0.129261 acc:0.979167 - train epoch:23 step: 3660 loss:0.100736 acc:0.989583 - train epoch:23 step: 3680 loss:0.126349 acc:0.989583 - train epoch:23 step: 3700 loss:0.126446 acc:1.000000 - train epoch:23 step: 3720 loss:0.154227 acc:0.979167 - train epoch:23 step: 3740 loss:0.117935 acc:1.000000 - train epoch:24 step: 3760 loss:0.123040 acc:1.000000 - train epoch:24 step: 3780 loss:0.085795 acc:1.000000 - train epoch:24 step: 3800 loss:0.099137 acc:0.989583 - train epoch:24 step: 3820 loss:0.099387 acc:0.989583 - train epoch:24 step: 3840 loss:0.077849 acc:1.000000 - train epoch:24 step: 3860 loss:0.099428 acc:0.989583 - train epoch:24 step: 3880 loss:0.094824 acc:0.979167 - train epoch:25 step: 3900 loss:0.074612 acc:1.000000 - train epoch:25 step: 3920 loss:0.064493 acc:0.989583 - train epoch:25 step: 3940 loss:0.099728 acc:0.979167 - train epoch:25 step: 3960 loss:0.108604 acc:0.979167 - train epoch:25 step: 3980 loss:0.135747 acc:0.968750 - train epoch:25 step: 4000 loss:0.102092 acc:0.989583 - eval epoch:25 step: 4000 loss:0.102092 acc:0.989583 - saving the best_model... - train epoch:25 step: 4020 loss:0.083873 acc:0.979167 - train epoch:25 step: 4040 loss:0.087221 acc:0.989583 - train epoch:26 step: 4060 loss:0.128661 acc:0.979167 - train epoch:26 step: 4080 loss:0.134048 acc:0.958333 - train epoch:26 step: 4100 loss:0.106933 acc:0.989583 - train epoch:26 step: 4120 loss:0.089440 acc:0.979167 - train epoch:26 step: 4140 loss:0.108521 acc:0.958333 - train epoch:26 step: 4160 loss:0.194250 acc:0.958333 - train epoch:26 step: 4180 loss:0.054691 acc:1.000000 - train epoch:26 step: 4200 loss:0.107635 acc:0.979167 - train epoch:27 step: 4220 loss:0.067887 acc:0.989583 - train epoch:27 step: 4240 loss:0.050490 acc:1.000000 - train epoch:27 step: 4260 loss:0.060682 acc:1.000000 - train epoch:27 step: 4280 loss:0.085388 acc:0.989583 - train epoch:27 step: 4300 loss:0.067292 acc:0.989583 - train epoch:27 step: 4320 loss:0.030463 acc:1.000000 - train epoch:27 step: 4340 loss:0.050816 acc:1.000000 - train epoch:27 step: 4360 loss:0.066348 acc:0.979167 - train epoch:28 step: 4380 loss:0.080434 acc:0.979167 - train epoch:28 step: 4400 loss:0.022713 acc:1.000000 - train epoch:28 step: 4420 loss:0.031241 acc:1.000000 - train epoch:28 step: 4440 loss:0.040947 acc:1.000000 - train epoch:28 step: 4460 loss:0.043429 acc:1.000000 - train epoch:28 step: 4480 loss:0.033652 acc:1.000000 - train epoch:28 step: 4500 loss:0.038551 acc:1.000000 - eval epoch:28 step: 4500 loss:0.038551 acc:1.000000 - saving the best_model... - train epoch:28 step: 4520 loss:0.046203 acc:1.000000 - train epoch:29 step: 4540 loss:0.030782 acc:1.000000 - train epoch:29 step: 4560 loss:0.046843 acc:0.989583 - train epoch:29 step: 4580 loss:0.037742 acc:1.000000 - train epoch:29 step: 4600 loss:0.041122 acc:1.000000 - train epoch:29 step: 4620 loss:0.038534 acc:1.000000 - train epoch:29 step: 4640 loss:0.027164 acc:1.000000 - train epoch:29 step: 4660 loss:0.062632 acc:0.979167 - train epoch:30 step: 4680 loss:0.049593 acc:0.989583 - train epoch:30 step: 4700 loss:0.044264 acc:1.000000 - train epoch:30 step: 4720 loss:0.024513 acc:1.000000 - train epoch:30 step: 4740 loss:0.023750 acc:1.000000 - train epoch:30 step: 4760 loss:0.028852 acc:1.000000 - train epoch:30 step: 4780 loss:0.031783 acc:1.000000 - train epoch:30 step: 4800 loss:0.038466 acc:0.989583 - train epoch:30 step: 4820 loss:0.019291 acc:1.000000 - train epoch:31 step: 4840 loss:0.028960 acc:1.000000 - train epoch:31 step: 4860 loss:0.022252 acc:1.000000 - train epoch:31 step: 4880 loss:0.034499 acc:0.989583 - train epoch:31 step: 4900 loss:0.107220 acc:0.958333 - train epoch:31 step: 4920 loss:0.158680 acc:0.947917 - train epoch:31 step: 4940 loss:0.448066 acc:0.854167 - train epoch:31 step: 4960 loss:0.123449 acc:0.968750 - train epoch:31 step: 4980 loss:0.166457 acc:0.947917 - train epoch:32 step: 5000 loss:0.146060 acc:0.979167 - eval epoch:32 step: 5000 loss:0.146060 acc:0.979167 - train epoch:32 step: 5020 loss:0.096237 acc:0.968750 - train epoch:32 step: 5040 loss:0.084249 acc:0.968750 - train epoch:32 step: 5060 loss:0.065500 acc:0.989583 - train epoch:32 step: 5080 loss:0.046099 acc:1.000000 - train epoch:32 step: 5100 loss:0.028598 acc:1.000000 - train epoch:32 step: 5120 loss:0.026211 acc:0.989583 - train epoch:32 step: 5140 loss:0.026206 acc:1.000000 - train epoch:33 step: 5160 loss:0.030863 acc:1.000000 - train epoch:33 step: 5180 loss:0.036857 acc:0.989583 - train epoch:33 step: 5200 loss:0.024915 acc:1.000000 - train epoch:33 step: 5220 loss:0.024145 acc:1.000000 - train epoch:33 step: 5240 loss:0.028263 acc:0.989583 - train epoch:33 step: 5260 loss:0.019190 acc:1.000000 - train epoch:33 step: 5280 loss:0.018305 acc:1.000000 - train epoch:33 step: 5300 loss:0.038324 acc:1.000000 - train epoch:34 step: 5320 loss:0.021196 acc:1.000000 - train epoch:34 step: 5340 loss:0.019400 acc:1.000000 - train epoch:34 step: 5360 loss:0.022801 acc:1.000000 - train epoch:34 step: 5380 loss:0.030529 acc:1.000000 - train epoch:34 step: 5400 loss:0.035136 acc:0.979167 - train epoch:34 step: 5420 loss:0.020913 acc:1.000000 - train epoch:34 step: 5440 loss:0.018717 acc:1.000000 - train epoch:35 step: 5460 loss:0.018810 acc:1.000000 - train epoch:35 step: 5480 loss:0.020277 acc:1.000000 - train epoch:35 step: 5500 loss:0.015930 acc:1.000000 - eval epoch:35 step: 5500 loss:0.015930 acc:1.000000 - train epoch:35 step: 5520 loss:0.011227 acc:1.000000 - train epoch:35 step: 5540 loss:0.014070 acc:1.000000 - train epoch:35 step: 5560 loss:0.011568 acc:1.000000 - train epoch:35 step: 5580 loss:0.017833 acc:1.000000 - train epoch:35 step: 5600 loss:0.026026 acc:0.989583 - train epoch:36 step: 5620 loss:0.014723 acc:1.000000 - train epoch:36 step: 5640 loss:0.016984 acc:1.000000 - train epoch:36 step: 5660 loss:0.012258 acc:1.000000 - train epoch:36 step: 5680 loss:0.011090 acc:1.000000 - train epoch:36 step: 5700 loss:0.013938 acc:1.000000 - train epoch:36 step: 5720 loss:0.009997 acc:1.000000 - train epoch:36 step: 5740 loss:0.018753 acc:1.000000 - train epoch:36 step: 5760 loss:0.015412 acc:1.000000 - train epoch:37 step: 5780 loss:0.010864 acc:1.000000 - train epoch:37 step: 5800 loss:0.009183 acc:1.000000 - train epoch:37 step: 5820 loss:0.019050 acc:1.000000 - train epoch:37 step: 5840 loss:0.016417 acc:1.000000 - train epoch:37 step: 5860 loss:0.023921 acc:1.000000 - train epoch:37 step: 5880 loss:0.008792 acc:1.000000 - train epoch:37 step: 5900 loss:0.010345 acc:1.000000 - train epoch:37 step: 5920 loss:0.007101 acc:1.000000 - train epoch:38 step: 5940 loss:0.013960 acc:1.000000 - train epoch:38 step: 5960 loss:0.011658 acc:1.000000 - train epoch:38 step: 5980 loss:0.010058 acc:1.000000 - train epoch:38 step: 6000 loss:0.006272 acc:1.000000 - eval epoch:38 step: 6000 loss:0.006272 acc:1.000000 - train epoch:38 step: 6020 loss:0.009750 acc:1.000000 - train epoch:38 step: 6040 loss:0.010266 acc:1.000000 - train epoch:38 step: 6060 loss:0.009202 acc:1.000000 - train epoch:38 step: 6080 loss:0.008116 acc:1.000000 - train epoch:39 step: 6100 loss:0.008218 acc:1.000000 - train epoch:39 step: 6120 loss:0.006503 acc:1.000000 - train epoch:39 step: 6140 loss:0.026469 acc:0.989583 - train epoch:39 step: 6160 loss:0.009548 acc:1.000000 - train epoch:39 step: 6180 loss:0.009454 acc:1.000000 - train epoch:39 step: 6200 loss:0.008672 acc:1.000000 - train epoch:39 step: 6220 loss:0.006432 acc:1.000000 - train epoch:40 step: 6240 loss:0.006211 acc:1.000000 - train epoch:40 step: 6260 loss:0.006354 acc:1.000000 - train epoch:40 step: 6280 loss:0.009316 acc:1.000000 - train epoch:40 step: 6300 loss:0.005327 acc:1.000000 - train epoch:40 step: 6320 loss:0.013754 acc:1.000000 - train epoch:40 step: 6340 loss:0.009717 acc:1.000000 - train epoch:40 step: 6360 loss:0.014396 acc:1.000000 - train epoch:40 step: 6380 loss:0.017245 acc:1.000000 - train epoch:41 step: 6400 loss:0.246784 acc:0.916667 - train epoch:41 step: 6420 loss:0.258765 acc:0.885417 - train epoch:41 step: 6440 loss:0.256785 acc:0.895833 - train epoch:41 step: 6460 loss:0.157417 acc:0.947917 - train epoch:41 step: 6480 loss:0.138986 acc:0.947917 - train epoch:41 step: 6500 loss:0.102885 acc:0.968750 - eval epoch:41 step: 6500 loss:0.102885 acc:0.968750 - train epoch:41 step: 6520 loss:0.113847 acc:0.968750 - train epoch:41 step: 6540 loss:0.058566 acc:0.979167 - train epoch:42 step: 6560 loss:0.015960 acc:1.000000 - train epoch:42 step: 6580 loss:0.014863 acc:1.000000 - train epoch:42 step: 6600 loss:0.022125 acc:1.000000 - train epoch:42 step: 6620 loss:0.012943 acc:1.000000 - train epoch:42 step: 6640 loss:0.038277 acc:0.979167 - train epoch:42 step: 6660 loss:0.014131 acc:1.000000 - train epoch:42 step: 6680 loss:0.011649 acc:1.000000 - train epoch:42 step: 6700 loss:0.010683 acc:1.000000 - train epoch:43 step: 6720 loss:0.009636 acc:1.000000 - train epoch:43 step: 6740 loss:0.011469 acc:1.000000 - train epoch:43 step: 6760 loss:0.032507 acc:0.989583 - train epoch:43 step: 6780 loss:0.024851 acc:1.000000 - train epoch:43 step: 6800 loss:0.006909 acc:1.000000 - train epoch:43 step: 6820 loss:0.009160 acc:1.000000 - train epoch:43 step: 6840 loss:0.008299 acc:1.000000 - train epoch:43 step: 6860 loss:0.005938 acc:1.000000 - train epoch:44 step: 6880 loss:0.018785 acc:0.989583 - train epoch:44 step: 6900 loss:0.006353 acc:1.000000 - train epoch:44 step: 6920 loss:0.024220 acc:0.989583 - train epoch:44 step: 6940 loss:0.004046 acc:1.000000 - train epoch:44 step: 6960 loss:0.008634 acc:1.000000 - train epoch:44 step: 6980 loss:0.005675 acc:1.000000 - train epoch:44 step: 7000 loss:0.005801 acc:1.000000 - eval epoch:44 step: 7000 loss:0.005801 acc:1.000000 - train epoch:45 step: 7020 loss:0.017801 acc:1.000000 - train epoch:45 step: 7040 loss:0.007127 acc:1.000000 - train epoch:45 step: 7060 loss:0.025303 acc:0.989583 - train epoch:45 step: 7080 loss:0.006672 acc:1.000000 - train epoch:45 step: 7100 loss:0.006055 acc:1.000000 - train epoch:45 step: 7120 loss:0.006293 acc:1.000000 - train epoch:45 step: 7140 loss:0.014894 acc:1.000000 - train epoch:45 step: 7160 loss:0.004794 acc:1.000000 - train epoch:46 step: 7180 loss:0.004096 acc:1.000000 - train epoch:46 step: 7200 loss:0.004971 acc:1.000000 - train epoch:46 step: 7220 loss:0.004630 acc:1.000000 - train epoch:46 step: 7240 loss:0.005007 acc:1.000000 - train epoch:46 step: 7260 loss:0.004737 acc:1.000000 - train epoch:46 step: 7280 loss:0.006080 acc:1.000000 - train epoch:46 step: 7300 loss:0.010356 acc:1.000000 - train epoch:46 step: 7320 loss:0.004719 acc:1.000000 - train epoch:47 step: 7340 loss:0.004255 acc:1.000000 - train epoch:47 step: 7360 loss:0.003938 acc:1.000000 - train epoch:47 step: 7380 loss:0.004570 acc:1.000000 - train epoch:47 step: 7400 loss:0.004550 acc:1.000000 - train epoch:47 step: 7420 loss:0.005193 acc:1.000000 - train epoch:47 step: 7440 loss:0.004975 acc:1.000000 - train epoch:47 step: 7460 loss:0.005385 acc:1.000000 - train epoch:47 step: 7480 loss:0.003343 acc:1.000000 - train epoch:48 step: 7500 loss:0.005988 acc:1.000000 - eval epoch:48 step: 7500 loss:0.005988 acc:1.000000 - train epoch:48 step: 7520 loss:0.004878 acc:1.000000 - train epoch:48 step: 7540 loss:0.004909 acc:1.000000 - train epoch:48 step: 7560 loss:0.004001 acc:1.000000 - train epoch:48 step: 7580 loss:0.004231 acc:1.000000 - train epoch:48 step: 7600 loss:0.005938 acc:1.000000 - train epoch:48 step: 7620 loss:0.003067 acc:1.000000 - train epoch:48 step: 7640 loss:0.005027 acc:1.000000 - train epoch:49 step: 7660 loss:0.010901 acc:1.000000 - train epoch:49 step: 7680 loss:0.003779 acc:1.000000 - train epoch:49 step: 7700 loss:0.003575 acc:1.000000 - train epoch:49 step: 7720 loss:0.004496 acc:1.000000 - train epoch:49 step: 7740 loss:0.002857 acc:1.000000 - train epoch:49 step: 7760 loss:0.003598 acc:1.000000 - train epoch:49 step: 7780 loss:0.003575 acc:1.000000 - train epoch:50 step: 7800 loss:0.013522 acc:1.000000 - train epoch:50 step: 7820 loss:0.008594 acc:1.000000 - train epoch:50 step: 7840 loss:0.015725 acc:0.989583 - train epoch:50 step: 7860 loss:0.004317 acc:1.000000 - train epoch:50 step: 7880 loss:0.002770 acc:1.000000 - train epoch:50 step: 7900 loss:0.003247 acc:1.000000 - train epoch:50 step: 7920 loss:0.004947 acc:1.000000 - train epoch:50 step: 7940 loss:0.003834 acc:1.000000 - train epoch:51 step: 7960 loss:0.002458 acc:1.000000 - train epoch:51 step: 7980 loss:0.005163 acc:1.000000 - train epoch:51 step: 8000 loss:0.012680 acc:1.000000 - eval epoch:51 step: 8000 loss:0.012680 acc:1.000000 - train epoch:51 step: 8020 loss:0.005761 acc:1.000000 - train epoch:51 step: 8040 loss:0.002730 acc:1.000000 - train epoch:51 step: 8060 loss:0.003493 acc:1.000000 - train epoch:51 step: 8080 loss:0.026745 acc:0.989583 - train epoch:51 step: 8100 loss:0.003065 acc:1.000000 - train epoch:52 step: 8120 loss:0.007833 acc:1.000000 - train epoch:52 step: 8140 loss:0.002838 acc:1.000000 - train epoch:52 step: 8160 loss:0.002589 acc:1.000000 - train epoch:52 step: 8180 loss:0.004229 acc:1.000000 - train epoch:52 step: 8200 loss:0.002767 acc:1.000000 - train epoch:52 step: 8220 loss:0.003908 acc:1.000000 - train epoch:52 step: 8240 loss:0.003461 acc:1.000000 - train epoch:52 step: 8260 loss:0.003138 acc:1.000000 - train epoch:53 step: 8280 loss:0.002818 acc:1.000000 - train epoch:53 step: 8300 loss:0.003466 acc:1.000000 - train epoch:53 step: 8320 loss:0.003065 acc:1.000000 - train epoch:53 step: 8340 loss:0.002633 acc:1.000000 - train epoch:53 step: 8360 loss:0.002649 acc:1.000000 - train epoch:53 step: 8380 loss:0.003003 acc:1.000000 - train epoch:53 step: 8400 loss:0.002908 acc:1.000000 - train epoch:53 step: 8420 loss:0.002991 acc:1.000000 - train epoch:54 step: 8440 loss:0.002491 acc:1.000000 - train epoch:54 step: 8460 loss:0.002902 acc:1.000000 - train epoch:54 step: 8480 loss:0.002936 acc:1.000000 - train epoch:54 step: 8500 loss:0.002032 acc:1.000000 - eval epoch:54 step: 8500 loss:0.002032 acc:1.000000 - train epoch:54 step: 8520 loss:0.004455 acc:1.000000 - train epoch:54 step: 8540 loss:0.002633 acc:1.000000 - train epoch:54 step: 8560 loss:0.002573 acc:1.000000 - train epoch:55 step: 8580 loss:0.002683 acc:1.000000 - train epoch:55 step: 8600 loss:0.002352 acc:1.000000 - train epoch:55 step: 8620 loss:0.002576 acc:1.000000 - train epoch:55 step: 8640 loss:0.002501 acc:1.000000 - train epoch:55 step: 8660 loss:0.002004 acc:1.000000 - train epoch:55 step: 8680 loss:0.010133 acc:1.000000 - train epoch:55 step: 8700 loss:0.008447 acc:1.000000 - train epoch:55 step: 8720 loss:0.002390 acc:1.000000 - train epoch:56 step: 8740 loss:0.002623 acc:1.000000 - train epoch:56 step: 8760 loss:0.002708 acc:1.000000 - train epoch:56 step: 8780 loss:0.007019 acc:1.000000 - train epoch:56 step: 8800 loss:0.002337 acc:1.000000 - train epoch:56 step: 8820 loss:0.006819 acc:1.000000 - train epoch:56 step: 8840 loss:0.001835 acc:1.000000 - train epoch:56 step: 8860 loss:0.007673 acc:1.000000 - train epoch:56 step: 8880 loss:0.001898 acc:1.000000 - train epoch:57 step: 8900 loss:0.004722 acc:1.000000 - train epoch:57 step: 8920 loss:0.004679 acc:1.000000 - train epoch:57 step: 8940 loss:0.001400 acc:1.000000 - train epoch:57 step: 8960 loss:0.001559 acc:1.000000 - train epoch:57 step: 8980 loss:0.001800 acc:1.000000 - train epoch:57 step: 9000 loss:0.002320 acc:1.000000 - eval epoch:57 step: 9000 loss:0.002320 acc:1.000000 - train epoch:57 step: 9020 loss:0.015068 acc:0.989583 - train epoch:57 step: 9040 loss:0.010595 acc:1.000000 - train epoch:58 step: 9060 loss:0.002078 acc:1.000000 - train epoch:58 step: 9080 loss:0.002369 acc:1.000000 - train epoch:58 step: 9100 loss:0.003558 acc:1.000000 - train epoch:58 step: 9120 loss:0.332378 acc:0.927083 - train epoch:58 step: 9140 loss:0.722719 acc:0.760417 - train epoch:58 step: 9160 loss:0.587800 acc:0.770833 - train epoch:58 step: 9180 loss:0.226562 acc:0.916667 - train epoch:58 step: 9200 loss:0.218447 acc:0.906250 - train epoch:59 step: 9220 loss:0.035710 acc:1.000000 - train epoch:59 step: 9240 loss:0.074230 acc:0.989583 - train epoch:59 step: 9260 loss:0.020366 acc:1.000000 - train epoch:59 step: 9280 loss:0.041202 acc:0.989583 - train epoch:59 step: 9300 loss:0.025127 acc:0.989583 - train epoch:59 step: 9320 loss:0.012637 acc:1.000000 - train epoch:59 step: 9340 loss:0.015185 acc:1.000000 - train epoch:60 step: 9360 loss:0.011637 acc:1.000000 - train epoch:60 step: 9380 loss:0.018426 acc:1.000000 - train epoch:60 step: 9400 loss:0.014776 acc:1.000000 - train epoch:60 step: 9420 loss:0.094073 acc:0.989583 - train epoch:60 step: 9440 loss:0.008631 acc:1.000000 - train epoch:60 step: 9460 loss:0.008755 acc:1.000000 - train epoch:60 step: 9480 loss:0.008431 acc:1.000000 - train epoch:60 step: 9500 loss:0.031825 acc:0.989583 - eval epoch:60 step: 9500 loss:0.031825 acc:0.989583 - train epoch:61 step: 9520 loss:0.007724 acc:1.000000 - train epoch:61 step: 9540 loss:0.007437 acc:1.000000 - train epoch:61 step: 9560 loss:0.006386 acc:1.000000 - train epoch:61 step: 9580 loss:0.005539 acc:1.000000 - train epoch:61 step: 9600 loss:0.011923 acc:1.000000 - train epoch:61 step: 9620 loss:0.005140 acc:1.000000 - train epoch:61 step: 9640 loss:0.004681 acc:1.000000 - train epoch:61 step: 9660 loss:0.004649 acc:1.000000 - train epoch:62 step: 9680 loss:0.003709 acc:1.000000 - train epoch:62 step: 9700 loss:0.005331 acc:1.000000 - train epoch:62 step: 9720 loss:0.003621 acc:1.000000 - train epoch:62 step: 9740 loss:0.002976 acc:1.000000 - train epoch:62 step: 9760 loss:0.003982 acc:1.000000 - train epoch:62 step: 9780 loss:0.003954 acc:1.000000 - train epoch:62 step: 9800 loss:0.003472 acc:1.000000 - train epoch:62 step: 9820 loss:0.003942 acc:1.000000 - train epoch:63 step: 9840 loss:0.009400 acc:1.000000 - train epoch:63 step: 9860 loss:0.002873 acc:1.000000 - train epoch:63 step: 9880 loss:0.002974 acc:1.000000 - train epoch:63 step: 9900 loss:0.003141 acc:1.000000 - train epoch:63 step: 9920 loss:0.002566 acc:1.000000 - train epoch:63 step: 9940 loss:0.002308 acc:1.000000 - train epoch:63 step: 9960 loss:0.012453 acc:1.000000 - train epoch:63 step: 9980 loss:0.003023 acc:1.000000 - train epoch:64 step: 10000 loss:0.003152 acc:1.000000 - eval epoch:64 step: 10000 loss:0.003152 acc:1.000000 - train epoch:64 step: 10020 loss:0.002176 acc:1.000000 - train epoch:64 step: 10040 loss:0.002388 acc:1.000000 - train epoch:64 step: 10060 loss:0.002137 acc:1.000000 - train epoch:64 step: 10080 loss:0.005776 acc:1.000000 - train epoch:64 step: 10100 loss:0.003295 acc:1.000000 - train epoch:64 step: 10120 loss:0.002191 acc:1.000000 - train epoch:65 step: 10140 loss:0.002372 acc:1.000000 - train epoch:65 step: 10160 loss:0.003169 acc:1.000000 - train epoch:65 step: 10180 loss:0.002575 acc:1.000000 - train epoch:65 step: 10200 loss:0.002097 acc:1.000000 - train epoch:65 step: 10220 loss:0.002909 acc:1.000000 - train epoch:65 step: 10240 loss:0.002255 acc:1.000000 - train epoch:65 step: 10260 loss:0.002684 acc:1.000000 - train epoch:65 step: 10280 loss:0.003133 acc:1.000000 - train epoch:66 step: 10300 loss:0.003015 acc:1.000000 - train epoch:66 step: 10320 loss:0.001876 acc:1.000000 - train epoch:66 step: 10340 loss:0.002027 acc:1.000000 - train epoch:66 step: 10360 loss:0.002110 acc:1.000000 - train epoch:66 step: 10380 loss:0.004557 acc:1.000000 - train epoch:66 step: 10400 loss:0.002331 acc:1.000000 - train epoch:66 step: 10420 loss:0.002424 acc:1.000000 - train epoch:66 step: 10440 loss:0.002320 acc:1.000000 - train epoch:67 step: 10460 loss:0.003074 acc:1.000000 - train epoch:67 step: 10480 loss:0.002787 acc:1.000000 - train epoch:67 step: 10500 loss:0.002740 acc:1.000000 - eval epoch:67 step: 10500 loss:0.002740 acc:1.000000 - train epoch:67 step: 10520 loss:0.010280 acc:1.000000 - train epoch:67 step: 10540 loss:0.002099 acc:1.000000 - train epoch:67 step: 10560 loss:0.002440 acc:1.000000 - train epoch:67 step: 10580 loss:0.002031 acc:1.000000 - train epoch:67 step: 10600 loss:0.002206 acc:1.000000 - train epoch:68 step: 10620 loss:0.005845 acc:1.000000 - train epoch:68 step: 10640 loss:0.002164 acc:1.000000 - train epoch:68 step: 10660 loss:0.001543 acc:1.000000 - train epoch:68 step: 10680 loss:0.002082 acc:1.000000 - train epoch:68 step: 10700 loss:0.002105 acc:1.000000 - train epoch:68 step: 10720 loss:0.002338 acc:1.000000 - train epoch:68 step: 10740 loss:0.002469 acc:1.000000 - train epoch:68 step: 10760 loss:0.003305 acc:1.000000 - train epoch:69 step: 10780 loss:0.001172 acc:1.000000 - train epoch:69 step: 10800 loss:0.003825 acc:1.000000 - train epoch:69 step: 10820 loss:0.001519 acc:1.000000 - train epoch:69 step: 10840 loss:0.001267 acc:1.000000 - train epoch:69 step: 10860 loss:0.001936 acc:1.000000 - train epoch:69 step: 10880 loss:0.001927 acc:1.000000 - train epoch:69 step: 10900 loss:0.002335 acc:1.000000 - train epoch:70 step: 10920 loss:0.002058 acc:1.000000 - train epoch:70 step: 10940 loss:0.001736 acc:1.000000 - train epoch:70 step: 10960 loss:0.001259 acc:1.000000 - train epoch:70 step: 10980 loss:0.001727 acc:1.000000 - train epoch:70 step: 11000 loss:0.001971 acc:1.000000 - eval epoch:70 step: 11000 loss:0.001971 acc:1.000000 - train epoch:70 step: 11020 loss:0.001450 acc:1.000000 - train epoch:70 step: 11040 loss:0.001734 acc:1.000000 - train epoch:70 step: 11060 loss:0.001433 acc:1.000000 - train epoch:71 step: 11080 loss:0.001150 acc:1.000000 - train epoch:71 step: 11100 loss:0.001348 acc:1.000000 - train epoch:71 step: 11120 loss:0.001277 acc:1.000000 - train epoch:71 step: 11140 loss:0.002246 acc:1.000000 - train epoch:71 step: 11160 loss:0.004686 acc:1.000000 - train epoch:71 step: 11180 loss:0.001382 acc:1.000000 - train epoch:71 step: 11200 loss:0.007673 acc:1.000000 - train epoch:71 step: 11220 loss:0.001436 acc:1.000000 - train epoch:72 step: 11240 loss:0.001184 acc:1.000000 - train epoch:72 step: 11260 loss:0.001866 acc:1.000000 - train epoch:72 step: 11280 loss:0.001293 acc:1.000000 - train epoch:72 step: 11300 loss:0.001328 acc:1.000000 - train epoch:72 step: 11320 loss:0.003046 acc:1.000000 - train epoch:72 step: 11340 loss:0.001129 acc:1.000000 - train epoch:72 step: 11360 loss:0.001333 acc:1.000000 - train epoch:72 step: 11380 loss:0.001094 acc:1.000000 - train epoch:73 step: 11400 loss:0.001332 acc:1.000000 - train epoch:73 step: 11420 loss:0.001203 acc:1.000000 - train epoch:73 step: 11440 loss:0.001161 acc:1.000000 - train epoch:73 step: 11460 loss:0.000953 acc:1.000000 - train epoch:73 step: 11480 loss:0.000914 acc:1.000000 - train epoch:73 step: 11500 loss:0.001389 acc:1.000000 - eval epoch:73 step: 11500 loss:0.001389 acc:1.000000 - train epoch:73 step: 11520 loss:0.001622 acc:1.000000 - train epoch:73 step: 11540 loss:0.001672 acc:1.000000 - train epoch:74 step: 11560 loss:0.001278 acc:1.000000 - train epoch:74 step: 11580 loss:0.001100 acc:1.000000 - train epoch:74 step: 11600 loss:0.002115 acc:1.000000 - train epoch:74 step: 11620 loss:0.000786 acc:1.000000 - train epoch:74 step: 11640 loss:0.001735 acc:1.000000 - train epoch:74 step: 11660 loss:0.001504 acc:1.000000 - train epoch:74 step: 11680 loss:0.000966 acc:1.000000 - train epoch:75 step: 11700 loss:0.001213 acc:1.000000 - train epoch:75 step: 11720 loss:0.001608 acc:1.000000 - train epoch:75 step: 11740 loss:0.001201 acc:1.000000 - train epoch:75 step: 11760 loss:0.001146 acc:1.000000 - train epoch:75 step: 11780 loss:0.005886 acc:1.000000 - train epoch:75 step: 11800 loss:0.001098 acc:1.000000 - train epoch:75 step: 11820 loss:0.004650 acc:1.000000 - train epoch:75 step: 11840 loss:0.001095 acc:1.000000 - train epoch:76 step: 11860 loss:0.000808 acc:1.000000 - train epoch:76 step: 11880 loss:0.000901 acc:1.000000 - train epoch:76 step: 11900 loss:0.001321 acc:1.000000 - train epoch:76 step: 11920 loss:0.000931 acc:1.000000 - train epoch:76 step: 11940 loss:0.001178 acc:1.000000 - train epoch:76 step: 11960 loss:0.001148 acc:1.000000 - train epoch:76 step: 11980 loss:0.001288 acc:1.000000 - train epoch:76 step: 12000 loss:0.001057 acc:1.000000 - eval epoch:76 step: 12000 loss:0.001057 acc:1.000000 - train epoch:77 step: 12020 loss:0.000743 acc:1.000000 - train epoch:77 step: 12040 loss:0.000911 acc:1.000000 - train epoch:77 step: 12060 loss:0.000826 acc:1.000000 - train epoch:77 step: 12080 loss:0.001134 acc:1.000000 - train epoch:77 step: 12100 loss:0.002004 acc:1.000000 - train epoch:77 step: 12120 loss:0.000878 acc:1.000000 - train epoch:77 step: 12140 loss:0.000753 acc:1.000000 - train epoch:77 step: 12160 loss:0.000927 acc:1.000000 - train epoch:78 step: 12180 loss:0.001339 acc:1.000000 - train epoch:78 step: 12200 loss:0.001096 acc:1.000000 - train epoch:78 step: 12220 loss:0.023044 acc:0.989583 - train epoch:78 step: 12240 loss:0.494969 acc:0.875000 - train epoch:78 step: 12260 loss:0.926390 acc:0.729167 - train epoch:78 step: 12280 loss:0.231422 acc:0.916667 - train epoch:78 step: 12300 loss:0.504258 acc:0.750000 - train epoch:78 step: 12320 loss:0.078475 acc:0.968750 - train epoch:79 step: 12340 loss:0.156801 acc:0.947917 - train epoch:79 step: 12360 loss:0.037007 acc:1.000000 - train epoch:79 step: 12380 loss:0.017994 acc:1.000000 - train epoch:79 step: 12400 loss:0.022405 acc:1.000000 - train epoch:79 step: 12420 loss:0.017862 acc:0.989583 - train epoch:79 step: 12440 loss:0.012562 acc:1.000000 - train epoch:79 step: 12460 loss:0.010923 acc:1.000000 - train epoch:80 step: 12480 loss:0.005559 acc:1.000000 - train epoch:80 step: 12500 loss:0.007535 acc:1.000000 - eval epoch:80 step: 12500 loss:0.007535 acc:1.000000 - train epoch:80 step: 12520 loss:0.008828 acc:1.000000 - train epoch:80 step: 12540 loss:0.006880 acc:1.000000 - train epoch:80 step: 12560 loss:0.004601 acc:1.000000 - train epoch:80 step: 12580 loss:0.007436 acc:1.000000 - train epoch:80 step: 12600 loss:0.007975 acc:1.000000 - train epoch:80 step: 12620 loss:0.003489 acc:1.000000 - train epoch:81 step: 12640 loss:0.002571 acc:1.000000 - train epoch:81 step: 12660 loss:0.003596 acc:1.000000 - train epoch:81 step: 12680 loss:0.002780 acc:1.000000 - train epoch:81 step: 12700 loss:0.009434 acc:1.000000 - train epoch:81 step: 12720 loss:0.003432 acc:1.000000 - train epoch:81 step: 12740 loss:0.002557 acc:1.000000 - train epoch:81 step: 12760 loss:0.003448 acc:1.000000 - train epoch:81 step: 12780 loss:0.011148 acc:1.000000 - train epoch:82 step: 12800 loss:0.002859 acc:1.000000 - train epoch:82 step: 12820 loss:0.002257 acc:1.000000 - train epoch:82 step: 12840 loss:0.002420 acc:1.000000 - train epoch:82 step: 12860 loss:0.002280 acc:1.000000 - train epoch:82 step: 12880 loss:0.002221 acc:1.000000 - train epoch:82 step: 12900 loss:0.001877 acc:1.000000 - train epoch:82 step: 12920 loss:0.001880 acc:1.000000 - train epoch:82 step: 12940 loss:0.001888 acc:1.000000 - train epoch:83 step: 12960 loss:0.011013 acc:1.000000 - train epoch:83 step: 12980 loss:0.002558 acc:1.000000 - train epoch:83 step: 13000 loss:0.002211 acc:1.000000 - eval epoch:83 step: 13000 loss:0.002211 acc:1.000000 - train epoch:83 step: 13020 loss:0.002261 acc:1.000000 - train epoch:83 step: 13040 loss:0.004423 acc:1.000000 - train epoch:83 step: 13060 loss:0.001885 acc:1.000000 - train epoch:83 step: 13080 loss:0.001940 acc:1.000000 - train epoch:83 step: 13100 loss:0.006050 acc:1.000000 - train epoch:84 step: 13120 loss:0.001938 acc:1.000000 - train epoch:84 step: 13140 loss:0.001837 acc:1.000000 - train epoch:84 step: 13160 loss:0.002179 acc:1.000000 - train epoch:84 step: 13180 loss:0.002200 acc:1.000000 - train epoch:84 step: 13200 loss:0.001810 acc:1.000000 - train epoch:84 step: 13220 loss:0.001651 acc:1.000000 - train epoch:84 step: 13240 loss:0.001898 acc:1.000000 - train epoch:85 step: 13260 loss:0.001496 acc:1.000000 - train epoch:85 step: 13280 loss:0.002194 acc:1.000000 - train epoch:85 step: 13300 loss:0.001946 acc:1.000000 - train epoch:85 step: 13320 loss:0.004466 acc:1.000000 - train epoch:85 step: 13340 loss:0.001309 acc:1.000000 - train epoch:85 step: 13360 loss:0.001494 acc:1.000000 - train epoch:85 step: 13380 loss:0.001447 acc:1.000000 - train epoch:85 step: 13400 loss:0.001491 acc:1.000000 - train epoch:86 step: 13420 loss:0.001344 acc:1.000000 - train epoch:86 step: 13440 loss:0.001975 acc:1.000000 -模型测试 --------- +五、模型测试 +------------ - 使用保存的最佳模型进行测试 @@ -1107,8 +406,8 @@ print('the model answer: %s=%s' % (input_text, result)) print('the true answer: %s=%s' % (input_text, eval(input_text))) -总结 ----- +六、总结 +-------- - 你还可以通过变换网络结构,调整数据集,尝试不同的参数的方式来进一步提升本示例当中的数字加法的效果 - 同时,也可以尝试在其他的类似的任务中用飞桨来完成实际的实践 diff --git a/doc/paddle/tutorial/nlp_case/imdb_bow_classification/imdb_bow_classification.rst b/doc/paddle/tutorial/nlp_case/imdb_bow_classification/imdb_bow_classification.rst index cce70ddd9c0..6702c9e119c 100644 --- a/doc/paddle/tutorial/nlp_case/imdb_bow_classification/imdb_bow_classification.rst +++ b/doc/paddle/tutorial/nlp_case/imdb_bow_classification/imdb_bow_classification.rst @@ -1,15 +1,18 @@ IMDB 数据集使用BOW网络的文本分类 ================================ -本示例教程演示如何在IMDB数据集上用简单的BOW网络完成文本分类的任务。 +**作者:** `PaddlePaddle `__ -IMDB数据集是一个对电影评论标注为正向评论与负向评论的数据集,共有25000条文本数据作为训练集,25000条文本数据作为测试集。 -该数据集的官方地址为: http://ai.stanford.edu/~amaas/data/sentiment/ +**日期:** 2021.01 + +**摘要:** 本示例教程演示如何在IMDB数据集上用简单的BOW网络完成文本分类的任务。 -1. 环境设置 ------------ +一、环境配置 +------------ -本示例基于飞桨开源框架2.0rc1版本。 +本教程基于Paddle 2.0 +编写,如果您的环境不是本版本,请先参考官网\ `安装 `__ +Paddle 2.0 。 .. code:: ipython3 @@ -20,11 +23,14 @@ IMDB数据集是一个对电影评论标注为正向评论与负向评论的数 .. parsed-literal:: - 2.0.0-rc1 + 2.0.0 -2. 加载数据 ------------ +二、加载数据 +------------ + +IMDB数据集是一个对电影评论标注为正向评论与负向评论的数据集,共有25000条文本数据作为训练集,25000条文本数据作为测试集。 +该数据集的官方地址为: http://ai.stanford.edu/~amaas/data/sentiment/ 由于IMDB是NLP领域中常见的数据集,飞桨框架将其内置,路径为 ``paddle.text.datasets.Imdb``\ 。通过 ``mode`` @@ -202,8 +208,8 @@ DataLoader封装后,完成数据的加载。 test_loader = paddle.io.DataLoader(test_dataset, return_list=True, shuffle=True, batch_size=batch_size, drop_last=True) -3. 组建网络 ------------ +三、组建网络 +------------ 本示例中,我们将会使用一个不考虑词的顺序的BOW的网络,在查找到每个词对应的embedding后,简单的取平均,作为一个句子的表示。然后用\ ``Linear``\ 进行线性变换。为了防止过拟合,我们还使用了\ ``Dropout``\ 。 @@ -223,7 +229,7 @@ DataLoader封装后,完成数据的加载。 x = self.fc(x) return x -4. 方式一:用高层API训练与验证 +四、方式1:用高层API训练与验证 ------------------------------ 用 ``Model`` 封装模型,调用 ``fit、prepare`` 完成模型的训练与验证 @@ -261,8 +267,8 @@ DataLoader封装后,完成数据的加载。 Eval samples: 24992 -5. 方式二: 用底层API训练与验证 -------------------------------- +五、方式2: 用底层API训练与验证 +-------------------------------- .. code:: ipython3 @@ -323,7 +329,7 @@ DataLoader封装后,完成数据的加载。 [validation] accuracy/loss: 0.8570342659950256/0.3353509306907654 -6. The End ----------- +The End +------- 可以看到,在这个数据集上,经过两轮的迭代可以得到86%左右的准确率。你也可以通过调整网络结构和超参数,来获得更好的效果。 diff --git a/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model.rst b/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model.rst index 2863ba88d2e..017937c494e 100644 --- a/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model.rst +++ b/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model.rst @@ -1,16 +1,21 @@ 用N-Gram模型在莎士比亚文集中训练word embedding ============================================== -N-gram -是计算机语言学和概率论范畴内的概念,是指给定的一段文本中N个项目的序列。 -N=1 时 N-gram 又称为 unigram,N=2 称为 bigram,N=3 称为 -trigram,以此类推。实际应用通常采用 bigram 和 trigram 进行计算。 -本示例在莎士比亚文集上实现了trigram。 +**作者:** `PaddlePaddle `__ -1、环境 -------- +**日期:** 2021.01 -本教程基于paddle-2.0rc1编写,如果您的环境不是本版本,请先安装paddle-2.0rc1版本。 +**摘要:** N-gram是计算机语言学和概率论范畴内的概念,是指给定的一段文本中N个项目的序列。N=1 +时 N-gram 又称为 unigram,N=2 称为 bigram,N=3 称为 +trigram,以此类推。实际应用通常采用 bigram 和 trigram +进行计算。本示例在莎士比亚文集上实现了trigram。 + +一、环境配置 +------------ + +本教程基于Paddle 2.0 +编写,如果您的环境不是本版本,请先参考官网\ `安装 `__ +Paddle 2.0 。 .. code:: ipython3 @@ -22,12 +27,12 @@ trigram,以此类推。实际应用通常采用 bigram 和 trigram 进行计 .. parsed-literal:: - '2.0.0-rc1' + '2.0.0' -2、数据集&&相关参数 -------------------- +二、数据集&&相关参数 +-------------------- 2.1 数据集下载 ~~~~~~~~~~~~~~ @@ -39,22 +44,6 @@ context_size设为2,意味着是trigram。embedding_dim设为256。 !wget https://ocw.mit.edu/ans7870/6/6.006/s08/lecturenotes/files/t8.shakespeare.txt - -.. parsed-literal:: - - --2020-12-16 14:12:57-- https://ocw.mit.edu/ans7870/6/6.006/s08/lecturenotes/files/t8.shakespeare.txt - 正在解析主机 ocw.mit.edu (ocw.mit.edu)... 151.101.110.133 - 正在连接 ocw.mit.edu (ocw.mit.edu)|151.101.110.133|:443... 已连接。 - 已发出 HTTP 请求,正在等待回应... 200 OK - 长度:5458199 (5.2M) [text/plain] - 正在保存至: “t8.shakespeare.txt” - - t8.shakespeare.txt 100%[===================>] 5.21M 70.2KB/s 用时 40s - - 2020-12-16 14:13:37 (134 KB/s) - 已保存 “t8.shakespeare.txt” [5458199/5458199]) - - - .. code:: ipython3 # 文件路径 @@ -130,8 +119,8 @@ context_size设为2,意味着是trigram。embedding_dim设为256。 vocab_size = len(word_list) + 1 # 词表大小 epochs = 2 # 迭代轮数 -3、数据加载 ------------ +三、数据加载 +------------ 3.1 数据格式 ~~~~~~~~~~~~ @@ -186,8 +175,8 @@ context_size设为2,意味着是trigram。embedding_dim设为256。 train_loader = paddle.io.DataLoader(train_dataset, return_list=True, shuffle=True, batch_size=batch_size, drop_last=True) -4、模型组网 ------------ +四、模型组网 +------------ 这里用paddle动态图的方式组网。为了构建Trigram模型,用一层 ``Embedding`` 与两层 ``Linear`` 完成构建。\ ``Embedding`` @@ -212,7 +201,7 @@ context_size设为2,意味着是trigram。embedding_dim设为256。 x = self.linear2(x) return x -5、 方式一:基于高层API,完成模型的训练与预测 +五、 方式1:基于高层API,完成模型的训练与预测 --------------------------------------------- 5.1 自定义Callback @@ -224,6 +213,9 @@ context_size设为2,意味着是trigram。embedding_dim设为256。 # 自定义Callback 需要继承基类 Callback class LossCallback(paddle.callbacks.Callback): + + def __init__(self): + self.losses = [] def on_train_begin(self, logs={}): # 在fit前 初始化losses,用于保存每个batch的loss结果 @@ -262,9 +254,9 @@ context_size设为2,意味着是trigram。embedding_dim设为256。 The loss value printed in the log is the current step, and the metric is the average value of previous step. Epoch 1/2 - step 3519/3519 [==============================] - loss: 5.1676 - 81ms/step + step 3519/3519 [==============================] - loss: 5.1085 - 135ms/step Epoch 2/2 - step 3519/3519 [==============================] - loss: 5.4961 - 94ms/step + step 3519/3519 [==============================] - loss: 5.3717 - 166ms/step 5.3 loss可视化 @@ -287,16 +279,16 @@ context_size设为2,意味着是trigram。embedding_dim设为256。 .. parsed-literal:: - [] + [] -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/n_gram_model_23_1.png?raw=true +.. image:: n_gram_model_files/n_gram_model_23_1.png -6、方式2:基于基础API,完成模型的训练与预测 -------------------------------------------- +六、方式2:基于基础API,完成模型的训练与预测 +-------------------------------------------- 6.1 自定义 ``train`` 函数 ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -328,22 +320,22 @@ context_size设为2,意味着是trigram。embedding_dim设为256。 .. parsed-literal:: - epoch: 0, batch_id: 0, loss is: [7.823718] - epoch: 0, batch_id: 500, loss is: [5.5144377] - epoch: 0, batch_id: 1000, loss is: [5.018609] - epoch: 0, batch_id: 1500, loss is: [5.029891] - epoch: 0, batch_id: 2000, loss is: [5.195608] - epoch: 0, batch_id: 2500, loss is: [4.8786173] - epoch: 0, batch_id: 3000, loss is: [5.1473885] - epoch: 0, batch_id: 3500, loss is: [5.0238667] - epoch: 1, batch_id: 0, loss is: [5.059877] - epoch: 1, batch_id: 500, loss is: [5.200143] - epoch: 1, batch_id: 1000, loss is: [5.464027] - epoch: 1, batch_id: 1500, loss is: [5.2350717] - epoch: 1, batch_id: 2000, loss is: [5.284937] - epoch: 1, batch_id: 2500, loss is: [5.041799] - epoch: 1, batch_id: 3000, loss is: [5.275515] - epoch: 1, batch_id: 3500, loss is: [5.121647] + epoch: 0, batch_id: 0, loss is: [7.8264003] + epoch: 0, batch_id: 500, loss is: [5.369318] + epoch: 0, batch_id: 1000, loss is: [5.41901] + epoch: 0, batch_id: 1500, loss is: [5.480854] + epoch: 0, batch_id: 2000, loss is: [5.333619] + epoch: 0, batch_id: 2500, loss is: [5.3956995] + epoch: 0, batch_id: 3000, loss is: [5.282076] + epoch: 0, batch_id: 3500, loss is: [5.426653] + epoch: 1, batch_id: 0, loss is: [5.4072175] + epoch: 1, batch_id: 500, loss is: [5.213806] + epoch: 1, batch_id: 1000, loss is: [5.37059] + epoch: 1, batch_id: 1500, loss is: [5.2062044] + epoch: 1, batch_id: 2000, loss is: [5.0453634] + epoch: 1, batch_id: 2500, loss is: [5.2034044] + epoch: 1, batch_id: 3000, loss is: [4.869763] + epoch: 1, batch_id: 3500, loss is: [5.6296024] 6.2 loss可视化 @@ -365,12 +357,12 @@ context_size设为2,意味着是trigram。embedding_dim设为256。 .. parsed-literal:: - [] + [] -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/n_gram_model_27_1.png?raw=true +.. image:: n_gram_model_files/n_gram_model_27_1.png 6.3 预测 @@ -399,7 +391,7 @@ context_size设为2,意味着是trigram。embedding_dim设为256。 .. parsed-literal:: - the input words is: the, complete - the predict words is: works - the true words is: works + the input words is: works, of + the predict words is: william + the true words is: william diff --git a/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/n_gram_model_23_1.png b/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/n_gram_model_23_1.png index f89d86fb079..de3f8002bf4 100644 Binary files a/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/n_gram_model_23_1.png and b/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/n_gram_model_23_1.png differ diff --git a/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/n_gram_model_27_1.png b/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/n_gram_model_27_1.png index fd4502b65e7..bec42cccf3b 100644 Binary files a/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/n_gram_model_27_1.png and b/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/n_gram_model_27_1.png differ diff --git a/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/rc_n_gram_model_001.png b/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/rc_n_gram_model_001.png deleted file mode 100644 index 944df342b86..00000000000 Binary files a/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/rc_n_gram_model_001.png and /dev/null differ diff --git a/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/rc_n_gram_model_002.png b/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/rc_n_gram_model_002.png deleted file mode 100644 index 430004257ec..00000000000 Binary files a/doc/paddle/tutorial/nlp_case/n_gram_model/n_gram_model_files/rc_n_gram_model_002.png and /dev/null differ diff --git a/doc/paddle/tutorial/nlp_case/seq2seq_with_attention/seq2seq_with_attention.rst b/doc/paddle/tutorial/nlp_case/seq2seq_with_attention/seq2seq_with_attention.rst index 2f49e6ee712..c0fabb1a912 100644 --- a/doc/paddle/tutorial/nlp_case/seq2seq_with_attention/seq2seq_with_attention.rst +++ b/doc/paddle/tutorial/nlp_case/seq2seq_with_attention/seq2seq_with_attention.rst @@ -1,12 +1,18 @@ 使用注意力机制的LSTM的机器翻译 ============================== -本示例教程介绍如何使用飞桨完成一个机器翻译任务。我们将会使用飞桨提供的LSTM的API,组建一个\ ``sequence to sequence with attention``\ 的机器翻译的模型,并在示例的数据集上完成从英文翻译成中文的机器翻译。 +**作者:** `PaddlePaddle `__ -环境设置 --------- +**日期:** 2021.01 -本示例教程基于飞桨2.0RC1版本。 +**摘要:** 本示例教程介绍如何使用飞桨完成一个机器翻译任务。我们将会使用飞桨提供的LSTM的API,组建一个\ ``sequence to sequence with attention``\ 的机器翻译的模型,并在示例的数据集上完成从英文翻译成中文的机器翻译。 + +一、环境配置 +------------ + +本教程基于Paddle 2.0 +编写,如果您的环境不是本版本,请先参考官网\ `安装 `__ +Paddle 2.0 。 .. code:: ipython3 @@ -20,11 +26,14 @@ .. parsed-literal:: - 2.0.0-rc1 + 2.0.0 + +二、数据加载 +------------ -下载数据集 ----------- +2.1 数据集下载 +~~~~~~~~~~~~~~ 我们将使用 http://www.manythings.org/anki/ 提供的中英文的英汉句对作为数据集,来完成本任务。该数据集含有23610个中英文双语的句对。 @@ -33,25 +42,6 @@ !wget -c https://www.manythings.org/anki/cmn-eng.zip && unzip cmn-eng.zip - -.. parsed-literal:: - - --2020-12-14 18:07:30-- https://www.manythings.org/anki/cmn-eng.zip - 正在解析主机 www.manythings.org (www.manythings.org)... 104.24.108.196, 104.24.109.196, 172.67.173.198 - 正在连接 www.manythings.org (www.manythings.org)|104.24.108.196|:443... 已连接。 - 已发出 HTTP 请求,正在等待回应... 200 OK - 长度:1047888 (1023K) [application/zip] - 正在保存至: “cmn-eng.zip” - - cmn-eng.zip 100%[===================>] 1023K 284KB/s 用时 3.6s - - 2020-12-14 18:07:36 (284 KB/s) - 已保存 “cmn-eng.zip” [1047888/1047888]) - - Archive: cmn-eng.zip - inflating: cmn.txt - inflating: _about.txt - - .. code:: ipython3 !wc -l cmn.txt @@ -59,11 +49,11 @@ .. parsed-literal:: - 24026 cmn.txt + 24360 cmn.txt -构建双语句对的数据结构 ----------------------- +2.2 构建双语句对的数据结构 +~~~~~~~~~~~~~~~~~~~~~~~~~~ 接下来我们通过处理下载下来的双语句对的文本文件,将双语句对读入到python的数据结构中。这里做了如下的处理。 @@ -99,21 +89,21 @@ .. parsed-literal:: - 5613 + 5687 (['i', 'won'], ['我', '赢', '了', '。']) (['he', 'ran'], ['他', '跑', '了', '。']) (['i', 'quit'], ['我', '退', '出', '。']) + (['i', 'quit'], ['我', '不', '干', '了', '。']) (['i', 'm', 'ok'], ['我', '沒', '事', '。']) (['i', 'm', 'up'], ['我', '已', '经', '起', '来', '了', '。']) (['we', 'try'], ['我', '们', '来', '试', '试', '。']) (['he', 'came'], ['他', '来', '了', '。']) (['he', 'runs'], ['他', '跑', '。']) (['i', 'agree'], ['我', '同', '意', '。']) - (['i', 'm', 'ill'], ['我', '生', '病', '了', '。']) -创建词表 --------- +2.3 创建词表 +~~~~~~~~~~~~ 接下来我们分别创建中英文的词表,这两份词表会用来将英文和中文的句子转换为词的ID构成的序列。词表中还加入了如下三个特殊的词: - ````: 用来对较短的句子进行填充。 - ````: “begin of @@ -149,12 +139,12 @@ Note: .. parsed-literal:: - 2567 - 2048 + 2584 + 2055 -创建padding过的数据集 ---------------------- +2.4 创建padding过的数据集 +~~~~~~~~~~~~~~~~~~~~~~~~~ 接下来根据词表,我们将会创建一份实际的用于训练的用numpy array组织起来的数据集。 - @@ -189,13 +179,13 @@ array组织起来的数据集。 - .. parsed-literal:: - (5613, 11) - (5613, 12) - (5613, 12) + (5687, 11) + (5687, 12) + (5687, 12) -创建网络 --------- +三、网络构建 +------------ 我们将会创建一个Encoder-AttentionDecoder架构的模型结构用来完成机器翻译任务。 首先我们将设置一些必要的网络结构中用到的参数。 @@ -210,8 +200,8 @@ array组织起来的数据集。 - epochs = 20 batch_size = 16 -Encoder部分 ------------ +3.1 Encoder部分 +~~~~~~~~~~~~~~~ 在编码器的部分,我们通过查找完Embedding之后接一个LSTM的方式构建一个对源语言编码的网络。飞桨的RNN系列的API,除了LSTM之外,还提供了SimleRNN, GRU供使用,同时,还可以使用反向RNN,双向RNN,多层RNN等形式。也可以通过\ ``dropout``\ 参数设置是否对多层RNN的中间层进行\ ``dropout``\ 处理,来防止过拟合。 @@ -235,8 +225,8 @@ LSTMCell等API更灵活的创建单步的RNN计算,甚至通过继承RNNCellBa x, (_, _) = self.lstm(x) return x -AttentionDecoder部分 --------------------- +3.2 AttentionDecoder部分 +~~~~~~~~~~~~~~~~~~~~~~~~ 在解码器部分,我们通过一个带有注意力机制的LSTM来完成解码。 @@ -300,8 +290,8 @@ AttentionDecoder部分 output = paddle.squeeze(output) return output, (hidden, cell) -训练模型 --------- +四、训练模型 +------------ 接下来我们开始训练模型。 @@ -361,69 +351,69 @@ AttentionDecoder部分 .. parsed-literal:: epoch:0 - iter 0, loss:[7.627163] - iter 200, loss:[3.4799619] + iter 0, loss:[7.6195517] + iter 200, loss:[2.9829617] epoch:1 - iter 0, loss:[3.1061254] - iter 200, loss:[3.0856893] + iter 0, loss:[3.3694496] + iter 200, loss:[2.7960358] epoch:2 - iter 0, loss:[2.5837023] - iter 200, loss:[2.4774187] + iter 0, loss:[2.326734] + iter 200, loss:[2.619873] epoch:3 - iter 0, loss:[2.669735] - iter 200, loss:[2.5333247] + iter 0, loss:[2.5270202] + iter 200, loss:[2.317038] epoch:4 - iter 0, loss:[2.3728533] - iter 200, loss:[2.519483] + iter 0, loss:[2.4560418] + iter 200, loss:[2.4410586] epoch:5 - iter 0, loss:[2.4868279] - iter 200, loss:[2.2394028] + iter 0, loss:[2.356511] + iter 200, loss:[2.3720074] epoch:6 - iter 0, loss:[1.912401] - iter 200, loss:[1.9941695] + iter 0, loss:[2.0584815] + iter 200, loss:[2.0321233] epoch:7 - iter 0, loss:[2.095499] - iter 200, loss:[1.8654814] + iter 0, loss:[1.8767532] + iter 200, loss:[1.9602191] epoch:8 - iter 0, loss:[1.5444477] - iter 200, loss:[1.6987498] + iter 0, loss:[1.6901115] + iter 200, loss:[1.5295217] epoch:9 - iter 0, loss:[1.6606278] - iter 200, loss:[1.5448124] + iter 0, loss:[1.3637413] + iter 200, loss:[1.6321315] epoch:10 - iter 0, loss:[1.5323858] - iter 200, loss:[1.3515877] + iter 0, loss:[1.3491321] + iter 200, loss:[1.5754722] epoch:11 - iter 0, loss:[1.1793854] - iter 200, loss:[1.2833853] + iter 0, loss:[1.0872059] + iter 200, loss:[1.323177] epoch:12 - iter 0, loss:[1.3123708] - iter 200, loss:[1.2210991] + iter 0, loss:[1.0185726] + iter 200, loss:[1.1437721] epoch:13 - iter 0, loss:[0.8979997] - iter 200, loss:[1.2892962] + iter 0, loss:[1.0399715] + iter 200, loss:[1.030262] epoch:14 - iter 0, loss:[0.8698184] - iter 200, loss:[1.0216825] + iter 0, loss:[0.9651084] + iter 200, loss:[0.95293546] epoch:15 - iter 0, loss:[0.76651883] - iter 200, loss:[0.7595413] + iter 0, loss:[0.7636842] + iter 200, loss:[0.70801795] epoch:16 - iter 0, loss:[0.72599435] - iter 200, loss:[0.59768426] + iter 0, loss:[0.8478832] + iter 200, loss:[0.63975704] epoch:17 - iter 0, loss:[0.737612] - iter 200, loss:[0.85637724] + iter 0, loss:[0.6618248] + iter 200, loss:[0.7030245] epoch:18 - iter 0, loss:[0.721517] - iter 200, loss:[0.57950366] + iter 0, loss:[0.631694] + iter 200, loss:[0.809505] epoch:19 - iter 0, loss:[0.58147454] - iter 200, loss:[0.6164701] + iter 0, loss:[0.5217632] + iter 200, loss:[0.61424005] -使用模型进行机器翻译 --------------------- +五、使用模型进行机器翻译 +------------------------ 根据你所使用的计算设备的不同,上面的训练过程可能需要不等的时间。(在一台Mac笔记本上,大约耗时15~20分钟) 完成上面的模型训练之后,我们可以得到一个能够从英文翻译成中文的机器翻译模型。接下来我们通过一个greedy @@ -473,40 +463,39 @@ search算法来提升效果) .. parsed-literal:: - i want to study french - true: 我要学法语。 - pred: 我要学法语。 - i ll make you happy - true: 我会让你幸福的。 - pred: 我会让你幸福的。 - she s a bit naive - true: 她有点天真。 - pred: 她有点不好。 - she can speak three languages - true: 她會講三種語言。 - pred: 她會講英語和法语。 - he was willing to work for others - true: 他願意為別人工作。 - pred: 他願意為別人工作。 - they make frequent trips to europe - true: 他們經常去歐洲。 - pred: 他們經常去歐洲。 - i don t eat chicken skin - true: 我吃不下鸡皮。 - pred: 我不太想过。 - you need to know - true: 你有必要了解。 - pred: 你需要知道。 - i forgot to ask him - true: 我忘了問他。 - pred: 我忘了他爸爸。 - i knew that something was wrong - true: 我知道有些事不對。 - pred: 我知道有些事不。 + i ll get you some coffee + true: 我會給你帶些咖啡。 + pred: 我會給你一個問題。 + you have to be patient + true: 你必須有耐心。 + pred: 你必須有耐心。 + she said she had a cold + true: 她說她感冒了。 + pred: 她看起来很多柳橙。 + i am familiar with this neighborhood + true: 我對這附近很熟悉。 + pred: 我正在這裡结婚。 + i must make up for the loss + true: 我必须弥补损失。 + pred: 我必须弥补损失。 + we ve got to get you out of here + true: 我們必須把你带走。 + pred: 我們要你帮我。 + i was kept waiting for nearly half an hour + true: 我等了接近半小时。 + pred: 我在等給我一個問題。 + he did not get up early + true: 他没有早起。 + pred: 他没有学习。 + he kicked the ball into the goal + true: 他把球踢進了球門。 + pred: 他把球扔了她的丈夫。 + i won + true: 我赢了。 + pred: 我赢了。 The End ------- 你还可以通过变换网络结构,调整数据集,尝试不同的参数的方式来进一步提升本示例当中的机器翻译的效果。同时,也可以尝试在其他的类似的任务中用飞桨来完成实际的实践。 - diff --git a/doc/paddle/tutorial/quick_start/dynamic_graph/dynamic_graph.rst b/doc/paddle/tutorial/quick_start/dynamic_graph/dynamic_graph.rst index 40d28bb448a..9468ecfd7d8 100644 --- a/doc/paddle/tutorial/quick_start/dynamic_graph/dynamic_graph.rst +++ b/doc/paddle/tutorial/quick_start/dynamic_graph/dynamic_graph.rst @@ -1,14 +1,18 @@ 动态图 ====== -从飞桨开源框架2.0RC1版本开始,飞桨默认为用户开启了动态图开发模式。在这种模式下,每次执行一个运算,可以立即得到结果(而不是事先定义好网络结构,然后再执行)。 +**作者:** `PaddlePaddle `__ -在动态图模式下,您可以更加方便的组织代码,更容易的调试程序,本示例教程将向你介绍飞桨的动态图的使用。 +**日期:** 2021.01 -设置环境 --------- +**摘要:** 从飞桨开源框架2.0版本开始,飞桨默认为用户开启了动态图开发模式。在这种模式下,每次执行一个运算,可以立即得到结果(而不是事先定义好网络结构,然后再执行)。在动态图模式下,你可以更加方便的组织代码,更容易的调试程序,本示例教程将向你介绍飞桨的动态图的使用。 -我们将使用飞桨2.0RC1版本,从该版本开始,飞桨框架默认开启了动态图模式。 +一、环境配置 +------------ + +本教程基于Paddle 2.0 +编写,如果您的环境不是本版本,请先参考官网\ `安装 `__ +Paddle 2.0 。 .. code:: ipython3 @@ -21,13 +25,13 @@ .. parsed-literal:: - 2.0.0-rc1 + 2.0.0 -基本用法 --------- +二、基本用法 +------------ -在动态图模式下,您可以直接运行一个飞桨提供的API,它会立刻返回结果到python。不再需要首先创建一个计算图,然后再给定数据去运行。 +在动态图模式下,ni可以直接运行一个飞桨提供的API,它会立刻返回结果到python。不再需要首先创建一个计算图,然后再给定数据去运行。 .. code:: ipython3 @@ -47,23 +51,23 @@ .. parsed-literal:: Tensor(shape=[4, 2], dtype=float32, place=CPUPlace, stop_gradient=True, - [[-0.84287941, -0.43028113], - [-0.95773113, 0.47691804], - [ 0.06073142, -1.07852530], - [ 0.58765173, -0.16525090]]) + [[-0.69923532, 0.61731714], + [-0.73845196, -0.32286811], + [ 1.05555582, 0.83517230], + [-0.54771936, 0.10178845]]) Tensor(shape=[2], dtype=float32, place=CPUPlace, stop_gradient=True, [1., 2.]) Tensor(shape=[4, 2], dtype=float32, place=CPUPlace, stop_gradient=True, - [[0.15712059, 1.56971884], - [0.04226887, 2.47691798], - [1.06073141, 0.92147470], - [1.58765173, 1.83474910]]) + [[0.30076468, 2.61731720], + [0.26154804, 1.67713189], + [2.05555582, 2.83517218], + [0.45228064, 2.10178852]]) Tensor(shape=[4], dtype=float32, place=CPUPlace, stop_gradient=True, - [-1.70344162, -0.00389504, -2.09631920, 0.25714993]) + [ 0.53539896, -1.38418818, 2.72590041, -0.34414244]) -使用python的控制流 ------------------- +三、使用python的控制流 +---------------------- 动态图模式下,您可以使用python的条件判断和循环,这类控制语句来执行神经网络的计算。(不再需要\ ``cond``, ``loop``\ 这类OP) @@ -87,19 +91,19 @@ .. parsed-literal:: 0 +> [5 6 7] - 1 -> [-3 -3 -3] + 1 +> [5 7 9] 2 +> [ 5 9 15] 3 -> [-3 3 21] - 4 -> [-3 11 75] + 4 +> [ 5 21 87] 5 -> [ -3 27 237] 6 +> [ 5 69 735] - 7 +> [ 5 133 2193] - 8 +> [ 5 261 6567] + 7 -> [ -3 123 2181] + 8 -> [ -3 251 6555] 9 -> [ -3 507 19677] -构建更加灵活的网络:控制流 --------------------------- +四、构建更加灵活的网络:控制流 +------------------------------ - 使用动态图可以用来创建更加灵活的网络,比如根据控制流选择不同的分支网络,和方便的构建权重共享的网络。接下来我们来看一个具体的例子,在这个例子中,第二个线性变换只有0.5的可能性会运行。 - 在sequence to sequence with @@ -173,8 +177,8 @@ 2800 [0.00051033] -构建更加灵活的网络:共享权重 ----------------------------- +五、构建更加灵活的网络:共享权重 +-------------------------------- - 使用动态图还可以更加方便的创建共享权重的网络,下面的示例展示了一个共享了权重的简单的AutoEncoder。 - 你也可以参考图像搜索的示例看到共享参数权重的更实际的使用。 @@ -200,20 +204,19 @@ .. parsed-literal:: - step: 0, loss: [0.33854288] - step: 1, loss: [0.30896515] - step: 2, loss: [0.28540164] - step: 3, loss: [0.25925428] - step: 4, loss: [0.22952458] - step: 5, loss: [0.19782335] - step: 6, loss: [0.16653982] - step: 7, loss: [0.13852617] - step: 8, loss: [0.11632853] - step: 9, loss: [0.10132948] + step: 0, loss: [0.33400834] + step: 1, loss: [0.31674492] + step: 2, loss: [0.29477125] + step: 3, loss: [0.2680785] + step: 4, loss: [0.23595281] + step: 5, loss: [0.20035137] + step: 6, loss: [0.16562223] + step: 7, loss: [0.13548139] + step: 8, loss: [0.11210174] + step: 9, loss: [0.09638017] -The end +The End ------- 可以看到使用动态图带来了更灵活易用的方式来组网和训练。你也可以在【使用注意力机制的LSTM的机器翻译】和【图片检索】两个示例中看到更完整的动态图的实际应用的灵活和便利。 - diff --git a/doc/paddle/tutorial/quick_start/getting_started/getting_started.rst b/doc/paddle/tutorial/quick_start/getting_started/getting_started.rst deleted file mode 100644 index 8358739f948..00000000000 --- a/doc/paddle/tutorial/quick_start/getting_started/getting_started.rst +++ /dev/null @@ -1,122 +0,0 @@ -快速上手飞桨(PaddlePaddle) -============================ - -本示例通过一个基础案例带您从一个飞桨新手快速掌握如何使用。 - -1. 安装飞桨 ------------ - -如果您已经安装好飞桨那么可以跳过此步骤。我们针对用户提供了一个方便易用的安装引导页面,您可以通过选择自己的系统和软件版本来获取对应的安装命令,具体可以点击\ `快速安装 `__\ 查看。 - -2. 导入飞桨 ------------ - -这个示例我们采用了Notebook的形式来进行编写,您可以直接通过AIStudio或Jupyter等平台工具来运行这个案例,Notebook的好处是可以通过浏览器来运行Python程序,边看教程边运行结果,可以对比学习,并且可以做到单步运行调试。 - -安装好飞桨后我们就可以在Python程序中进行飞桨的导入。 - -.. code:: ipython3 - - import paddle - - print(paddle.__version__) - - -.. parsed-literal:: - - 2.0.0-rc1 - - -3. 实践一个手写数字识别任务 ---------------------------- - -对于深度学习任务如果简单来看,其实分为几个核心步骤:1. -数据集的准备和加载;2. -模型的构建;3.模型训练;4.模型评估。那么接下来我们就一步一步带您通过飞桨的少量API快速实现。 - -3.1 数据加载 -~~~~~~~~~~~~ - -加载我们框架为您准备好的一个手写数字识别数据集。这里我们使用两个数据集,一个用来做模型的训练,一个用来做模型的评估。 - -.. code:: ipython3 - - from paddle.vision.transforms import ToTensor - train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=ToTensor()) - val_dataset = paddle.vision.datasets.MNIST(mode='test', transform=ToTensor()) - -3.2 模型搭建 -~~~~~~~~~~~~ - -通过Sequential将一层一层的网络结构组建起来。通过数据集加载接口的chw_format参数我们已经将[1, -28, 28]形状的图片数据改变形状为[1, -784],那么在组网过程中不在需要先进行Flatten操作。 - -.. code:: ipython3 - - mnist = paddle.nn.Sequential( - paddle.nn.Flatten(), - paddle.nn.Linear(784, 512), - paddle.nn.ReLU(), - paddle.nn.Dropout(0.2), - paddle.nn.Linear(512, 10) - ) - -3.3 模型训练 -~~~~~~~~~~~~ - -配置好我们模型训练需要的损失计算方法和优化方法后就可以使用fit接口来开启我们的模型训练过程。 - -.. code:: ipython3 - - # 预计模型结构生成模型实例,便于进行后续的配置、训练和验证 - model = paddle.Model(mnist) - - # 模型训练相关配置,准备损失计算方法,优化器和精度计算方法 - model.prepare(paddle.optimizer.Adam(parameters=mnist.parameters()), - paddle.nn.CrossEntropyLoss(), - paddle.metric.Accuracy()) - - # 开始模型训练 - model.fit(train_dataset, - epochs=5, - batch_size=64, - verbose=1) - - -.. parsed-literal:: - - The loss value printed in the log is the current step, and the metric is the average value of previous step. - Epoch 1/5 - step 938/938 [==============================] - loss: 0.0041 - acc: 0.9888 - 20ms/step - Epoch 2/5 - step 938/938 [==============================] - loss: 0.0052 - acc: 0.9920 - 21ms/step - Epoch 3/5 - step 938/938 [==============================] - loss: 3.9123e-04 - acc: 0.9935 - 20ms/step - Epoch 4/5 - step 938/938 [==============================] - loss: 8.1244e-04 - acc: 0.9938 - 19ms/step - Epoch 5/5 - step 938/938 [==============================] - loss: 0.0052 - acc: 0.9940 - 18ms/step - - -3.4 模型评估 -~~~~~~~~~~~~ - -使用我们刚才训练得到的模型参数进行模型的评估操作,看看我们的模型精度如何。 - -.. code:: ipython3 - - model.evaluate(val_dataset, verbose=0) - - - - -.. parsed-literal:: - - {'loss': [0.0], 'acc': 0.9814} - - - -那么初步训练得到的模型效果在98%附近,我们可以进一步通过调整其中的训练参数来提升我们的模型精度。 - -至此我们可以知道如何通过飞桨的几个简单API来快速完成一个深度学习任务,大家可以针对自己的需求来更换其中的代码,如果需要使用自己的数据集,那么可以更换数据集加载部分程序,如果需要替换模型,那么可以更改模型代码实现等等。我们也为大家提供了很多其他场景的示例代码来教大家如何使用我们的飞桨API,大家可以查看下面的链接或通过页面导航来查看自己感兴趣的部分。 diff --git a/doc/paddle/tutorial/quick_start/hello_paddle/hello_paddle.rst b/doc/paddle/tutorial/quick_start/hello_paddle/hello_paddle.rst index b86976dc172..7bf520e3bcc 100644 --- a/doc/paddle/tutorial/quick_start/hello_paddle/hello_paddle.rst +++ b/doc/paddle/tutorial/quick_start/hello_paddle/hello_paddle.rst @@ -1,10 +1,14 @@ -Hello Paddle: 从普通程序走向机器学习程序 +hello paddle: 从普通程序走向机器学习程序 ======================================== -这篇示例向你介绍普通的程序跟机器学习程序的区别,并带着你用飞桨框架,实现你的第一个机器学习程序。 +**作者:** `PaddlePaddle `__ -普通程序跟机器学习程序的逻辑区别 --------------------------------- +**日期:** 2021.01 + +**摘要:** 这篇示例向你介绍普通的程序跟机器学习程序的区别,并带着你用飞桨框架,实现你的第一个机器学习程序。 + +一、普通程序跟机器学习程序的逻辑区别 +------------------------------------ 作为一名开发者,你最熟悉的开始学习一门编程语言,或者一个深度学习框架的方式,可能是通过一个hello, world程序。 @@ -50,13 +54,14 @@ world程序。 接下来,我们看看用飞桨如何实现这个hello, world级别的机器学习程序。 -导入飞桨 --------- +二、导入飞桨 +------------ 为了能够使用飞桨,我们需要先用python的\ ``import``\ 语句导入飞桨\ ``paddle``\ 。 同时,为了能够更好的对数组进行计算和处理,我们也还需要导入\ ``numpy``\ 。 -如果你是在本机运行这个notebook,而且还没有安装飞桨,可以去飞桨的官网查看如何安装:\ `飞桨官网 `__\ 。并且请使用2.0RC或以上版本的飞桨。 +如果你是在本机运行这个notebook,而且还没有安装飞桨,请先参考官网\ `安装 `__ +Paddle 2.0 。 .. code:: ipython3 @@ -66,11 +71,11 @@ world程序。 .. parsed-literal:: - paddle 2.0.0-rc1 + paddle 2.0.0 -准备数据 --------- +三、准备数据 +------------ 在这个机器学习任务中,我们已经知道了乘客的行驶里程\ ``distance_travelled``\ ,和对应的,这些乘客的总费用\ ``total_fee``\ 。 通常情况下,在机器学习任务中,像\ ``distance_travelled``\ 这样的输入值,一般被称为\ ``x``\ (或者特征\ ``feature``\ ),像\ ``total_fee``\ 这样的输出值,一般被称为\ ``y``\ (或者标签\ ``label``)。 @@ -82,8 +87,8 @@ world程序。 x_data = paddle.to_tensor([[1.], [3.0], [5.0], [9.0], [10.0], [20.0]]) y_data = paddle.to_tensor([[12.], [16.0], [20.0], [28.0], [30.0], [50.0]]) -用飞桨定义模型的计算 --------------------- +四、用飞桨定义模型的计算 +------------------------ 使用飞桨定义模型的计算的过程,本质上,是我们用python,通过飞桨提供的API,来告诉飞桨我们的计算规则的过程。回顾一下,我们想要通过飞桨用机器学习方法,从数据当中学习出来如下公式当中的\ ``w``\ 和\ ``b``\ 。这样在未来,给定\ ``x``\ 时就可以估算出来\ ``y``\ 值(估算出来的\ ``y``\ 记为\ ``y_predict``\ ) @@ -93,8 +98,7 @@ world程序。 我们将会用飞桨的线性变换层:\ ``paddle.nn.Linear``\ 来实现这个计算过程,这个公式里的变量\ ``x, y, w, b, y_predict``\ ,对应着飞桨里面的\ `Tensor概念 `__\ 。 -稍微补充一下 -~~~~~~~~~~~~ +**稍微补充一下** 在这里的示例中,我们根据经验,已经事先知道了\ ``distance_travelled``\ 和\ ``total_fee``\ 之间是线性的关系,而在更实际的问题当中,\ ``x``\ 和\ ``y``\ 的关系通常是非线性的,因此也就需要使用更多类型,也更复杂的神经网络。(比如,BMI指数跟你的身高就不是线性关系,一张图片里的某个像素值跟这个图片是猫还是狗也不是线性关系。) @@ -102,8 +106,8 @@ world程序。 linear = paddle.nn.Linear(in_features=1, out_features=1) -准备好运行飞桨 --------------- +五、准备好运行飞桨 +------------------ 机器(计算机)在一开始的时候会随便猜\ ``w``\ 和\ ``b``\ ,我们先看看机器猜的怎么样。你应该可以看到,这时候的\ ``w``\ 是一个随机值,\ ``b``\ 是0.0,这是飞桨的初始化策略,也是这个领域常用的初始化策略。(如果你愿意,也可以采用其他的初始化的方式,今后你也会看到,选择不同的初始化策略也是对于做好深度学习任务来说很重要的一点)。 @@ -118,12 +122,12 @@ world程序。 .. parsed-literal:: - w before optimize: 0.6917380094528198 + w before optimize: -1.251381754875183 b before optimize: 0.0 -告诉飞桨怎么样学习 ------------------- +六、告诉飞桨怎么样学习 +---------------------- 前面我们定义好了神经网络(尽管是一个最简单的神经网络),我们还需要告诉飞桨,怎么样去\ **学习**\ ,从而能得到参数\ ``w``\ 和\ ``b``\ 。 @@ -141,8 +145,8 @@ descent)作为优化算法(传给\ ``paddle.optimizer.SGD``\ 的参数\ ``lear mse_loss = paddle.nn.MSELoss() sgd_optimizer = paddle.optimizer.SGD(learning_rate=0.001, parameters = linear.parameters()) -运行优化算法 ------------- +七、运行优化算法 +---------------- 接下来,我们让飞桨运行一下这个优化算法,这会是一个前面介绍过的逐步调整参数的过程,你应该可以看到loss值(衡量\ ``y``\ 和\ ``y_predict``\ 的差距的\ ``loss``)在不断的降低。 @@ -164,16 +168,16 @@ descent)作为优化算法(传给\ ``paddle.optimizer.SGD``\ 的参数\ ``lear .. parsed-literal:: - epoch 0 loss [485.04092] - epoch 1000 loss [8.149743] - epoch 2000 loss [1.8222207] - epoch 3000 loss [0.4074264] - epoch 4000 loss [0.09109598] - finished training, loss [0.02039883] + epoch 0 loss [1705.5599] + epoch 1000 loss [7.90143] + epoch 2000 loss [1.7666904] + epoch 3000 loss [0.39501688] + epoch 4000 loss [0.08832262] + finished training, loss [0.01977889] -机器学习出来的参数 ------------------- +八、机器学习出来的参数 +---------------------- 经过了这样的对参数\ ``w``\ 和\ ``b``\ 的调整(\ **学习**),我们再通过下面的程序,来看看现在的参数变成了多少。你应该会发现\ ``w``\ 变成了很接近2.0的一个值,\ ``b``\ 变成了接近10.0的一个值。虽然并不是正好的2和10,但却是从数据当中学习出来的还不错的模型的参数,可以在未来的时候,用从这批数据当中学习到的参数来预估了。(如果你愿意,也可以通过让机器多学习一段时间,从而得到更加接近2.0和10.0的参数值。) @@ -193,8 +197,8 @@ descent)作为优化算法(传给\ ``paddle.optimizer.SGD``\ 的参数\ ``lear b after optimize: 9.767448425292969 -hello paddle ------------- +九、hello paddle +---------------- 通过这个小示例,希望你已经初步了解了飞桨,能在接下来随着对飞桨的更多学习,来解决实际遇到的问题。 diff --git a/doc/paddle/tutorial/quick_start/high_level_api/high_level_api.rst b/doc/paddle/tutorial/quick_start/high_level_api/high_level_api.rst index 7dfb4c24e2c..a2e52a3edd2 100644 --- a/doc/paddle/tutorial/quick_start/high_level_api/high_level_api.rst +++ b/doc/paddle/tutorial/quick_start/high_level_api/high_level_api.rst @@ -1,8 +1,14 @@ 飞桨高层API使用指南 =================== -1. 简介 -------- +**作者:** `PaddlePaddle `__ + +**日期:** 2021.01 + +**摘要:** 本示例教程是对飞桨高层API的详细说明,会介绍如何使用高层API,快速完成深度学习任务。 + +一、简介 +-------- 飞桨框架2.0全新推出高层API,是对飞桨API的进一步封装与升级,提供了更加简洁易用的API,进一步提升了飞桨的易学易用性,并增强飞桨的功能。 @@ -26,10 +32,13 @@ - 提供常用的神经网络模型可供调用: 高层API中集成了计算机视觉领域和自然语言处理领域常用模型,包括但不限于mobilenet、resnet、yolov3、cyclegan、bert、transformer、seq2seq等等。同时发布了对应模型的预训练模型,用户可以直接使用这些模型或者在此基础上完成二次开发。 -2. 安装并使用飞桨高层API ------------------------- +二、安装并使用飞桨高层API +------------------------- -飞桨高层API无需独立安装,只需要安装好paddlepaddle即可,安装完成后import +飞桨高层API无需独立安装,只需要安装好paddlepaddle即可。如果您的环境不是本版本,请先参考官网\ `安装 `__ +Paddle 2.0 。 + +安装完成后import paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.vision、NLP领域paddle.text。 .. code:: ipython3 @@ -45,12 +54,12 @@ paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.visi .. parsed-literal:: - '2.0.0-rc1' + '2.0.0' -2. 目录 -------- +三、目录 +-------- 本指南教学内容覆盖 @@ -62,12 +71,12 @@ paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.visi - 如何在fit接口满足需求的时候进行自定义,使用基础API来完成训练。 - 如何使用多卡来加速训练。 -3. 数据集定义、加载和数据预处理 -------------------------------- +四、数据集定义、加载和数据预处理 +-------------------------------- 对于深度学习任务,均是框架针对各种类型数字的计算,是无法直接使用原始图片和文本等文件来完成。那么就是涉及到了一项动作,就是将原始的各种数据文件进行处理加工,转换成深度学习任务可以使用的数据。 -3.1 框架自带数据集使用 +4.1 框架自带数据集使用 ~~~~~~~~~~~~~~~~~~~~~~ 高层API将一些我们常用到的数据集作为领域API对用户进行开放,对应API所在目录为\ ``paddle.vision.datasets``\ ,那么我们先看下提供了哪些数据集。 @@ -95,7 +104,7 @@ paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.visi # 验证数据集 val_dataset = vision.datasets.MNIST(mode='test', transform=ToTensor()) -3.2 自定义数据集 +4.2 自定义数据集 ~~~~~~~~~~~~~~~~ 更多的时候我们是需要自己使用已有的相关数据来定义数据集,那么这里我们通过一个案例来了解如何进行数据集的定义,飞桨为用户提供了\ ``paddle.io.Dataset``\ 基类,让用户通过类的集成来快速实现数据集定义。 @@ -172,12 +181,12 @@ paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.visi testdata4 label4 -3.3 数据增强 +4.3 数据增强 ~~~~~~~~~~~~ -训练过程中有时会遇到过拟合的问题,其中一个解决方法就是对训练数据做增强,对数据进行处理得到不同的图像,从而泛化数据集。数据增强API是定义在领域目录的transforms下,这里我们介绍两种使用方式,一种是基于框架自带数据集,一种是基于自己定义的数据集。 +训练过程中有时会遇到过拟合的问题,其中一个解决方法就是对训练数据做增强,对数据进行处理得到不同的图像,从而泛化数据集。数据增强API是定义在领域目录的transofrms下,这里我们介绍两种使用方式,一种是基于框架自带数据集,一种是基于自己定义的数据集。 -3.3.1 框架自带数据集 +4.3.1 框架自带数据集 ^^^^^^^^^^^^^^^^^^^^ .. code:: ipython3 @@ -191,7 +200,7 @@ paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.visi # 通过transform参数传递定义好的数据增项方法即可完成对自带数据集的应用 train_dataset_3 = vision.datasets.MNIST(mode='train', transform=transform) -3.3.2 自定义数据集 +4.3.2 自定义数据集 ^^^^^^^^^^^^^^^^^^ 针对自定义数据集使用数据增强有两种方式,一种是在数据集的构造函数中进行数据增强方法的定义,之后对__getitem__中返回的数据进行应用。另外一种方式也可以给自定义的数据集类暴漏一个构造参数,在实例化类的时候将数据增强方法传递进去。 @@ -237,12 +246,12 @@ paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.visi def __len__(self): return len(self.data) -4. 模型组网 ------------ +五、模型组网 +------------ 针对高层API在模型组网上和基础API是统一的一套,无需投入额外的学习使用成本。那么这里我举几个简单的例子来做示例。 -4.1 Sequential组网 +5.1 Sequential组网 ~~~~~~~~~~~~~~~~~~ 针对顺序的线性网络结构我们可以直接使用Sequential来快速完成组网,可以减少类的定义等代码编写。 @@ -258,7 +267,7 @@ paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.visi paddle.nn.Linear(512, 10) ) -4.2 SubClass组网 +5.2 SubClass组网 ~~~~~~~~~~~~~~~~ 针对一些比较复杂的网络结构,就可以使用Layer子类定义的方式来进行模型代码编写,在\ ``__init__``\ 构造函数中进行组网Layer的声明,在\ ``forward``\ 中使用声明的Layer变量进行前向计算。子类组网方式也可以实现sublayer的复用,针对相同的layer可以在构造函数中一次性定义,在forward中多次调用。 @@ -287,7 +296,7 @@ paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.visi mnist_2 = Mnist() -4.3 模型封装 +5.3 模型封装 ~~~~~~~~~~~~ 定义好网络结构之后我们来使用\ ``paddle.Model``\ 完成模型的封装,将网络结构组合成一个可快速使用高层API进行训练、评估和预测的类。 @@ -319,7 +328,7 @@ paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.visi # label = paddle.static.InputSpec([None, 1], dtype='int8') # model = paddle.Model(mnist, input, label) -4.4 模型可视化 +5.4 模型可视化 ~~~~~~~~~~~~~~ 在组建好我们的网络结构后,一般我们会想去对我们的网络结构进行一下可视化,逐层的去对齐一下我们的网络结构参数,看看是否符合我们的预期。这里可以通过\ ``Model.summary``\ 接口进行可视化展示。 @@ -400,8 +409,8 @@ paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.visi 这里面有一个注意的点,有的用户可能会疑惑为什么要传递\ ``(1, 28, 28)``\ 这个input_size参数,因为在动态图中,网络定义阶段是还没有得到输入数据的形状信息,我们想要做网络结构的呈现就无从下手,那么我们通过告知接口网络结构的输入数据形状,这样网络可以通过逐层的计算推导得到完整的网络结构信息进行呈现。如果是动态图运行模式,那么就不需要给summary接口传递输入数据形状这个值了,因为在Model封装的时候我们已经定义好了InputSpec,其中包含了输入数据的形状格式。 -5. 模型训练 ------------ +六、模型训练 +------------ 网络结构通过\ ``paddle.Model``\ 接口封装成模型类后进行执行操作非常的简洁方便,可以直接通过调用\ ``Model.fit``\ 就可以完成训练过程。 @@ -429,15 +438,15 @@ paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.visi The loss value printed in the log is the current step, and the metric is the average value of previous step. Epoch 1/5 - step 938/938 [==============================] - loss: 0.1019 - acc: 0.9488 - 18ms/step + step 938/938 [==============================] - loss: 0.1108 - acc: 0.9353 - 16ms/step Epoch 2/5 - step 938/938 [==============================] - loss: 0.0193 - acc: 0.9757 - 18ms/step + step 938/938 [==============================] - loss: 0.1086 - acc: 0.9716 - 16ms/step Epoch 3/5 - step 938/938 [==============================] - loss: 0.0277 - acc: 0.9810 - 19ms/step + step 938/938 [==============================] - loss: 0.0225 - acc: 0.9790 - 16ms/step Epoch 4/5 - step 938/938 [==============================] - loss: 0.0045 - acc: 0.9849 - 18ms/step + step 938/938 [==============================] - loss: 0.0064 - acc: 0.9826 - 16ms/step Epoch 5/5 - step 938/938 [==============================] - loss: 0.0816 - acc: 0.9877 - 18ms/step + step 938/938 [==============================] - loss: 0.0418 - acc: 0.9865 - 16ms/step 注: @@ -451,7 +460,7 @@ paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.visi ... model.fit(train_dataloader, ...) -5.1 单机单卡 +6.1 单机单卡 ~~~~~~~~~~~~ 我们把刚才单步教学的训练代码做一个整合,这个完整的代码示例就是我们的单机单卡训练程序。 @@ -480,18 +489,18 @@ paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.visi The loss value printed in the log is the current step, and the metric is the average value of previous step. Epoch 1/5 - step 938/938 [==============================] - loss: 0.0305 - acc: 0.9880 - 19ms/step + step 938/938 [==============================] - loss: 0.0261 - acc: 0.9879 - 16ms/step Epoch 2/5 - step 938/938 [==============================] - loss: 0.0021 - acc: 0.9918 - 18ms/step + step 938/938 [==============================] - loss: 0.0502 - acc: 0.9907 - 16ms/step Epoch 3/5 - step 938/938 [==============================] - loss: 0.0022 - acc: 0.9926 - 18ms/step + step 938/938 [==============================] - loss: 0.0486 - acc: 0.9924 - 16ms/step Epoch 4/5 - step 938/938 [==============================] - loss: 0.0124 - acc: 0.9932 - 18ms/step + step 938/938 [==============================] - loss: 0.0040 - acc: 0.9928 - 17ms/step Epoch 5/5 - step 938/938 [==============================] - loss: 0.0434 - acc: 0.9942 - 18ms/step + step 938/938 [==============================] - loss: 0.0941 - acc: 0.9941 - 18ms/step -5.2 单机多卡 +6.2 单机多卡 ~~~~~~~~~~~~ 对于高层API来实现单机多卡非常简单,整个训练代码和单机单卡没有差异。直接使用\ ``paddle.distributed.launch``\ 启动单机单卡的程序即可。 @@ -502,7 +511,7 @@ paddle即可使用相关高层API,如:paddle.Model、视觉领域paddle.visi train.py里面包含的就是单机单卡代码 -5.3 自定义Loss +6.3 自定义Loss ~~~~~~~~~~~~~~ 有时我们会遇到特定任务的Loss计算方式在框架既有的Loss接口中不存在,或算法不符合自己的需求,那么期望能够自己来进行Loss的自定义,我们这里就会讲解介绍一下如何进行Loss的自定义操作,首先来看下面的代码: @@ -546,7 +555,7 @@ train.py里面包含的就是单机单卡代码 axis=1) return paddle.mean(loss) -5.4 自定义Metric +6.4 自定义Metric ~~~~~~~~~~~~~~~~ 和Loss一样,如果遇到一些想要做个性化实现的操作时,我们也可以来通过框架完成自定义的评估计算方法,具体的实现方式如下: @@ -682,7 +691,7 @@ train.py里面包含的就是单机单卡代码 """ return self._name -5.5 自定义Callback +6.5 自定义Callback ~~~~~~~~~~~~~~~~~~ ``fit``\ 接口的callback参数支持我们传一个Callback类实例,用来在每轮训练和每个batch训练前后进行调用,可以通过callback收集到训练过程中的一些数据和参数,或者实现一些自定义操作。 @@ -697,16 +706,16 @@ train.py里面包含的就是单机单卡代码 def on_train_end(self, logs=None) 训练结束后,`Model.fit`接口中调用 def on_eval_begin(self, logs=None) 评估开始前,`Model.evaluate`接口调用 def on_eval_end(self, logs=None) 评估结束后,`Model.evaluate`接口调用 - def on_predict_begin(self, logs=None) 预测测试开始前,`Model.predict`接口中调用 - def on_predict_end(self, logs=None) 预测测试结束后,`Model.predict`接口中调用 + def on_test_begin(self, logs=None) 预测测试开始前,`Model.predict`接口中调用 + def on_test_end(self, logs=None) 预测测试结束后,`Model.predict`接口中调用 def on_epoch_begin(self, epoch, logs=None) 每轮训练开始前,`Model.fit`接口中调用 def on_epoch_end(self, epoch, logs=None) 每轮训练结束后,`Model.fit`接口中调用 def on_train_batch_begin(self, step, logs=None) 单个Batch训练开始前,`Model.fit`和`Model.train_batch`接口中调用 def on_train_batch_end(self, step, logs=None) 单个Batch训练结束后,`Model.fit`和`Model.train_batch`接口中调用 def on_eval_batch_begin(self, step, logs=None) 单个Batch评估开始前,`Model.evalute`和`Model.eval_batch`接口中调用 def on_eval_batch_end(self, step, logs=None) 单个Batch评估结束后,`Model.evalute`和`Model.eval_batch`接口中调用 - def on_predict_batch_begin(self, step, logs=None) 单个Batch预测测试开始前,`Model.predict`和`Model.test_batch`接口中调用 - def on_predict_batch_end(self, step, logs=None) 单个Batch预测测试结束后,`Model.predict`和`Model.test_batch`接口中调用 + def on_test_batch_begin(self, step, logs=None) 单个Batch预测测试开始前,`Model.predict`和`Model.test_batch`接口中调用 + def on_test_batch_end(self, step, logs=None) 单个Batch预测测试结束后,`Model.predict`和`Model.test_batch`接口中调用 """ def __init__(self): super(SelfDefineCallback, self).__init__() @@ -740,8 +749,8 @@ train.py里面包含的就是单机单卡代码 print('save checkpoint at {}'.format(os.path.abspath(path))) self.model.save(path) -6. 模型评估 ------------ +七、模型评估 +------------ 对于训练好的模型进行评估操作可以使用\ ``evaluate``\ 接口来实现,事先定义好用于评估使用的数据集后,可以简单的调用\ ``evaluate``\ 接口即可完成模型评估操作,结束后根据prepare中loss和metric的定义来进行相关评估结果计算返回。 @@ -758,10 +767,12 @@ train.py里面包含的就是单机单卡代码 Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 5150/10000 [==============>...............] - loss: 3.5763e-07 - acc: 0.9742 - ETA: 6s - 1ms/step + step 10000/10000 [==============================] - loss: 0.0000e+00 - acc: 0.9818 - 1ms/step + Eval samples: 10000 + -7. 模型预测 ------------ +八、模型预测 +------------ 高层API中提供了\ ``predict``\ 接口来方便用户对训练好的模型进行预测验证,只需要基于训练好的模型将需要进行预测测试的数据放到接口中进行计算即可,接口会将经过模型计算得到的预测结果进行返回。 @@ -785,7 +796,7 @@ numpy_ndarray_n是对应原始数据经过模型计算后得到的预测数据 Predict samples: 10000 -7.1 使用多卡进行预测 +8.1 使用多卡进行预测 ~~~~~~~~~~~~~~~~~~~~ 有时我们需要进行预测验证的数据较多,单卡无法满足我们的时间诉求,那么\ ``predict``\ 接口也为用户支持实现了使用多卡模式来运行。 @@ -798,10 +809,10 @@ numpy_ndarray_n是对应原始数据经过模型计算后得到的预测数据 infer.py里面就是包含model.predict的代码程序。 -8. 模型部署 ------------ +九、模型部署 +------------ -8.1 模型存储 +9.1 模型存储 ~~~~~~~~~~~~ 模型训练和验证达到我们的预期后,可以使用\ ``save``\ 接口来将我们的模型保存下来,用于后续模型的Fine-tuning(接口参数training=True)或推理部署(接口参数training=False)。 @@ -834,7 +845,7 @@ infer.py里面就是包含model.predict的代码程序。 model.save('~/model/mnist') -8.2 预测部署 +9.2 预测部署 ~~~~~~~~~~~~ 有了用于推理部署的模型,就可以使用推理部署框架来完成预测服务部署,具体可以参见:\ `预测部署 `__\ , diff --git a/doc/paddle/tutorial/quick_start/index_cn.rst b/doc/paddle/tutorial/quick_start/index_cn.rst index 8c90bc463cb..d4870547bc2 100644 --- a/doc/paddle/tutorial/quick_start/index_cn.rst +++ b/doc/paddle/tutorial/quick_start/index_cn.rst @@ -7,7 +7,6 @@ - `hello paddle <./hello_paddle/hello_paddle.html>`_ :简单介绍 Paddle,完成您的第一个Paddle项目。 - `Paddle 动态图 <./dynamic_graph/dynamic_graph.html>`_ :介绍使用 Paddle 动态图。 - - `高层API快速上手 <./getting_started/getting_started.html>`_ :介绍Paddle高层API,快速完成模型搭建。 - `高层API详细介绍 <./high_level_api/high_level_api.html>`_ :详细介绍Paddle高层API。 - `模型加载与保存 <./save_model/save_model.html>`_ :介绍Paddle 模型的加载与保存。 - `线性回归 <./linear_regression/linear_regression.html>`_ :介绍使用 Paddle 实现线性回归任务。 @@ -19,7 +18,6 @@ hello_paddle/hello_paddle.rst dynamic_graph/dynamic_graph.rst - getting_started/getting_started.rst high_level_api/high_level_api.rst save_model/save_model.rst linear_regression/linear_regression.rst diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression.rst b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression.rst index 629debb1348..8c8fbd02b97 100644 --- a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression.rst +++ b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression.rst @@ -1,31 +1,24 @@ -线性回归 -======== +使用线性回归预测波士顿房价 +========================== -NOTE: 本示例教程是基于飞桨框架2.0-rc1版本开发 +**作者:** `PaddlePaddle `__ -简要介绍 --------- +**日期:** 2021.01 -经典的线性回归模型主要用来预测一些存在着线性关系的数据集。回归模型可以理解为:存在一个点集,用一条曲线去拟合它分布的过程。如果拟合曲线是一条直线,则称为线性回归。如果是一条二次曲线,则被称为二次回归。线性回归是回归模型中最简单的一种。 -本示例简要介绍如何用飞桨开源框架,实现波士顿房价预测。其思路是,假设uci-housing数据集中的房子属性和房价之间的关系可以被属性间的线性组合描述。在模型训练阶段,让假设的预测结果和真实值之间的误差越来越小。在模型预测阶段,预测器会读取训练好的模型,对从未遇见过的房子属性进行房价预测。 - -数据集介绍 ----------- - -本示例采用uci-housing数据集,这是经典线性回归的数据集。数据集共7084条数据,可以拆分成506行,每行14列。前13列用来描述房屋的各种信息,最后一列为该类房屋价格中位数。 +**摘要:** 本示例教程将会演示如何使用线性回归完成波士顿房价预测。 -前13列用来描述房屋的各种信息 +一、简要介绍 +------------ -.. figure:: https://ai-studio-static-online.cdn.bcebos.com/c19602ce74284e3b9a50422f8dc37c0c1c79cf5cd8424994b6a6b073dcb7c057 - :alt: avatar - - avatar +经典的线性回归模型主要用来预测一些存在着线性关系的数据集。回归模型可以理解为:存在一个点集,用一条曲线去拟合它分布的过程。如果拟合曲线是一条直线,则称为线性回归。如果是一条二次曲线,则被称为二次回归。线性回归是回归模型中最简单的一种。 +本示例简要介绍如何用飞桨开源框架,实现波士顿房价预测。其思路是,假设uci-housing数据集中的房子属性和房价之间的关系可以被属性间的线性组合描述。在模型训练阶段,让假设的预测结果和真实值之间的误差越来越小。在模型预测阶段,预测器会读取训练好的模型,对从未遇见过的房子属性进行房价预测。 -训练方式一 ----------- +二、环境配置 +------------ -环境设置 -~~~~~~~~ +本教程基于Paddle 2.0 +编写,如果您的环境不是本版本,请先参考官网\ `安装 `__ +Paddle 2.0 。 .. code:: ipython3 @@ -42,11 +35,23 @@ NOTE: 本示例教程是基于飞桨框架2.0-rc1版本开发 .. parsed-literal:: - 2.0.0-rc1 + 2.0.0 + + +三、数据集介绍 +-------------- + +本示例采用uci-housing数据集,这是经典线性回归的数据集。数据集共7084条数据,可以拆分成506行,每行14列。前13列用来描述房屋的各种信息,最后一列为该类房屋价格中位数。 + +前13列用来描述房屋的各种信息 + +.. figure:: https://ai-studio-static-online.cdn.bcebos.com/c19602ce74284e3b9a50422f8dc37c0c1c79cf5cd8424994b6a6b073dcb7c057 + :alt: avatar + avatar -数据处理 -~~~~~~~~ +3.1 数据处理 +~~~~~~~~~~~~ .. code:: ipython3 @@ -56,16 +61,16 @@ NOTE: 本示例教程是基于飞桨框架2.0-rc1版本开发 .. parsed-literal:: - --2020-12-16 16:35:05-- https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data + --2021-01-27 18:04:47-- https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data 正在解析主机 archive.ics.uci.edu (archive.ics.uci.edu)... 128.195.10.252 正在连接 archive.ics.uci.edu (archive.ics.uci.edu)|128.195.10.252|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:49082 (48K) [application/x-httpd-php] 正在保存至: “housing.data” - housing.data 100%[===================>] 47.93K 22.9KB/s 用时 2.1s + housing.data 100%[===================>] 47.93K 157KB/s 用时 0.3s - 2020-12-16 16:35:10 (22.9 KB/s) - 已保存 “housing.data” [49082/49082]) + 2021-01-27 18:04:48 (157 KB/s) - 已保存 “housing.data” [49082/49082]) @@ -93,7 +98,7 @@ NOTE: 本示例教程是基于飞桨框架2.0-rc1版本开发 -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_001.png?raw=true +.. image:: linear_regression_files/linear_regression_9_0.png .. code:: ipython3 @@ -106,11 +111,20 @@ NOTE: 本示例教程是基于飞桨框架2.0-rc1版本开发 plt.show() +.. parsed-literal:: -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_002.png?raw=true + /Library/Python/3.8/site-packages/ipykernel/ipkernel.py:287: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above. + and should_run_async(code) -**数据归一化处理**\ 下图为大家展示各属性的取值范围分布: + +.. image:: linear_regression_files/linear_regression_10_1.png + + +3.2 数据归一化处理 +~~~~~~~~~~~~~~~~~~ + +下图为大家展示各属性的取值范围分布: .. code:: ipython3 @@ -121,12 +135,12 @@ NOTE: 本示例教程是基于飞桨框架2.0-rc1版本开发 .. parsed-literal:: - + -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_003.png?raw=true +.. image:: linear_regression_files/linear_regression_12_1.png 从上图看出,我们各属性的数值范围差异太大,甚至不能够在一个画布上充分的展示各属性具体的最大、最小值以及异常值等。下面我们进行归一化。 @@ -175,12 +189,12 @@ NOTE: 本示例教程是基于飞桨框架2.0-rc1版本开发 .. parsed-literal:: - + -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_004.png?raw=true +.. image:: linear_regression_files/linear_regression_18_1.png .. code:: ipython3 @@ -191,8 +205,8 @@ NOTE: 本示例教程是基于飞桨框架2.0-rc1版本开发 train_data = housing_data[:offset] test_data = housing_data[offset:] -模型配置 -~~~~~~~~ +四、模型组网 +------------ 线性回归就是一个从输入到输出的简单的全连接层。 @@ -223,12 +237,17 @@ NOTE: 本示例教程是基于飞桨框架2.0-rc1版本开发 plt.plot(iters, train_costs, color='red', label='training cost') plt.show() -模型训练 -~~~~~~~~ +五、方式1:使用基础API完成模型训练&预测 +--------------------------------------- + +5.1 模型训练 +~~~~~~~~~~~~ 下面为大家展示模型训练的代码。 + 这里用到的是线性回归模型最常用的损失函数–均方误差(MSE),用来衡量模型预测的房价和真实房价的差异。 -对损失函数进行优化所采用的方法是梯度下降法 + +对损失函数进行优化所采用的方法是梯度下降法. .. code:: ipython3 @@ -278,16 +297,16 @@ NOTE: 本示例教程是基于飞桨框架2.0-rc1版本开发 .. parsed-literal:: start training ... - Pass:0,Cost:642.37836 - Pass:50,Cost:80.09798 - Pass:100,Cost:24.53981 - Pass:150,Cost:45.43977 - Pass:200,Cost:29.34225 - Pass:250,Cost:58.18873 - Pass:300,Cost:11.38395 - Pass:350,Cost:48.47935 - Pass:400,Cost:23.04504 - Pass:450,Cost:19.02773 + Pass:0,Cost:724.19617 + Pass:50,Cost:62.97696 + Pass:100,Cost:96.54344 + Pass:150,Cost:49.87206 + Pass:200,Cost:32.18977 + Pass:250,Cost:30.61844 + Pass:300,Cost:42.43702 + Pass:350,Cost:63.68068 + Pass:400,Cost:31.93441 + Pass:450,Cost:18.98611 .. code:: ipython3 @@ -298,13 +317,13 @@ NOTE: 本示例教程是基于飞桨框架2.0-rc1版本开发 -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_005.png?raw=true +.. image:: linear_regression_files/linear_regression_26_0.png 可以从上图看出,随着训练轮次的增加,损失在呈降低趋势。但由于每次仅基于少量样本更新参数和计算损失,所以损失下降曲线会出现震荡。 -模型预测 -~~~~~~~~ +5.2 模型预测 +~~~~~~~~~~~~ .. code:: ipython3 @@ -332,17 +351,17 @@ NOTE: 本示例教程是基于飞桨框架2.0-rc1版本开发 .. parsed-literal:: - No.0: infer result is 11.87,ground truth is 8.50 - No.10: infer result is 4.91,ground truth is 7.00 - No.20: infer result is 14.10,ground truth is 11.70 - No.30: infer result is 15.86,ground truth is 11.70 - No.40: infer result is 13.21,ground truth is 10.80 - No.50: infer result is 15.26,ground truth is 14.90 - No.60: infer result is 18.65,ground truth is 21.40 - No.70: infer result is 15.36,ground truth is 13.80 - No.80: infer result is 18.03,ground truth is 20.60 - No.90: infer result is 21.29,ground truth is 24.50 - Mean loss is: [11.895574] + No.0: infer result is 12.00,ground truth is 8.50 + No.10: infer result is 5.56,ground truth is 7.00 + No.20: infer result is 15.01,ground truth is 11.70 + No.30: infer result is 16.49,ground truth is 11.70 + No.40: infer result is 13.58,ground truth is 10.80 + No.50: infer result is 15.98,ground truth is 14.90 + No.60: infer result is 18.70,ground truth is 21.40 + No.70: infer result is 15.55,ground truth is 13.80 + No.80: infer result is 18.15,ground truth is 20.60 + No.90: infer result is 21.36,ground truth is 24.50 + Mean loss is: [12.574625] .. code:: ipython3 @@ -362,13 +381,13 @@ NOTE: 本示例教程是基于飞桨框架2.0-rc1版本开发 -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_006.png?raw=true +.. image:: linear_regression_files/linear_regression_31_0.png 上图可以看出,我们训练出来的模型的预测结果与真实结果是较为接近的。 -训练方式二 ----------- +六、方式2:使用高层API完成模型训练&预测 +--------------------------------------- 我们也可以用我们的高层API来做线性回归训练,高层API相较于底层API更加的简洁方便。 @@ -402,33 +421,33 @@ NOTE: 本示例教程是基于飞桨框架2.0-rc1版本开发 The loss value printed in the log is the current step, and the metric is the average value of previous step. Epoch 1/5 - step 51/51 [==============================] - loss: 619.0201 - 2ms/step + step 51/51 [==============================] - loss: 628.4189 - 2ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 13/13 [==============================] - loss: 407.2717 - 1ms/step + step 13/13 [==============================] - loss: 385.1105 - 990us/step Eval samples: 102 Epoch 2/5 - step 51/51 [==============================] - loss: 421.7720 - 2ms/step + step 51/51 [==============================] - loss: 416.6072 - 2ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 13/13 [==============================] - loss: 404.6681 - 2ms/step + step 13/13 [==============================] - loss: 382.5877 - 1ms/step Eval samples: 102 Epoch 3/5 - step 51/51 [==============================] - loss: 419.6642 - 3ms/step + step 51/51 [==============================] - loss: 417.1789 - 1ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 13/13 [==============================] - loss: 402.1082 - 2ms/step + step 13/13 [==============================] - loss: 380.1073 - 1ms/step Eval samples: 102 Epoch 4/5 - step 51/51 [==============================] - loss: 429.8277 - 2ms/step + step 51/51 [==============================] - loss: 424.5966 - 1ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 13/13 [==============================] - loss: 399.5636 - 2ms/step + step 13/13 [==============================] - loss: 377.6421 - 972us/step Eval samples: 102 Epoch 5/5 - step 51/51 [==============================] - loss: 457.2235 - 2ms/step + step 51/51 [==============================] - loss: 466.6127 - 1ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 13/13 [==============================] - loss: 397.0019 - 3ms/step + step 13/13 [==============================] - loss: 375.1613 - 925us/step Eval samples: 102 diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_10_1.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_10_1.png new file mode 100644 index 00000000000..056fe7af3ab Binary files /dev/null and b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_10_1.png differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_003.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_12_1.png similarity index 57% rename from doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_003.png rename to doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_12_1.png index e32ac5c1496..60d93811c2b 100644 Binary files a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_003.png and b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_12_1.png differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_18_1.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_18_1.png new file mode 100644 index 00000000000..03eaa83d61b Binary files /dev/null and b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_18_1.png differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_26_0.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_26_0.png new file mode 100644 index 00000000000..b80051bcf12 Binary files /dev/null and b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_26_0.png differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_31_0.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_31_0.png new file mode 100644 index 00000000000..a03a1c06dec Binary files /dev/null and b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_31_0.png differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_9_0.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_9_0.png new file mode 100644 index 00000000000..cb18fde090c Binary files /dev/null and b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/linear_regression_9_0.png differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_001.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_001.png deleted file mode 100644 index 93bfeb67505..00000000000 Binary files a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_001.png and /dev/null differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_002.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_002.png deleted file mode 100644 index f0919d577e6..00000000000 Binary files a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_002.png and /dev/null differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_003.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_003.png deleted file mode 100644 index e32ac5c1496..00000000000 Binary files a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_003.png and /dev/null differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_004.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_004.png deleted file mode 100644 index 1802e0e4227..00000000000 Binary files a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_004.png and /dev/null differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_005.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_005.png deleted file mode 100644 index c74314f568a..00000000000 Binary files a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_005.png and /dev/null differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_006.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_006.png deleted file mode 100644 index 09e269507d8..00000000000 Binary files a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc1_linear_regression_006.png and /dev/null differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_001.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_001.png deleted file mode 100644 index 6994abe634b..00000000000 Binary files a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_001.png and /dev/null differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_002.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_002.png deleted file mode 100644 index f7ca13ff2ac..00000000000 Binary files a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_002.png and /dev/null differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_004.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_004.png deleted file mode 100644 index 1802e0e4227..00000000000 Binary files a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_004.png and /dev/null differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_005.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_005.png deleted file mode 100644 index d7d131a1bc7..00000000000 Binary files a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_005.png and /dev/null differ diff --git a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_006.png b/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_006.png deleted file mode 100644 index def6ca49428..00000000000 Binary files a/doc/paddle/tutorial/quick_start/linear_regression/linear_regression_files/rc_linear_regression_006.png and /dev/null differ diff --git a/doc/paddle/tutorial/quick_start/save_model/save_model.rst b/doc/paddle/tutorial/quick_start/save_model/save_model.rst index a42a1b6fc57..c60330e9373 100644 --- a/doc/paddle/tutorial/quick_start/save_model/save_model.rst +++ b/doc/paddle/tutorial/quick_start/save_model/save_model.rst @@ -1,13 +1,24 @@ 模型保存及加载 ============== -本教程将基于Paddle高阶API对模型参数的保存和加载进行讲解。在日常训练模型过程中我们会遇到一些突发情况,导致训练过程主动或被动的中断,因此在模型没有完全训练好的情况下,我们需要高频的保存下模型参数,在发生意外时可以快速载入保存的参数继续训练;抑或是模型已经训练好了,我们需要使用训练好的参数进行预测或部署模型上线。面对上述情况,Paddle中提供了保存模型和提取模型的方法,支持从上一次保存状态开始训练,只要我们随时保存训练过程中的模型状态,就不用从初始状态重新训练。 +**作者:** `PaddlePaddle `__ + +**日期:** 2021.01 + +**摘要:** 本教程将基于Paddle高阶API对模型参数的保存和加载进行讲解。 + +一、简介 +-------- + +在日常训练模型过程中我们会遇到一些突发情况,导致训练过程主动或被动的中断,因此在模型没有完全训练好的情况下,我们需要高频的保存下模型参数,在发生意外时可以快速载入保存的参数继续训练;抑或是模型已经训练好了,我们需要使用训练好的参数进行预测或部署模型上线。面对上述情况,Paddle中提供了保存模型和提取模型的方法,支持从上一次保存状态开始训练,只要我们随时保存训练过程中的模型状态,就不用从初始状态重新训练。 下面将基于手写数字识别的模型讲解paddle如何保存及加载模型,并恢复训练,网络结构部分的讲解省略。 -环境 ----- +二、环境配置 +------------ -本教程基于paddle-2.0rc1版编写,如果您的环境不是此版本,请先安装paddle-2.0rc1版本 +本教程基于Paddle 2.0 +编写,如果您的环境不是本版本,请先参考官网\ `安装 `__ +Paddle 2.0 。 .. code:: ipython3 @@ -25,11 +36,11 @@ .. parsed-literal:: - 2.0.0-rc1 + 2.0.0 -数据集 ------- +三、数据集 +---------- 手写数字的MNIST数据集,包含60,000个用于训练的示例和10,000个用于测试的示例。这些数字已经过尺寸标准化并位于图像中心,图像是固定大小(28x28像素),其值为0到1。该数据集的官方地址为:http://yann.lecun.com/exdb/mnist/ 本例中我们使用飞桨自带的mnist数据集。使用from paddle.vision.datasets @@ -40,8 +51,8 @@ import MNIST 引入即可。 train_dataset = MNIST(mode='train', transform=ToTensor()) test_dataset = MNIST(mode='test', transform=ToTensor()) -模型搭建 --------- +四、模型组建 +------------ .. code:: ipython3 @@ -71,8 +82,8 @@ import MNIST 引入即可。 x = self.linear3(x) return x -模型训练 --------- +五、模型训练 +------------ 通过\ ``Model`` 构建实例,快速完成模型训练 @@ -102,37 +113,37 @@ import MNIST 引入即可。 The loss value printed in the log is the current step, and the metric is the average value of previous step. Epoch 1/3 - step 938/938 [==============================] - loss: 0.0568 - acc: 0.9394 - 31ms/step - save checkpoint at /Users/chenlong21/online_repo/paddle2.0_docs/save_model/mnist_checkpoint/0 + step 938/938 [==============================] - loss: 0.0398 - acc: 0.9435 - 20ms/step + save checkpoint at /Users/tclong/online_repo/book/paddle2.0_docs/save_model/mnist_checkpoint/0 Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 157/157 [==============================] - loss: 0.0047 - acc: 0.9773 - 26ms/step + step 157/157 [==============================] - loss: 0.0043 - acc: 0.9782 - 18ms/step Eval samples: 10000 Epoch 2/3 - step 938/938 [==============================] - loss: 0.0070 - acc: 0.9802 - 31ms/step - save checkpoint at /Users/chenlong21/online_repo/paddle2.0_docs/save_model/mnist_checkpoint/1 + step 938/938 [==============================] - loss: 0.0340 - acc: 0.9818 - 22ms/step loss: 0.0559 - acc: 0.9 + save checkpoint at /Users/tclong/online_repo/book/paddle2.0_docs/save_model/mnist_checkpoint/1 Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 157/157 [==============================] - loss: 0.0014 - acc: 0.9857 - 26ms/step + step 157/157 [==============================] - loss: 5.2083e-04 - acc: 0.9853 - 19ms/step Eval samples: 10000 Epoch 3/3 - step 938/938 [==============================] - loss: 0.0178 - acc: 0.9862 - 31ms/step - save checkpoint at /Users/chenlong21/online_repo/paddle2.0_docs/save_model/mnist_checkpoint/2 + step 938/938 [==============================] - loss: 0.0706 - acc: 0.9868 - 27ms/step + save checkpoint at /Users/tclong/online_repo/book/paddle2.0_docs/save_model/mnist_checkpoint/2 Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 157/157 [==============================] - loss: 0.0064 - acc: 0.9867 - 25ms/step + step 157/157 [==============================] - loss: 5.4219e-04 - acc: 0.9882 - 19ms/step Eval samples: 10000 - save checkpoint at /Users/chenlong21/online_repo/paddle2.0_docs/save_model/mnist_checkpoint/final + save checkpoint at /Users/tclong/online_repo/book/paddle2.0_docs/save_model/mnist_checkpoint/final -保存模型参数 ------------- +六、保存模型参数 +---------------- 目前Paddle框架有三种保存模型参数的体系,分别是: #### paddle 高阶API-模型参数保存 \* paddle.Model.fit \* paddle.Model.save #### paddle 基础框架-动态图-模型参数保存 \* paddle.save #### paddle -基础框架-静态图-模型参数保存 \* paddle.io.save \* -paddle.io.save_inference_model +基础框架-静态图-模型参数保存 \* paddle.static.save \* +paddle.static.save_inference_model 下面将基于高阶API对模型保存与加载的方法进行讲解。 @@ -167,20 +178,20 @@ paddle.io.save_inference_model The loss value printed in the log is the current step, and the metric is the average value of previous step. Epoch 1/2 - step 938/938 [==============================] - loss: 0.0049 - acc: 0.9904 - 32ms/step - save checkpoint at /Users/chenlong21/online_repo/paddle2.0_docs/save_model/mnist_checkpoint/0 + step 938/938 [==============================] - loss: 0.0023 - acc: 0.9898 - 21ms/step + save checkpoint at /Users/tclong/online_repo/book/paddle2.0_docs/save_model/mnist_checkpoint/0 Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 157/157 [==============================] - loss: 0.0051 - acc: 0.9794 - 24ms/step + step 157/157 [==============================] - loss: 7.4614e-05 - acc: 0.9869 - 19ms/step Eval samples: 10000 Epoch 2/2 - step 938/938 [==============================] - loss: 4.3276e-04 - acc: 0.9919 - 32ms/step - save checkpoint at /Users/chenlong21/online_repo/paddle2.0_docs/save_model/mnist_checkpoint/1 + step 938/938 [==============================] - loss: 0.0014 - acc: 0.9917 - 20ms/step + save checkpoint at /Users/tclong/online_repo/book/paddle2.0_docs/save_model/mnist_checkpoint/1 Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 157/157 [==============================] - loss: 1.9492e-05 - acc: 0.9876 - 26ms/step + step 157/157 [==============================] - loss: 5.2536e-05 - acc: 0.9878 - 18ms/step Eval samples: 10000 - save checkpoint at /Users/chenlong21/online_repo/paddle2.0_docs/save_model/mnist_checkpoint/final + save checkpoint at /Users/tclong/online_repo/book/paddle2.0_docs/save_model/mnist_checkpoint/final .. code:: ipython3 @@ -188,8 +199,8 @@ paddle.io.save_inference_model # 方法二:model.save()保存模型和优化器参数信息 model.save('mnist_checkpoint/test') -加载模型参数 ------------- +七、加载模型参数 +---------------- 当恢复训练状态时,需要加载模型数据,此时我们可以使用加载函数从存储模型状态和优化器状态的文件中载入模型参数和优化器参数,如果不需要恢复优化器,则不必使用优化器状态文件。 #### 高阶API-模型参数加载 \* paddle.Model.load #### paddle @@ -206,8 +217,8 @@ model.load能够同时加载模型和优化器参数。通过reset_optimizer参 # 高阶API加载模型 model.load('mnist_checkpoint/test') -恢复训练 --------- +八、恢复训练 +------------ 理想的恢复训练是模型状态回到训练中断的时刻,恢复训练之后的梯度更新走向是和恢复训练前的梯度走向完全相同的。基于此,我们可以通过恢复训练后的损失变化,判断上述方法是否能准确的恢复训练。即从epoch 0结束时保存的模型参数和优化器状态恢复训练,校验其后训练的损失变化(epoch @@ -253,20 +264,20 @@ model.load能够同时加载模型和优化器参数。通过reset_optimizer参 The loss value printed in the log is the current step, and the metric is the average value of previous step. Epoch 1/2 - step 938/938 [==============================] - loss: 8.1781e-04 - acc: 0.9929 - 31ms/step + step 938/938 [==============================] - loss: 0.0118 - acc: 0.9922 - 20ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 157/157 [==============================] - loss: 6.0796e-04 - acc: 0.9853 - 26ms/step + step 157/157 [==============================] - loss: 2.4631e-05 - acc: 0.9872 - 17ms/step Eval samples: 10000 Epoch 2/2 - step 938/938 [==============================] - loss: 2.7120e-04 - acc: 0.9946 - 27ms/step + step 938/938 [==============================] - loss: 1.2774e-04 - acc: 0.9942 - 19ms/step Eval begin... The loss value printed in the log is the current batch, and the metric is the average value of previous step. - step 157/157 [==============================] - loss: 2.1006e-05 - acc: 0.9876 - 22ms/step + step 157/157 [==============================] - loss: 1.3047e-05 - acc: 0.9882 - 18ms/step Eval samples: 10000 -总结 ----- +九、总结 +-------- 以上就是用Mnist手写数字识别的例子对保存模型、加载模型、恢复训练进行讲解,Paddle提供了很多保存和加载的API方法,您可以根据自己的需求进行选择。 diff --git a/doc/paddle/tutorial/time_series/Autoencoder/AutoEncoder.rst b/doc/paddle/tutorial/time_series/Autoencoder/AutoEncoder.rst index ee9481197f6..83f32c1a1d8 100644 --- a/doc/paddle/tutorial/time_series/Autoencoder/AutoEncoder.rst +++ b/doc/paddle/tutorial/time_series/Autoencoder/AutoEncoder.rst @@ -1,29 +1,22 @@ 通过AutoEncoder实现时序数据异常检测 =================================== -作者: `Reatris `__ +**作者:** `Reatris `__ -日期:2020.11 +**日期:** 2021.01 -本示例教程将会演示如何使用飞桨PaddlePaddle2.0rc1来完成时序异常检测任务。这是一个较为简单的示例,将会搭建一个AutoEncoder网络完成任务。 +**摘要:** 本示例将会演示如何使用飞桨2.0完成时序异常检测任务。这是一个较为简单的示例,将会构建一个AutoEncoder网络完成任务。 -环境配置 --------- +一、环境配置 +------------ -本教程基于paddle-2.0-rc1编写,如果您的环境不是本版本,请先安装paddle-2.0-rc1版本。 - -.. code:: ipython3 - - #导入模块 - import numpy as np - import pandas as pd - from matplotlib import pyplot as plt - - import warnings - warnings.filterwarnings("ignore") +本教程基于Paddle 2.0 +编写,如果您的环境不是本版本,请先参考官网\ `安装 `__ +Paddle 2.0 。 .. code:: ipython3 + # 导入 paddle import paddle import paddle.nn.functional as F print(paddle.__version__) @@ -31,11 +24,24 @@ .. parsed-literal:: - 2.0.0-rc1 + 2.0.0 -加载数据集 ----------- +.. code:: ipython3 + + # 导入其他模块 + import numpy as np + import pandas as pd + from matplotlib import pyplot as plt + + import warnings + warnings.filterwarnings("ignore") + +二、数据加载 +------------ + +2.1 下载数据集 +~~~~~~~~~~~~~~ - 我们将使用纽伦塔异常基准(NAB)数据集。它提供人工时间序列数据,包含标记的异常行为周期。 @@ -88,8 +94,8 @@ 2014-04-01 00:20:00 20.187739 -数据可视化 ----------- +2.2 数据可视化 +~~~~~~~~~~~~~~ .. code:: ipython3 @@ -100,12 +106,12 @@ -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/time_series/Autoencoder/AutoEncoder_files/AutoEncoder_8_0.png?raw=true +.. image:: AutoEncoder_files/AutoEncoder_8_0.png **带有异常的时序数据如下:** -训练好模型后,我们将使用以下数据进行测试,并查看数据中的突然跳升是否被检测为异常。 +异常时序数据的作用是待训练好模型后,我们将使用以下数据进行测试,并查看数据中的突然跳升是否被检测为异常。 .. code:: ipython3 @@ -116,11 +122,11 @@ -.. image:: https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/tutorial/time_series/Autoencoder/AutoEncoder_files/AutoEncoder_10_0.png?raw=true +.. image:: AutoEncoder_files/AutoEncoder_10_0.png -训练数据预处理 -------------------- +2.3 数据预处理 +~~~~~~~~~~~~~~ - 我们的训练数据包含了14天的采样,每天每隔5分钟采集一次数据,所以: - 每天包含 24 \* 60 / 5 = 288 个timestep @@ -140,8 +146,8 @@ 训练数据总量: 4032 -创建序列 ------------- +2.4 创建 ``Dataset`` +~~~~~~~~~~~~~~~~~~~~ 从训练数据中创建组合时间步骤为288的连续数据值的序列。 @@ -190,10 +196,12 @@ train_dataset = MyDataset(df_training_value.values,TIME_STEPS) -模型组网 --------- +三、模型组网 +------------ -用paddle.nn下的API,Layer,Conv1d、rlue完成网络的搭建,SubClass模式。 +接下来是构建\ ``AutoEncoder``\ 模型,本示例使用 ``paddle.nn`` +下的API,\ ``Layer、Conv1D、Conv1DTranspose、relu``\ ,采用 ``SubClass`` +的方式完成网络的搭建。 .. code:: ipython3 @@ -217,16 +225,16 @@ x = self.convT1(x) return x -模型训练 --------- +四、模型训练 +------------ 接下来,我们用一个循环来进行模型的训练,我们将会: -- 使用paddle.optimizer.Adam优化器来进行优化。 +- 使用 ``paddle.optimizer.Adam`` 优化器来进行优化。 -- 使用paddle.nn.loss.MSELoss来计算损失值。 +- 使用 ``paddle.nn.MSELoss`` 来计算损失值。 -- 使用paddle.io.DataLoader来加载数据并组建batch。 +- 使用 ``paddle.io.DataLoader`` 来实现数据加载。 .. code:: ipython3 @@ -245,14 +253,12 @@ #设置优化器,学习率,并且把模型参数给优化器 opt = paddle.optimizer.Adam(learning_rate=learning_rate,parameters=model.parameters()) #设置损失函数 - mse_loss = paddle.nn.loss.MSELoss() + mse_loss = paddle.nn.MSELoss() #设置数据读取器 data_reader = paddle.io.DataLoader(train_dataset, - places=[paddle.CPUPlace()], batch_size=batch_size, shuffle=True, - drop_last=True, - num_workers=0) + drop_last=True) history_loss = [] iter_epoch = [] for epoch in tqdm.tqdm(range(epoch_num)): @@ -260,7 +266,7 @@ x = data[0] y = data[1] out = model(x) - avg_loss = mse_loss(out,(y[:,:,:-1])) #输输入的数据进过卷积会丢掉最后一个数据所以只剩287 + avg_loss = mse_loss(out,(y[:,:,:-1])) # 输入的数据经过卷积会丢掉最后一个数据 avg_loss.backward() opt.step() opt.clear_grad() @@ -278,10 +284,6 @@ train() -.. parsed-literal:: - - 0%| | 0/200 [00:00