当前位置: 首页 > news >正文

【机器学习入门】人工神经网络(二)卷积和池化

系列文章目录

第1章 专家系统
第2章 决策树
第3章 神经元和感知机
识别手写数字——感知机
第4章 线性回归
第5章 逻辑斯蒂回归和分类
第5章 支持向量机
第6章 人工神经网络(一)


文章目录

  • 系列文章目录
  • 前言
  • 一、卷积
    • 神经连接的局部性
    • 平移不变性
  • 二、卷积处理图像的效果代码
  • 二、池化
    • 池化层的作用
    • 平均降采样与最大池化
  • 总结


前言

李飞飞等人在2006年发起并建立了ImageNet数据集,这是一个包含上千万张图片、数千不同类别物体的数据集,处理计算机视觉任务的深度神经网络通常在则会个数据集上进行训练。Geoffrey Everest Hinton等人的AlexNet 是最早广为人知的深度神经网络模型之一。
这里重点介绍LENET、AlexNet的卷积和池化的思想。


一、卷积

神经连接的局部性

AlexNet神经网络模型由8层构成,其中,前5层是卷积层,只有后面3层是全连接层。全连接层是前馈神经网络最为一般的形式,神经元在层与层之间建立完全连接,即一层中的每个神经元都以前一层所有神经元的输出作为输入。
当处理图像等高维信息的时候,全连接层需要很多权值,因为神经元要与每个像点连接。这不利于神经元提取图像的局部信息,而提取图像局部特征是深度神经网络前几层的主要任务。最初几层神经元应该聚焦图像的局部特征,逐渐扩大单个神经元知的图像范围,逐层提高信息抽象的程度,这样,最终就可以在输出层整合整幅图像,每到一个用于图像分类或者物体检测的输出值。卷积层的出现满足了这种需求,它将神元的连接限制在局部,每个神经元只与对应位置的矩形区域内的输入神经元进行连接比如,当计算3×3的卷积时,卷积层的每个神经元仅与前一层对应位置局部的3x个神经元发生连接。

什么叫作卷积?

在这里插入图片描述

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

平移不变性

除了局部性之外,卷积层的另外一个特征是平移不变性。图像特征本身具有平移不变性,局部特征的位置不是特征本身的内在属性。比如,无论一只猫出现在图像中的任何位置,都不影响我们认知它是一只猫。
为了实现平移不变性,卷积层中不同位置的神经元共享同一组连接权值,这组连接权值称作卷积核。比如,3×3的卷积核是一个3×3的矩阵。图像卷积操作就是用一个卷积核在图像上进行平移扫描,计算局部图像块与卷积核的“点积”,即对应位置元素乘积的和。
向量点积与向量间的余弦距离是成正比的,反映了向量之间的相似程度。图像卷积操作的结果实际上也反映了图像局部与卷积核的相似程度,与卷积核相似的局部特征就这样被提取出来。为了提取出不同的局部特征,在神经网络模型中,每个卷积层通常包含若干个不同的卷积核,每个卷积核扫描输入图像产生一个二维矩阵作为输出,不同卷积核产生的二维矩阵堆叠在一起,形成一个三维张量(tensor),构成了整个卷积层的输出,张量的每一层叫作一个通道(channel)。
在这里插入图片描述

卷积是一种常用的信号处理方法,图像的卷积操作是二维卷积运算的离散形式。一维卷积的连续形式在泛函分析中定义为两个函数的运算。一个函数f是待处理的信号(比如声波、图像等),一个函数g是卷积核,卷积(f*g)是一个新的信号(也是一个函数)。**卷积的结果相当于把函数g平移到各处,然后计算与函数f对应位置乘积的积分。**卷积运算能够在输入信号上提取出与卷积核具有高度相关性的信号。
( f ∗ g ) ( t ) = ∫ − ∞ + ∞ f ( x ) g ( t − x ) d x (f*g)(t)=\int_{-\infty }^{+ \infty } f(x)g(t-x)dx (fg)(t)=+f(x)g(tx)dx

