mindspore.nn.PReLU

class mindspore.nn.PReLU(channel=1, w=0.25)[源代码]

PReLU激活层(PReLU Activation Operator)。

逐元素应用PReLU function。

公式定义为:

\[PReLU(x_i)= \max(0, x_i) + w * \min(0, x_i),\]

其中 \(x_i\) 是输入的Tensor。

这里 \(w\) 是一个可学习的参数,默认初始值0.25。

当带参数调用时每个通道上学习一个 \(w\) 。如果不带参数调用时,则将在所有通道中共享单个参数 \(w\)

PReLU函数图:

../../_images/PReLU.png
参数:
  • channel (int) - 可训练参数 \(w\) 的数量。它可以是int,值是1或输入Tensor x 的通道数。默认值: 1

  • w (Union[float, list, Tensor]) - 参数的初始值。它可以是float、float组成的list或与输入Tensor x 具有相同数据类型的Tensor。默认值: 0.25

输入:
  • x (Tensor) - PReLU的输入Tensor,其shape为 \((N, *)\) ,其中 \(*\) 表示任意的额外维度,数据类型为float16或float32。

输出:

Tensor,数据类型和shape与 x 相同。

异常:
  • TypeError - channel 不是int。

  • TypeError - w 不是float、float组成的list或float Tensor。

  • TypeError - x 的数据类型既不是float16也不是float32。

  • ValueError - x 是Ascend上的0-D或1-D Tensor。

  • ValueError - channel 小于1。

支持平台:

Ascend GPU CPU

样例:

>>> import mindspore
>>> from mindspore import Tensor, nn
>>> import numpy as np
>>> x = Tensor(np.array([[[[0.1, 0.6], [0.9, 0.9]]]]), mindspore.float32)
>>> prelu = nn.PReLU()
>>> output = prelu(x)
>>> print(output)
[[[[0.1 0.6]
   [0.9 0.9]]]]