Pytorch:CNN理论基础

目录

一、图象基础知识

1、图像的构成

2、图像的分类

3、拓展知识

4、图像的加载方法

二、卷积神经网络概述

1、什么是卷积神经网络?

2、卷积神经网络的组成

3、CNN概述

三、卷积层

1、卷积计算

2、padding(填充)

3、stride(步长)

4、多通道卷积计算

5、多卷积核计算

6、特征图大小

7、卷积层API

四、池化层

1、池化层的作用

2、池化分类

3、池化层API


CNN = 卷积神经网络(Convolutional Neural Network)

一、图象基础知识

1、图像的构成

由像素点构成

2、图像的分类
  1. 灰度图像(单通道)
  • 只有 1 个通道
  • 每个像素:0~255
    • 0 = 纯黑
    • 255 = 纯白
  • 形状:[H,W] 高 × 宽
  1. 彩色图像(RGB 三通道)
  • R 红、G 绿、B 蓝 3 个通道
  • 每个通道像素值:0~255
  • 形状:[H,W,C] 高 × 宽 × 通道数
3、拓展知识
  • PyTorch 格式:[B,C,H,W] 批次、通道、高、宽
  • 黑白图不是只有黑色白色,是深浅灰色组成
  • 彩色图 = 三张灰度图叠加(R/G/B 各一张)

总结速记版:

图片由像素组成,灰度单通道,RGB 三通道,数值 0 到 255,矩阵存储。

4、图像的加载方法

plt.imread()

plt.imshow()

二、卷积神经网络概述

1、什么是卷积神经网络?

**卷积神经网络(Convolutional Neural Network)**是含有卷积层的神经网络. 卷积层的作用就是用来自动学习、提取图像的特征。

2、卷积神经网络的组成

CNN网络主要由三部分构成:卷积层、池化层和全连接层构成:

卷积层负责提取图像中的局部特征;

池化层用来大幅降低参数量级(降维);

全连接层用来输出想要的结果。

3、CNN概述

CNN要做的事情是:

给定一张图片,是车还是马未知,是什么车也未知,现在需要模型判断这张图片里具体是一个什么东西,总之输出一个结果:如果是车 那是什么车

最左边是 数据输入层:对数据做一些处理,比如去均值(各维度都减对应维度的均值,使得输入数据各个维度都中心化为0,避免数据过多偏差,影响训练效果)、归一化(把所有的数据都归一到同样的范围)、PCA等等。CNN只对训练集做"去均值"这一步。

中间是 卷积层(CONV):线性乘积求和,提取图像中的局部特征

激励层(RELU):ReLU激活函数,输入数据转换成输出数据

池化层(POOL):取区域平均值或最大值,大幅降低参数量级(降维) 最右边是

全连接层(FC):输出CNN模型预测结果

功能总结:

卷积层:特征提取

池化层:降维

全连接层:得到输出结果

三、卷积层

1、卷积计算

输入通过滤波器得到输出:

计算一下参数用二维表示:

