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

pytorch与卷积神经网络实战笔记

课程视频链接

CNN卷积神经网络算法原理

全神经网络的整体结构

输入层(x1, x2, x3…)->隐藏层(全连接)->输出层,整体就类似于一个函数,输入x,经过函数module(x)得到输出y的过程,图像可以看成一个矩阵例如128 * 128的图片就是一个128 * 128的矩阵作为输入x,这就是全连接神经网络,他是深度学习的基础。后面讲的卷积神经网络和他类似,主要将隐藏层换成卷积核
在这里插入图片描述
在这里插入图片描述

全连接神经网络的结构单元

深度学习一般是从单元到整体,然后搭建一个基础模型model,这个model可能由许多model进行排列组合构成,例如:1 * model1 + 2 * model2 + 5 * model3等等,然后通过这个model,输入x,得到y,如果发现y的结果很好,则可以根据这个model写一篇论文,这就是创新的地方。任何一个单元结构都是通过组合而成的。

输入(x1, x2, x3…)已经确定,所以优化模型的突破点在于改变w1, w2, w3…以及z,也就是找到一组最优的参数(w和b,它们都是矩阵)使得结果最优,所谓结果最优,就是最接近我们所希望的输出。
在这里插入图片描述

为什么要加入非线性激活函数

激活函数一般为非线性函数(非直线)。下图解释了,当激活函数为线性函数的时候出现的问题,多层的神经网络并没有起到效果,等价于一个参数,相当于只有一层,就不能发挥层数的作用。深度学习中,往往层数越多,效果越好,例如ResNet在保证深度的同时,又不会过拟合
在这里插入图片描述

Sigmoid激活函数

主要记忆函数图像以及导数的图像,因为导数是用来求参数(w和b)
在这里插入图片描述

Tanh激活函数

导数值越大,找参数(w和b)就会更快,当导数趋近为0的时候,w和b也就趋于确定
在这里插入图片描述

ReLu激活函数

在这里插入图片描述

Leaky ReLU函数

没有最优的模型,只有最合适的模型
加粗样式
在这里插入图片描述
在这里插入图片描述

神经网络前向传播(从左往右)

对模型(modle)输入内容x(音频图形等等,一般都是矩阵),得到输出y的过程就是神经网络前向传播
在这里插入图片描述
取中间的一条线,来看具体是如何计算的
在这里插入图片描述
训练、推理、验证、测试,这些过程都会设计导前向传播的过程。

神经网络的损失函数

损失函数就是计算前项传播,和实际希望之间的误差。利用损失函数可以说明,模型经过若干轮之后收敛了(就是loss值不断下降,区域稳定)。
f ( x i ) f(x_{i}) f(xi)是正向传播之后得到的结果, y i y_{i} yi是希望的结果,计算其均方误差的结果就是损失函数。通过损失函数反向传播(由梯度下降法实现)更新w, b,使得每一轮的效果越来越好。总结一下,训练过程中,前向传播计算误差,反向传播更新w,b。
在这里插入图片描述

  • 回归问题:输出的值是连续的,例如:预测明天的天气是多少度?
  • 分类问题:输出的值是离散的,例如:是猫还是狗?是猫为0,是狗为1。

训练模型的过程中,一开始误差会非常大,后面的误差会越来越小

梯度下降法(反向传播)-更新w 和 b

举一个下山的例子,来直观感受梯度下降法
在这里插入图片描述
因为x(输入的内容已经确定),所以实际 f ( x ) f(x) f(x)可以表示为 f ( w , b ) f(w, b) f(w,b),利用其求均方误差。 a a a是超参数(这里是学习率),为什么是偏导,因为w包含 w 1 , w 2 . . . w_{1}, w_{2}... w1,w2...因此,轮次越多,找到最优的w,b的参数几率越大。我们这里理解这个公式就可以了,这是梯度下降法最本质的内容。
在这里插入图片描述

反向传播计算样例

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

基础知识的总结

  1. 1000份数据(作为输入x),得到对应的输出1000份对应的y,得到1000份(x, y)
  2. 搭建模型model
  3. 开始训练,需要设置一些超参数,例如学习率,学习训练轮数等等,然后进行前向传播y,计算误差,反向传播更新w,n,直到训练轮次结束,最后产生model(w,b更新结束)
  4. 开始测试给定x,看是否符合预期的输出y
  5. 应用

图像在神经网络中的表示

CNN卷积神经网络,输入往往是图像或者视频(一帧一帧的图像)
图像在计算机中的本质,一般是像素矩阵(每个位置上的数字都在0-255之间)。
灰度图:单通道
彩色图:多通道(这里的通道指的是,每个特征值提取的特征)

全连接神经网络

全连接神经网络会破坏空间信息,如下图所示,需要先将图片矩阵展开,卷积神经网络(CNN)不会破坏
在这里插入图片描述

卷积运算过程

