神经网络之CNN图像识别(torch api 调用)

news2025/4/20 11:27:43

1.简介

CNN 是受生物学上感受野机制启发而提出的。它通过卷积操作自动提取数据中的特征,避免了传统机器学习方法中复杂的特征工程过程,能够自动学习到数据中的有效特征,从而进行分类、识别等任务。

2.结构

2.1卷积:

假设你有一张图片(就是样本),他的像素点就是你的特征属性 一张图片[27,27,3]:长,宽,通道(RGB)

1.疑点:为什么3d到2d:因为图像通道分离:rgb 分别分成了 28x28x1的3张像素图

2.疑点:卷积的作用:卷积就是上面的小数字,3x3矩阵->与像素相乘->得到特征值->组成新的特征矩阵

3.疑点:卷积参数:

步长 :就是滑动的步数   卷积核:就是多大的矩阵

卷积个数:一层进行多少次卷积  填充:在原本样本特征上 有多少层填零

conv_layer = nn.Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)

 这个是一个2维卷积层api 针对于图片

 3:这是输入通道数(in_channels),意味着输入的特征图具有 3 个通道,通常对应 RGB 彩色图像的三个颜色通道(红、绿、蓝)。

64:代表输出通道数(out_channels),即经过该卷积层处理后,输出的特征图将有 64 个通道。每一个输出通道都对应一组卷积核学习到的不同特征。

kernel_size=(7, 7):指定卷积核的大小,这里是一个 7x7 的二维卷积核。在卷积操作时,这个 7x7 的卷积核会在输入特征图上滑动,进行卷积计算。

stride=(2, 2):表示卷积核在输入特征图上滑动的步长。在水平和垂直方向上,卷积核每次移动 2 个像素。较大的步长会使输出特征图的尺寸变小。

padding=(3, 3):在输入特征图的边界周围填充像素的数量。水平和垂直方向上都填充 3 个像素。填充的目的是为了控制输出特征图的尺寸,避免在卷积过程中特征图尺寸过度缩小。

bias=False:表示在卷积层中不使用偏置项。偏置项是一个可学习的标量,用于在卷积计算后对结果进行偏移。设置为 False 意味着不添加这个偏置项

输出的维度的计算公式:宽和高一样的

(W_{in}+2p-k)/s+1

你得到

2.2归一化层

实现:针对于一个batch_size的同一特征归一化

作用:加速模型收敛:减少了内部协变量偏移,使得梯度更加稳定,从而加快训练速度。

具有一定正则化作用:可以减少过拟合的风险。

bn_layer = nn.BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  1. 64:这是输入特征图的通道数(num_features)。在 CNN 里,通常会将卷积层的输出特图输入到批量归一化层进行处理,这里的 64 就对应着上一层卷积层输出的特征图通道数量。

  2. eps:一个很小的数值,用于在分母中添加一个小的偏移量,避免在归一化计算时出现除以零的情况,默认值为 1e-05。在批量归一化的计算过程中,需要对输入数据进行标准化,即减去均值并除以标准差,eps 保证了计算的稳定性。

  3. momentum:用于计算运行时的均值和方差的动量参数,默认值为 0.1。在训练过程中,批量归一化层会记录每个批次数据的均值和方差,并使用动量更新全局的运行均值和运行方差。

2.3激活函数 :

引入非线性

  • 神经网络的主要目标是学习复杂的非线性关系。如果没有激活函数,神经网络将仅仅是一个线性模型,无论网络有多少层,其本质都只是一个线性变换,只能学习到输入数据的线性组合关系,这极大地限制了神经网络的表达能力。激活函数的引入打破了这种线性限制,使得神经网络能够学习到更复杂、更高级的非线性映射关系,从而可以对各种复杂的数据集进行建模,例如图像、语音等具有高度非线性特征的数据。

增加模型的表达能力

  • 激活函数能够让神经网络具有更强的函数逼近能力。根据通用近似定理,具有非线性激活函数的多层神经网络可以以任意精度逼近任何一个连续函数。这意味着通过选择合适的激活函数和调整神经网络的参数,我们可以让模型拟合几乎任何复杂的函数关系,从而能够处理各种不同类型的任务,如分类、回归、生成等。

  • 不同的激活函数具有不同的非线性特性,例如 Sigmoid 函数具有平滑的饱和特性,ReLU 函数具有单侧线性的特性等,这些不同的特性使得神经网络在学习不同类型的数据和任务时具有不同的优势,进一步丰富了模型的表达能力。

