当前位置: 首页 > 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; 编写接口&…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...