python实现激活函数

  • Post category:Python

Python是一种强大的编程语言,常用来实现各种机器学习和深度学习算法及其组件,其中激活函数(Activation Function)是一个重要的组件。激活函数作为一个非线性函数,能够将输入信号“激活”并传递到网络的下一层。下面我们将详细讲解Python实现激活函数的完整攻略。

一、什么是激活函数

激活函数是深度神经网络中的一种非线性操作,用于引入非线性特征并优化模型的表达能力。在神经网络中,每个神经元都将接收来自前一层输出的加权和,通过激活函数对其进行转换,产生输出传递到下一层。最常用的激活函数有Sigmoid、ReLU、LeakyReLU等。

二、Python实现激活函数的方法

Python中实现激活函数一般有两种方式:

1. 实现自己的激活函数

在Python中可以通过定义一个函数实现自己的激活函数,下面以Sigmoid函数为例,展示其实现代码:

import numpy as np

def sigmoid(x):
    """
    Sigmoid 函数

    :param x: 输入
    :return: 输出 
    """
    return 1/(1+np.exp(-x))

2. 使用深度学习框架内置的激活函数

在使用深度学习框架时,通常会使用内置的激活函数,如下所示:

import torch.nn as nn

# 定义一个包含ReLU激活函数的神经网络
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(10, 20)
        self.fc2 = nn.Linear(20, 1)
        self.relu = nn.ReLU()

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x

三、示例代码

1. 自定义Sigmoid函数

import numpy as np

def sigmoid(x):
    """
    Sigmoid 函数

    :param x: 输入
    :return: 输出 
    """
    return 1/(1+np.exp(-x))

# 测试
x = np.array([-1, 0, 1])
print(sigmoid(x))

输出结果:

[0.26894142 0.5        0.73105858]

2. PyTorch中使用ReLU激活函数

import torch
import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # 卷积层
        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        # 全连接层
        self.fc1 = nn.Linear(320, 50)
        self.fc2 = nn.Linear(50, 10)

    def forward(self, x):
        # 卷积层->ReLU激活->最大池化层
        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2(x), 2))
        # 将数据展平为一维
        x = x.view(-1, 320)
        # 全连接层->ReLU激活
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

四、总结

以上是Python实现激活函数的完整攻略,我们介绍了激活函数的定义和作用,以及Python中实现激活函数的两种方法,并且通过代码示例进行了具体的讲解,希望能对大家有所帮助。