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 函数中负输入部分的“神经元死亡”问题。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/892928.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QtModel

QModelIndex index1 model->index(row,column,QModelIndex());QModelIndex index2 model->index(row.column,index2); QSqlQuery::size() 仅在使用了 QSqlQuery::exec() 后并且查询结果集的所有行都被读取时才有效。如果结果集很大或在使用游标的情况下&#xff0c;返回…

AVL树的实现

AVL树 1. AVL的概念2. AVL树的实现2.1 AVL树的结构2.2 AVL树的插⼊2.2.1 AVL树插⼊⼀个值的⼤概过程2.2.2 平衡因⼦更新2.2.3 插⼊结点及更新平衡因⼦的代码实现 2.3 旋转2.3.1 旋转的原则2.3.2 右单旋2.3.3 右单旋代码实现2.3.4 左单旋2.3.5 左单旋代码实现2.3.6 左右双旋2.3.…

【排序】——2.快速排序法(含优化)

快速排序法 递归法 霍尔版本(左右指针法) 1.思路 1、选出一个key&#xff0c;一般是最左边或是最右边的。 2、定义一个begin和一个end&#xff0c;begin从左向右走&#xff0c;end从右向左走。&#xff08;需要注意的是&#xff1a;若选择最左边的数据作为key&#xff0c;则…

Arduino配置ESP32环境

Arduino配置ESP32环境 引言一、IDE下载教程操作取巧方法 二、社区安装包三、官方手动安装 引言 最近入手了一款ESP32-C3的开发板&#xff0c;想继续沿用现有Arduino IDE&#xff0c;网上看了很多方法&#xff0c;大致分了三类&#xff1a;IDE下载、社区安装包、github手动配置…

基于SpringBoot+Vue+uniapp的诗词学习系统的详细设计和实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

ROS理论与实践学习笔记——5 ROS机器人系统仿真之URDF(Unified Robot Description Format)语法详解

URDF 文件是一个标准的 XML 文件格式&#xff0c;用于在 ROS 中描述机器人模型的结构。URDF 通过预定义的一系列标签&#xff0c;简洁地表达机器人的组成和运动关系。虽然机器人模型可能非常复杂&#xff0c;但在 URDF 中可以主要简化为两个核心部分&#xff1a; 连杆&#xff…

6.2 遍历重定位表

本节我们将编写一个遍历重定位表的示例程序&#xff0c;打印重定位表。 本节必须掌握的知识点&#xff1a; 遍历重定位表 6.2.1 遍历重定位表 实验四十三&#xff1a;遍历重定位表 以下代码实现打印"c:\\notepad64.exe"进程重定位表的所有信息。 /*--------------…

【详尽-实战篇】使用Springboot生成自带logo或者图片的二维码-扫描二维码可以跳转到指定的页面-Zing-core

先上效果图 项目源码&#xff1a;https://download.csdn.net/download/qq_43055855/89891285 源码地址 手机扫描二维码跳转到指定网页 概述 这个项目是一个基于 Java 的二维码生成与解析工具&#xff0c;主要由 QRCodeUtil 和 QRCodeController 两个类组成。它利用了 Google…

python 爬虫 入门 一、基础工具

目录 一&#xff0c;网页开发者工具的使用 二、通过python发送请求 &#xff08;一&#xff09;、get &#xff08;二&#xff09;、带参数的get &#xff08;三&#xff09;、post 后续&#xff1a;数据解析 一&#xff0c;网页开发者工具的使用 我们可以用 requests 库…

人脸识别-特征算法

文章目录 一、LBPH算法1.基本原理2.实现步骤3.代码实现 二、Eigenfaces算法1.特点2.代码实习 三、FisherFaces算法1.算法原理2.算法特点3.代码实现 四、总结 人脸识别特征识别器是数字信息发展中的一种生物特征识别技术&#xff0c;其核心在于通过特定的算法和技术手段&#xf…

leader必备技能——编写高质量测试计划