1\]\[1\]=4 = 1\*1 +1\*0 +1\*1 + 0\*0+1\*1 +1+0 +0\*1 +0\*0 +1+1=4 ![](https://i-blog.csdnimg.cn/direct/298f9d94cee44de7a133a63e6594e5d9.png) ![](https://i-blog.csdnimg.cn/direct/eec997bb8940485f94d89a2361951848.png) \[2\]\[2\]=4= 1\*1 + 1\*0 + 1+1 +0\*1 +1\*1 +1\*0 + 0\*1 + 1\*0 +1\*1 =4 可以根据示意图计算一下其他位置的数据验证。 ###### 2、padding(填充) padding(填充)操作用于处理卷积时图像边缘的像素。 其目的是在输入图像的边界周围添加额外的像素(通常是零),从而解决卷积操作时边缘信息丢失的问题。 ###### 3、stride(步长) stride(步长)指的是卷积核在图像上滑动时的步伐大小,即每次卷积时卷积核在图像中向右(或向下)移动的像素数。步长直接影响卷积操作后输出特征图的尺寸,以及计算量和模型的特征提取能力。 ###### 4、多通道卷积计算 ![](https://i-blog.csdnimg.cn/direct/b022273385f34913842048f3fdfa0a45.png) ###### 5、多卷积核计算 ![](https://i-blog.csdnimg.cn/direct/8d089903b0634ae0b06b2b2546b73eb1.png) ![](https://i-blog.csdnimg.cn/direct/b2528c5ce37e4cf7b8ccf7d098562155.png) ###### 6、特征图大小 输出特征图的大小与以下参数息息相关: size: 卷积核/过滤器大小,一般会选择为奇数,比如有 1\*1 、3\*3、5\*5 Padding: 零填充的方式 Stride: 步长 那计算方法如下图所示: 输入图像大小: W x W 卷积核大小: F x F Stride: S Padding: P 输出图像大小: N x N 计算公式: ![](https://i-blog.csdnimg.cn/direct/5a8d876d77594c4ba29aa16a61f0c218.png) 计算示例: > 以下图为例: > > 图像大小: 5 x 5 > > 卷积核大小: 3 x 3 > > Stride: 1 > > Padding: 1 > > (5 - 3 + 2) / 1 + 1 = 5, 即得到的特征图大小为: 5 x 5 ![](https://i-blog.csdnimg.cn/direct/462a2e66bf7e48d9a889948f8d4a8a54.png) ###### 7、卷积层API ```python conv = nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding) """ 参数说明: in_channels: 输入通道数, out_channels: 输出通道,也可以理解为卷积核kernel的数量 kernel_size:卷积核的高和宽设置,一般为3,5,7... stride:卷积核移动的步长 padding:在四周加入padding的数量,默认补0 """ ``` #### 四、池化层 ###### 1、池化层的作用 池化层 (Pooling) 降低维度, 从而减少计算量、减少内存消耗,并提高模型的鲁棒性。 ###### 2、池化分类 (1) 最大池化 (2)平均池化 ![](https://i-blog.csdnimg.cn/direct/7fc8d8075527408f91d4c3cabe74c9dd.png) ###### 3、池化层API ```python # 最大池化 nn.MaxPool2d(kernel_size=2, stride=2, padding=1) # 平均池化 nn.AvgPool2d(kernel_size=2, stride=1, padding=0) ```

相关推荐
码途漫谈1 小时前
Easy-Vibe开发篇阅读笔记(二)——前端开发之Figma与MasterGo入门
人工智能·笔记·ai·开源·ai编程·figma
阿瑞说项目管理1 小时前
2026 智造升级:制造企业 Agent 从 0 到 1 落地指南,五大场景拆解实战路径
人工智能·agent·智能体·企业级ai
Mr_sst1 小时前
infra-ai模块宏观设计解析:业务与模型之间的中间层核心架构
大数据·人工智能·ai·llama
Slow菜鸟2 小时前
Codex CLI 教程(五)| AI 驱动项目从零到一:面向 Java 全栈工程师打造个人 ECC(V2版)
java·开发语言·人工智能
一碗白开水一2 小时前
【论文解读】VMamba: Visual State Space Model
人工智能·计算机视觉
网安情报局2 小时前
如何选择合适的AI大模型:快快云安全AI大模型聚合平台全解析
人工智能·网络安全·ai大模型
yongyoudayee2 小时前
业务语义模型:AI CRM从“能用”到“好用”的技术分水岭
大数据·人工智能
我的世界洛天依2 小时前
官宣|VFrame 企划正式成立:九州合唱团登场,九州网络用 RVC 重构跨 IP 虚拟歌手音乐生态
人工智能·电脑
木雷坞2 小时前
视觉算法环境 Docker 镜像拉取失败排查
运维·人工智能·docker·容器