diff --git a/paddle/fluid/API.spec b/paddle/fluid/API.spec index 0d48919869511834b95171ac3176b7f8ec6eeb94..bef3adb3b5a3e978692b0973765d8d029ffe5bfb 100755 --- a/paddle/fluid/API.spec +++ b/paddle/fluid/API.spec @@ -188,7 +188,7 @@ paddle.fluid.layers.beam_search (ArgSpec(args=['pre_ids', 'pre_scores', 'ids', ' paddle.fluid.layers.row_conv (ArgSpec(args=['input', 'future_context_size', 'param_attr', 'act'], varargs=None, keywords=None, defaults=(None, None)), ('document', '1d8a1c8b686b55631ba1b77805e4eacf')) paddle.fluid.layers.multiplex (ArgSpec(args=['inputs', 'index'], varargs=None, keywords=None, defaults=None), ('document', '2c4d1ae83da6ed35e3b36ba1b3b51d23')) paddle.fluid.layers.layer_norm (ArgSpec(args=['input', 'scale', 'shift', 'begin_norm_axis', 'epsilon', 'param_attr', 'bias_attr', 'act', 'name'], varargs=None, keywords=None, defaults=(True, True, 1, 1e-05, None, None, None, None)), ('document', '79797f827d89ae72c77960e9696883a9')) -paddle.fluid.layers.group_norm (ArgSpec(args=['input', 'groups', 'epsilon', 'param_attr', 'bias_attr', 'act', 'data_layout', 'name'], varargs=None, keywords=None, defaults=(1e-05, None, None, None, 'NCHW', None)), ('document', '65231cc8281815124934b1439fbb750c')) +paddle.fluid.layers.group_norm (ArgSpec(args=['input', 'groups', 'epsilon', 'param_attr', 'bias_attr', 'act', 'data_layout', 'name'], varargs=None, keywords=None, defaults=(1e-05, None, None, None, 'NCHW', None)), ('document', '87dd4b818f102bc1a780e1804c28bd38')) paddle.fluid.layers.spectral_norm (ArgSpec(args=['weight', 'dim', 'power_iters', 'eps', 'name'], varargs=None, keywords=None, defaults=(0, 1, 1e-12, None)), ('document', '9461e67095a6fc5d568fb2ce8fef66ff')) paddle.fluid.layers.softmax_with_cross_entropy (ArgSpec(args=['logits', 'label', 'soft_label', 'ignore_index', 'numeric_stable_mode', 'return_softmax', 'axis'], varargs=None, keywords=None, defaults=(False, -100, True, False, -1)), ('document', '54e1675aa0364f4a78fa72804ec0f413')) paddle.fluid.layers.smooth_l1 (ArgSpec(args=['x', 'y', 'inside_weight', 'outside_weight', 'sigma'], varargs=None, keywords=None, defaults=(None, None, None)), ('document', 'cbe8940643ac80ef75e1abdfbdb09e88')) @@ -223,7 +223,7 @@ paddle.fluid.layers.relu (ArgSpec(args=['x', 'name'], varargs=None, keywords=Non paddle.fluid.layers.selu (ArgSpec(args=['x', 'scale', 'alpha', 'name'], varargs=None, keywords=None, defaults=(None, None, None)), ('document', 'f93c61f5b0bf933cd425a64dca2c4fdd')) paddle.fluid.layers.log (ArgSpec(args=['x', 'name'], varargs=None, keywords=None, defaults=(None,)), ('document', '02f668664e3bfc4df6c00d7363467140')) paddle.fluid.layers.crop (ArgSpec(args=['x', 'shape', 'offsets', 'name'], varargs=None, keywords=None, defaults=(None, None, None)), ('document', 'ba3621917d5beffd3d022b88fbf6dc46')) -paddle.fluid.layers.crop_tensor (ArgSpec(args=['x', 'shape', 'offsets', 'name'], varargs=None, keywords=None, defaults=(None, None, None)), ('document', 'cb855453e3506bf54c5c013616ffddfb')) +paddle.fluid.layers.crop_tensor (ArgSpec(args=['x', 'shape', 'offsets', 'name'], varargs=None, keywords=None, defaults=(None, None, None)), ('document', 'd460aaf35afbbeb9beea4789aa6e4343')) paddle.fluid.layers.rank_loss (ArgSpec(args=['label', 'left', 'right', 'name'], varargs=None, keywords=None, defaults=(None,)), ('document', '8eb36596bb43d7a907d3397c7aedbdb3')) paddle.fluid.layers.margin_rank_loss (ArgSpec(args=['label', 'left', 'right', 'margin', 'name'], varargs=None, keywords=None, defaults=(0.1, None)), ('document', '6fc86ed23b420c8a0f6c043563cf3937')) paddle.fluid.layers.elu (ArgSpec(args=['x', 'alpha', 'name'], varargs=None, keywords=None, defaults=(1.0, None)), ('document', '9af1926c06711eacef9e82d7a9e4d308')) diff --git a/python/paddle/fluid/layers/nn.py b/python/paddle/fluid/layers/nn.py index 58178d8b72f6f8dc3c19f332308ab0c2e63ad53a..6f1943d6c0e348822076cb91bfe50040e16cb931 100755 --- a/python/paddle/fluid/layers/nn.py +++ b/python/paddle/fluid/layers/nn.py @@ -4262,30 +4262,39 @@ def group_norm(input, Refer to `Group Normalization `_ . - Args: - input(Variable): The input tensor variable. - groups(int): The number of groups that divided from channels. - epsilon(float): The small value added to the variance to prevent - division by zero. - param_attr(ParamAttr|None): The parameter attribute for the learnable - scale :math:`g`. If it is set to False, no scale will be added to the output units. - If it is set to None, the bias is initialized one. Default: None. - bias_attr(ParamAttr|None): The parameter attribute for the learnable - bias :math:`b`. If it is set to False, no bias will be added to the output units. - If it is set to None, the bias is initialized zero. Default: None. - act(str): Activation to be applied to the output of group normalizaiton. - data_layout(string, default NCHW): NCHW(num_batch, channels, h, w) or NHWC(num_batch, h, w, channels). - name (str): The name of this layer. It is optional. + Parameters: + input(Variable): 4-D Tensor, the data type is float32 or float64. + groups(int): The number of groups that divided from channels, the data type + is int32. + epsilon(float, optional): The small value added to the variance to prevent + division by zero, the data type is float32. Default: 1e-05. + param_attr(ParamAttr|bool, optional): ParamAttr object that specifies weight parameter + attribute. If a bool type, only False is supported, which means there is no weight parameter. + Default: None, the default weight parameter attribute is used. For more information, please + refer to :ref:`api_guide_ParamAttr` . + bias_attr(ParamAttr|bool, optional): ParamAttr object that specifies bias parameter + attribute. If a bool type, only False is supported, which means there is no bias parameter. + Default: None, the default bias parameter attribute is used. For more information, please + refer to :ref:`api_guide_ParamAttr` . + act(str, optional): Activation to be applied to the output of group normalizaiton. + data_layout(str, optional): The data format of the input and output data. An optional string + from: `"NCHW"`, `"NHWC"`. When it is `"NCHW"`, the data is stored in the order of: + `[batch_size, channels, height, width]`. Default: "NCHW". + name (str, optional): The default value is None. Normally there is no need for user to set this + property. For more information, please refer to :ref:`api_guide_Name` . Returns: - Variable: A tensor variable which is the result after applying group normalization on the input. + Variable: A 4-D Tensor has same data type and data format with `input`. + + Raises: + ValueError: If `data_layout` is neither 'NCHW' nor 'NHWC'. Examples: + .. code-block:: python - >>> import paddle.fluid as fluid - >>> data = fluid.layers.data(name='data', shape=[8, 32, 32], - >>> dtype='float32') - >>> x = fluid.layers.group_norm(input=data, groups=4) + import paddle.fluid as fluid + data = fluid.data(name='data', shape=[None, 8, 32, 32], dtype='float32') + x = fluid.layers.group_norm(input=data, groups=4) """ helper = LayerHelper('group_norm', **locals()) dtype = helper.input_dtype() @@ -10206,59 +10215,57 @@ def crop_tensor(x, shape=None, offsets=None, name=None): .. code-block:: text - * Case 1: - Given - X = [[0, 1, 2, 0, 0] - [0, 3, 4, 0, 0] - [0, 0, 0, 0, 0]], - and - shape = [2, 2], - offsets = [0, 1], - output is: + * Case 1 (input is a 2-D Tensor): + Input: + X.shape = [3. 5] + X.data = [[0, 1, 2, 0, 0], + [0, 3, 4, 0, 0], + [0, 0, 0, 0, 0]] + Parameters: + shape = [2, 2] + offsets = [0, 1] + Output: Out = [[1, 2], - [3, 4]]. - * Case 2: - Given - X = [[[0, 1, 2, 3] - [0, 5, 6, 7] - [0, 0, 0, 0]], - - [[0, 3, 4, 5] - [0, 6, 7, 8] - [0, 0, 0, 0]]]. - and - shape = [2, 2, 3], - offsets = [0, 0, 1], - output is: - Out = [[[1, 2, 3] + [3, 4]] + * Case 2 (input is a 3-D Tensor): + Input: + X.shape = [2, 3, 4] + X.data = [[[0, 1, 2, 3], + [0, 5, 6, 7], + [0, 0, 0, 0]], + [[0, 3, 4, 5], + [0, 6, 7, 8], + [0, 0, 0, 0]]] + Parameters: + shape = [2, 2, 3] + offsets = [0, 0, 1] + Output: + Out = [[[1, 2, 3], [5, 6, 7]], - - [[3, 4, 5] - [6, 7, 8]]]. - - Args: - x (Variable): The input tensor variable. - shape (Variable|list|tuple of integer): The output shape is specified - by `shape`. It can be a 1-D tensor Variable or a list/tuple. If a - 1-D tensor Variable, it's rank must be the same as `x`. If a - list/tuple, it's length must be the same as the rank of `x`. Each - element of list can be an integer or a tensor Variable of shape: [1]. + [[3, 4, 5], + [6, 7, 8]]] + + Parameters: + x (Variable): 1-D to 6-D Tensor, the data type is float32 or float64. + shape (list|tuple|Variable): The output shape is specified + by `shape`. Its data type is int32. If a list/tuple, it's length must be + the same as the dimension size of `x`. If a Variable, it shoule be a 1-D Tensor. + When it is a list, each element can be an integer or a Tensor of shape: [1]. If Variable contained, it is suitable for the case that the shape may be changed each iteration. Only the first element of list/tuple can be - set to -1, it means that the first dimension of the output is the same + set to -1, it means that the first dimension's size of the output is the same as the input. - offsets (Variable|list|tuple of integer|None): Specifies the cropping - offsets at each dimension. It can be a 1-D tensor Variable or a list/tuple. - If a 1-D tensor Variable, it's rank must be the same as `x`. If a list/tuple, - it's length must be the same as the rank of `x`. Each element of list can be - an integer or a tensor Variable of shape: [1]. If Variable contained, it is - suitable for the case that the offsets may be changed each iteration. If None, - the offsets are 0 at each dimension. - name(str|None): A name for this layer(optional). If set None, the layer - will be named automatically. + offsets (list|tuple|Variable, optional): Specifies the cropping + offsets at each dimension. Its data type is int32. If a list/tuple, it's length + must be the same as the dimension size of `x`. If a Variable, it shoule be a 1-D + Tensor. When it is a list, each element can be an integer or a Tensor of shape: [1]. + If Variable contained, it is suitable for the case that the offsets may be changed + each iteration. Default: None, the offsets are 0 at each dimension. + name(str, optional): The default value is None. Normally there is no need for user to set + this property. For more information, please refer to :ref:`api_guide_Name` . Returns: - Variable: The cropped tensor variable. + Variable: The cropped Tensor has same data type with `x`. Raises: ValueError: If shape is not a list, tuple or Variable. @@ -10269,11 +10276,11 @@ def crop_tensor(x, shape=None, offsets=None, name=None): .. code-block:: python import paddle.fluid as fluid - x = fluid.layers.data(name="x", shape=[3, 5], dtype="float32") + x = fluid.data(name="x", shape=[None, 3, 5], dtype="float32") # x.shape = [-1, 3, 5], where -1 indicates batch size, and it will get the exact value in runtime. - # shape is a 1-D tensor variable - crop_shape = fluid.layers.data(name="crop_shape", shape=[3], dtype="int32", append_batch_size=False) + # shape is a 1-D Tensor + crop_shape = fluid.data(name="crop_shape", shape=[3], dtype="int32") crop0 = fluid.layers.crop_tensor(x, shape=crop_shape) # crop0.shape = [-1, -1, -1], it means crop0.shape[0] = x.shape[0] in runtime. @@ -10281,19 +10288,19 @@ def crop_tensor(x, shape=None, offsets=None, name=None): crop1 = fluid.layers.crop_tensor(x, shape=[-1, 2, 3]) # crop1.shape = [-1, 2, 3] - # or shape is a list in which each element is a constant or variable - y = fluid.layers.data(name="y", shape=[3, 8, 8], dtype="float32") - dim1 = fluid.layers.data(name="dim1", shape=[1], dtype="int32", append_batch_size=False) - crop2 = fluid.layers.crop_tensor(y, shape=[-1, 3, dim1, 4]) - # crop2.shape = [-1, 3, -1, 4] + # or shape is a list in which each element is a constant or Variable + y = fluid.data(name="y", shape=[3, 8, 8], dtype="float32") + dim1 = fluid.data(name="dim1", shape=[1], dtype="int32") + crop2 = fluid.layers.crop_tensor(y, shape=[3, dim1, 4]) + # crop2.shape = [3, -1, 4] - # offsets is a 1-D tensor variable - crop_offsets = fluid.layers.data(name="crop_offsets", shape=[3], dtype="int32", append_batch_size=False) + # offsets is a 1-D Tensor + crop_offsets = fluid.data(name="crop_offsets", shape=[3], dtype="int32") crop3 = fluid.layers.crop_tensor(x, shape=[-1, 2, 3], offsets=crop_offsets) # crop3.shape = [-1, 2, 3] - # offsets is a list in which each element is a constant or variable - offsets_var = fluid.layers.data(name="dim1", shape=[1], dtype="int32", append_batch_size=False) + # offsets is a list in which each element is a constant or Variable + offsets_var = fluid.data(name="dim1", shape=[1], dtype="int32") crop4 = fluid.layers.crop_tensor(x, shape=[-1, 2, 3], offsets=[0, 1, offsets_var]) # crop4.shape = [-1, 2, 3]