【通俗理解】CNN卷积神经网络 - 附带场景举例

一. CNN 算法概述


CNN的全称是Convolutional Neural Networks, ConvNets,称之为卷积神经网络,是深度学习的经典算法之一。
在这里插入图片描述

CNN一般用于图片分类、检索、人脸识别、目标定位等。在常规的图像处理的过程中,存在以下两个问题:

  1. 图像需要处理的数据量太大,导致成本很高,效率很低
  2. 图像在数字化的过程中很难保留原有的特征,导致图像处理的准确率不高。

CNN很好的解决了这个问题:

  1. 能够将大数据量的图片有效的降维成小数据量(并不影响结果)
  2. 能够保留图片的特征,类似人类的视觉原理

放在实际的例子中,如图中CNN要做的事情是:给定一张图片代表交通工具,但是我不知道他具体是什么交通工具,现在需要模型判断这张图片到底属于哪个分类。结果输出:为车?或者为船?其实通俗的话来说,就是对于物体的分类实别。

在这里插入图片描述

如上图所示,要实别一张图片,要经历上面几个层级结构:CONV层, RELU层, POOL层和FC层。当然了,看到这里你还是一脸懵逼,这些都是什么东西?当然了,不要着急,下面来详细介绍。

二. CNN层级结构


先来一个总结:

  • CONV:卷积计算层,线性乘积求和。

  • RELU:激励层,捕捉复杂模式。

  • POOL:池化层,取区域平均或最大。

  • FC:全连接层

好多人的文章写的太过复杂,下面我们来通过例子来通俗化的讲解

2.1 CONV卷积层


举例说明,当我们给定一个"X"的图案,计算机怎么识别这个图案就是"X"呢?

img

为了保证图形经过缩放或者变形都能被实别出来,对于CNN来说,它是一块一块地来进行比对。它拿来比对的这个“小块”我们称之为Features(特征),每一个Feature就像是一个小图(就是一个比较小的有值的二维数组),不同的Feature匹配图像中不同的特征。

img

那什么东西叫做特征呢?例如下图所示,输入图片是一个人的脑袋,而人的眼睛是我们需要提取的特征,那么我们就将人的眼睛作为Features(特征),通过在人的脑袋的图片上移动来确定哪里是眼睛。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Features(特征)的比较,CNN算法通常使用矩阵来进行。图形的本质就是一个二维矩阵,那么对矩阵表示的图像,进行内积操作(逐个元素相乘再求和)就是所谓的卷积,其目的是用来提取图像的底层特征。

举例说明:左边是图像输入,中间部分就是滤波器filter,滤波器是带着一组固定权重的神经元,一般表示为二维矩阵,该矩阵要比输入图像的二维矩阵要小或相等,在输入图像的二维矩阵上不停的移动。不同的滤波器会得到不同的输出数据,比如颜色深浅、轮廓。

img

放在代码中,他可能就是这样:图中左边部分是原始输入数据,图中中间部分是滤波器filter【特征在代码中也称之为滤波器,也可以称之为卷积核】,图中右边是输出的新的二维数据。一般情况下,通过滤波器,图像的尺寸就会变小,由此也可以提取出图像的特征信息。

img

听起来是不是好像有点复杂,而在实际代码过程中,其实就简单多了,只需要调整参数即可,如下代码。

from torch import nn
# 卷积层
self.c1 = nn.Conv2d(in_channels=4, out_channels=32, kernel_size=3, padding=1)
  • in_channels=4:这里表示输入通道为4,即输入为图像的通道数,比如RGB就是3通道图像,RGBA就为4通道图像。
  • out_channels=32:表示输出为32通道
  • kernel_size=3:表示我们的滤波器filter为一个3*3的矩阵
  • padding=1:表示在图像周围填充1圈数据大小为0的固定数据

这里好像又出现了一个新名词,填充是啥。其实填充就是为了减少卷积操作导致的,边缘信息丢失,在图像周围填充固定数据,一般就是0。

2.2 RELU激励层


用于引入非线性性质到神经网络中,从而使其能够捕捉复杂的模式和特征。

常用的激励函数是ReLU,它将张量的负值设置为零,保持正值不变,这个函数收敛快,求梯度简单。

而把数据压缩到0-1有什么作用,用处是这样一来便可以把激活函数看作一种“分类的概率”,比如激活函数的输出为0.9的话便可以解释为90%的概率为正样本。

