PyTorch入门学习(十):神经网络-非线性激活

目录

一、简介

二、常见的非线性激活函数

三、实现非线性激活函数

四、示例:应用非线性激活函数


一、简介

在神经网络中,激活函数的主要目的是引入非线性特性,从而使网络能够对非线性数据建模。如果只使用线性变换,那么整个神经网络就会退化为一个线性模型,因为线性函数的组合仍然是线性的。非线性激活函数通过引入非线性性质,使神经网络能够适应更复杂的数据。

二、常见的非线性激活函数

ReLU(Rectified Linear Unit)

ReLU 是一种广泛使用的非线性激活函数。它的数学表达式如下:

css 复制代码
f(x) = max(0, x)

ReLU 将小于零的输入值设为零,而大于零的输入值保持不变。这种性质使得神经网络能够学习到稀疏特征,加速训练,以及更好地处理梯度消失问题。在 PyTorch 中,可以使用 torch.nn.ReLU() 实现 ReLU 激活。

Sigmoid 函数

Sigmoid 函数是另一种非线性激活函数,它的数学表达式如下:

css 复制代码
f(x) = 1 / (1 + exp(-x))

Sigmoid 函数将输入值映射到 0 到 1 之间,它在二元分类问题中广泛使用。然而,Sigmoid 函数在深度神经网络中容易出现梯度消失问题。在 PyTorch 中,可以使用 torch.nn.Sigmoid() 实现 Sigmoid 激活。

三、实现非线性激活函数

在 PyTorch 中,实现非线性激活函数非常简单。首先定义一个继承自 nn.Module 的类,然后在 forward 方法中应用所需的激活函数。下面是一个使用 ReLU 和 Sigmoid 激活函数的示例:

python 复制代码
import torch
from torch import nn
from torch.nn import ReLU, Sigmoid

class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init()
        self.relu = ReLU()
        self.sigmoid = Sigmoid()

    def forward(self, x):
        x_relu = self.relu(x)
        x_sigmoid = self.sigmoid(x)
        return x_relu, x_sigmoid

在上面的示例中,首先导入必要的库,然后定义了一个自定义模型 MyModel,它包含了 ReLU 和 Sigmoid 激活函数。在 forward 方法中,分别应用了这两个激活函数。

四、示例:应用非线性激活函数

下面将看到一个具体的示例,把非线性激活函数应用于图像数据。然后使用 PyTorch 和 CIFAR-10 数据集,这是一个广泛使用的图像分类数据集。最后使用 ReLU 和 Sigmoid 激活函数,并使用 TensorBoard 可视化结果。

python 复制代码
import torch
from torch import nn
from torch.nn import ReLU, Sigmoid
from torch.utils.tensorboard import SummaryWriter
from torch.utils.data import DataLoader
import torchvision.datasets

# 加载 CIFAR-10 数据集
dataset = torchvision.datasets.CIFAR10("D:\\Python_Project\\pytorch\\dataset2", train=False, transform=torchvision.transforms.ToTensor(), download=True)
dataloader = DataLoader(dataset, batch_size=64)

# 定义自定义模型
class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.relu = ReLU()
        self.sigmoid = Sigmoid()

    def forward(self, x):
        x_relu = self.relu(x)
        x_sigmoid = self.sigmoid(x)
        return x_relu, x_sigmoid

# 创建模型实例和 TensorBoard 编写器
model = MyModel()
writer = SummaryWriter("logs")
step = 0

# 遍历数据集并应用模型
for data in dataloader:
    imgs, targets = data
    output_relu, output_sigmoid = model(imgs)
    writer.add_images("input", imgs, step)
    writer.add_images("output_relu", output_relu, step)
    writer.add_images("output_sigmoid", output_sigmoid, step)
    step += 1

writer.close()

在上面的示例中,首先加载 CIFAR-10 数据集,然后定义了一个自定义模型 MyModel,其中包含了 ReLU 和 Sigmoid 激活函数。遍历数据集,将输入图像和经过激活函数处理后的输出图像写入 TensorBoard,以便进行可视化。

通过这个示例,可以看到非线性激活函数如何改变输入数据,引入非线性特性,从而增强神经网络的建模能力。

参考资料:

视频教程:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】

相关推荐
爱编程的小白L9 小时前
2027 计算机毕业设计选题汇总|深度学习专项(2027最新)
人工智能·深度学习·课程设计
辣知9 小时前
辣知·化智77 三千年接力写就的一本书
学习
Rocky Ding*9 小时前
MOSS-VL技术原理深度解析:让视觉流持续进入生成过程,实时 Agent 才有架构基础
论文阅读·人工智能·深度学习·机器学习·aigc·多模态·ai-native
一木 之林9 小时前
Dify学习笔记 01 · 平台入门与实战:部署、五类应用、RAG与MCP(第1-16集)
人工智能·笔记·学习·计算机视觉
摸鱼 特供版9 小时前
一款边录边标注的轻量截图录屏工具
windows·学习·电脑·音视频·软件需求
陈年老古董10 小时前
Hive 函数学习笔记(下):窗口函数与经典案例
hive·笔记·学习
jimmyleeee10 小时前
大模型安全之四十五:从数据到输出----GenAI 版权、知识产权与伦理合规实战指南
人工智能·深度学习·安全
面包狗AI4S10 小时前
【AI4S】生化环材高可信技术与产业周报(2026-10-03—2026-10-09)
人工智能·深度学习·机器学习·ai
田里的水稻11 小时前
EP_ROS框架---相机视频流交互二
人工智能·深度学习·数码相机·机器学习·迁移学习
罗西的思考11 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 — (6)— 奖励机制
人工智能·笔记·学习