深度学习:PyTorch卷积神经网络分享(1)

本文目录:

  • 一、CNN概述
  • 二、CNN日常应用
  • 三、CNN的卷积层
    • (一 )基本介绍
    • (二)卷积层计算
      • 1.对输入数据的要求
      • 2.卷积核核心参数
      • 3.计算过程
      • 4.特征图尺寸计算
      • 5.1、多通道卷积计算
      • 5.2、多卷积核计算
      • 6.PyTorch卷积层API

前言:上篇文章讲解了图像,这篇文章正式进入卷积神经网络讲解。

一、CNN概述

卷积神经网络(Convolutional Neural Network, CNN)是一种专门用于处理网格状数据(如图像、视频、语音信号等)的深度学习模型。其核心思想是通过局部感受野、权值共享和空间下采样来高效提取特征,广泛应用于计算机视觉、自然语言处理(如文本分类)等领域。

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

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

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

(3)全连接层类似人工神经网络的部分,用来输出想要的结果。

CNN实践案例:
在这里插入图片描述
上图中CNN要做的事情就是:给定一张图片,是车还是马未知,是什么车也未知,现在需要模型判断这张图片里具体是一个什么东西,总之输出一个结果:如果是车,那是什么车?

二、CNN日常应用

图像分类:最常见的应用,例如识别图片中的物体类别;

目标检测:检测图像中物体的位置和类别;

图像分割:将图像分成多个区域,用于语义分割;

人脸识别:识别图像中的人脸;

医学图像分析:用于检测医学图像中的异常(如癌症检测、骨折检测等);

自动驾驶:用于识别交通标志、车辆、行人等。

三、CNN的卷积层

(一 )基本介绍

卷积层是CNN的核心组件,用于提取输入数据(如图像、语音、文本)的局部特征。它的核心思想是通过局部连接、权值共享和平移不变性高效处理网格状数据(如像素矩阵)。

卷积层利用卷积核(滤波器)对输入进行处理(卷积操作),从而生成特征图(feature map),并且每个卷积层能够提取不同层次的特征,从低级特征(如边缘)到高级特征(如物体的形状)。

卷积层的主要作用如下:

  • 特征提取:卷积层的主要作用是从输入图像中提取低级特征(如边缘、角点、纹理等)。通过多个卷积层的堆叠,网络能够逐渐从低级特征到高级特征(如物体的形状、区域等)进行学习;

  • 权重共享:在卷积层中,同一个卷积核在整个输入图像上共享权重,这使得卷积层的参数数量大大减少,减少了计算量并提高了训练效率;

  • 局部连接:卷积层中的每个神经元仅与输入图像的一个小局部区域相连,这称为局部感受野,这种局部连接方式更符合图像的空间结构,有助于捕捉图像中的局部特征;

  • 空间不变性:由于卷积操作是局部的并且采用权重共享,卷积层在处理图像时具有平移不变性。也就是说,不论物体出现在图像的哪个位置,卷积层都能有效地检测到这些物体的特征。

(二)卷积层计算

1.对输入数据的要求

在这里插入图片描述

2.卷积核核心参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.计算过程

在这里插入图片描述
1. input 表示输入的图像;

2. filter 表示卷积核, 也叫做滤波器(滤波矩阵)

  • 一组固定的权重,因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter;
  • 非严格意义上来讲,下图中红框框起来的部分便可以理解为一个滤波器,即带着一组固定权重的神经元,多个滤波器叠加便成了卷积层;
  • 一个卷积核就是一个神经元。
    在这里插入图片描述
    卷积运算本质上就是在滤波器和输入数据的局部区域间做点积。

如上图左上角的点计算:
在这里插入图片描述
按照上面的计算方法可以得到最终的特征图为:
在这里插入图片描述
实图-特征图对比:
在这里插入图片描述
注意:如果想要提取更多特征(比如花朵的颜色深浅、轮廓、纹理),可以用多个卷积核(分别提取花朵的颜色深浅、轮廓、纹理,生成不同的特征图)。

4.特征图尺寸计算

在这里插入图片描述
注意:

在这里插入图片描述

5.1、多通道卷积计算

在这里插入图片描述
如上图,计算方法如下:

  1. 当输入有多个通道(Channel), 例如 RGB 三个通道, 此时要求卷积核需要拥有相同的通道数(图像有多少通道,每个卷积核就有多少通道);
  2. 每个卷积核通道与对应的输入图像的各个通道进行卷积;
  3. 将每个通道的卷积结果按位相加得到最终的特征图。

