Pytorch 激活函数的应用

Pytorch 激活函数的应用

Pytorch是一个开源的机器学习框架,广泛用于创建机器学习模型,并提供各种函数来创建神经网络。激活函数是神经网络的关键组成部分。激活函数根据节点的输入或输入集确定神经网络中节点的输出。激活函数引入了神经网络节点输出的非线性,这对于解决复杂的机器学习问题是必要的。

激活函数是什么

人工智能中的神经网络由输入层、隐藏层和输出层组成。输入层以不同形式接受用户输入,隐藏层执行一些隐藏计算,输出层给出结果,作为下一个连接节点的输入。激活函数被应用于用户输入,以执行计算并通过输出层给出输出。

Pytorch提供的激活函数类型

Pytorch提供了不同的激活函数,可以用于不同的机器学习问题。

  • ReLU激活函数

  • Leaky ReLU激活函数

  • Sigmoid激活函数

  • 双曲正切激活函数

  • Softmax激活函数

ReLU激活函数

修正线性激活函数(ReLU)是神经网络中广泛使用的激活函数。ReLU函数定义为 f(x) = max(0,x) 。它是一个非线性函数,对于负的输入始终输出为零,对于正的输入没有改变输出。因此,当输入为负时,不会发生学习。ReLU函数可以从torch.nn包导入。ReLU函数的图表如下所示 –

Pytorch 激活函数的应用

示例

在下面的例子中,我们创建了一个数组,并将其通过ReLU激活函数传递。ReLU激活函数将根据ReLU激活函数将数组的每个输入元素转换。

#pip install numpy
import numpy as np

def relu(x):
   return np.maximum(0, x)

x = np.array([-1, 2, -3, 4, 0])
y = relu(x)

print(y)

输出

[0 2 0 4 0]

泄漏的ReLU激活函数

泄漏的ReLU激活函数与ReLU激活函数类似,但泄漏的ReLU函数不会对负输入产生零输出,因此在负输入的情况下仍然会有学习。泄漏的ReLU函数定义为 LeakyReLU(x)=max(0,x)+负斜率∗min(0,x) 。下图显示了泄漏的ReLU函数的图形。

Pytorch 激活函数的应用

泄漏的ReLU也是非线性的,并解决了死亡神经元的问题,即当函数给出零输出或者对负输入值没有学习/训练时。

示例

在下面的例子中,我们使用numpy创建了一个数组,并将该数组通过leaky_relu函数传递,根据leaky_relu函数转换数组的每个元素。

import numpy as np

def leaky_relu(x, alpha=0.1):
   return np.maximum(alpha * x, x)

x = np.array([-1, 2, -3, 4, 0])
y = leaky_relu(x)

print(y)

输出

[-0.1  2.  -0.3  4.   0. ]

Sigmoid激活函数

Sigmoid函数是神经网络中最常用的激活函数之一。它被定义为f(x) = 1/(1+exp(-x))。Sigmoid函数将任何输入映射到0和1之间的值。它在二元分类问题中很有用,其中输出值为0或1。Sigmoid函数也被用作深度神经网络输出层的激活函数。Sigmoid函数的输出在二元分类问题中通常被认为是概率。下图显示了Sigmoid激活函数的图形表示。

Pytorch 激活函数的应用

Sigmoid函数可能出现梯度消失问题。

示例

在下面的示例中,我们使用numpy创建了一个数组,并将该数组通过Sigmoid函数进行转换,根据Sigmoid函数将数组的每个元素进行转换。

import numpy as np

def sigmoid(x):
   return 1 / (1 + np.exp(-x))

x = np.array([-1, 2, -3, 4, 0])
y = sigmoid(x)

print(y)

输出

[0.26894142 0.88079708 0.04742587 0.98201379 0.5       ]

双曲正切激活函数

双曲正切函数是一种非线性激活函数,对于任何输入值都会产生-1到1之间的输出。双曲正切激活函数的定义如下: f(x) = (exp(x)-exp(-x))/(exp(x)+exp(-x)) 。双曲正切函数的S形图像如下所示。

Pytorch 激活函数的应用

使用双曲正切函数时的梯度消失问题。

示例

在下面的示例中,我们使用numpy创建了一个数组,并将数组通过双曲正切函数传递,使得数组中的每个元素都根据双曲正切函数进行转换。

import numpy as np
def tanh(x):
   return np.tanh(x)
x = np.array([-1, 2, -3, 4, 0])
y = tanh(x)
print(y)

输出

[-0.76159416  0.96402758 -0.99505475  0.9993293   0.        ]

Softmax激活函数

Softmax函数用于多类分类问题。它的定义如下: f(x) = exp(x_i)/sum(exp(x_j)) 对于所有i。Softmax函数将任何输入映射为类别的概率分布。它对于多类分类问题非常有用,其中输出可以属于多个类别之一。Softmax函数也常用作深度神经网络输出层的激活函数。Softmax函数通常与其他激活函数结合使用,并置于最后一层。

示例

在下面的示例中,我们使用numpy创建了一个数组,并将该数组通过Softmax函数进行转换,根据Softmax函数转换数组的每个元素。

import numpy as np
def softmax(x):
   exp_x = np.exp(x - np.max(x)) # to prevent overflow
   return exp_x / np.sum(exp_x)
x = np.array([1, 2, 3, 4, 5])
y = softmax(x)
print(y)

输出

[0.01165623 0.03168492 0.08612854 0.23412166 0.63640865]

结论

激活函数在神经网络中起着关键作用,PyTorch提供了各种选择的激活函数。激活函数的选择取决于问题类型和神经网络的结构。通过使用合适的激活函数,我们可以提高神经网络的性能并获得更好的结果。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程