二、卷积处理图像的效果代码

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project :demo1 
@File    :Convolutional1.py
@IDE     :PyCharm 
@Author  :Yue
@Date    :2024-03-23 22:34 
'''import numpy as np
import matplotlib.pyplot as plt# 读取图像,取3个彩色通道中的一个
try:img = plt.imread('H:\\dog.jpg')if img is not None:plt.imshow(img)plt.show()
except Exception as e:print("在读取图像时发生错误:", e)
img = img[:,:,0]# 准备卷积核
kernels = [np.array([[-1,0,-1] ,[-1,0,-1] ,[-1,0,-1]]),np.array([[-1,-1,-1] ,[0,0,0] ,[1,1,1]]),np.array([[1,-2,-2] ,[1,1,-2] ,[1,1,1]]),np.array([[1,1,1] ,[1,1,-2] ,[1,-2,-2]])
]# 绘制原图像和卷积结果
for i in range(5):plt.subplot(1,5,i+1)if i == 0:plt.imshow(img, cmap=plt.cm.gray)plt.axis('off')continue# 计算卷积, 当采用 n*n的卷积核计算时# 在没有补齐的情况下 ,卷积核结果比原图各列 各少n-1# 简便起见,这里展示没有补齐的情况# 引入补齐后,边缘处的卷积也可以计算,卷积结果与原始尺寸相当kernel = kernels[i-1]conv = np.zeros((img.shape[0]-2, img.shape[1]-2))for x in range(conv.shape[1]):for y in range(conv.shape[0]):# 截取原图中对应位置 与 卷积大小相同的块clip = img[y:y+3 , x:x+3]# 图像块 与 卷积核对应元素相乘然后求和conv[y,x] = np.sum(clip * kernel)# 显示卷积结果plt.imshow(conv ,cmap=plt.cm.RdBu)plt.axis('off')
plt.show()
  1. .导入库:
    首先,代码导入了numpy和matplotlib.pyplot库,这两个库在处理图像和绘图方面非常有用。
  2. 读取图像:
    使用try-except块尝试读取位于’H:\dog.jpg’路径的图像文件。如果图像成功读取(img不为None),则使用plt.imshow()显示图像,并使用plt.show()显示图像窗口。如果读取过程中发生错误,错误信息将被打印到控制台。
  3. 提取图像的一个通道:
    由于读取的图像是彩色的,包含多个通道(通常是RGB),代码通过img = img[:,:,0]选择了第一个通道(蓝色通道),并将其转换为灰度图像。
  4. 准备卷积核:
    代码定义了一个名为kernels的列表,其中包含了四个不同的3x3卷积核。这些卷积核将用于后续的图像卷积操作。
  5. 绘制原图像和卷积结果:
    使用for循环迭代不同的卷积核,并在每次迭代中执行以下步骤:
  6. 使用plt.subplot()创建一个子图。
    如果是第一个迭代(即显示原图像),则使用plt.imshow()显示灰度图像,并关闭坐标轴。
    对于其他迭代,首先创建一个全零的数组conv,该数组的大小比原图像小,因为卷积核的大小是3x3。
    然后,代码通过两个嵌套的for循环遍历conv数组的每个元素,并使用原图像中相应的3x3区域与当前卷积核进行卷积操作。卷积操作是通过元素乘法和求和来完成的。
    最后,卷积完成后,使用plt.imshow(conv, cmap=plt.cm.RdBu)显示卷积结果。这里,cmap=plt.cm.RdBu参数将颜色映射设置为RdBu(红色到蓝色),这是一种常用于显示正负值的颜色映射。plt.axis(‘off’)关闭了坐标轴的显示。
  7. 显示所有图像:
    在循环结束后,调用plt.show()来显示所有子图。这将创建一个窗口,其中包含原始图像和每个卷积核处理后的图像。

结果如下图所示,使用红蓝色谱显示卷积结果,深红色和深蓝色分别表示绝对值较大的负值或正值,绝对值接近0颜色较浅。卷积结果的深色部分显示出了与卷积核数值分布一致的方向性:
在这里插入图片描述
上面的代码里需要重点理解这一部分,是对卷积操作的计算(这里用一个简单的例子就可以推算出来,img和conv之间的索引关系):
在这里插入图片描述

二、池化

池化层的作用

图像信号经过卷积后,尺寸不会发生明显缩小。然而,我们需要将信息不断汇聚到更少的神经元,这样一方面能够使单个神经元感知更大的范围,另一方面也可以提取更加抽象的图像特征。
池化层可以帮助我们对卷积层得到的信息进行整合和压缩。经过一个 c × c c\times c c×c的池化层,就相当于把每 c × c c\times c c×c个像素点压缩成1个像素点,信号数量就压缩到了 1 / ( c × c ) 1/(c\times c) 1/(c×c)
压缩方法通常是选取最大值,因此也叫作Max Pooling。经过若干组卷积、池化、卷积、池化这样的交替处理,我们就可以把图像信息逐渐抽象为维度较小的信号,然后用全连接层产生图像分类、物体识别、位置检测的结果。这个过程与生物视觉神经系统有很多相似之处。

平均降采样与最大池化

LENET中采用平均降采样,而AlexNet中采用的最大池化的方法,来看一下二者的区别。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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


总结

本节介绍了卷积和池化的概念,介绍了LeNet与AlexNet,AlexNet的改进。通过一个简单的图像处理,演示了卷积的代码。

相关文章:

【机器学习入门】人工神经网络(二)卷积和池化

系列文章目录 第1章 专家系统 第2章 决策树 第3章 神经元和感知机 识别手写数字——感知机 第4章 线性回归 第5章 逻辑斯蒂回归和分类 第5章 支持向量机 第6章 人工神经网络(一) 文章目录 系列文章目录前言一、卷积神经连接的局部性平移不变性 二、卷积处理图像的效果代码二、…...

公司内部局域网怎么适用飞书?

随着数字化办公的普及,企业对于内部沟通和文件传输的需求日益增长。飞书作为一款集成了即时通讯、云文档、日程管理、视频会议等多种功能的智能协作平台,已经成为许多企业提高工作效率的首选工具。本文将详细介绍如何在公司内部局域网中应用飞书&#xf…...

JVM的知识

什么是JVM 1.JVM: JVM其实就是运行在 操作系统之上的一个特殊的软件。 2.JVM的内部结构: (1)因为栈会将执行的程序弹出栈。 (2)垃圾99%的都是在堆和方法区中产生的。 类加载器:加载class文件。…...

大模型日报2024-03-24

利用LLMs评分及解释K-12科学答案 摘要: 本文研究了在K-12级科学教育中使用大型语言模型(LLMs)对短答案评分及解释。研究采用GPT-4结合少量样本学习和活跃学习,通过人机协作提供有意义的评估反馈。 MathVerse:多模态LLM解数学题效果…...

Android kotlin全局悬浮窗全屏功能和锁屏页面全屏悬浮窗功能一

1.前言 在进行app应用开发中,在实现某些功能中要求实现悬浮窗功能,分为应用内悬浮窗 ,全局悬浮窗和 锁屏页面悬浮窗功能 等,接下来就来实现这些悬浮窗全屏功能,首选看下第一部分功能实现 2.kotlin全局悬浮窗全屏功能和锁屏页面全屏悬浮窗功能一分析 悬浮窗是属于Androi…...

图像识别在安防领域的应用

图像识别技术在安防领域有着广泛的应用,它通过分析和理解图像中的视觉信息,为安防系统提供了强大的辅助功能。以下是一些主要的应用领域: 人脸识别:人脸识别技术是安防领域中最常见的应用之一。它可以帮助系统识别和验证个人身份…...

前端面试集中复习 - http篇

1. http请求方式 HTTP请求方式有哪些:GET POST PUT DELETE OPTIONS 1) GET POST 的区别? 场景上: GET 用于获取资源而不对服务器资源做更改提交的请求,多次执行结果一致。用于获取静态数据,幂等。 POST&#xff1…...

C++ - 类和对象(上)

目录 一、类的定义 二、访问限定符 public(公有) protected(保护) private(私有) 三、类声明和定义分离 四、外部变量和成员变量的区别与注意 五、类的实例化 六、类对象的模型 七、类的this指针…...

mysql基础4sql优化

SQL优化 插入数据优化 如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。 insert into tb_test values(1,tom); insert into tb_test values(2,cat); insert into tb_test values(3,jerry);-- 优化方案一:批量插入数据 Inser…...

实现Spring Web MVC中的文件上传功能,并处理大文件和多文件上传

实现Spring Web MVC中的文件上传功能,并处理大文件和多文件上传 在Spring Web MVC中实现文件上传功能并处理大文件和多文件上传是一项常见的任务。下面是一个示例,演示如何在Spring Boot应用程序中实现这一功能: 添加Spring Web依赖&#x…...

搭建vite项目

文章目录 Vite 是一个基于 Webpack 的开发服务器,用于开发 Vue 3 和 Vite 应用程序 一、创建一个vite项目二、集成Vue Router1.安装 vue-routernext插件2.在 src 目录下创建一个名为 router 的文件夹,并在其中创建一个名为 index.js 的文件。在这个文件中…...

Docker 安装mysql 主从复制

目录 1 MySql主从复制简介 1.1 主从复制的概念 1.2 主从复制的作用 2. 搭建主从复制 2.1 pull mysql 镜像 2.2 新建主服务器容器实例 3307 2.2.1 master创建 my.cnf 2.2.2 重启master 2.2.3 进入mysql 容器,创建同步用户 2.3 新建从服务器容器实例 3308…...

GPT每日面试题—如何实现二分查找

充分利用ChatGPT的优势,帮助我们快速准备前端面试。今日问题:如何实现二分查找? Q:如果在前端面试中,被问到如何实现二分查找,如果回答比较好,给出必要的代码示例 A:当被问到如何实…...

机器学习神经网络由哪些构成?

机器学习神经网络通常由以下几个主要组件构成: 1. **输入层(Input Layer)**:输入层接受来自数据源(例如图像、文本等)的原始输入数据。每个输入特征通常表示为输入层中的一个节点。 2. **隐藏层&#xff…...

代码随想录算法训练营day19 | 二叉树阶段性总结

各个部分题目的代码题解都在我往日的二叉树的博客中。 (day14到day22) 目录 二叉树理论基础二叉树的遍历方式深度优先遍历广度优先遍历 求二叉树的属性二叉树的修改与制造求二叉搜索树的属性二叉树公共最先问题二叉搜索树的修改与构造总结 二叉树理论基础 二叉树的理论基础参…...

数据库引论:3、中级SQL

一些更复杂的查询表达 3.1 连接表达式 拼接多张表的几种方式 3.1.1 自然连接 natural join,自动连接在所有共同属性上相同的元组 join… using( A 1 , A 2 , ⋯ A_1,A_2,\cdots A1​,A2​,⋯):使用括号里的属性进行自然连接,除了这些属性之外的共同…...

毕业设计:日志记录编写(3/17起更新中)

目录 3/171.配置阿里云python加速镜像:2. 安装python3.9版本3. 爬虫技术选择4. 数据抓取和整理5. 难点和挑战 3/241.数据库建表信息2.后续进度安排3. 数据处理和分析 3/17 当前周期目标:构建基本的python环境:运行爬虫程序 1.配置阿里云pytho…...

(一)基于IDEA的JAVA基础7

关系运算符 运算符 含义 范例 结果 等于 12 false &#xff01; 不等于 1&#xff01;2 true > 大于 1>2 false < 小于 …...

MySQL数据库概念及MySQL的安装

文章目录 MySQL数据库一、数据库基本概念1、数据2、数据表3、数据库4、数据库管理系统&#xff08;DBMS&#xff09;4.1 数据库的建立和维护功能4.2 数据库的定义功能4.3 数据库的操纵功能4.4 数据库的运行管理功能4.5 数据库的通信功能&#xff08;数据库与外界对接&#xff0…...

redis实际应用场景及并发问题的解决

业务场景 接下来要模拟的业务场景: 每当被普通攻击的时候&#xff0c;有千分之三的概率掉落金币&#xff0c;每回合最多爆出两个金币。 1.每个回合只有15秒。 2.每次普通攻击的时间间隔是0.5s 3.这个服务是一个集群&#xff08;这个要求暂时不实现&#xff09; 编写接口&…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...