11-09 周四 CNN 卷积神经网络基础知识

11-09 周四 CNN 卷积神经网络
时间版本修改人描述
2023年11月9日09:38:12V0.1宋全恒新建文档

简介

 学习一下CNN,卷积神经网络。使用的视频课程。视觉相关的任务:

  • 人脸识别

 卷积网络与传统网络的区别:

<img alt=image-20231109094400591 src=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Fyanchenmochen%2Fimgs%2Fimgsimage-20231109094400591.png&pos_id=img-Z35hmB60-1699522025179)>

<img alt=image-20231109094414779 src=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Fyanchenmochen%2Fimgs%2Fimgsimage-20231109094414779.png&pos_id=img-08hzm0rf-1699522028665)>

卷积神经网络是一个三维的数据,是h*w*c

整体架构

<img alt=image-20231109094649673 src=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Fyanchenmochen%2Fimgs%2Fimgsimage-20231109094649673.png&pos_id=img-AGVXtOFG-1699522031824)>

  • 输入层
  • 卷积层
  • 池化层
  • 全连接层

卷积层

调度卷积核是5*5*3,也是一个立方体的。

 卷积神经网络也是使用一组权重参数进行加权求和得出的。

<img alt=image-20231109094831385 src=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Fyanchenmochen%2Fimgs%2Fimgsimage-20231109094831385.png&pos_id=img-pBCi31QD-1699522034969)>

注: 上图仅演示了一个通道,图像是3通道。

 相当于权重参数矩阵为:

<img alt=image-20231109095218835 src=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Fyanchenmochen%2Fimgs%2Fimgsimage-20231109095218835.png&pos_id=img-ZZahJ8Qu-1699522038141)>

 卷积神经网络的目的也是找到一组最佳的权重参数。

注: 卷积核的第三个维度一定要一样才行。卷积采用内积实现。Filter的尺寸一般为3, 5,7。 在进行卷积核的时候与卷积核的第三个维度数量相等。

<img alt=image-20231109105238890 src=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Fyanchenmochen%2Fimgs%2Fimgsimage-20231109105238890.png&pos_id=img-41nSowP4-1699522038975)>

 5x5x3代表一个卷积核,该卷积核的深度为3,与输入的深度相同。得到一个特征图,深度与输入图相同。卷积核可以有多个,则可以得到多个特征图。即Feature W0, Feature W1, … 经过多个卷积核得到多个特征图feture picture。

 如下图所示:

image-20231109105404933

 上图经过卷积层得到了28 * 28 * 6个特征图。

将经过卷积核卷积之后的图堆叠在一起,得到了特征图堆。并且,卷积应该经过多次,依次得到Low-level Feature, Mid-Level Feature, High-Level Feature。也就是说,一次卷积是不够的。

image-20231109110748134

 上图说明卷积核5 * 5 * 3得到的是一个值,一个立方体得到一个值。也就是说,一个图如果一个卷积核扫描完全部得到的是一个28 * 28 * 1的图。使用6个卷积核,则得到的卷积图是28 * 28 * 6.

 第二卷积是10个 5x5x6得到就是24 * 24 * 10。

卷积核涉及参数

image-20231109111654745
步长

步长为1,得到5 * 5, 而步长为2, 得到3 *3 。 相当于步长越小,得到的特征较多,越丰富。一般视觉任务使用的步长为1,但相应的计算量较大,文本类任务,也有使用步长为2.

image-20231109111744195
卷积核尺寸

卷积核尺寸越小,越细粒度。 一般是3 * 3。

边缘填充

+pad,边缘填充属性。

越往边界的点,被利用的次数越少。下图中原始输入是5 * 5,通过边缘填充在边缘上变成了7 * 7. 又不希望添加的值影响计算。所以一般使用zero padding。

image-20231109112224568
卷积计算公式
image-20231109113033603

 对于下面的案例,可以得到输出的尺寸:

image-20231109113251254

在听这个课程的时候,学习了卷积核的作用。卷积核的深度与输入是相同的,因此,卷积核是一个立方体。但是得到的结果确实一个平面。因为一个输入图像区域只得到了一个值

 具体可以参见 3D

 2D卷积可以参见 2D卷积

卷积参数共享

卷积参数共享一个巨大的好处就是参数共享,同样的一组参数对图像中每个小区域进行处理。相对于传统的神经网络,参数降低了非常多。

image-20231109134400604

10个 5 * 5 * 3卷积核,共75 * 10 =750个卷积参数 再加上10个偏置项共760个参数。

池化层

卷积层的特征点太多,会导致计算量过大。而且有些特征对于任务并不重要。因此可以通过池化进行瘦身。降采样 downsample。

