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

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.dtcms.com/a/353220.html

相关文章:

  • html pc和移动端共用一个页面,移动端通过缩放达到适配页面,滚动飘窗
  • 实现自己的AI视频监控系统-第二章-AI分析模块3(核心)
  • ffmpeg+opencv交叉编译
  • Office 2024 长期支持版(Mac中文)Word、Execl、PPT
  • 使用Java操作微软 Azure Blob Storage:上传和下载文件
  • AR眼镜 + 视觉大模型在工业巡检的核心应用场景
  • AI赋能前端性能优化:核心技术与实战策略
  • “一带一路软件博览馆2025”香港开幕,金山办公田然:软件正重新定义未来生产力
  • 人机交互如何变革科普展示?哪些技术正成吸睛焦点?
  • 东芝2000AC彩机开机报请求维修CD40维修解决案例1
  • Kafka 4.0 升级实战路线图、关键变更与避坑清单
  • 2024年06月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 项目概要设计说明文档
  • 微服务-30.配置管理-动态路由
  • 当AI有了温度,三星正在重新定义生活的边界
  • Ubuntu安装Zookeeper全攻略
  • [Windows] WPS官宣 64位正式版(12.1.0.22525)全新发布!
  • leetcode274:H指数(计数排序)从 O(N²) 到 O(N) 的思维上升
  • 重学JS-004 --- JavaScript算法与数据结构(四)JavaScript 表单验证
  • Linux 下 Nginx 服务器从入门到精通:安装、配置、实战与性能优化​
  • mfc中操作excel
  • 关于国产 RAC 和分布式研讨
  • 【DBCExcelConvent】CAN报文解析辅助工具之DBC与Excel互转
  • 使用k8s实现部署MySQL的主从复制
  • 【LeetCode - 每日1题】求网格最长V形对角线段的长度
  • 页面跳转html
  • HTML响应式设计的颜色选择器,适配各种屏幕尺寸
  • rk3588 ubuntu20.04屏幕显示问题解决
  • CPU-IO-网络-内核参数的调优
  • AOSP 编译系统 (Android build system)