当前位置: 首页 > backend >正文

PyTorch中的激活函数

PyTorch中的激活函数详解

在深度学习中,**激活函数(Activation Function)**是至关重要的一环。它的主要作用是引入非线性,使神经网络能够拟合和学习复杂的非线性关系。如果没有激活函数,即使叠加多层神经网络,最终依然只是一个线性模型,无法处理真实世界中的复杂问题。

本文将结合理论、公式和PyTorch代码,详细介绍几种常见的激活函数及其使用方法。


1. 为什么需要激活函数?

假设一个神经网络每一层都只包含线性变换:

                                        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​

经过多层叠加,最终输出依然是输入的线性组合:

                                   

这说明:无论多少层的线性组合,本质上还是一个线性模型,并不能学习数据中的非线性特征。

因此我们需要在隐藏层引入非线性——这就是激活函数的价值。

推荐一个直观的可视化工具 👉 TensorFlow Playground。


2. PyTorch中常见的激活函数

PyTorch 提供了多种激活函数,主要在 torch.nntorch.nn.functional 模块中实现。

2.1 Sigmoid

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

  • 输出范围在 (0,1),适合概率问题

  • 常用于二分类输出层

  • 缺点:梯度消失

import torch
import torch.nn as nn
import matplotlib.pyplot as pltx = torch.linspace(-10, 10, 100)
sigmoid = nn.Sigmoid()
y = sigmoid(x)plt.plot(x.numpy(), y.numpy())
plt.title("Sigmoid 激活函数")
plt.show()

2.2 Tanh

        ​​​​​​​        ​​​​​​​​​​​​​​        

  • 输出范围 (-1,1),零均值

  • 收敛快,效果比Sigmoid好

  • 缺点:仍有梯度消失

tanh = nn.Tanh()
y = tanh(x)plt.plot(x.numpy(), y.numpy())
plt.title("Tanh 激活函数")
plt.show()

2.3 ReLU

        ​​​​​​​        ​​​​​​​        ​​​​​​

  • 简单高效

  • 缓解梯度消失

  • 稀疏激活

  • 缺点:Dying ReLU

import torch.nn.functional as Fy = F.relu(x)
plt.plot(x.numpy(), y.numpy())
plt.title("ReLU 激活函数")
plt.show()

2.4 Leaky ReLU

                                        ​​​​​​​​​​​​​​        ​​​​​​​        

leaky_relu = nn.LeakyReLU(negative_slope=0.01)
y = leaky_relu(x)plt.plot(x.numpy(), y.numpy())
plt.title("Leaky ReLU 激活函数")
plt.show()

2.5 Softmax

        ​​​​​​​        ​​​​​​​​​​​​​​

常用于多分类输出层。

input_tensor = torch.tensor([[-1.0, 2.0, -3.0, 4.0],[-2.0, 3.0, -3.0, 9.0]])
softmax = nn.Softmax(dim=1)
output_tensor = softmax(input_tensor)
print(output_tensor)

3. 激活函数选择指南

  • 隐藏层

    • 优先 ReLU

    • ReLU 不好时尝试 Leaky ReLU

    • 避免 Sigmoid,Tanh可在部分场景用

  • 输出层

    • 二分类 → Sigmoid

    • 多分类 → Softmax


4. 总结

激活函数的主要作用:

  • 引入非线性

  • 解决梯度问题

  • 改变分布,提高收敛

PyTorch 调用方式灵活:nn.ModuleF.functional

http://www.xdnf.cn/news/18886.html

相关文章:

  • AI需求优先级:数据价值密度×算法成熟度
  • HSA35NV001美光固态闪存NQ482NQ470
  • 达可替尼-
  • SpringBoot整合RabbitMQ:从消息队列基础到高可用架构实战指南
  • 浏览器网页路径扫描器(脚本)
  • 改造thinkphp6的命令行工具和分批次导出大量数据
  • MySQL 基础:DDL、DML、DQL、DCL 四大类 SQL 语句全解析
  • K8s 二次开发漫游录
  • 了解CDC(变更数据捕获)如何革新数据集成方式
  • Spring Security 深度学习(一): 基础入门与默认行为分析
  • 【日常学习】2025-8-27 测开框架设计模式探索04
  • Elasticsearch数据迁移快照方案初探(二):快照创建与多节点存储问题解决
  • 数据结构:创建堆(或者叫“堆化”,Heapify)
  • 软件定义汽车(SDV)调试——如何做到 适配软件定义汽车(SDV)?(中)
  • Mysql数据挂载
  • TencentOS Server 4.4 下创建mysql容器无法正常运行的问题
  • 微服务-docker compose
  • mfc中操作excel
  • APP与WEB测试的区别?
  • Windows MCP 踩坑经验 -- 今日股票行情助手
  • 金仓数据库文档系统全面升级:用户体验焕然一新
  • SqlHelper类的方法详细解读和使用示例
  • 人工智能和机器学习如何改善机器人技术
  • 应变片与分布式光纤传感:核心差异与选型指南
  • 深入解析 Chromium Mojo IPC:跨进程通信原理与源码实战
  • 【开发配置】GitLab CR(Code Review)规则配置清单
  • 钉钉 AI 硬件:DingTalk A1
  • Java文件的组织方式
  • 用户体验设计 | 从UX到AX:人工智能如何重构交互范式?
  • 趣味学习Rust基础篇(用Rust做一个猜数字游戏)