image-20231109134807557

 降采样的方式有最大值采样,平均值采样。 降采样也有区域和步长。2 * 2 并且步长为2.池化层不涉及矩阵操作,而是仅仅筛选动作。

  • max pooling 最好的特征。
  • 平均值池化 average pooling 用的比较少。

任务

 如下图,卷积层要经过relu, 非线性变换。卷积层和relu是一组。经过卷积组,池化,然后最后一个全连接FC进行分类。

 每个卷积组:

  • 卷积
  • Relu

 在卷积层最后进行全连接时,需要将特征图进行拉长操作,将图拉成一个特征向量。最后与分类数量个神经元进行全连接。

 一层神经网络: 带参数计算。relu是没有参数计算的。即激活没有参数。即POOL也没有参数计算的。如下图一共是7层神经网络。

image-20231109135323230

 特征图变化如下:

image-20231109135810731

 上图中转换即拉伸成向量。

Alexnet-2012

 227 * 227 * 3

image-20231109135941294

VGG-经典网络-2014

 VGG filter均为3 * 3,卷积核比较小,网络层数为16。在池化后,通过增加卷积次数,即增加特征图的数量来弥补池化的损失。但Alexnet训练8小时,VGG可能需要3天才能训练完成。

image-20231109140119211

 VGG 在实验室 16层的网络,比30层的时候效果好,因为深度学习,越深越好,但实验结果令人失望,深度学习进入低谷。

Resnet残差网络-2015

 何凯明的工作,将增加层数中具有促进效果的层数保留,网络训练的结果一定不会比之前差。

image-20231109140556245

 相当于残差网络拯救了深度学习神经网络。Resnet更加经典,更主流。

image-20231109141059014

 下图中橙色为Resnet,误差更小。

image-20231109141243759
感受野

 感受野有什么作用:希望感受野越来越大。3个3 * 3 得到的感受野为7 * 7, 那么与直接使用7 * 7的卷积核进行卷积需要的区别。

image-20231109141341031

 堆叠小的卷积核需要的参数越少,训练更快。而且小卷积核由于经过的relu次数多,非线性特征保存的更好。

image-20231109141930649

项目实战

构造神经网络

 conv + relu 是一个组合。

image-20231109142448589
  • in_channels : 通道数。

  • out_channels: 16,使用16个特征图。

  • kernel_size=5; 卷积核尺寸5 * 5

  • stride = 1; 步长。

  • padding=2 ; 边缘填充。

  • 前向传播得到预测结果

image-20231109143420839

训练

 使用pytorch进行训练。

image-20231109143610085

Vision模块

 TorchVision有许多的数据集。

  • 数据预处理

    • dataset数据集
  • 网络模块设置

    分类任务

    semantic segmentation

    object detection, instance segmentation and Person Keypoint Detection

    Video classfication

    • 甚至可以拿到别人的预训练模型
image-20231109144332156
  • 网络模型保存和测试
    • transforms
      • PIL Image

任务

任务介绍

 flowers 一共102种分类。

 要把数据和标签读进来。ImageFolder工具。

  • 数据预处理
    • DataLoader模块直接读取batch数据
  • 网络模块设置
    • 迁移学习
    • 需要把head层改一改 256 * 256 , 224 * 224
    • 训练时可以全部重新训练,也可以只训练咱们任务的层,本质目标是一致的。
  • 网络模型保存与测试

数据增强Data Augmentation

 让数据量更多。

 数据不够时,这样做。

 如何更好的利用数据,倾斜,水平和垂直翻转,旋转,放大和缩小,即得到一个新的数据。

image-20231109145738260

一般,网络的输入大小是固定的,因此,需要resize成预期大小。

 下面代码中CenterCrop(224)中心裁剪。

 RandomhorizontalFlip(p=0.5)概率值,是随机翻转的概率。

 亮度,对比度,饱和度 色相。

 transforms.Normalize() 即要进行标准化,参数1为均值, 参数2为标准差

 具体的样例代码:

image-20231109150211101

训练集做了标准化,则测试集也要做相同的标准化。

数据加载

image-20231109151656003

读取标签对应的名字

image-20231109154444863

展示下数据

image-20231109154714475 image-20231109154834989

迁移学习

image-20231109155033175

迁移学习的目标是用别人训练好的参数来执行任务。尽可能差异比较少一些。

 那么迁移学习,学那个部分呢:

  • A: 使用卷积层的权重参数进行初始化。
  • B: 将人家训练好的参数冻住。对全连接层进行重新定义。
    • 数据量越小,冻住的参数越多。不到10000.
    • 数据量10000多,两万。挑出来一些。

迁移学习,学习的非常快。迁移学习拿过来的模型都是经过大量实验的结果,经典网络结构,得到的结果更快也更好。如VGG, ResNet。

模型加载

 需要指定模型名称