如下图所示:

在这里插入图片描述

5.2、多卷积核计算

在卷积神经网络(CNN)中,多个卷积核(Filters/Kernels) 的计算是核心操作之一,它使网络能够同时提取多种特征(如边缘、纹理、颜色等)。

特点:

(1)每个卷积核学习不同的特征:

例如:第一个核可能检测水平边缘,第二个核检测垂直边缘,第三个核检测红色通道的特定模式等。

(2)输出多通道特征图:

若有 C_out 个卷积核,输出特征图会有 C_out 个通道。

在这里插入图片描述
如上图,可以看到:

  • 两个神经元,意味着有两个滤波器;
  • 数据窗口每次移动2个步长取3*3的局部数据,即stride=2;
  • zero-padding=1。输入数据由5*5*3变为7*7*3
  • 左边是输入(7*7*3中,7*7代表图像的像素/长宽,3代表R、G、B 三个颜色通道);
  • 中间部分是两个不同的滤波器Filter w0、Filter w1;
  • 最右边则是两个不同的输出。

6.PyTorch卷积层API

# 导包
import numpy as np
import matplotlib.pyplot as plt
import torch# 加载数据
n1_img = plt.imread('data/img.jpg')
print(n1_img.shape)
# 把numpy转换为tensor
t1_img = torch.from_numpy(n1_img)
print(t1_img.shape)
# 交换维度 (H,W,C)->(C,H,W)
t2_img = t1_img.permute(2, 0, 1)
print(t2_img.shape)
# 升维
t3_img = t2_img.unsqueeze(0)
print(t3_img.shape)
# TODO 创建卷积层对象  设置输出通道数4,意味着输出的特征图4
conv = torch.nn.Conv2d(in_channels=3, out_channels=4, kernel_size=3, stride=1, padding=0)
# TODO 调用卷积层对象,提取特征,注意类型转换
output = conv(t3_img.to(torch.float32))
print(output.shape)
# 降维
output = output.squeeze(0)
print(output.shape)
# 交换维度
output = output.permute(1, 2, 0)
print(output.shape)
# 转换为numpy TODO 索引0,1,2,3分别可以获取第0,1,2,3个特征图
output = output[:, :, 2].detach().numpy()  #2:第三个图
print(output.shape)
# 画图
plt.imshow(output)
plt.show()

运行结果:
在这里插入图片描述
可依次修改output = output[:, :, 2].detach().numpy() 将其它三个图显示出来(将2依次换成0、1、3)。

今日分享到此结束。

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

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

相关文章

Cesium添加3dtiles并平移到指定经纬度