nn.relu()

2.4池化层:

池化操作可以在不损失太多关键信息的前提下,大大减少数据的规模,从而降低计算量,提高模型的运行速度。此外,池化还能够增强模型对输入数据的平移、旋转和尺度变化等的鲁棒性,使得模型具有更好的泛化能力。

最大池化(Max Pooling):在每个池化窗口内取最大值作为该窗口的输出。例如,对于一个 2×2 的池化窗口,在这个窗口内的 4 个元素中选择最大值作为池化后的结果。最大池化能够突出图像中的显著特征,因为它保留了每个区域内的最大值,通常可以捕捉到图像中最具代表性的特征,如边缘、角点等

  nn.MaxPool2d(kernel_size=2)

2.5全连接层

将特征数据转化成成一维向量;分来判别分类概率(激活函数)

nn.Linear(input_dim, class_dim)

 你的最后输出以及类别

2.6感受野

最终一个特征值 能感觉到原属性特征图上的多大尺寸

3.概型图

4.基于torch的代码


class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Sequential(
            nn.Conv2d(1, 16, kernel_size=5, stride=1, padding=2),#stride=1, padding=2 决定你 
            nn.BatchNorm2d(16),
            nn.ReLU(),
           
        )
        self.conv2 = nn.Sequential(
            nn.Conv2d(16, 32, kernel_size=5, stride=1, padding=2),
            nn.BatchNorm2d(32),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2)
        )
        self.conv3 = nn.Sequential(
            nn.Conv2d(32, 64, kernel_size=5, stride=1, padding=2),
            nn.BatchNorm2d(64),
            nn.ReLU(),
            
        )
        self.conv4 = nn.Sequential(
            nn.Conv2d(64, 32, kernel_size=5, stride=1, padding=2),
            nn.BatchNorm2d(32),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2)
        )
        self.out = nn.Linear(32* 7 * 7, 10)
    def forward(self, x):
        x = self.conv1(x)
        x = self.conv2(x)
        x = self.conv3(x)
        x = self.conv4(x)
        x = x.view(x.size(0), -1)
        output = self.out(x)

 

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

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

相关文章

使用Truffle、Ganache、MetaMask、Vue+Web3完成的一个简单区块链项目

文章目录 概要初始化Truffle项目创建编写合约编译合约配置Ganache修改truffle-config.js文件编写迁移文件部署合约使用Truffle 控制台使用MetaMask和VueWeb3与链交互 概要 使用Truffle、Ganache、MetaMask、VueWeb3完成的一个简单区块链项目。 初始化Truffle项目 安装好truf…

学生管理前端

文章目录 首页student.html查询功能 首页 SpringBoot前端html页面放在static文件夹下:/src/main/resources/static 默认首页为index.html,我们可以用两个超链接或者两个button跳转到对应的页面。这里只是单纯的跳转页面,不需要提交表单等其…

DeepSeek 助力 Vue3 开发:打造丝滑的网格布局(Grid Layout)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

lvgl运行机制分析