image-20231109160756278

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
image-20231109160950304

需要修改最后全连接层,为当前用户的任务分类数目。

 加载模型,并使用预训练模型。

~/.cache/checkpoints/resnet152-b121ed2d.pth
model_ft = models.resnet152(pretrained=use_pretrained)
set_parameter_requires_grad(model_ft, feature_extract)
num_ftrs=model_ft.fc.in_features
model_ft.fc = nn.Sequential(nn.Linear(num_ftrs,102), nn.LogSoftmax(dim=1))
input_size= 224
image-20231109161238856

设置那些层需要训练

 如下的参数中:

  • model_name 指定了要使用的模型
  • 102 指定了目标分类数
  • feature_extract: 是否要冻住某些模型
  • use_pretrained: 是否要使用预训练模型。
image-20231109162034134

 显示那些参数需要重新开始训练。

image-20231109162256882

优化器设置

使用了学习率的衰减函数。效果会更稳定一些。

image-20231109162434659

训练模块

image-20231109162708803 image-20231109162807802 image-20231109162853156 image-20231109162948140 image-20231109163103654

保存模型参数权重字典

准确率

优化器参数权重字典

image-20231109163159034 image-20231109163341371

开始训练

model_fit, val_acc_history, train_acc_history, valid_losses, train_losses, LRs = train_model(model_ft, dataloaders, criterion, optimizer, num_epoches=10, is_inception=(model_name=='inception'))

测试网络效果

完整训练

 将所有参数的require_grad设置为TRue,将学习率调整的小一些,以为之前用了别人的网络参数,学习率过大,可能会破坏掉之前的训练参数。

<img alt= src=https://cdn.jsdelivr.net/gh/yanchenmochen/imgs/imgsimage-20231109165735676.png>

Load the checkpoint

 加载之前保存的最好的模型继续开始训练。

image-20231109165911702

实际测试

image-20231109170534039

加载模型

image-20231109170632279

测试数据预处理

image-20231109170839775

 将一张图像处理成输入。

得到处理结果

8是因为batchsize。

image-20231109171021606 image-20231109171107236 image-20231109171137736

总结

 看了一天这个课程,终于看完了,对于卷积神经网络也算是有了更加进一步的理解了。现在就是要多多实战,敲代码就好了。现在还有点困惑的点包括:

  • 优化器的选择
  • 损失函数的选择
     不过,这个课程让自己对于卷积的理解加深了许多。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专业128分总分390+上岸中山大学884信号与系统电通院考研经验分享

专业课884 信号系统 过年期间开始收集报考信息&#xff0c;找到了好几个上岸学姐和学长&#xff0c;都非常热情&#xff0c;把考研的准备&#xff0c;复习过程中得与失&#xff0c;都一一和我分享&#xff0c;非常感谢。得知这两年专业课难度提高很多&#xff0c;果断参加了学长…

QT 布局管理综合实例

通过一个实例基本布局管理&#xff0c;演示QHBoxLayout类、QVBoxLayout类及QGridLayout类效果 本实例共用到四个布局管理器&#xff0c;分别是 LeftLayout、RightLayout、BottomLayout和MainLayout。 在源文件“dialog.cpp”具体代码如下&#xff1a; 运行效果&#xff1a; Se…

外部访问K8S集群内部的kafka集群服务

不许转载 kafka 部署 把 kafka 部署到 k8s 后&#xff0c;我们肯定是通过 service 从 k8s 外部访问 kafaka。这里的 service 要么是 NodePort&#xff0c; 要么是 LoadBalancer 类型。我们使用的方式是 LoadBalancer。 我们先看下面这张图&#xff0c;这是 kafka 在集群中的网…

从F5 BIG-IP RCE漏洞(CVE-2023-46747)来看请求走私的利用价值

0x01 前言 F5 BIG-IP广域流量管理器是一种网络流量管理设备&#xff0c;用于提升链路性能与可用性。F5在金融行业具有特别广泛的使用量&#xff0c;做过各大银行攻防演练的小伙伴对这个系统应该不会陌生。 最近爆出的CVE-2023-46747漏洞能达到远程RCE的效果&#xff0c;属于严重…

软件测试之冒烟测试详解

1. 核心 冒烟测试就是完成一个新版本的开发后&#xff0c;对该版本最基本的功能进行测试&#xff0c;保证基本的功能和流程能走通。 如果不通过&#xff0c;则打回开发那边重新开发&#xff1b; 如果通过测试&#xff0c;才会进行下一步的测试(功能测试&#xff0c;集成测试…

EDA实验----四选一多路选择器设计(QuartusII)

