24/10/12 算法笔记 LeNet

server/2024/10/18 2:31:33/
aidu_pl">

LeNet-5的成功在于其能够自动从图像中学习特征,而不需要人工设计特征提取器。这种能力使得LeNet-5在图像识别和分类任务中表现出色,并且对后来的深度学习模型产生了深远的影响。尽管现在的深度学习模型在规模和复杂性上远超LeNet-5,但LeNet-5仍然是深度学习和计算机视觉领域的一个里程碑。

LeNet-5的应用场景包括但不限于:

  • 手写数字识别:如邮政编码识别,这是LeNet-5最初被设计用来解决的问题。
  • 机器打印字符识别:LeNet-5也适用于识别机器打印的字符。
  • 图像分类:在其他图像分类任务中,LeNet-5可以作为一个基础模型进行调整和优化。
import torch
from torch import nn
net = nn.Sequential(nn.Conv2d(1,6,kernel_size=5,padding=2),nn.Sigmoid(),nn.AvgPool2d(kernel_size=2,stride=2),nn.Conv2d(6,16,kernel_size=5),nn.Sigmoid(),nn.AvgPool2d(kernel_size = 2,stride=2),nn.Flatten(), //将多维的输入数据展平成一维nn.Linear(16*5*5,120),nn.Sigmoid(),nn.Linear(120, 84), nn.Sigmoid(),nn.Linear(84,10))

在卷积神经网络(CNN)中,全连接层(nn.Linear)通常用于网络的末端,以将学习到的高层特征映射到最终的输出。在您提供的网络结构中,有三层全连接层,每层都有其特定的作用:

  1. 第一层全连接(nn.Linear(16*5*5, 120)

    • 这一层接收来自最后一个池化层的输出,该输出的形状为 (批次大小, 16, 5, 5)nn.Flatten() 将其展平成 (批次大小, 16*5*5)
    • 这一层将展平的特征向量映射到一个具有120个神经元的隐藏层。这可以被视为一个特征学习阶段,其中网络学习如何将低层特征组合成更抽象的表示。
  2. 第二层全连接(nn.Linear(120, 84)

    • 这一层接收第一层全连接的输出,即一个形状为 (批次大小, 120) 的向量。
    • 它将120个特征映射到一个较小的、具有84个神经元的隐藏层。这一层进一步抽象化特征,减少参数数量,并可能帮助网络学习更复杂的模式。
  3. 第三层全连接(nn.Linear(84, 10)

    • 这一层是网络的最后一层,它将84个特征映射到最终的输出层,通常用于分类任务。
    • 对于多类分类问题,输出层的神经元数量等于类别数。在这种情况下,有10个神经元,对应于10个类别的输出。

问:为什么全连接层后面要加激活函数

  1. 引入非线性: 全连接层本质上是执行线性变换的,这意味着它们的输出是输入的加权和。如果没有激活函数,无论添加多少全连接层,网络最终都只能学习到输入数据的线性组合,这限制了网络的表达能力。激活函数引入了非线性,使得网络能够学习和模拟更复杂的函数。

  2. 帮助激活函数饱和: 某些激活函数,如Sigmoid或Tanh,具有饱和区,这意味着当输入值很大或很小的时候,函数的输出会趋向于常数。这可以帮助减少梯度消失问题,特别是在训练深度网络时。

  3. 控制输出范围: 激活函数可以控制输出的数值范围,例如,Sigmoid函数将输出限制在0和1之间,而Tanh函数将输出限制在-1和1之间。这有助于保持数值稳定性,尤其是在早期的深度学习模型中。

  4. 提高模型的灵活性: 激活函数的选择可以影响模型的灵活性和性能。例如,ReLU(Rectified Linear Unit)及其变体(如Leaky ReLU、Parametric ReLU等)在现代深度学习模型中非常流行,因为它们能够加速训练并提高模型的性能。

  5. 实现特定的输出分布: 在某些情况下,激活函数被用来确保输出层的分布符合特定的要求。例如,在二分类问题中,Sigmoid函数可以确保输出层的输出在0和1之间,表示概率。

  6. 减少过拟合: 某些激活函数,如Dropout,虽然不是传统意义上的激活函数,但它们可以被看作是在网络中引入随机性的一种方式,有助于减少过拟合。


http://www.ppmy.cn/server/132654.html

相关文章

好用的python相关的AI工具Bito介绍

插件名称:Bito 好用的python相关的AI工具Bito介绍 step 1:点插件step 2:搜索bito并安装step3 :需要登录,要有真实邮箱,按步骤走就行,完后就可以使用 step 1:点插件 step 2:搜索bito并安装 step3…

鸿蒙fork()功能

fork功能 上层通过使用fork()函数创建新进程。 fork是什么&#xff1f; #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h>int main(void) {pid_t pid;char *message;int n;pid fork();if (pid < 0) {perror…

CTFHUB技能树之SQL——字符型注入

开启靶场&#xff0c;打开链接&#xff1a; 直接指明是SQL字符型注入&#xff0c;但还是来判断一下 &#xff08;1&#xff09;检查是否存在注入点 1 and 11# 返回正确 1 and 12# 返回错误 说明存在SQL字符型注入 &#xff08;2&#xff09;猜字段数 1 order by 2# 1 order…

Java基础03-应用程序编程接口(API)

三、应用程序编程接口&#xff08;API&#xff09; 1、包 什么是包&#xff1a;包是用来分门别类的管理各种不同程序的&#xff0c;类似于文件夹&#xff0c;建包有利于程序的管理和维护。 注意事项&#xff1a; 同一个包下可以直接访问。不同包下要导包才可以使用自己程序下使…

动态规划-简单多状态dp问题——面试题17.16.按摩师

多状态问题的核心就是每个位置不止有一个状态&#xff0c;因此需要多个dp表表示不同状态对应位置的值&#xff0c;然后根据题目考虑特定情况写出状态转移方程即可 1.题目解析 题目来源&#xff1a;面试题17.16.按摩师——力扣 测试用例 2.算法原理 1.状态表示 这里与路径问…

Java 类和对象详解(上 )

个人主页&#xff1a; 鲤鱼王打挺-CSDN博客 Java专栏&#xff1a;https://blog.csdn.net/2401_83779763/category_12801101.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12801101&sharereferPC&sharesource2401_83779763&sharefromfrom_link &…

第十届MathorCup高校数学建模挑战赛-A题:基于 logistic 回归和 DEA 模型对无车承运平台线路定价问题的优化和评价

目录 摘 要 一、问题重述 1.1 问题背景 1.2 目标任务 二、问题分析 三、模型假设 四、符号说明 五、模型建立和求解 5.1 问题一的分析和建模 5.1.1 成分初步筛选 5.1.2 缺失值处理 5.1.3 相关性分析 5.1.4 主成分分析 5.2 问题二的分析和建模 5.2.1 数据预处理 …

报错Automatic merge failed; fix conflicts and then commit the result.

git pull test2 main From https://github.com/xx/test2* branch main -> FETCH_HEAD Auto-merging README.md CONFLICT (add/add): Merge conflict in README.md Automatic merge failed; fix conflicts and then commit the result. 报错原因&#xff…