初识卷积神经网络CNN

卷积神经网络CNN

全连接神经网络存在的问题:

  • 输入的形式应该是列向量,但是卷积神经网络中的输入是图像(2D矩阵),那么就需要对图片进行展平处理,原本图像中蕴含的空间等信息就被打乱了
  • 输入的特征多了,那么神经元的参数就会很多,层的结构就很复杂,容易过拟合

通道数

通道数 是指图像或特征图在深度方向上的维度数量(可以类比全连接神经网络中的特征矩阵的x_i的特征数)

例如:

  • 灰度图只有一个通道(特征):亮度
  • RGB图像:3个通道(红,绿,蓝)
  • RGBA图像:4个通道(红,绿,蓝,透明度)

图像在计算机中的本质

一个大的数值矩阵,每个元素代表像素的亮度或颜色

对于灰度图(只有黑白两色):255表示亮白,0表示黑,只有一个通道

image-20250720152235550

对于彩色图像

三通道图

image-20250720153053484

整体结构

image-20250720154104648

卷积层

还是与手写数字为例;在密集层中,每个神经元都可以获取到整个的像素矩阵;而在卷积层中,我们让神经元只能获取到一部分像素而不是全部,这个特性被称为局部感知

局部感知的优点
  • 计算更快(输入的矩阵更小,那么对于神经元来说,参数的数量大大减小)
  • 需要更少的训练数据,更不容易过拟合(参数减少,模型复杂度降低,就不容易过拟合)

卷积层会改变通道的数目,在前一层的输入提取出不同的特征,同时会改变图片的长和宽

卷积核/滤波器

定义:一个在图像上滑动的小窗口,它与图像的局部区域进行点积运算,从而提取出该区域的特征。其实可以类比全连接神经网络的参数w,只不过它是共享的

卷积核是一个4D张量,形状为(C_out,C_in,K,K)

  • C_out:输出通道数/卷积核数量
  • C_in:输入通道数
  • K:卷积核大小(K×K)

案例:心电图信号分类

image-20250720120256155

池化层

池化层可以改变图像的大小,但不改变通道数

卷积运算

image-20250720162847525

对应位置相乘再相加

带偏置的计算过程

image-20250720163246832

权重共享

对于全连接神经网络,输入中的每个特征都对应着一个神经元中的一个参数

而对于卷积神经网络并非这样

卷积神经网络中,是同一个卷积核在整个输入图像上滑动,对所有局部区域使用相同权重参数

  • 卷积核的参数在整个图像上是共享的
  • 不同位置的局部区域都使用这个相同的卷积核做卷积操作
  • 每个位置的输出是该卷积核与对应局部区域的点积结果

填充

为了控制卷积后输出的特征图尺寸;在输入特征图周围填充0

image-20250721110521320

步幅

指卷积核一次移动几格;能够控制输出特征图的大小

eg:步幅为1

image-20250721111455305

步幅为2

image-20250721111709373

卷积运算后特征图大小

输出特征图的高OH=H+2P−FHS+1 输出特征图的高OH=\frac{H+2P-FH}{S}+1 输出特征图的高OH=SH+2PFH+1

  • H:输入特征图的高
  • P:填充的宽度(多了几圈)
  • FH:卷积核的高
  • S:步幅

OW=W+2P−FWS+1 OW = \frac{W+2P-FW}{S}+1 OW=SW+2PFW+1

  • W:输入特征图的宽
  • P:填充的宽度(多了几圈)
  • FW:卷积核的宽
  • S:步幅

多通道卷积运算

特征图有n通道,卷积核就有n通道

image-20250721152357448

将每个通道的卷积结构相加;有n个卷积核,输出特征图通道数就为n

image-20250721152823648

对于多通道卷积运算,我们可以用立体图表示

  • C:输入通道数
  • W:输入特征图的宽度
  • H:输入特征图的高度
  • FW:卷积核宽度
  • FH:卷积核高度
  • FN:输出通道数/输出的特征图数/卷积核数量