from torch import nn
# 激励层
self.ReLU = nn.ReLU()

img

2.3 池化层

对信号进行“收集” 并“总结”,类似于水池收集水资源,其目的是减小卷积层数据的维度。

  • 收集:由多变少,图像的尺寸由大变小
  • 总结:一般使用区域最大值表示
import torch.nn as nn
# 池化层
self.s1 = nn.MaxPool2d(kernel_size=2, stride=1)
  • kernel_size=2:表示卷积核为2
  • stride=1:表示卷积核每次移动步长为1

2.4 FC全连接层


全连接层又称为线性层,其每个神经元与上一层所有神经元相连,实现对前一层的线性组合,线性变换。其目的是汇总卷积层和池化层得到的图像的底层特征和信息。

线性层的数学表示为:

o u t p u t = i n p u t × w e i g h t T + b i a s output=input×weight^T+bias output=input×weightT+bias

其中input 是输入数据的张量,weight是权重矩阵,bias 是偏置向量。

但是这个在代码里面表示也很简单,如下所示。

import torch.nn as nn
# 全连接层
self.f3 = nn.Linear(6400,512)

表示输入通道为6400,输出通道为512。此时如果再来一个输出层

self.f4 = nn.Linear(512, 5)

表示输入通道为512,输出为5,此时的5一般就表示分类的数量,例如要区分5种不同的车。

三. 总结


CNN结构类似于一个水流结构,对一张图片拆分再拆分来捕捉其特征,到此为止,整个CNN实别过程结束。
在这里插入图片描述
主要参考文献:CNN笔记:通俗理解卷积神经网络

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

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

相关文章

【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码

【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码 1 题目 题目 D 题 圈养湖羊的空间利用率 规模化的圈养养殖场通常根据牲畜的性别和生长阶段分群饲养,适应不同种类、不同阶段的牲畜对空间的不同要求,以保障牲畜安全和健康&a…

离线数仓同步数据3

业务数据_增量表数据同步 1)Flume配置概述2)Flume配置实操3)通道测试4)编写Flume启停脚本 1)Flume配置概述 Flume需要将Kafka中topic_db主题的数据传输到HDFS,故其需选用KafkaSource以及HDFSSink&#xff…

内网穿透实现Windows远程桌面访问Ubuntu,简单高效的远程桌面解决方案

