From 6e51242927442fdf2b272799dcffba17abc9c45b Mon Sep 17 00:00:00 2001 From: Cheerego <35982308+shanyi15@users.noreply.github.com> Date: Tue, 11 Dec 2018 12:37:59 +0800 Subject: [PATCH] update_1.2 (#479) * update layers_nn * Update layers_cn.rst * Update layers_cn.rst * update api_cn except layers * update fluid_cn.rst * Update metrics_cn.rst * update_ciwhl * update_2nd * fix_3rd * fix_deadlinks (#476) * [infer][rl_note]develop=1.2 (#480) * update_infer_toctree * add_fluid * Update release_note.rst --- .../deploy/inference/windows_cpp_inference.md | 14 +- doc/fluid/api_cn/clip_cn.rst | 16 +- doc/fluid/api_cn/executor_cn.rst | 13 +- doc/fluid/api_cn/fluid_cn.rst | 12 +- doc/fluid/api_cn/index_cn.rst | 2 +- doc/fluid/api_cn/layers_cn.rst | 134 ++++++++-- doc/fluid/api_cn/metrics_cn.rst | 51 ++-- doc/fluid/api_cn/net_cn.rst | 244 ------------------ doc/fluid/api_cn/nets_cn.rst | 1 + doc/fluid/api_cn/optimizer_cn.rst | 6 +- doc/fluid/beginners_guide/install/Tables.md | 159 ++++++++++-- .../programming_guide/programming_guide.md | 2 +- .../howto/evaluation_and_debugging/index.rst | 4 +- doc/fluid/user_guides/models/index_cn.rst | 2 +- 14 files changed, 330 insertions(+), 330 deletions(-) delete mode 100644 doc/fluid/api_cn/net_cn.rst diff --git a/doc/fluid/advanced_usage/deploy/inference/windows_cpp_inference.md b/doc/fluid/advanced_usage/deploy/inference/windows_cpp_inference.md index b6a5a2168..6340f330b 100644 --- a/doc/fluid/advanced_usage/deploy/inference/windows_cpp_inference.md +++ b/doc/fluid/advanced_usage/deploy/inference/windows_cpp_inference.md @@ -48,33 +48,33 @@ Cmake可以在[官网进行下载](https://cmake.org/download/),并添加到 执行完毕后,build 目录如图所示,打开箭头指向的 solution 文件:

- +

修改编译属性为 `/MT` :

- +

- +

编译生成选项改成 `Release` 。

- +

- +

将提供的依赖包中,Release下的openblas和模型文件拷贝到编译生成的Release下。

- +

通过cmd进到Release目录执行: @@ -88,6 +88,6 @@ Cmake可以在[官网进行下载](https://cmake.org/download/),并添加到 `simple_on_word2vec.exe --dirname=.\word2vec.inference.model`

- +

diff --git a/doc/fluid/api_cn/clip_cn.rst b/doc/fluid/api_cn/clip_cn.rst index 4de9347b8..70b4e6e99 100644 --- a/doc/fluid/api_cn/clip_cn.rst +++ b/doc/fluid/api_cn/clip_cn.rst @@ -108,12 +108,12 @@ GradientClipByNorm .. code-block:: python - w_param_attrs = ParamAttr(name=None, - initializer=UniformInitializer(low=-1.0, high=1.0, seed=0), + w_param_attrs = fluid.ParamAttr(name=None, + initializer=fluid.initializer.UniformInitializer(low=-1.0, high=1.0, seed=0), learning_rate=1.0, - regularizer=L1Decay(1.0), + regularizer=fluid.regularizer.L1Decay(1.0), trainable=True, - clip=GradientClipByNorm(clip_norm=2.0)) + clip=fluid.clip.GradientClipByNorm(clip_norm=2.0)) y_predict = fluid.layers.fc(input=x, size=1, param_attr=w_param_attrs) @@ -147,12 +147,12 @@ GradientClipByValue .. code-block:: python - w_param_attrs = ParamAttr(name=None, - initializer=UniformInitializer(low=-1.0, high=1.0, seed=0), + w_param_attrs = fluid.ParamAttr(name=None, + initializer=fluid.initializer.UniformInitializer(low=-1.0, high=1.0, seed=0), learning_rate=1.0, - regularizer=L1Decay(1.0), + regularizer=fluid.regualrizer.L1Decay(1.0), trainable=True, - clip=GradientClipByValue(-1.0, 1.0)) + clip=fluid.clip.GradientClipByValue(-1.0, 1.0)) y_predict = fluid.layers.fc(input=x, size=1, param_attr=w_param_attrs) diff --git a/doc/fluid/api_cn/executor_cn.rst b/doc/fluid/api_cn/executor_cn.rst index 595fc0aed..8354f203b 100644 --- a/doc/fluid/api_cn/executor_cn.rst +++ b/doc/fluid/api_cn/executor_cn.rst @@ -81,10 +81,11 @@ feed map为该program提供输入数据。fetch_list提供program训练结束后 .. code-block:: python - data = layers.data(name='X', shape=[1], dtype='float32') - hidden = layers.fc(input=data, size=10) - layers.assign(hidden, out) - loss = layers.mean(out) + data = fluid.layers.data(name='X', shape=[1], dtype='float32') + out = fluid.layers.create_tensor(dtype='float32') + hidden = fluid.layers.fc(input=data, size=10) + fluid.layers.assign(hidden, out) + loss = fluid.layers.mean(out) adam = fluid.optimizer.Adam() adam.minimize(loss) @@ -93,8 +94,8 @@ feed map为该program提供输入数据。fetch_list提供program训练结束后 cpu = core.CPUPlace() - exe = Executor(cpu) - exe.run(default_startup_program()) + exe = fluid.Executor(cpu) + exe.run(fluid.default_startup_program()) .. code-block:: python diff --git a/doc/fluid/api_cn/fluid_cn.rst b/doc/fluid/api_cn/fluid_cn.rst index 813216b0d..2bf0c08ad 100644 --- a/doc/fluid/api_cn/fluid_cn.rst +++ b/doc/fluid/api_cn/fluid_cn.rst @@ -1060,12 +1060,12 @@ name_scope .. code-block:: python - with name_scope("encoder"): - ... - with name_scope("decoder"): - ... - with name_scope("attention"): - ... + with name_scope("encoder"): + ... + with name_scope("decoder"): + ... + with name_scope("attention"): + ... diff --git a/doc/fluid/api_cn/index_cn.rst b/doc/fluid/api_cn/index_cn.rst index fb9dbb189..21c1ac551 100644 --- a/doc/fluid/api_cn/index_cn.rst +++ b/doc/fluid/api_cn/index_cn.rst @@ -16,7 +16,7 @@ API io_cn.rst layers_cn.rst metrics_cn.rst - net_cn.rst + nets_cn.rst optimizer_cn.rst param_attr_cn.rst profiler_cn.rst diff --git a/doc/fluid/api_cn/layers_cn.rst b/doc/fluid/api_cn/layers_cn.rst index 73fc9c1f1..1d042d526 100644 --- a/doc/fluid/api_cn/layers_cn.rst +++ b/doc/fluid/api_cn/layers_cn.rst @@ -1714,7 +1714,12 @@ BRelu 激活函数 - **name** (str|None) - 该层的名称(可选)。如果设置为None,该层将被自动命名 +**代码示例:** + +.. code-block:: python + x = fluid.layers.data(name="x", shape=[2,3,16,16], dtype=”float32”) + y = fluid.layers.brelu(x, t_min=1.0, t_max=20.0) @@ -1826,7 +1831,7 @@ clip clip算子 -clip运算符限制给定输入的值在一个区间内。间隔使用参数“min”和“max”来指定:公式为 +clip运算符限制给定输入的值在一个区间内。间隔使用参数"min"和"max"来指定:公式为 .. math:: Out=min(max(X,min),max) @@ -1841,9 +1846,13 @@ clip运算符限制给定输入的值在一个区间内。间隔使用参数“m 返回类型: 输出(Variable)。 +**代码示例:** +.. code-block:: python - + input = fluid.layers.data( + name='data', shape=[1], dtype='float32') + reward = fluid.layers.clip(x=input, min=-1.0, max=1.0) @@ -1866,13 +1875,6 @@ ClipByNorm算子 其中, :math:`norm(X)` 代表 ``x`` 的L2范数。 -例如, - -.. code-block:: python - - data = fluid.layer.data( name=’data’, shape=[2, 4, 6], dtype=’float32’) - reshaped = fluid.layers.clip_by_norm( x=data, max_norm=0.5) - 参数: - **x** (Variable)- (Tensor) clip_by_norm运算的输入,维数必须在[1,9]之间。 @@ -1883,7 +1885,13 @@ ClipByNorm算子 返回类型: Variable +**代码示例:** + +.. code-block:: python + input = fluid.layers.data( + name='data', shape=[1], dtype='float32') + reward = fluid.layers.clip_by_norm(x=input, max_norm=1.0) @@ -3387,7 +3395,12 @@ ELU激活层(ELU Activation Operator) 返回类型: 输出(Variable) +**代码示例:** + +.. code-block:: python + x = fluid.layers.data(name="x", shape=[3,10,32,32], dtype="float32") + y = fluid.layers.elu(x, alpha=0.2) @@ -3953,7 +3966,12 @@ sigmoid的分段线性逼近(https://arxiv.org/abs/1603.00391),比sigmoid快 - **name** (str|None) - 这个层的名称(可选)。如果设置为None,该层将被自动命名。 +**代码示例:** + +.. code-block:: python + x = fluid.layers.data(name="x", shape=[3,10,32,32], dtype="float32") + y = fluid.layers.hard_sigmoid(x, slope=0.3, offset=0.8) @@ -4173,25 +4191,36 @@ image_resize 输入张量的shape为(num_batch, channels, in_h, in_w),并且调整大小只适用于最后两个维度(高度和宽度)。 -支持重新取样方法: 双线性插值 - +支持重新取样方法: + + BILINEAR:双线性插值 + NEAREST:最近邻插值 + 参数: - **input** (Variable) - 图片调整层的输入张量,这是一个shape=4的张量(num_batch, channels, in_h, in_w) - **out_shape** (list|tuple|Variable|None) - 图片调整层的输出,shape为(out_h, out_w)。默认值:None - **scale** (float|None)-输入的高度或宽度的乘数因子 。 out_shape和scale至少要设置一个。out_shape的优先级高于scale。默认值:None - **name** (str|None) - 该层的名称(可选)。如果设置为None,该层将被自动命名 - **resample** (str) - 重采样方法。目前只支持“双线性”。默认值:双线性插值 + - **actual_shape** (Variable) - 可选输入,用于动态指定输出形状。如果指定actual_shape,图像将根据给定的形状调整大小,而不是根据指定形状的 :code:`out_shape` 和 :code:`scale` 进行调整。也就是说, :code:`actual_shape` 具有最高的优先级。如果希望动态指定输出形状,建议使用 :code:`actual_shape` 而不是 :code:`out_shape` 。在使用actual_shape指定输出形状时,还需要设置out_shape和scale之一,否则在图形构建阶段会出现错误。默认值:None + 返回: 4维tensor,shape为 (num_batches, channls, out_h, out_w). 返回类型: 变量(variable) +抛出异常: + - :code:`TypeError` - out_shape应该是一个列表、元组或变量。 + - :code:`TypeError` - actual_shape应该是变量或None + - :code:`ValueError` - image_resize的"resample"只能是"BILINEAR"或"NEAREST"。 + - :code:`ValueError` - out_shape 和 scale 不能为 None + - :code:`ValueError` - out_shape 的长度必须为 2 **代码示例** .. code-block:: python - out = fluid.layers.image_resize(input, out_shape=[12, 12]) + out = fluid.layers.image_resize(input, out_shape=[12, 12], resample="NEAREST") @@ -4396,7 +4425,12 @@ LeakyRelu 激活函数 - **alpha** (FLOAT|0.02) - 负斜率,值很小。 - **name** (str|None) - 此层的名称(可选)。如果设置为None,该层将被自动命名。 +**代码示例:** + +.. code-block:: python + x = fluid.layers.data(name="x", shape=[2,3,16,16], dtype="float32") + y = fluid.layers.leaky_relu(x, alpha=0.01) @@ -4670,6 +4704,16 @@ logical_and算子 返回类型: 输出(Variable)。 +**代码示例:** + +.. code-block:: python + + left = fluid.layers.data( + name='left', shape=[1], dtype='int32') + right = fluid.layers.data( + name='right', shape=[1], dtype='int32') + result = fluid.layers.logical_and(x=left, y=right) + @@ -4702,7 +4746,13 @@ logical_not算子 返回类型: 输出(Variable)。 +**代码示例:** +.. code-block:: python + + left = fluid.layers.data( + name='left', shape=[1], dtype='int32') + result = fluid.layers.logical_not(x=left) @@ -4736,7 +4786,15 @@ logical_or算子 +**代码示例:** + +.. code-block:: python + left = fluid.layers.data( + name='left', shape=[1], dtype='int32') + right = fluid.layers.data( + name='right', shape=[1], dtype='int32') + result = fluid.layers.logical_or(x=left, y=right) @@ -4769,7 +4827,15 @@ logical_xor算子 +**代码示例:** + +.. code-block:: python + left = fluid.layers.data( + name='left', shape=[1], dtype='int32') + right = fluid.layers.data( + name='right', shape=[1], dtype='int32') + result = fluid.layers.logical_xor(x=left, y=right) @@ -5772,7 +5838,12 @@ pow 返回类型: 输出(Variable) +**代码示例:** + +.. code-block:: python + x = fluid.layers.data(name="x", shape=[3,10,32,32], dtype="float32") + y = fluid.layers.pow(x, factor=2.0) @@ -6199,7 +6270,12 @@ relu6激活算子(Relu6 Activation Operator) 返回类型: 输出(Variable) +**代码示例:** + +.. code-block:: python + x = fluid.layers.data(name="x", shape=[3,10,32,32], dtype="float32") + y = fluid.layers.relu6(x, threshold=6.0) @@ -6212,10 +6288,12 @@ relu6激活算子(Relu6 Activation Operator) reshape ------------------------------- +.. py:function:: paddle.fluid.layers.reshape(x, shape, actual_shape=None, act=None, inplace=False, name=None) + 保持输入张量数据不变的情况下,改变张量的形状。 -目标形状可由 ``shape`` 或 ``actual_shape`` 给出。``shape``是一个整数列表,而 ``actual_shape``是一个张量变量。 -当两个属性同时被指定时,``actual_shape``的优先级高于 ``shape``,但在编译时仍然应该正确地设置shape以保证形状推断。 +目标形状可由 ``shape`` 或 ``actual_shape`` 给出。``shape`` 是一个整数列表,而 ``actual_shape`` 是一个张量变量。 +当两个属性同时被指定时,``actual_shape`` 的优先级高于 ``shape`` ,但在编译时仍然应该正确地设置 ``shape`` 以保证形状推断。 在指定目标shape时存在一些技巧: @@ -6238,10 +6316,10 @@ reshape - **shape** (list) - 新的形状。新形状最多只能有一个维度为-1。 - **actual_shape** (variable) - 一个可选的输入。如果提供,则根据 ``actual_shape`` 进行 reshape,而不是指定 ``shape`` 。也就是说,actual_shape具有比shape更高的优先级。 - **act** (str) - 对reshpe后的tensor变量执行非线性激活 - - **inplace** (bool) - 如果在多个操作符中使用x,则 ``inplace``必须设置为False。如果该标志设置为True,则重用输入x进行reshape,这将改变张量变量x的形状,并可能在多个操作符中使用x时造成错误。如果为False,则保留形状x,并创建一个新的输出张量变量,该张量变量的数据是从输入x复制的,但经过了重构。 + - **inplace** (bool) - 如果在多个操作符中使用x,则 ``inplace`` 必须设置为False。如果该标志设置为True,则重用输入x进行reshape,这将改变张量变量x的形状,并可能在多个操作符中使用x时造成错误。如果为False,则保留形状x,并创建一个新的输出张量变量,该张量变量的数据是从输入x复制的,但经过了重构。 - **name** (str) - 可选变量,此层的名称 -返回:如果 ``act`` 为 ``None``,返回reshape后的tensor变量。如果 ``inplace``为 ``False``,将返回一个新的Tensor变量,否则,将改变x自身。如果 ``act``不是 ``None``,则返回激活的张量变量。 +返回:如果 ``act`` 为 ``None``,返回reshape后的tensor变量。如果 ``inplace`` 为 ``False`` ,将返回一个新的Tensor变量,否则,将改变x自身。如果 ``act`` 不是 ``None`` ,则返回激活的张量变量。 抛出异常:``TypeError`` - 如果 actual_shape 既不是变量也不是None @@ -6270,6 +6348,8 @@ resize_bilinear .. py:function:: paddle.fluid.layers.resize_bilinear(input, out_shape=None, scale=None, name=None) +根据指定的out_shape执行双线性插值调整输入大小,输出形状按优先级由actual_shape、out_shape和scale指定。 + 双线性插值是对线性插值的扩展,即二维变量方向上(如h方向和w方向)插值。关键思想是先在一个方向上执行线性插值,然后再在另一个方向上执行线性插值。 `详情请参阅维基百科 https://en.wikipedia.org/wiki/Bilinear_interpolation `_ @@ -6279,11 +6359,16 @@ resize_bilinear - **out_shape** (Variable) - 一维张量,包含两个数。第一个数是高度,第二个数是宽度。 - **scale** (float|None) - 用于输入高度或宽度的乘数因子。out_shape和scale至少要设置一个。out_shape的优先级高于scale。默认值:None。 - **name** (str|None) - 输出变量名。 - + - **actual_shape** (Variable) - 可选输入,用于动态指定输出形状。如果指定actual_shape,图像将根据给定的形状调整大小,而不是根据指定形状的 :code:`out_shape` 和 :code:`scale` 进行调整。也就是说, :code:`actual_shape` 具有最高的优先级。如果希望动态指定输出形状,建议使用 :code:`actual_shape` 而不是 :code:`out_shape` 。在使用actual_shape指定输出形状时,还需要设置out_shape和scale之一,否则在图形构建阶段会出现错误。默认值:None + 返回: 输出的维度是(N x C x out_h x out_w) +**代码示例:** + +.. code-block:: python + out = fluid.layers.resize_bilinear(input, out_shape=[12, 12]) @@ -7757,7 +7842,12 @@ SoftRelu 激活函数 - **threshold** (FLOAT|40.0) - SoftRelu的阈值 - **name** (str|None) - 该层的名称(可选)。如果设置为None,该层将被自动命名 +**代码示例:** +.. code-block:: python + + x = fluid.layers.data(name=”x”, shape=[2,3,16,16], dtype=”float32”) + y = fluid.layers.soft_relu(x, threshold=20.0) @@ -8111,7 +8201,12 @@ STanh 激活算子(STanh Activation Operator.) 返回类型: 输出(Variable) +**代码示例:** + +.. code-block:: python + x = fluid.layers.data(name="x", shape=[3,10,32,32], dtype="float32") + y = fluid.layers.stanh(x, scale_a=0.67, scale_b=1.72) @@ -8168,7 +8263,12 @@ Swish 激活函数 返回类型: output(Variable) +**代码示例:** + +.. code-block:: python + x = fluid.layers.data(name="x", shape=[3,10,32,32], dtype="float32") + y = fluid.layers.swish(x, beta=2.0) diff --git a/doc/fluid/api_cn/metrics_cn.rst b/doc/fluid/api_cn/metrics_cn.rst index ab7c8b6e8..64cdf50d6 100644 --- a/doc/fluid/api_cn/metrics_cn.rst +++ b/doc/fluid/api_cn/metrics_cn.rst @@ -208,34 +208,51 @@ https://arxiv.org/abs/1512.02325 1. 根据detectors中的输入和label,计算 true positive 和 false positive 2. 计算map,支持 ‘11 point’ and ‘integral’ - + +参数: + - **input** (Variable) – detection的结果,一个 shape=[M, 6] 的 lodtensor。布局为[label, confidence, xmin, ymin, xmax, ymax] + - **gt_label** (Variable) – ground truth label 的索引,它是一个形状为[N, 1]的lodtensor + - **gt_box** (Variable) – ground truth bounds box (bbox),是一个具有形状的lod张量[N, 4]。布局是[xmin, ymin, xmax, ymax] + - **gt_difficult** (Variable|None) – 指定这个ground truth是否是一个difficult bounding bbox,它可以是一个 shape=[N, 1]的LoDTensor,也可以不被指定。如果设置为None,则表示所有的ground truth标签都不是difficult bbox。 + - **class_num** (int) – 检测类别的数目 + - **background_label** (int) – 背景标签的索引,背景标签将被忽略。如果设置为-1,则所有类别将被考虑,默认为0。 + - **overlap_threshold** (float) – 判断真假阳性的阈值,默认为0.5 + - **evaluate_difficult** (bool) – 是否考虑 difficult ground truth 进行评价,默认为 True。当 gt_difficult 为 None 时,这个参数不起作用。 + - **ap_version** (string) – 平均精度的计算方法,必须是 "integral" 或 "11point"。详情请查看 https://sanchom.wordpress.com/tag/averageprecision/。 其中,11point为:11-point 插值平均精度。积分: precision-recall曲线的自然积分。 **代码示例** .. code-block:: python - pred = fluid.layers.fc(input=data, size=1000, act="tanh") - batch_map = layers.detection_map( - input, - label, - class_num, - background_label, - overlap_threshold=overlap_threshold, - evaluate_difficult=evaluate_difficult, - ap_version=ap_version) - - metric = fluid.metrics.DetectionMAP() - for data in train_reader(): - loss, preds, labels = exe.run(fetch_list=[cost, batch_map]) - batch_size = data[0] - metric.update(value=batch_map, weight=batch_size) - numpy_map = metric.eval() + exe = fluid.Executor(place) + map_evaluator = fluid.Evaluator.DetectionMAP(input, + gt_label, gt_box, gt_difficult) + cur_map, accum_map = map_evaluator.get_map_var() + fetch = [cost, cur_map, accum_map] + for epoch in PASS_NUM: + map_evaluator.reset(exe) + for data in batches: + loss, cur_map_v, accum_map_v = exe.run(fetch_list=fetch) + +在上述例子中: + + "cur_map_v" 是当前 mini-batch 的 mAP + + "accum_map_v" 是一个 pass 的 mAP累加和 +.. py:method:: get_map_var() +返回:当前 mini-batch 的 mAP 变量,和跨 mini-batch 的 mAP 累加和 +.. py:methord:: reset(executor, reset_program=None) +在指定 batch 的每一 pass/user 开始时重置度量状态。 + +参数: + - **executor** (Executor) – 执行reset_program的执行程序 + - **reset_program** (Program|None) – 单一 program 的 reset 过程。如果设置为 None,将创建一个 program diff --git a/doc/fluid/api_cn/net_cn.rst b/doc/fluid/api_cn/net_cn.rst deleted file mode 100644 index 847804737..000000000 --- a/doc/fluid/api_cn/net_cn.rst +++ /dev/null @@ -1,244 +0,0 @@ - -################# - fluid.nets -################# - - - -.. _cn_api_fluid_nets_glu: - -glu ->>>> -.. py:function:: paddle.fluid.nets.glu(input, dim=-1) -T -he Gated Linear Units(GLU)由切分(split),sigmoid激活函数和按元素相乘组成。沿着给定维将input拆分成两个大小相同的部分,a和b,计算如下: - -.. math:: - - GLU(a,b) = a\bigotimes \sigma (b) - -参考论文: `Language Modeling with Gated Convolutional Networks `_ - -参数: - - **input** (Variable) - 输入变量,张量或者LoDTensor - - **dim** (int) - 拆分的维度。如果 :math:`dim<0`,拆分的维为 :math:`rank(input)+dim`。默认为-1 - -返回:变量 —— 变量的大小为输入的一半 - -返回类型:变量(Variable) - -**代码示例:** - -.. code-block:: python - - data = fluid.layers.data(name="words", shape=[3, 6, 9], dtype="float32") - output = fluid.nets.glu(input=data, dim=1) # shape of output: [3, 3, 9] - - - - - -英文版API文档: :ref:`api_fluid_nets_glu` - -.. _cn_api_fluid_nets_img_conv_group: - -img_conv_group ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -.. py:function:: paddle.fluid.nets.img_conv_group(input, conv_num_filter, pool_size, conv_padding=1, conv_filter_size=3, conv_act=None, param_attr=None, conv_with_batchnorm=False, conv_batchnorm_drop_rate=0.0, pool_stride=1, pool_type='max', use_cudnn=True) - -Image Convolution Group由Convolution2d,BatchNorm,DropOut和Pool2d组成。根据输入参数,img_conv_group将使用Convolution2d,BatchNorm,DropOut对Input进行连续计算,并将最后一个结果传递给Pool2d。 - -参数: - - **input** (Variable) - 具有[N,C,H,W]格式的输入图像。 - - **conv_num_filter** (list | tuple) - 表示该组的过滤器数。 - - **pool_size** (int | list | tuple) - ``Pool2d Layer`` 池的大小。如果pool_size是列表或元组,则它必须包含两个整数(pool_size_H,pool_size_W)。否则,pool_size_H = pool_size_W = pool_size。 - - **conv_padding** (int | list | tuple) - Conv2d Layer的 ``padding`` 大小。如果 ``padding`` 是列表或元组,则其长度必须等于 ``conv_num_filter`` 的长度。否则,所有Conv2d图层的 ``conv_padding`` 都是相同的。默认1。 - - **conv_filter_size** (int | list | tuple) - 过滤器大小。如果filter_size是列表或元组,则其长度必须等于 ``conv_num_filter`` 的长度。否则,所有Conv2d图层的 ``conv_filter_size`` 都是相同的。默认3。 - - **conv_act** (str) - ``Conv2d Layer`` 的激活类型, ``BatchNorm`` 后面没有。默认值:无。 - - **param_attr** (ParamAttr) - Conv2d层的参数。默认值:无 - - **conv_with_batchnorm** (bool | list) - 表示在 ``Conv2d Layer`` 之后是否使用 ``BatchNorm`` 。如果 ``conv_with_batchnorm`` 是一个列表,则其长度必须等于 ``conv_num_filter`` 的长度。否则, ``conv_with_batchnorm`` 指示是否所有Conv2d层都遵循 ``BatchNorm``。默认为False。 - - **conv_batchnorm_drop_rate** (float | list) - 表示 ``BatchNorm`` 之后的 ``Dropout Layer`` 的 ``rop_rate`` 。如果 ``conv_batchnorm_drop_rate`` 是一个列表,则其长度必须等于 ``conv_num_filter`` 的长度。否则,所有 ``Dropout Layers`` 的 ``drop_rate`` 都是 ``conv_batchnorm_drop_rate`` 。默认值为0.0。 - - **pool_stride** (int | list | tuple) - ``Pool2d`` 层的汇集步幅。如果 ``pool_stride`` 是列表或元组,则它必须包含两个整数(pooling_stride_H,pooling_stride_W)。否则,pooling_stride_H = pooling_stride_W = pool_stride。默认1。 - - **pool_type** (str) - 池化类型可以是最大池化的 ``max`` 和平均池化的 ``avg`` 。默认max。 - - **use_cudnn** (bool) - 是否使用cudnn内核,仅在安装cudnn库时才有效。默认值:True - -返回: 使用Convolution2d进行串行计算后的最终结果,BatchNorm,DropOut和Pool2d。 - -返回类型: 变量(Variable)。 - -**代码示例** - -.. code-block:: python - - img = fluid.layers.data(name='img', shape=[1, 28, 28], dtype='float32') - conv_pool = fluid.nets.img_conv_group(input=img, - num_channels=3, - conv_padding=1, - conv_num_filter=[3, 3], - conv_filter_size=3, - conv_act="relu", - pool_size=2, - pool_stride=2) - - - -英文版API文档: :ref:`api_fluid_nets_img_conv_group` - -.. _cn_api_fluid_nets_scaled_dot_product_attention: - -scaled_dot_product_attention ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -.. py:function:: paddle.fluid.nets.scaled_dot_product_attention(queries, keys, values, num_heads=1, dropout_rate=0.0) - -点乘attention运算。 - -attention运算机制可以被视为将查询和一组键值对映射到输出。 将输出计算为值的加权和,其中分配给每个值的权重由查询的兼容性函数(此处的点积)与对应的密钥计算。 - -可以通过(batch)矩阵乘法实现点积attention运算,如下所示: - -.. math:: - Attention(Q, K, V)= softmax(QK^\mathrm{T})V - -请参阅 `Attention Is All You Need `_ - -参数: - - **queries** (Variable) - 输入变量,应为3-D Tensor。 - - **keys** (Variable) - 输入变量,应为3-D Tensor。 - - **values** (Variable) - 输入变量,应为3-D Tensor。 - - **num_heads** (int) - 计算缩放点积attention运算的head数。默认值:1。 - - **dropout_rate** (float) - 降低attention的dropout率。默认值:0.0。 - -返回: 通过multi-head来缩放点积attention运算的三维张量。 - -返回类型: 变量(Variable)。 - -抛出异常: - - ``ValueError`` - 如果输入查询键,值不是3-D Tensor会报错。 - -.. note:: - 当num_heads> 1时,分别学习三个线性投影,以将输入查询,键和值映射到查询',键'和值'。 查询',键'和值'与查询,键和值具有相同的形状。 - 当num_heads == 1时,scaled_dot_product_attention没有可学习的参数。 - -**代码示例** - -.. code-block:: python - - queries = fluid.layers.data(name="queries", - shape=[3, 5, 9], - dtype="float32", - append_batch_size=False) - queries.stop_gradient = False - keys = fluid.layers.data(name="keys", - shape=[3, 6, 9], - dtype="float32", - append_batch_size=False) - keys.stop_gradient = False - values = fluid.layers.data(name="values", - shape=[3, 6, 10], - dtype="float32", - append_batch_size=False) - values.stop_gradient = False - contexts = fluid.nets.scaled_dot_product_attention(queries, keys, values) - contexts.shape # [3, 5, 10] - - - - - -英文版API文档: :ref:`api_fluid_nets_scaled_dot_product_attention` - -.. _cn_api_fluid_nets_sequence_conv_pool: - -sequence_conv_pool ->>>>>>>>>>>>>>>>>>> - -.. py:function:: paddle.fluid.nets.sequence_conv_pool(input, num_filters, filter_size, param_attr=None, act='sigmoid', pool_type='max') - -sequence_conv_pool由序列卷积和池化组成 - -参数: - - **input** (Variable) - sequence_conv的输入,支持变量时间长度输入序列。当前输入为shape为(T,N)的矩阵,T是mini-batch中的总时间步数,N是input_hidden_size - - **num_filters** (int)- 滤波器数 - - **filter_size** (int)- 滤波器大小 - - **param_attr** (ParamAttr) - Sequence_conv层的参数。默认:None - - **act** (str) - Sequence_conv层的激活函数类型。默认:sigmoid - - **pool_type** (str)- 池化类型。可以是max-pooling的max,average-pooling的average,sum-pooling的sum,sqrt-pooling的sqrt。默认max - -返回:序列卷积(Sequence Convolution)和池化(Pooling)的结果 - - -返回类型:变量(Variable) - -**代码示例**: - -.. code-block:: python - - input_dim = len(word_dict) - emb_dim = 128 - hid_dim = 512 - data = fluid.layers.data( ame="words", shape=[1], dtype="int64", lod_level=1) - emb = fluid.layers.embedding(input=data, size=[input_dim, emb_dim], is_sparse=True) - seq_conv = fluid.nets.sequence_conv_pool(input=emb, - num_filters=hid_dim, - filter_size=3, - act="tanh", - pool_type="sqrt") - - - - -英文版API文档: :ref:`api_fluid_nets_sequence_conv_pool` - -.. _cn_api_fluid_nets_simple_img_conv_pool: - -simple_img_conv_pool ->>>>>>>>>>>>>>>>>>>>>>>>> - -.. py:function:: paddle.fluid.nets.simple_img_conv_pool(input, num_filters, filter_size, pool_size, pool_stride, pool_padding=0, pool_type='max', global_pooling=False, conv_stride=1, conv_padding=0, conv_dilation=1, conv_groups=1, param_attr=None, bias_attr=None, act=None, use_cudnn=True) - - ``simple_img_conv_pool`` 由一个Convolution2d和一个Pool2d组成。 - -参数: - - **input** (Variable) - 输入图像的格式为[N,C,H,W]。 - - **num_filters** (int) - ``filter`` 的数量。它与输出的通道相同。 - - **filter_size** (int | list | tuple) - 过滤器大小。如果 ``filter_size`` 是列表或元组,则它必须包含两个整数(filter_size_H,filter_size_W)。否则,filter_size_H = filter_size_W = filter_size。 - - **pool_size** (int | list | tuple) - Pool2d池化层大小。如果pool_size是列表或元组,则它必须包含两个整数(pool_size_H,pool_size_W)。否则,pool_size_H = pool_size_W = pool_size。 - - **pool_stride** (int | list | tuple) - Pool2d池化层步长。如果pool_stride是列表或元组,则它必须包含两个整数(pooling_stride_H,pooling_stride_W)。否则,pooling_stride_H = pooling_stride_W = pool_stride。 - - **pool_padding** (int | list | tuple) - Pool2d池化层的padding。如果pool_padding是列表或元组,则它必须包含两个整数(pool_padding_H,pool_padding_W)。否则,pool_padding_H = pool_padding_W = pool_padding。默认值为0。 - - **pool_type** (str) - 池化类型可以是 ``max-pooling`` 的 ``max`` 和平均池的 ``avg`` 。默认 ``max`` 。 - - **global_pooling** (bool)- 是否使用全局池。如果global_pooling = true,则忽略pool_size和pool_padding。默认为False - - **conv_stride** (int | list | tuple) - conv2d Layer的步长。如果stride是列表或元组,则它必须包含两个整数,(conv_stride_H,conv_stride_W)。否则,conv_stride_H = conv_stride_W = conv_stride。默认值:conv_stride = 1。 - - **conv_padding** (int | list | tuple) - conv2d Layer的padding大小。如果padding是列表或元组,则它必须包含两个整数(conv_padding_H,conv_padding_W)。否则,conv_padding_H = conv_padding_W = conv_padding。默认值:conv_padding = 0。 - - **conv_dilation** (int | list | tuple) - conv2d Layer的dilation大小。如果dilation是列表或元组,则它必须包含两个整数(conv_dilation_H,conv_dilation_W)。否则,conv_dilation_H = conv_dilation_W = conv_dilation。默认值:conv_dilation = 1。 - - **conv_groups** (int) - conv2d Layer的组数。根据Alex Krizhevsky的Deep CNN论文中的分组卷积:当group = 2时,前半部分滤波器仅连接到输入通道的前半部分,而后半部分滤波器仅连接到后半部分输入通道。默认值:groups = 1。 - - **param_attr** (ParamAttr | None) - 可学习参数的参数属性或conv2d权重。如果将其设置为None或ParamAttr的一个属性,则conv2d将创建ParamAttr作为param_attr。如果未设置param_attr的初始化,则使用 :math:`Normal(0.0,std)` 初始化参数,并且 ``std`` 为 :math:`(\frac{2.0 }{filter\_elem\_num})^{0.5}` 。默认值:None - - **bias_attr** (ParamAttr | bool | None) - conv2d的bias参数属性。如果设置为False,则不会向输出单元添加bias。如果将其设置为None或ParamAttr的一个属性,则conv2d将创建ParamAttr作为bias_attr。如果未设置bias_attr的初始化程序,则将偏差初始化为零。默认值:None - - **act** (str) - conv2d的激活类型,如果设置为None,则不附加激活。默认值:无。 - - **use_cudnn** (bool) - 是否使用cudnn内核,仅在安装cudnn库时才有效。默认值:True。 - -返回: Convolution2d和Pool2d之后输入的结果。 - -返回类型: 变量(Variable) - -**示例代码** - -.. code-block:: python - - img = fluid.layers.data(name='img', shape=[1, 28, 28], dtype='float32') - conv_pool = fluid.nets.simple_img_conv_pool(input=img, - filter_size=5, - num_filters=20, - pool_size=2, - pool_stride=2, - act="relu") - - - - - - - -英文版API文档: :ref:`api_fluid_nets_simple_img_conv_pool` - diff --git a/doc/fluid/api_cn/nets_cn.rst b/doc/fluid/api_cn/nets_cn.rst index 338657ad0..8f95a142a 100644 --- a/doc/fluid/api_cn/nets_cn.rst +++ b/doc/fluid/api_cn/nets_cn.rst @@ -170,6 +170,7 @@ sequence_conv_pool由序列卷积和池化组成 - **param_attr** (ParamAttr) - Sequence_conv层的参数。默认:None - **act** (str) - Sequence_conv层的激活函数类型。默认:sigmoid - **pool_type** (str)- 池化类型。可以是max-pooling的max,average-pooling的average,sum-pooling的sum,sqrt-pooling的sqrt。默认max + - **bias_attr** (ParamAttr|bool|None) – sequence_conv偏置的参数属性。如果设置为False,则不会向输出单元添加偏置。如果将参数设置为ParamAttr的None或one属性,sequence_conv将创建ParamAttr作为bias_attr。如果未设置bias_attr的初始化器,则初始化偏差为零。默认值:None。 返回:序列卷积(Sequence Convolution)和池化(Pooling)的结果 diff --git a/doc/fluid/api_cn/optimizer_cn.rst b/doc/fluid/api_cn/optimizer_cn.rst index a5ac3ac23..29b6ad548 100644 --- a/doc/fluid/api_cn/optimizer_cn.rst +++ b/doc/fluid/api_cn/optimizer_cn.rst @@ -134,7 +134,7 @@ Adamax 更新规则: optimizer.minimize(cost) .. note:: - 目前 ``AdamaxOptimizer`` 不支持 sparse gradient + 目前 ``AdamaxOptimizer`` 不支持 sparse parameter optimization. @@ -231,7 +231,7 @@ Decayed Adagrad Optimizer optimizer.minimize(cost) .. note:: - ``DecayedAdagradOptimizer`` 不支持 sparse gradient + ``DecayedAdagradOptimizer`` 不支持 sparse parameter optimization @@ -302,7 +302,7 @@ TFRTL 原始论文: ( `https://www.eecs.tufts.edu/~dsculley/papers/ad-click-pred _, params_grads = optimizer.minimize(cost) .. note:: - 目前, FtrlOptimizer 不支持 sparse gradient + 目前, FtrlOptimizer 不支持 sparse parameter optimization diff --git a/doc/fluid/beginners_guide/install/Tables.md b/doc/fluid/beginners_guide/install/Tables.md index 7a422b536..86ff0bd6e 100644 --- a/doc/fluid/beginners_guide/install/Tables.md +++ b/doc/fluid/beginners_guide/install/Tables.md @@ -359,12 +359,110 @@ PaddePaddle通过编译时指定路径来实现引用各种BLAS/CUDA/cuDNN库。 您可以在 [DockerHub](https://hub.docker.com/r/paddlepaddle/paddle/tags/) 中找到PaddlePaddle的各个发行的版本的docker镜像。 +*** + +

+## **多版本whl包列表-v1.2** + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
版本说明 cp27-cp27mu cp27-cp27m cp35-cp35m cp36-cp36m cp37-cp37m
cpu-noavx-mkl + paddlepaddle-1.2.0-cp27-cp27mu-linux_x86_64.whl + paddlepaddle-1.2.0-cp27-cp27m-linux_x86_64.whl + paddlepaddle-1.2.0-cp35-cp35m-linux_x86_64.whl + paddlepaddle-1.2.0-cp36-cp36m-linux_x86_64.whl + paddlepaddle-1.2.0-cp37-cp37m-linux_x86_64.whl
cpu_avx_mkl + paddlepaddle-1.2.0-cp27-cp27mu-linux_x86_64.whl + paddlepaddle-1.2.0-cp27-cp27m-linux_x86_64.whl + paddlepaddle-1.2.0-cp35-cp35m-linux_x86_64.whl + paddlepaddle-1.2.0-cp36-cp36m-linux_x86_64.whl + paddlepaddle-1.2.0-cp37-cp37m-linux_x86_64.whl
cpu_avx_openblas + paddlepaddle-1.2.0-cp27-cp27mu-linux_x86_64.whl paddlepaddle-1.2.0-cp27-cp27m-linux_x86_64.whl + paddlepaddle-1.2.0-cp35-cp35m-linux_x86_64.whl + paddlepaddle-1.2.0-cp36-cp36m-linux_x86_64.whl + paddlepaddle-1.2.0-cp37-cp37m-linux_x86_64.whl
cuda8.0_cudnn5_avx_mkl paddlepaddle_gpu-1.2.0-cp27-cp27mu-linux_x86_64.whl paddlepaddle_gpu-1.2.0-cp27-cp27m-linux_x86_64.whl paddlepaddle_gpu-1.2.0-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-1.2.0-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-1.2.0-cp37-cp37m-linux_x86_64.whl
cuda8.0_cudnn7_noavx_mkl paddlepaddle_gpu-1.2.0-cp27-cp27mu-linux_x86_64.whl paddlepaddle_gpu-1.2.0-cp27-cp27m-linux_x86_64.whl paddlepaddle_gpu-1.2.0-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-1.2.0-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-1.2.0-cp37-cp37m-linux_x86_64.whl
cuda8.0_cudnn7_avx_mkl paddlepaddle_gpu-1.2.0.post87-cp27-cp27mu-linux_x86_64.whl paddlepaddle_gpu-1.2.0.post87-cp27-cp27m-linux_x86_64.whl paddlepaddle_gpu-1.2.0.post87-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-1.2.0.post87-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-1.2.0.post87-cp37-cp37m-linux_x86_64.whl
cuda9.0_cudnn7_avx_mkl paddlepaddle_gpu-1.2.0-cp27-cp27mu-linux_x86_64.whl paddlepaddle_gpu-1.2.0-cp27-cp27m-linux_x86_64.whl paddlepaddle_gpu-1.2.0-cp35-cp35m-linux_x86_64.whl + paddlepaddle_gpu-1.2.0-cp36-cp36m-linux_x86_64.whl + paddlepaddle_gpu-1.2.0-cp37-cp37m-linux_x86_64.whl
+

-***

-## **多版本whl包列表** +## **多版本whl包列表-dev**

@@ -373,61 +471,88 @@ PaddePaddle通过编译时指定路径来实现引用各种BLAS/CUDA/cuDNN库。 + + + + + + + + + + - + + - - - - - - - + + + + + + + + + + + + + + + + +
cp27-cp27mu cp27-cp27m cp35-cp35m cp36-cp36m cp37-cp37m
cpu-noavx-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
cpu_avx_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
cpu_avx_openblas paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl None
cpu_noavx_openblas paddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl paddlepaddle-latest-cp27-cp27m-linux_x86_64.whl None + paddlepaddle-latest-cp35-cp35m-linux_x86_64.whl + paddlepaddle-latest-cp36-cp36m-linux_x86_64.whl + paddlepaddle-latest-cp37-cp37m-linux_x86_64.whl
cuda8.0_cudnn5_avx_mkl paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl paddlepaddle_gpu-latest-cp27-cp27m-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
cuda8.0_cudnn7_noavx_mkl paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl paddlepaddle_gpu-latest-cp27-cp27m-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
cuda8.0_cudnn7_avx_mkl paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl paddlepaddle_gpu-latest-cp27-cp27m-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
cuda9.0_cudnn7_avx_mkl paddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl paddlepaddle_gpu-latest-cp27-cp27m-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

- - - - - - -

diff --git a/doc/fluid/beginners_guide/programming_guide/programming_guide.md b/doc/fluid/beginners_guide/programming_guide/programming_guide.md index 04d542c93..204cd1958 100644 --- a/doc/fluid/beginners_guide/programming_guide/programming_guide.md +++ b/doc/fluid/beginners_guide/programming_guide/programming_guide.md @@ -406,7 +406,7 @@ outs = exe.run( ``` 可以看到100次迭代后,预测值已经非常接近真实值了,损失值也从初始值9.05下降到了0.01。 - 恭喜您!已经成功完成了第一个简单网络的搭建,想尝试线性回归的进阶版——房价预测模型,请阅读:[线性回归](../../beginners_guide/quick_start/fit_a_line/README.cn.html)。更多丰富的模型实例可以在[模型库](../../user_guides/models/index.html)中找到。 + 恭喜您!已经成功完成了第一个简单网络的搭建,想尝试线性回归的进阶版——房价预测模型,请阅读:[线性回归](../../beginners_guide/quick_start/fit_a_line/README.cn.html)。更多丰富的模型实例可以在[模型库](../../user_guides/models/index_cn.html)中找到。 ## What's next diff --git a/doc/fluid/user_guides/howto/evaluation_and_debugging/index.rst b/doc/fluid/user_guides/howto/evaluation_and_debugging/index.rst index 72e9c314b..ae0d7013a 100644 --- a/doc/fluid/user_guides/howto/evaluation_and_debugging/index.rst +++ b/doc/fluid/user_guides/howto/evaluation_and_debugging/index.rst @@ -4,9 +4,9 @@ 本部分包括两篇文档: -- `模型评估 <../user_guides/howto/evaluation_and_debugging/evaluation/metrics.html>`_:介绍常用模型评估指标的构造方法 +- `模型评估 <../evaluation_and_debugging/evaluation/metrics.html>`_:介绍常用模型评估指标的构造方法 -- `Visual DL 工具 <../user_guides/howto/evaluation_and_debugging/debug/visualdl.html>`_:介绍如何利用 Visual DL 工具可视化训练过程 +- `Visual DL 工具 <../evaluation_and_debugging/debug/visualdl.html>`_:介绍如何利用 Visual DL 工具可视化训练过程 .. toctree:: :hidden: diff --git a/doc/fluid/user_guides/models/index_cn.rst b/doc/fluid/user_guides/models/index_cn.rst index c1edd4b98..e1e342416 100644 --- a/doc/fluid/user_guides/models/index_cn.rst +++ b/doc/fluid/user_guides/models/index_cn.rst @@ -194,7 +194,7 @@ SimNet是百度自然语言处理部于2013年自主研发的语义匹配框架 在工业可用的推荐系统中,推荐策略一般会被划分为多个模块串联执行。以新闻推荐系统为例,存在多个可以使用深度学习技术的环节,例如新闻的自动化标注,个性化新闻召回,个性化匹配与排序等。PaddlePaddle对推荐算法的训练提供了完整的支持,并提供了多种模型配置供用户选择。 -- `TagSpace `_ +- `TagSpace `_ - `GRU4Rec `_ - `SequenceSemanticRetrieval `_ - `DeepCTR `_ -- GitLab