池化运算

池化运算是按通道独立运算的,即池化层运算不会对输入特征图的通道进行改变

池化核

类比卷积运算,我们也可以引入池化核这一概念

与卷积核相同和区别:

  • 相同点:都是在特征图上滑动的窗口,并提取信息
  • 不同:池化核仅仅是告诉算法要在特征图什么区域提取一块多大的特征,对这块特征取最大值或者平均,而不是和自身进行点积

最大池化运算

image-20250721155433414

每次在区域中找到最大值

平均池化运算

image-20250721155621383

区域内的值相加求平均

优点

  • 对微小的位置变化具有鲁棒性,使模型更加健壮

    image-20250721160001357

输出尺寸

OH=H+2P−FHS+1OW=W+2P−FWS+1 OH=\frac{H+2P-FH}{S}+1 \\ OW = \frac{W+2P-FW}{S}+1 OH=SH+2PFH+1OW=SW+2PFW+1

  • H,W:输入特征图的高、宽
  • P:填充的宽度(多了几圈)
  • FH,FW:池化核的高、宽
  • S:步幅

代码实现

模拟mnist手写数字识别

全部代码

import numpy as np
import tensorflow as tf
from keras.optimizers import Adam
from tensorflow.keras import models, layers, activations# 获取mnist手写数字数据集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()# 维度改成4维,适配卷积层的输入格式     (60000, 28, 28)->(60000, 28, 28, 1)
x_train = x_train[:, :, :, np.newaxis].astype(float)
x_test = x_test[:, :, :, np.newaxis].astype(float)model = models.Sequential([layers.Conv2D(32,  # 卷积核数量(4, 4),  # 卷积核尺寸activation=activations.relu,  # 经过该层后使用的激活函数,为了引入非线性特征input_shape=(28, 28, 1)  # 与mnist特征的shape相同),layers.MaxPool2D((3, 3)  # 池化核大小),layers.Conv2D(64,  # 卷积核数量(4, 4),  # 卷积核尺寸activation=activations.relu,  # 经过该层后使用的激活函数,为了引入非线性特征),layers.MaxPool2D((3, 3)  # 池化核大小),# 将2D展平为1D才能传入全连接层layers.Flatten(),# 全连接层layers.Dense(units=64,activation=activations.relu),# 输出层layers.Dense(units=10,activation=activations.linear)
])model.compile(loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),  # 稀疏交叉熵损失函数optimizer=Adam()  # adam优化
)model.fit(x_train,y_train,epochs=5,validation_split=0.1  # 每次从训练集中划分10%作为验证集
)# 前向传播值
logits = model(x_train)
y_train_pred = tf.nn.softmax(logits)
print(y_train_pred)# 评估模型
loss = model.evaluate(x_test, y_test)
print(loss)

详解:

用到的库

import numpy as np
import tensorflow as tf
from keras.optimizers import Adam
from tensorflow.keras import models, layers, activations

获取数据集并进行初步处理

# 获取mnist手写数字数据集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()# 维度改成4维,适配卷积层的输入格式     (60000, 28, 28)->(60000, 28, 28, 1)
x_train = x_train[:, :, :, np.newaxis].astype(float)
x_test = x_test[:, :, :, np.newaxis].astype(float)

