神经网络之CNN图像识别(torch api 调用)
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 意味着不添加这个偏置项
输出的维度的计算公式:宽和高一样的
你得到
2.2归一化层
实现:针对于一个batch_size的同一特征归一化
作用:加速模型收敛:减少了内部协变量偏移,使得梯度更加稳定,从而加快训练速度。
具有一定正则化作用:可以减少过拟合的风险。
bn_layer = nn.BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
-
64:这是输入特征图的通道数(num_features)。在 CNN 里,通常会将卷积层的输出特图输入到批量归一化层进行处理,这里的 64 就对应着上一层卷积层输出的特征图通道数量。 -
eps:一个很小的数值,用于在分母中添加一个小的偏移量,避免在归一化计算时出现除以零的情况,默认值为1e-05。在批量归一化的计算过程中,需要对输入数据进行标准化,即减去均值并除以标准差,eps保证了计算的稳定性。 -
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)
相关文章:
神经网络之CNN图像识别(torch api 调用)
1.简介 CNN 是受生物学上感受野机制启发而提出的。它通过卷积操作自动提取数据中的特征,避免了传统机器学习方法中复杂的特征工程过程,能够自动学习到数据中的有效特征,从而进行分类、识别等任务。 2.结构 2.1卷积: 假设你有一…...
使用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 的“心脏”:这个函数会依次做以下事情: 处理定时器(如动画、延迟回调)。 读取输入设备(如触摸屏、按键的状态)。 刷新脏区域(仅重绘屏幕上发生变化的区域…...
ffmpeg avformat_open_input的作用
1. avformat_open_input 的作用 avformat_open_input 是 FFmpeg 中用于打开输入文件或输入设备的函数。它的主要作用是初始化输入文件或设备的上下文(AVFormatContext),并准备好从输入源读取数据。 2. avformat_open_input 的功能 打开输入文…...
leaflet扩展插件esri-leaflet.js
esri-leaflet.js是一个开源的JavaScript库,它允许开发者在Leaflet地图上轻松地使用Esri的服务,如ArcGIS Online和ArcGIS Server的图层。以下是对esri-leaflet.js插件的详细介绍: 一、主要功能 esri-leaflet.js的主要功能是将Esri的地图服务…...
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 弹出在签出前,请清理仓库工作树 窗口
问题出现的背景:是因为我有两台电脑开发,提交后,另一个电脑的代码是旧的,这个时候我想拉取最新的代码,就会出现如下弹窗,因为这个代码暂存区有记录或者工作区有代码的修改,所以有冲突࿰…...
详解直方图均衡化
直方图均衡化(Histogram Equalization) 是图像处理中一种常用的对比度增强技术,通过调整图像的灰度分布,使得图像的直方图尽可能均匀分布,从而提高图像的对比度和细节表现。以下是直方图均衡化的原理详解: …...
MyBatis-Plus 自动填充功能
MyBatis-Plus(MP) 提供了一个非常强大的功能——自动填充功能。该功能可以在执行插入或更新操作时,自动为某些字段赋值,免去手动设置这些字段的麻烦。常见的应用场景包括 创建时间 和 更新时间 字段的自动填充,帮助开发…...
认知动力学视角下的生命优化系统:多模态机器学习框架的哲学重构
认知动力学视角下的生命优化系统:多模态机器学习框架的哲学重构 一、信息熵与生命系统的耗散结构 在热力学第二定律框架下,生命系统可视为负熵流的耗散结构: d S d i S d e S dS d_iS d_eS dSdiSdeS 其中 d i S d_iS diS为内部熵…...
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操作组成。主要用于保证: 多个操作的原子性(要么全部成功…...
红黑树和 STL —— set和map 【复习笔记】
1. 二叉搜索树 1.1 二叉搜索树的概念 相比较前文的堆,二叉搜索树并不需要必须是一棵完全二叉树 二叉搜索树(二叉排序树或二叉查找树,简称BST)是具有以下特性的二叉树: 1. 若它的左子树非空,则左子树上所…...
网络空间安全(7)攻防环境搭建
一、搭建前的准备 硬件资源:至少需要两台计算机,一台作为攻击机,用于执行攻击操作;另一台作为靶机,作为被攻击的目标。 软件资源: 操作系统:如Windows、Linux等,用于安装在攻击机和…...
HarmonyOS学习第11天:布局秘籍RelativeLayout进阶之路
布局基础:RelativeLayout 初印象 在 HarmonyOS 的界面开发中,布局是构建用户界面的关键环节,它决定了各个组件在屏幕上的位置和排列方式。而 RelativeLayout(相对布局)则是其中一种功能强大且灵活的布局方式࿰…...
【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需要重新启动,不行就重启电脑) 打包成功的镜像在这里,如果频繁打包会导致磁盘空间被占满,需…...
从入门到精通:Linux 权限管理(rwx/chmod/chown)
目录 1. 引言:为什么需要文件权限? 2. 基础概念:理解 rwx 权限 (1)权限的三种角色 (2)权限的三种类型 (3)权限的两种表示法 (4) 目录的 rwx…...
虚拟机如何设置ip
在虚拟机中设置IP地址的具体步骤会因虚拟机软件(如VMware、VirtualBox等)和操作系统(如Windows、Linux等)的不同而有所差异。以下是几种常见虚拟机软件和操作系统的IP设置方法。 --- 一、VMware中的IP设置 1.Windows虚拟机 1. 打…...
自然语言处理:稀疏向量表示
介绍 大家好,我是博主。今天又来和大家分享自然语言处理领域的知识了。原本我计划这次分享NLP中文本表示的相关内容,不过在整理分享计划的过程中,发现这部分知识里包含一些涉及复杂数学原理和抽象概念的内容。对于刚接触NLP的小伙伴们来说&a…...
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…...
[预订酒店]
预订酒店 真题目录: 点击去查看 E 卷 100分题型 题目描述 放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店(n>=k>0),并由低到高打印酒店的价格。 输入描述 第一行:n,…...
java项目之基于ssm的学籍管理系统(源码+文档)
项目简介 基于ssm的学籍管理系统实现了以下功能: 学生信息管理: 学生信息新增 学生信息修改 学籍异动管理: 学籍异动添加 学籍异动删除 学籍异动修改 学生学业管理: 学生学业添加 学生学业修改 学生学业删除 学院信息管理&am…...