前言 作为一个想成为leader(不论是整个测试部门还是小项目组的leader&#xff09;的人&#xff0c;测试计划编写是必备技能。 接下来我们先了解一下测试计划的一些基础知识再进一步了解。 什么是测试计划&#xff1f; 测试计划是对测试过程的整体设计&#xff0c;测试计划确…

Spring Boot知识管理:智能搜索与分析

3系统分析 3.1可行性分析 通过对本知识管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本知识管理系统采用JAVA作为开发语言&#xff0c;Spring Boot框…

c#中多态的实例应用说明

在C#中&#xff0c;多态性是通过继承和实现接口来实现的&#xff0c;允许编写可以使用基类型的代码&#xff0c;然后使用派生类型的特定行为。 一.实例界面显示 二.源码界面显示 //定义的基类abstract class Shape{public abstract int Area();//基类中的抽象方法}//定义矩形的…

【前端】如何制作一个自己的网页(6)

接上文 网络中的图片 我们也可以在百度等网站搜索自己喜欢的图片。 此时对图片点击右键&#xff0c;选择【复制图片地址】&#xff0c;即可获得该图片的网络地址。 其实在HTML中&#xff0c;除了图片以外&#xff0c;我们还可以利用地址找到另一个网页。 如右图所示&#…

第一次排查 Java 内存泄漏,别人觉得惊险为什么我觉得脸红害羞呢

今天前端一直在群里说&#xff0c;服务是不是又挂了&#xff1f;一直返回 503。我一听这不对劲&#xff0c;赶紧看了一眼 K8S 的 pod 状态&#xff0c;居然重启了4次。测试环境只有一个副本&#xff0c;所以赶紧把副本数给上调到了3个。 堵住前端的嘴&#xff0c;免得破坏我在…

【C语言】一维数组应用Fibonacci数列

Fibonacci数&#xff08;斐波那契数列&#xff09; 前两项为1&#xff0c;从第三项开始&#xff0c;每一项为前两项的和。可以知道连续三项的关系&#xff1a;f[i]f[i-1]f[i-2] 使用数组进行存储&#xff0c;十分方便。可以知道前n项的fibonacci数。 #include <stdio.h>…

数据治理(2)-数据标准

前言 在建模前规划制定数据标准&#xff0c;或在建模使用过程中根据业务情况沉淀企业业务的数据标准。通过规范约束标准代码、度量单位、字段标准、命名词典&#xff0c;来保障数据处理的一致性&#xff0c;从源头上保障数据的标准化生产&#xff0c;节约后续数据应用和处理的…

什么是 C/2023 A3(紫金山-阿特拉斯)彗星?让我们用 Python 来绘制它的路径

彗星的基本概念 彗星&#xff08;Comet&#xff09;&#xff0c;是指进入太阳系内亮度和形状会随日距变化而变化的绕日运动的天体&#xff0c;呈云雾状的独特外貌&#xff0c;也是中国神话传说的扫帚星&#xff08;星官名&#xff09;。彗星分为彗核、彗发、彗尾三部分。彗核由…

一起体验AI动手实验,OceanBase 2024 年度发布会精彩预告

2024年OceanBase年度发布会将于10月23日在北京望京凯悦酒店举行。此次大会围绕“不止于记录”的主题&#xff0c;共同探讨当前数据库领域的前沿话题&#xff0c;包含主论坛、分论坛、AI 动手实训营、开源技术交流会等多个环节&#xff0c;诚邀全国各地的企业和开发者共同参与&a…

一个月学会Java 第18天 容器与泛型(有容器的原码解读)

Day18 容器与泛型 我们来简单讲讲容器是什么&#xff0c;顾名思义&#xff0c;是存东西的器皿&#xff0c;就叫做容器&#xff0c;那在我们计算机中需要存的是什么呢&#xff0c;是不是就是数据啊&#xff0c;所以我们的java是有提供一系列数据容器的&#xff0c;容器我们也叫做…