卷积层,使用tensorflow.keras.layers.Conv2D()

        layers.Conv2D(32,  # 卷积核数量(4, 4),  # 卷积核尺寸activation=activations.relu,  # 经过该层后使用的激活函数,为了引入非线性特征input_shape=(28, 28, 1)  # 与mnist特征的shape相同),

池化层,使用tensorflow.keras.layers.MaxPool2D() (最大池化运算)

        layers.MaxPool2D((3, 3)  # 池化核大小),

整体结构

model = models.Sequential([layers.Conv2D(32,  # 卷积核数量(4, 4),  # 卷积核尺寸activation=activations.relu,  # 经过该层后使用的激活函数,为了引入非线性特征input_shape=(28, 28, 1)  # 与mnist特征的shape相同),layers.MaxPool2D((3, 3)  # 池化核大小),layers.Conv2D(64,  # 卷积核数量(4, 4),  # 卷积核尺寸activation=activations.relu,  # 经过该层后使用的激活函数,为了引入非线性特征),layers.MaxPool2D((3, 3)  # 池化核大小),# 将2D展平为1D才能传入全连接层layers.Flatten(),# 全连接层layers.Dense(units=64,activation=activations.relu),# 输出层layers.Dense(units=10,activation=activations.linear)
])

编译模型

model.compile(loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),  # 稀疏交叉熵损失函数optimizer=Adam()  # adam优化
)

训练模型

model.fit(x_train,y_train,epochs=5,validation_split=0.1  # 每次从训练集中划分10%作为验证集
)

获取最终损失函数值

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

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

相关文章

高层功能架构详解 - openExo

高层功能架构详解1. 系统整体结构与模块化设计2. 两大核心类:ExoData 与 ExoA. ExoDataB. ExoC. 数据结构的层级关系3. 多微控制器协作与BLE通信4. 主控软件运行流程(主循环伪代码)5. 架构优点小结6. 与 Code Structure 的关系实用建议1. 系统…

【西北工业大学公开课】导引系统原理(全61讲)周军 -个人笔记版 5000字

【严正声明】此文档为个人笔记:仅供个人与同学参考学习,记录学习过程,严谨商业转载,或商业售卖!感谢西北工业大学公开课知识分享,公开资料开源!视频链接:【【西北工业大学】导引系统…

《命令行参数与环境变量:从使用到原理的全方位解析》

前言 当我们在终端输入 ls -l /home 查看目录详情,或用 gcc -o hello hello.c 编译代码时,或许很少思考:这些空格分隔的 “指令 选项 路径” 是如何被程序识别的?为什么 PATH 变量能让系统找到可执行文件,而 HOME 变…

C++设计模式:单例模式 (现代C++主流实现方式Meyer‘s Singleton + 使用CRTP模板化)

文章目录单例模式创建单例类饿汉式or懒汉式现代C单例模式的主流实现方式——Meyers Singleton使用 CRTP 模板化单例类单例模式 单例模式是指程序中只需要一个实例化对象,在全局作用域或整个代码架构中,此对象只被实例化一次,就可以达到在整个…

Eureka 和 Nacos

一、基本介绍EurekaEureka 是 Netflix 公司开发的一款基于 REST 风格的服务注册与发现组件,专为分布式系统设计。它遵循 AP 原则(可用性、分区容错性优先),强调在网络分区等异常情况下的服务可用性,是 Spring Cloud Ne…

文件IO笔试题

目录前言一、核心概念:二、关键操作步骤:三、为什么需要文件IO?四、常见类型:五、标准IO源码六、笔试真题和练习1.代码实现1代码实现22.代码实现3.代码实现4.代码实现5.代码实现七、总结前言 文件IO(文件输入/输出&am…

前端学习 5:DFT

DFT技术 DFT (design for testability):指在设计系统和电路的同时,考虑测试的需求,通过增加一定的硬件开销,获得最大可测性的设计过程。(因为增加了硬件,所以也带来了不足&#xff…

最长递增子序列(LIS)问题详解

最长递增子序列LIS问题详解一、问题定义与核心特征1.1 问题描述1.2 核心特征二、基础解法:动态规划(DP)2.1 解法思路2.2 Java代码实现2.3 复杂度分析三、优化解法:二分查找贪心3.1 核心思路3.2 二分查找的作用3.3 Java代码实现代码…

什么是HTTP长连接、短连接?谁更能抗DoS攻击?

想象你在快餐店点餐: 你:“一个汉堡”收银员:“好的,15元”交易结束,你离开队伍你想加杯可乐,重新排队你:“一杯可乐”收银员:“好的,8元”再次离开… 这种每次沟通后立即…

微软徽标认证是什么?如何快速获取驱动签名?

在Windows系统中安装硬件驱动时,是否遇到过“无法验证发布者”的警告?这正是驱动数字签名在背后发挥作用。对于软件开发者而言,驱动数字签名不仅是系统兼容性的保障,更是企业品牌信任度的核心。一、驱动数字签名的核心作用驱动数字…

Apache Ignite缓存基本操作

这段内容主要讲解了 Apache Ignite 中缓存(IgniteCache)的基本操作,包括获取缓存、创建缓存、销毁缓存、执行原子操作以及异步操作等。下面我将用中文对这些内容进行详细解释,帮助你更好地理解。一、获取缓存实例(Gett…

最新基于R语言结构方程模型分析与实践技术应用

现代统计学理论和方法的不断完善,使科研工作对统计方法的要求也越来越高,面对纷繁复杂的数据,如何选择最为合适的数据分析方法已成为科研工作者,尤其是广大刚处于科研生涯起步阶段的研究生们最为棘手问题。随着科学的发展&#xf…

物联网_TDengine_EMQX_性能测试

一、Tdengine接口开发文档 1、数据库 1.创建数据库 URL /dp/createdb/ method post 请求示例 {"db_name":"demo01" // 必填 }响应示例 // 成功 {"code": 1,"data": {"成功创建数据库": "demo04"},"error…

从分析到优化:Amazon Q CLI 助力 EKS 网络调用链剖析与运维实践

1. 引言 在 Amazon EKS(Elastic Kubernetes Service)环境中,理解从 ALB(Application Load Balancer)到 Pod 的完整网络调用链对运维人员至关重要。本文将展示如何利用 Amazon Q CLI 这一 AI 助手工具,通过…

Class10简洁实现

Class10简洁实现 import torch from torch import nn from d2l import torch as d2l# 输入为28*28,输出为10类,第1、2隐藏层256神经元 num_inputs, num_outputs, num_hiddens1, num_hiddens2 784, 10, 256, 256 # 第1个隐藏层丢弃率为0.2,第…

【多线程篇22】:ConcurrentHashMap的并发安全原理剖析

文章目录一、HashMap 的“不安全”:问题的根源1. 数据结构回顾 (JDK 1.8)2. 并发下的致命缺陷:put 操作二、ConcurrentHashMap 的安全之道 (JDK 1.8)1. 核心数据结构2. 安全的 put 操作:分场景精细化加锁3. 安全的 size() 计算:并…

【Java + Vue 实现图片上传后 导出图片及Excel 并压缩为zip压缩包】

系统环境: Java JDK:1.8.0_202 Node.js:v12.2.0 Npm:6.9.0 Java后端实现 Controller /*** xxxx-导出* param response 返回信息体* param files 上传的图片文件* param param1 参数1* param param2 参数2*/PostMapping("/ex…

安科瑞:能源微电网助力工业园区“绿色”发展

朱以真近日,厦门市工业和信息化局印发工业园区绿色智慧微电网建设,拟开展全市工业园区绿色智慧微电网试点通知,那么对于如何实现绿色园区的建设是今天的话题。对工业园区绿色智慧微电网建设需求,其核心价值体现在“源-网-荷-储-充…

VUE2 学习笔记3 v-on、事件修饰符、键盘事件

事件处理v-on用于事件交互。语法:v-on:要绑定的事件“事件触发时执行的函数” (函数这里可以写括号,也可以不写,没有影响)简写::事件触发时要执行的函数,在Vue配置参数中,通过method…

变换域通讯系统CCSK的matlab仿真

CCSK(Cyclic Code Shift Keying)通信系统的MATLAB仿真。实现完整的CCSK调制、AWGN信道传输和解调过程,并计算了误码率(BER)。 % CCSK通信系统仿真 clear; clc; close all;% 参数设置 L 31; % m序列…