文章目录 前言1. ubuntu安装XRDP2.局域网测试连接3.安装cpolar内网穿透4.cpolar公网地址测试访问5.固定域名公网地址 前言 XRDP是一种开源工具,它允许用户通过Windows RDP访问Linux远程桌面。 除了Windows RDP外,xrdp工具还接受来自其他RDP客户端(如Fre…

uni-app 之 uni.request 网络请求API接口

uni-app 之 uni.request 网络请求API接口 image.png <template><!-- vue2的<template>里必须要有一个盒子&#xff0c;不能有两个&#xff0c;这里的盒子就是 view--><view>--- uni.request 网络请求API接口 ---<view><!-- 免费的测试接口 --…

制造企业如何优化物料控制?

导 读 ( 文/ 2127 ) 物料控制是指对制造过程中所涉及的物料流动和库存进行有效管理和控制的过程。它包括物料需求计划、供应商管理、物料采购、物料接收和入库、物料库存管理以及物料发放和使用等关键环节。通过精确的物料需求计划和库存管理&#xff0c;物料控制可以确保物料供…

转载: 又拍云【PrismCDN 】低延时的P2P HLS直播技术实践

低延时的P2P HLS直播技术实践本文是第二部分《PrismCDN 网络的架构解析,以及低延迟、低成本的奥秘》低延时的P2P HLS直播技术实践 [首页 > Open Talk NO.41 | 2018 音视频技术沙龙深圳站 > 低延时 WebP2P 直播技术实践https://opentalk-blog.b0.upaiyun.com/prod/2018-0…

【群答疑】jmeter关联获取上一个请求返回的字符串,分割后保存到数组,把数组元素依次作为下一个请求的入参...

一个非常不错的问题&#xff0c;来检验下自己jmeter基本功 可能有同学没看懂题&#xff0c;这里再解释一下&#xff0c;上面问题需求是&#xff1a;jmeter关联获取上一个请求返回的字符串&#xff0c;分割后保存到数组&#xff0c;把数组元素依次作为下一个请求的入参 建议先自…

TCP流量控制和拥塞控制,具体在场景中是怎么起作用的

TCP的流量控制 所谓的流量控制就是让发送方的发送速率不要太快&#xff0c;让接收方来得及接受。利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制。TCP的窗口单位是字节&#xff0c;不是报文段&#xff0c;发送方的发送窗口不能超过接收方给出的接收窗口的数值…

《TCP/IP网络编程》阅读笔记--域名及网络地址

目录 1--域名系统 2--域名与 IP 地址的转换 2-1--利用域名来获取 IP 地址 2-2--利用 IP 地址获取域名 3--代码实例 3-1--gethostbyname() 3-2--gethostbyaddr() 1--域名系统 域名系统&#xff08;Domain Name System&#xff0c;DNS&#xff09;是对 IP 地址和域名进行相…

OLED透明屏模块:引领未来显示技术的突破

OLED透明屏模块作为一项引领未来显示技术的突破&#xff0c;以其独特的特点和卓越的画质在市场上引起了广泛关注。 根据行业报告&#xff0c;预计到2025年&#xff0c;OLED透明屏模块将占据智能手机市场的20%份额&#xff0c;并在汽车导航系统市场中占据30%以上份额。 那么&am…

安装K8s基础环境软件(二)

所有节点执行 1、安装docker sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.reposudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin systemctl…

Python web 框架web.py「简约美」

web.py is a web framework for Python that is as simple as it is powerful. web.py is in the public domain, you can use it for whatever purpose with absolutely no restrictions. web.py 是一个简单而强大的 Python Web 框架。web.py 属于公共领域&#xff0c;您可以…

《C++设计模式》——行为型

前言 行为型模式是对在不同的对象之间划分责任和算法的抽象化。行为型模式不仅仅关注类和对象的结构&#xff0c;而且重点关注它们之间的相互作用。 Interpreter(解释器) Template Method(模板方法) GOOD&#xff1a;把不变的代码部分都转移到父类中&#xff0c;将可变的代…

【深度学习实验】数据可视化

目录 一、实验介绍 二、实验环境 三、实验内容 0. 导入库 1. 归一化处理 归一化 实验内容 2. 绘制归一化数据折线图 报错 解决 3. 计算移动平均值SMA 移动平均值 实验内容 4. 绘制移动平均值折线图 5 .同时绘制两图 6. array转换为tensor张量 7. 打印张量 一、…

数据结构与算法:练习与实践的重要性

文章目录 为什么练习与实践很重要&#xff1f;1. 熟练应用2. 问题解决能力3. 代码效率4. 面试准备 如何练习与实践&#xff1f;1. 在线评测平台2. 自主设计数据结构3. 解决不同类型的问题 持续学习与实践 &#x1f389;欢迎来到数据结构学习专栏~数据结构与算法&#xff1a;练习…

【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; list模拟实现 1. 前言2. list类的大致框架与结构…

Linux下的系统编程——共享存储映射(十)

前言&#xff1a; mmap是一种内存映射文件的方法&#xff0c;即将一个文件或者其它对象映射到进程的地址空间&#xff0c;实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后&#xff0c;进程就可以采用指针的方式读写操作这一段内存&…

车船边缘网关是如何给车辆船只定位的?

随着智能交通系统的不断发展&#xff0c;车路协同成为了重要的研究方向之一。而AI边缘计算网关在这个领域中发挥着至关重要的作用。本文将重点介绍AI边缘计算网关在车路协同中的应用&#xff0c;并强调其中的重点词汇或短语。 首先&#xff0c;什么是AI边缘计算网关&#xff1…

使用命令行创建仓库

如果你还没有任何代码&#xff0c;可以通过命令行工具创建一个全新的Git仓库并初始化到本项目仓库中。 git clone https://e.coding.net/***/neurosens.git cd neurosens echo "# neurosens" >> README.md git add README.md git commit -m "first commi…

2023年09月编程语言流行度排名

点击查看最新编程语言流行度排名&#xff08;每月更新&#xff09; 2023年09月编程语言流行度排名 编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的 一门语言教程被搜索的次数越多&#xff0c;大家就会认为该语言越受欢迎。这是一个领先指标。原始数据来自…