max

备注

PyTorch 兼容的 max 版本,本接口根据输入参数的不同,包含三种不同的功能。

使用前请详细参考:【返回参数类型不一致】torch.max 以确定是否使用此模块。

小心

下面列举的三种功能参数输入方式 互斥,混用非公共的参数输入方法将会导致报错,请谨慎使用。


paddle.compat. max ( x, out=None ) [源代码]

对整个 input tensor 求最大值,见 paddle.amax amax

备注

对输入有多个最大值的情况下,paddle.compat.max 的梯度表现与 paddle.amax 一致:会将梯度平均传回到最大值对应的位置。out 返回方法与静态图联合使用是被禁止的行为,静态图下将报错。

参数

  • x (Tensor)- Tensor,支持数据类型为 bfloat16、float16、float32、float64、int32、int64(CUDA GPU),而 uint8, int32, int64, float32, float64 在 CPU 设备上被支持。

  • out (Tensor,可选) - 用于引用式传入输出值,注意:动态图下 out 可以是任意 Tensor,默认值为 None。

返回

Tensor,最大值运算的 Tensor(0D),数据类型和输入数据类型一致。


paddle.compat. max ( x, dim=None, keepdim=False, out=None ) [源代码]

备注

对输入有多个最大值的情况下,paddle.compat.max 将只返回梯度值给 indices 中选择的位置。out 返回方法与静态图联合使用是被禁止的行为,静态图下将报错。

参数

  • x (Tensor)- Tensor,支持数据类型为 bfloat16、float16、float32、float64、int32、int64(CUDA GPU),而 uint8, int32, int64, float32, float64 在 CPU 设备上被支持。

  • dim (list|tuple|int,可选)- 求最大值运算的维度。必须在 \([−x.ndim, x.ndim]\) 范围内。如果 \(dim[i] < 0\),则维度将变为 \(x.ndim+dim[i]\),默认值为 None。注意,手动传入 dim=None 是不允许的,dim 不可显式被指定为 None。如果需要对整个 tensor 求解全局最大值,请使用第一种参数写法。

  • keepdim (bool,可选) - 是否在输出 Tensor 中保留输入的维度。除非 keepdim 为 True,否则输出 Tensor 的维度将比输入 Tensor 小一维,默认值为 False。注意,不传入 dim 时传入本参数是不允许的!

  • out (tuple(Tensor, Tensor),可选) - 用于引用式传入输出值。values 在前,indices 在后。注意:动态图下 out 可以是任意 Tensor,默认值为 None。

返回

MinMaxRetType(Tensor, Tensor),此处的 MinMaxRetType 是一个具名元组,含有 values (在前)和 indices (在后)两个域,用法与 tuple 一致。


paddle.compat. max ( x, other, out=None ) [源代码]

other Tensor 计算逐元素最大值。见 paddle.maximum maximum

备注

out 返回方法与静态图联合使用是被禁止的行为,静态图下将报错。

参数

  • x (Tensor)- Tensor,支持数据类型为 bfloat16、float16、float32、float64、int32、int64(CUDA GPU),而 uint8, int32, int64, float32, float64 在 CPU 设备上被支持。

  • other (Tensor)- Tensor,支持类型见 x。注意,other 的 shape 必须可以被广播到 x 的 shape。

  • out (Tensor,可选) - 用于引用式传入输出值,注意:动态图下 out 可以是任意 Tensor,默认值为 None。

返回

Tensor,逐元素最大的结果,形状、数据类型与 place 与 x 一致。


代码示例

备注

以下示例为上述三种不同输入方法对应功能的示例。

>>> import paddle

>>> # data_x is a Tensor with shape [2, 4]
>>> # the axis is a int element
>>> x = paddle.to_tensor([[0.2, 0.3, 0.5, 0.9],
...                       [0.1, 0.2, 0.6, 0.7]],
...                       dtype='float64', stop_gradient=False)
>>> # Case 1: reduce over all dims
>>> result1 = paddle.compat.max(x)
>>> result1
Tensor(shape=[], dtype=float64, place=Place(gpu:0), stop_gradient=False,
0.90000000)

>>> # Case 2: reduce over specified dim
>>> x.clear_grad()
>>> result2 = paddle.compat.max(x, dim=1)
>>> result2
MinMaxRetType(values=Tensor(shape=[2], dtype=float64, place=Place(gpu:0), stop_gradient=False,
    [0.90000000, 0.70000000]), indices=Tensor(shape=[2], dtype=int64, place=Place(gpu:0), stop_gradient=True,
    [3, 3]))
>>> result2[0].backward()
>>> x.grad
Tensor(shape=[2, 4], dtype=float64, place=Place(gpu:0), stop_gradient=False,
    [[0., 0., 0., 1.],
     [0., 0., 0., 1.]])

>>> # Case 3: equivalent to `paddle.maximum`
>>> x.clear_grad()
>>> y = paddle.to_tensor([[0.5, 0.4, 0.1, 0.2],
...                       [0.3, 0.1, 0.6, 0.7]],
...                       dtype='float64', stop_gradient=False)
>>> result3 = paddle.compat.max(x, y)
>>> result3
Tensor(shape=[2, 4], dtype=float64, place=Place(gpu:0), stop_gradient=False,
    [[0.50000000, 0.40000000, 0.50000000, 0.90000000],
     [0.30000000, 0.20000000, 0.60000000, 0.70000000]])