访问tileset.json,查看root.transform,12,13,14分别代表模型参考原点的地心坐标Cartesian3(x,y,z) let tileset await Cesium.Cesium3DTileset.fromUrl()构造origin_cartesian3new Cesium.Cartesian3(x,y,z) 设置待平移到的位置经纬高为longitude,latitude,height,例如(116,…

STM32G070x 单片机项目代码解析:基于 HAL 库的嵌入式系统开发

项目总体架构 该项目采用标准的 STM32 工程结构,主要包含以下几个部分: 头文件包含:系统头文件和用户自定义头文件外设句柄定义:SPI、TIM、UART 等外设的句柄声明用户自定义变量:LED 控制、按键状态等标志位初始化函数…

winform mvvm

if (!mvvmContext1.IsDesignMode) InitializeBindings(); 这段代码的意思是:如果当前应用程序不是处于设计模式(即程序正在运行),就调用InitializeBindings方法来初始化视图与视图模型之间的绑定。 void Initiali…

防火墙快速管理软件,66K超小巧

软件介绍 今天为大家推荐一款轻量级的Windows防火墙管理工具,这款工具能帮助用户快速开启或关闭系统防火墙功能,操作比系统原生设置更加便捷高效。 软件优势 相比通过系统设置层层点击的操作方式,这款仅66KB大小的微型工具只需单击按钮…

python中的高级变量III

python中的高级变量III 删除列表元素(list)扩展知识点 name_list ["Mike","John","Alice"] del name_list[1] # 通过del name_list[1]删除“John” print(name_list) # 输出 [Mike, Alice]注意:del …

深入理解Redis

深入理解Redis:高性能内存数据库的核心原理与应用实践 1. 引言 在现代互联网应用中,高性能、低延迟的数据访问是至关重要的。传统的关系型数据库(如MySQL)虽然功能强大,但在高并发场景下往往成为性能瓶颈。Redis&…

界面控件DevExpress Blazor中文教程:AI聊天 - 如何实现函数调用?

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生Blazor UI组件(包括Pivot Grid、调度程序、图表、数据编辑器和报表等)。 现代AI驱动的应用程序需要与外部系…

github 上的php项目

github 上的php项目 项目的网址 (Loong1996/LikeGirlSite: 情侣网站、情侣网页、恋爱记录网站) # 修改 # admin/Config_DB.php//localhost 为数据库地址 一般使用默认的即可 或(127.0.0.1) $db_address "mysql_php";/…

区间求最值问题高效解决方法

对于区间求最值场景,如果区间不定长度的,可以使用稀疏表进行求解,如果区间是固定长度的,则可以使用分块的思想(与稀疏表原理类似),都是通过压缩状态个数, 1 关于稀疏表的原理详见&a…

Linux程序设计:什么时候选择开发内核模块?

最近看一个CPU使用率高的问题,从perf里看,是下面的一个占用的比较多是下面一个 Overhead Source:Line Symbol Shared Object - 8.48% [vdso][1129] 0x1129 B [.] 0x0000000000001129

OpenCV CUDA模块设备层-----欧几里得距离函数hypot()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于计算两个无符号字符向量(uchar1)的欧几里得距离(即直角三角形的斜边长度),…

惠普HP LaserJet Pro P1106 打印机信息

基本信息 产品类型:黑白激光打印机。上市时间:2011 年。最大打印幅面:A4。网络打印:不支持网络打印。双面打印:手动双面打印。 性能参数 打印速度:黑白打印速度(ISO,A4)正…

通义灵码智能体模式在企业级开发中的应用:以云效DevOps自动化流程为例

一、智能体模式的核心能力 通义灵码的智能体模式区别于传统代码补全工具,具备: 语义级理解:解析业务需求、代码上下文及错误日志。自主任务闭环:从问题诊断→ 代码生成→ 测试覆盖→ 文档生成全流程自动化。环境感知&#xff1a…

SQL学习笔记2

DDL、DML、DQL、DCL基础语法 1、DDL 查询 查询所有数据库:show databases; show databases; 查询当前数据库:select database(); select database(); 数据库创建 创建数据库:create database [if not exist(若存在重名数据库,则不创建…

VScode常用快捷键【个人总结】

注:快捷键以 Windows/Linux 为主,Mac 用户将 Ctrl 替换为 Cmd,Alt 替换为 Option。 1. 编辑相关 快速复制与剪切 Alt Shift ↓:复制当前行到下方Alt Shift ↑:复制当前行到上方Ctrl X:剪切整行&…

数据结构与算法:线性表-顺序表(顺序存储)

一、线性表的定义(逻辑结构) 线性表是由 n (n > 0) 个相同数据类型的数据元素组成的有限序列,其中 n 为线性表的表长,当 n 0 时,线性表为空表。如果用 L 命名线性表,那么一般表示为:L (a1…

从源码到实践:Java集合框架面试核心知识点全解析

在Java开发中,集合框架(Java Collections Framework)是最基础也最常用的工具集。无论是处理业务逻辑时的数据暂存,还是高性能场景下的算法优化,集合的使用都贯穿始终。因此,Java集合相关的面试题几乎是所有…

【深度学习新浪潮】空间计算的医疗应用技术分析(简要版)

空间计算是一种通过融合计算机视觉、传感器技术与三维渲染,将虚拟内容精准锚定到物理空间,实现数字世界与现实世界无缝交互的技术体系。其核心在于让计算机理解真实环境的结构、位置和动态,从而支持自然交互(如手势、语音、眼动)和沉浸式体验。例如,苹果Vision Pro通过实…

win电脑没有xcode怎么上传ipa

在上架IOS项目的时候,遇到一个问题,如下图,在app store connect上架的时候,需要选择一个构建版本,然后它在下方提示,点击查看上传工具后,会发现需要下载xcode或mac命令行等工具来上传编译后的文…

相机标定与3D重建技术通俗讲解

一、什么是相机标定?能解决什么问题? 相机标定是计算机视觉中的基础技术,简单来说,就是确定相机从3D世界拍摄到2D图像时的"转换规则"。具体解决两个核心问题: 相机内部属性:如焦距(…