lv_timer_handler() 是 LVGL 的“心脏”:这个函数会依次做以下事情: 处理定时器(如动画、延迟回调)。 读取输入设备(如触摸屏、按键的状态)。 刷新脏区域(仅重绘屏幕上发生变化的区域&#xf…

8 SpringBoot进阶(上):AOP(面向切面编程技术)、AOP案例之统一操作日志

文章目录 前言1. AOP基础1.1 AOP概述: 什么是AOP?1.2 AOP快速入门1.3 Spring AOP核心中的相关术语(面试)2. AOP进阶2.1 通知类型2.1.1 @Around:环绕通知,此注解标注的通知方法在目标方法前、后都被执行(通知的代码在业务方法之前和之后都有)2.1.2 @Before:前置通知,此…

day01_Java基础

文章目录 day01_Java基础一、今日课程内容二、Java语言概述(了解)1、Java语言概述2、为什么要学习Java语言3、Java平台版本说明4、Java特点 三、Java环境搭建(操作)1、JDK和JRE的概述2、JDK的下载和安装3、IDEA的安装4、IDEA的启动…

cursor 弹出在签出前,请清理仓库工作树 窗口

问题出现的背景:是因为我有两台电脑开发,提交后,另一个电脑的代码是旧的,这个时候我想拉取最新的代码,就会出现如下弹窗,因为这个代码暂存区有记录或者工作区有代码的修改,所以有冲突&#xff0…

详解直方图均衡化

直方图均衡化(Histogram Equalization) 是图像处理中一种常用的对比度增强技术,通过调整图像的灰度分布,使得图像的直方图尽可能均匀分布,从而提高图像的对比度和细节表现。以下是直方图均衡化的原理详解: …

Kibana:Spotify Wrapped 第二部分:深入挖掘数据

作者:来自 Elastic Philipp Kahr 我们将比以往更深入地探究你的 Spotify 数据并探索你甚至不知道存在的联系。 在由 Iulia Feroli 撰写的本系列的第一部分中,我们讨论了如何获取 Spotify Wrapped 数据并在 Kibana 中对其进行可视化。在第 2 部分中&#…

C++—类与对象(中)

目录 1、类的6个默认成员函数 2、构造函数 构造函数的特性 3、初始化列表 4、析构函数 概念 5、拷贝构造函数 6、运算符重载 7、赋值运算符重载 赋值运算符重载格式 8、前置和后置重载 9、const修饰的成员 10、取地址及const取地址重载 1、类的6个默认成员函数 一…

MySQL 事务笔记

MySQL 事务笔记 目录 事务简介事务操作事务四大特性并发事务问题事务隔离级别总结 事务简介 事务(Transaction)是数据库操作的逻辑单元,由一组不可分割的SQL操作组成。主要用于保证: 多个操作的原子性(要么全部成功…

网络空间安全(7)攻防环境搭建

一、搭建前的准备 硬件资源:至少需要两台计算机,一台作为攻击机,用于执行攻击操作;另一台作为靶机,作为被攻击的目标。 软件资源: 操作系统:如Windows、Linux等,用于安装在攻击机和…

HarmonyOS学习第11天:布局秘籍RelativeLayout进阶之路

布局基础:RelativeLayout 初印象 在 HarmonyOS 的界面开发中,布局是构建用户界面的关键环节,它决定了各个组件在屏幕上的位置和排列方式。而 RelativeLayout(相对布局)则是其中一种功能强大且灵活的布局方式&#xff0…

【2025年2月28日稳定版】小米路由器4C刷机Immortalwrt 23.05.4系统搭载mentohust 0.3.1插件全记录

小米路由器4C刷机Immortalwrt系统搭载mentohust插件全记录 首先将路由器按住后面的reset,用一个针插进去然后等待5s左右,松开,即可重置路由器。 然后要用物理网线物理连接路由器Lan口和电脑,并将路由器WAN口连接至网口。确保电脑…

【SpringBoot+Vue】博客项目开发二:用户登录注册模块

后端用户模块开发 制定参数交互约束 当前,我们使用MybatisX工具快速生成的代码中,包含了一个实体类,这个类中包含我们数据表中的所有字段。 但因为有些字段,是不应该返回到前端的,比如用户密码,或者前端传…

idea + Docker + 阿里镜像服务打包部署

一、下载docker desktop软件 官网下载docker desktop,需要结合wsl使用 启动成功的画面(如果不是这个画面例如一直处理start或者是stop需要重新启动,不行就重启电脑) 打包成功的镜像在这里,如果频繁打包会导致磁盘空间被占满,需…

ubuntu 20.04 安装labelmg

1. 下载安装包 下载链接:下载链接 2. 安装启动 # 创建labelImg的环境 conda create -n labelImg# 激活labelImg环境 source activate labelImg安装依赖 pip install pyqt5-dev-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/cd requirements/pip install -…

Redis版本的EOL策略与升级路径(刷到别划走)

各位看官,刷到就点进来,大数据已经抓到你喽~😊 前言 在软件行业做服务端开发的我们,多多少少都会接触到Redis,用它来缓存数据、实现分布式锁等,相关八股文烂熟于心,但是往往会忽略具…

ExpMoveFreeHandles函数分析和备用空闲表的关系

第一部分:ExpMoveFreeHandles和备用空闲表的关系 ULONG ExpMoveFreeHandles ( IN PHANDLE_TABLE HandleTable ) { ULONG OldValue, NewValue; ULONG Index, OldIndex, NewIndex, FreeSize; PHANDLE_TABLE_ENTRY Entry, FirstEntry; EXHAND…

java项目之基于ssm的学籍管理系统(源码+文档)

项目简介 基于ssm的学籍管理系统实现了以下功能: 学生信息管理: 学生信息新增 学生信息修改 学籍异动管理: 学籍异动添加 学籍异动删除 学籍异动修改 学生学业管理: 学生学业添加 学生学业修改 学生学业删除 学院信息管理&am…