目录 一&#xff0e;实验目的 二&#xff0e;实验仪器设备 三&#xff0e;实验原理&#xff1a; 四&#xff0e;实验要求 五&#xff0e;实验内容及步骤 1.实验内容 2.实验步骤 六&#xff0e;实验报告 七.实验过程 1.创建Verilog文件&#xff0c;写代码 2.波形仿真 …

图扑智慧农业:农林牧数据可视化监控平台

数字农业是一种现代农业方式&#xff0c;它将信息作为农业生产的重要元素&#xff0c;并利用现代信息技术进行农业生产过程的实时可视化、数字化设计和信息化管理。能将信息技术与农业生产的各个环节有机融合&#xff0c;对于改造传统农业和改变农业生产方式具有重要意义。 图…

浙江大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;主页 | 教育漏洞报告平台 兑换价格&#xff1a;20金币 获取条件&#xff1a;提交浙江大学任意中危或以上级别漏洞

Leetcode刷题详解—— 组合总和

1. 题目链接&#xff1a;39. 组合总和 2. 题目描述&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些…

To create the 45th Olympic logo by using CSS

You are required to create the 45th Olympic logo by using CSS. The logo is composed of five rings and three rectangles with rounded corners. The HTML code has been given. It is not allowed to add, edit, or delete any HTML elements. 私信完整源码 <!DOCT…

docker下的nginx代理转发到tomcat

多次尝试失败原因&#xff0c;修改nginx配置文件以后&#xff0c;需要./nginx.sh -s reload 下&#xff0c;之前一直不转发&#xff0c;好像完全没有跳转的意思&#xff0c;后来查了多篇文档&#xff0c;最简单的方法如下 docker 安装 nginx 和tomcat就不多说了&#xff0c;可…

红黑树-RBTree

目录 1. 红黑树的概念2. 红黑树的性质3. 结点的定义4. 结点的插入5. 整体代码 1. 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式…

Cesium 相机设置

1.setView 直接跳转到目的地 // 设置相机位置 const position Cesium.Cartesian3.fromDegrees(113, 31, 20000); // setView通过定义相机目的地&#xff08;方向&#xff09;,直接跳转到目的地 viewer.camera.setView({ destination: position, // 位置设置 orientation: { //…

基于自然语言处理的结构化数据库问答机器人系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 知识库&#xff0c;就是人们总结出的一些历史知识的集合&#xff0c;存储、索引以后&#xff0c;可以被方便的检索出来供后人查询/学习。QnA Maker是用于建立知识库的工具&#xff0c;使用…

YOLOv8-Seg改进:分割注意力系列篇 | 高效的通道先验卷积注意力(CPCA) | 中科院 2023.6

🚀🚀🚀本文改进:高效的通道先验卷积注意力(CPCA)方法,支持注意力权重在通道和空间维度上的动态分布; 🚀🚀🚀CPCA 小目标分割检测&复杂场景首选,实现涨点 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新…

C++初阶--类与对象(3)(图解)

文章目录 再谈构造函数初始化列表隐式类型转换explicit关键字 static成员友元类内部类匿名对象拷贝函数时的一些优化 再谈构造函数 在我们之前的构造函数中&#xff0c;编译器会通过构造函数&#xff0c;对对象中各个成员给出一个适合的初始值&#xff0c;但这并不能称之为初始…

AIX5.3安装weblogic10.3

目录 1安装IBM JDK 1.6 2图形化准备 3安装weblogic 准备 4图形化界面安装 1安装IBM JDK 1.6 1.1检查操作系统 # oslevel 5.3.0.0 # bootinfo -y (显示AIX机器硬件是64位) 64 # bootinfo -K (显示AIX系统内核是64位) 64 因此&#xff0c;系统需要安装64位的jdk&#xff0c;…

基于STC12C5A60S2系列1T 8051单片机串口通信信应用

基于STC12C5A60S2系列1T 8051单片机串口通信应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存器列表基于STC12C5A60S2系列1T 8051单片…

赛氪助力全国大学生数学竞赛山东赛区圆满举办

近日&#xff0c;全国大学生数学竞赛山东赛区比赛有序进行&#xff0c;赛氪已连续6年助力本项赛事蓬勃发展。在中国高等教育学会高校竞赛评估与管理体系研究专家工作组发布的《2022全国普通高校大学生竞赛分析报告》中&#xff0c;本赛事荣登观察目录。 全国大学生数学竞赛旨在…

【C++破局】C++内存管理之new与deleted剖析

​作者主页 &#x1f4da;lovewold少个r博客主页 ⚠️本文重点&#xff1a;c内存管理部分知识点梳理 &#x1f449;【C-C入门系列专栏】&#xff1a;博客文章专栏传送门 &#x1f604;每日一言&#xff1a;花有重开日&#xff0c;人无再少年&#xff01; 目录 C/C的内存分配机…