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

卷积神经网络(CNN)原理

前言:何为卷积神经网络

卷积神经网络是一种深度学习模型,包括了卷积层,激活函数,池化层以及全连接层等等,他的设计灵感来自于生物学中的视觉系统,旨在模拟人类视觉处理的方式。

CNN的三大特性:局部连接,权重共享,池化
CNN结构
博主会经常分享自己在人工智能阶段的学习笔记,欢迎大家访问我滴个人博客!(养成系Blog!)
欢迎叨扰!

一、卷积层

1.1 卷积过程

卷积层的主要作用是提取输入数据中的局部特征

这张动画中蓝色的框就是指一个数据窗口,红色框为卷积核(滤波器),最后得到的绿色方形就是卷积的结果(卷积操作是通过滑动卷积核,在每个局部区域上进行“先乘再和”的运算,最终生成一个特征图,每个输出值是一个标量。

卷积操作

1.2 卷积层的作用以及涉及的超参数详解

卷积层主要用来提取局部特征

在实际使用中涉及到的参数有:

卷积核大小:决定了卷积核覆盖的局部区域大小,影响特征提取的粒度较小的卷积核可以捕捉更细粒度的特征,适合提取边缘和纹理较大的卷积核可以捕捉更广泛的特征,但计算量更大。

卷积核形状参数一定要是奇数,因为奇数大小的卷积核具有唯一的中心像素,便于在卷积操作中均匀取样并保持对称性,同时有助于处理图像边缘,避免模糊和信息损失

步长:每次滑动的位置,控制卷积核每次移动的像素数,影响输出特征图的尺寸

填充:在输入数据的边缘添加额外的像素(通常为零),以控制输出特征图的尺寸。

1.3 特征图尺寸计算公式(重要)

特征图尺寸计算公式

二、池化层

池化层的主要作用是对非线性激活后的结果进行下采样以减少参数的数量,避免过拟合,并提高模型的处理速度,提高计算速度,同时提高所提取特征的鲁棒性

分为最大池化和平均池化

池化层动画演示

三、多通道卷积

对于彩色图片有RGB三个通道,需要处理多输入通道的场景。输出特征图往往也会具有多个通道,而且在神经网络的计算中常常是把一个批次的样本放在一起计算,最后将每个通道特征图对应位置进行相加得到一张新的特征图,所以卷积算子需要具有批量处理多输入和多输出通道数据的功能。
多通道卷积

四、构建一个简单的卷积神经网络

下面我们将以最经典的LetNet为案例来构建一个简单的CNN网络骨架

首先我们先贴出LetNet的网络结构图如下

在这里插入图片描述

from sympy import Sum
import torch
import torch.nn as nn
from torchsummary import summary
class LeNet(nn.Module):"""下面是比较详细的参数名,具体参数值详见结构图"""def __init__(self):super(LeNet,self).__init__()self.model = nn.Sequential(# 最初输入卷积核的维度in_channels设置为1,代表输入灰度图的通道数nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5, padding=2),# outchannel即为卷积核维度nn.Sigmoid(),# 引入非线性特性nn.AvgPool2d(kernel_size=2, stride=2),nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5, padding=0),nn.AvgPool2d(kernel_size=2),nn.Flatten(),# 不要忘记展平操作nn.Linear(in_features=16*5*5, out_features=120),# 这里需要根据前面的池化层的输出尺寸来计算in_featuresnn.Linear(in_features=120, out_features=84),nn.Linear(in_features=84, out_features=10))def forward(self,input):output = self.model(input)return outputletnet = LeNet()
print(summary(letnet,input_size=(1,28,28),batch_size=8))

最终运行结果:

----------------------------------------------------------------Layer (type)               Output Shape         Param #
================================================================Conv2d-1             [8, 6, 28, 28]             156Sigmoid-2             [8, 6, 28, 28]               0AvgPool2d-3             [8, 6, 14, 14]               0Conv2d-4            [8, 16, 10, 10]           2,416AvgPool2d-5              [8, 16, 5, 5]               0Flatten-6                   [8, 400]               0Linear-7                   [8, 120]          48,120Linear-8                    [8, 84]          10,164Linear-9                    [8, 10]             850
================================================================
Total params: 61,706
Trainable params: 61,706
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.02
Forward/backward pass size (MB): 0.81
Params size (MB): 0.24
Estimated Total Size (MB): 1.06
----------------------------------------------------------------
None
http://www.dtcms.com/a/291417.html

相关文章:

  • 零拷贝技术(Zero-Copy)
  • OneCode 3.0 @APIEventAnnotation 注解速查手册
  • 从 Hi3861 平台到 WS63 星闪平台的程序移植全解析
  • 网络编程之 UDP:用户数据报协议详解与实战
  • 二分查找:区间内查询数字的频率
  • 网络协议(三)网络层 IPv4、CIDR(使用子网掩码进行网络划分)、NAT在私网划分中的应用
  • 大模型——上下文工程 (Context Engineering) – 现代 AI 系统的架构基础
  • c语言进阶 自定义类型 枚举,联合
  • 【LeetCode 热题 100】208. 实现 Trie (前缀树)
  • Linux下SPI设备驱动开发
  • 1.Java中的异常有哪些?异常处理机制呢?
  • C# 异常处理
  • 统计与大数据分析专业转型金融行业指南
  • makefile-- 其他函数
  • Linux PCI总线子系统
  • 网络基础DAY15-RSTP
  • OpenGL鼠标控制沿着指定轴旋转
  • linux --frp内网穿透
  • 低速信号设计之 RMII
  • 服务器系统时间不准确怎么办?
  • C++ 中的默认构造函数:非必要,不提供
  • 缓存数组,并遍历循环读取数组
  • springboot实战篇1
  • Windows VS2019 编译 Apache Thrift 0.15.0
  • DigitalOcean 云平台上线 AMD MI325X GPU Droplet 服务器
  • 如何编写假设和约束---SRS软件需求规格指南系列
  • accelerate 在Pycham中执行的设置方法
  • C语言字符串相关函数
  • 【网络编程】网络传输-protobuf
  • Prometheus+altermanager搭配钉钉报警