卷积是一种计算,卷积神经网络包含卷积运算和池化运算,可以没有池化运算,但是不能没有卷积运算。
输入x,这里是图像矩阵,卷积核就是w,卷积核的大小不会因为输入的大小改变而改变。卷积核的大小就是参数的数量。
在这里插入图片描述
在这里插入图片描述
卷积核(w)可以通过梯度下降法更新,偏置b和w的公式类似。
在这里插入图片描述
计算公式:输入 * 卷积核 + 偏置 ,通过激活函数得到输出

步符

这里每次移动两个单位,步符是2,最后得到的输出是2 * 2,步符和输出的大小是有一定关系的,如果步符是1,那么得到的输出结果是1 * 1
在这里插入图片描述

填充

步符和填充操作一起来帮助控制下一层输出特征图的大小,避免卷积块不断变小,导致后序不能运算的问题。
在这里插入图片描述

输入特征图和输出特征图的计算公式

知识积累

激活函数

激活函数是神经网络中用于引入非线性因素的重要组成部分。它在每个神经元的输出上应用,以决定是否以及如何传递信息到下一层。不同的激活函数对模型的学习和表现有不同的影响。

常见的激活函数包括:

  1. Sigmoid(S形函数)

    • 公式: σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1
    • 输出范围:0 到 1
    • 应用:多用于二分类问题,特别是最后一层。
    • 缺点:容易出现梯度消失问题。
  2. Tanh(双曲正切函数)

    • 公式: tanh ⁡ ( x ) = 2 1 + e − 2 x − 1 \tanh(x) = \frac{2}{1 + e^{-2x}} - 1 tanh(x)=1+e2x21
    • 输出范围:-1 到 1
    • 应用:相比于 Sigmoid,Tanh 的输出更加中心对称,因此在某些应用中表现更好。
    • 缺点:同样存在梯度消失问题。
  3. ReLU(Rectified Linear Unit,修正线性单元)

    • 公式: R e L U ( x ) = max ⁡ ( 0 , x ) ReLU(x) = \max(0, x) ReLU(x)=max(0,x)
    • 输出范围:0 到正无穷
    • 应用:非常常用的激活函数,特别是在深度神经网络中。
    • 优点:计算简单,收敛速度快。
    • 缺点:当输入为负值时,梯度为零,可能导致“神经元死亡”问题。
  4. Leaky ReLU

    • 公式: L e a k y R e L U ( x ) = max ⁡ ( α x , x ) Leaky ReLU(x) = \max(\alpha x, x) LeakyReLU(x)=max(αx,x),其中 α \alpha α 是一个很小的正数(如 0.01)。
    • 应用:是 ReLU 的改进版,解决了 ReLU 的神经元死亡问题。
  5. Softmax

    • 公式: s o f t m a x ( x i ) = e x i ∑ j e x j softmax(x_i) = \frac{e^{x_i}}{\sum_{j}e^{x_j}} softmax(xi)=jexjexi
    • 输出范围:0 到 1,且所有输出的和为 1。
    • 应用:通常用于多分类问题的最后一层,生成概率分布。
  6. ELU(Exponential Linear Unit)

    • 公式: ELU ( x ) = x \text{ELU}(x) = x ELU(x)=x x ≥ 0 x \geq 0 x0 ELU ( x ) = α ( e x − 1 ) \text{ELU}(x) = \alpha(e^x - 1) ELU(x)=α(ex1) x < 0 x < 0 x<0
    • 应用:减少了 ReLU 函数中负输入部分的“神经元死亡”问题。

每种激活函数都有其特定的应用场景,根据模型的架构和任务的需求,选择合适的激活函数能够显著提升神经网络的表现。


http://www.kler.cn/news/353347.html

相关文章:

  • 【每日刷题】Day142
  • 基于SpringBoot+Vue+uniapp微信小程序的澡堂预订的微信小程序的详细设计和实现
  • 《吉林大学学报(理学版)》
  • Android 13 修改系统源码强制夸克浏览器支持横竖屏显示
  • 软考(网工)——局域网和城域网
  • 自动化测试与敏捷开发的重要性
  • Centos7 搭建单机elasticsearch
  • 【重学 MySQL】六十四、主键约束的使用
  • STM32嵌入式移植GmSSL库
  • 利用Spring Boot构建大创项目资源规划平台
  • 医药追溯码是什么?
  • Java多线程--实现跑马小游戏
  • 《学习方法报》是什么级别的报纸?
  • 鸿蒙网络编程系列4-实现Smtp邮件发送客户端
  • 海康NVR管理平台EasyNVR多品牌NVR管理工具实现智能化视频管理介入现代化工厂
  • vue 音频播放控件封装
  • [已解决]DockerTarBuilder永久解决镜像docker拉取异常问题
  • Redis --- 第四讲 --- 常用数据结构 --- string类型
  • IntelliJ IDEA插件开发-开发环境搭建
  • 关于C语言中局部变量与全局变量——超详细解释篇
  • 元数据 -BWF 广播音频扩展 (bext)
  • redis--过期策略和内存淘汰策略
  • 灵当CRM index.php 任意文件上传漏洞复现
  • 我也要!赚钱是分层的:这就是你又累又穷的原因——早读(逆天打工人爬取热门微信文章解读)
  • 小猿口算炸鱼脚本
  • Python爬虫中的多线程技术:提升数据采集效率