人工智能算法工程师(中级)课程10-PyTorch神经网络之卷积神经网络与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程10-PyTorch神经网络之卷积神经网络实战与代码详解。卷积神经网络(CNN)是一种广泛应用于图像识别、目标检测、视频分析等领域的深度学习模型。本文将详细介绍卷积神经网络的原理、构成元素、运行过程、感受野计算、参数和运算量、常见卷积类型以及池化应用,并附上完整可运行代码。

文章目录

  • 一、卷积运算的原理
  • 二、卷积神经网络的构成元素
  • 三、卷积神经网络的运行过程
  • 四、卷积的感受野计算
  • 五、卷积的参数和运算量
  • 六、常见的卷积类型
  • 七、池化的应用
  • 总结

一、卷积运算的原理

卷积运算是一种线性运算,用于处理图像数据。它通过滑动一个小的窗口(称为卷积核)在输入图像上,将卷积核与输入图像对应的局部区域进行元素相乘并求和,得到输出特征图的一个像素值。数学表达式如下:
O ( i , j ) = ∑ m ∑ n I ( i + m , j + n ) ⋅ K ( m , n ) O(i, j) = \sum_{m} \sum_{n} I(i+m, j+n) \cdot K(m, n) O(i,j)=mnI(i+m,j+n)K(m,n)
其中, O ( i , j ) O(i, j) O(i,j) 表示输出特征图在位置 ( i , j ) (i, j) (i,j) 的像素值, I ( i + m , j + n ) I(i+m, j+n) I(i+m,j+n) 表示输入图像在位置 ( i + m , j + n ) (i+m, j+n) (i+m,j+n) 的像素值, K ( m , n ) K(m, n) K(m,n) 表示卷积核在位置 ( m , n ) (m, n) (m,n) 的权重。
在这里插入图片描述
三通道的卷积核计算过程:
在这里插入图片描述

下面是卷积运算的代码实现:

import numpy as np
def conv2d(input, kernel, stride=1, padding=0):"""二维卷积运算:param input: 输入图像,形状为(batch_size, height, width, channels):param kernel: 卷积核,形状为(kernel_height, kernel_width, input_channels, output_channels):param stride: 步长:param padding: 填充:return: 输出特征图,形状为(batch_size, new_height, new_width, output_channels)"""batch_size, height, width, input_channels = input.shapekernel_height, kernel_width, _, output_channels = kernel.shape# 计算输出特征图的高度和宽度new_height = (height - kernel_height + 2 * padding) // stride + 1new_width = (width - kernel_width + 2 * padding) // stride + 1# 初始化输出特征图output = np.zeros((batch_size, new_height, new_width, output_channels))# 填充输入图像padded_input = np.pad(input, ((0, 0), (padding, padding), (padding, padding), (0, 0)), 'constant')# 卷积运算for i in range(new_height):for j in range(new_width):for k in range(output_channels):output[:, i, j, k] = np.sum(padded_input[:, i*stride:i*stride+kernel_height, j*stride:j*stride+kernel_width, :] * kernel[:, :, :, k], axis=(1, 2, 3))return output

二、卷积神经网络的构成元素

卷积神经网络主要由以下几部分构成:

  1. 输入层:接收图像数据,形状为(batch_size, height, width, channels)。
  2. 卷积层:通过卷积运算提取特征。
  3. 激活函数:引入非线性因素,提高模型的表达能力。
  4. 池化层:降低特征图的分辨率,减少计算量。
  5. 全连接层:将特征图转化为向量,进行分类或回归任务。

三、卷积神经网络的运行过程

卷积神经网络的运行过程主要包括以下几个步骤:

  1. 输入图像经过卷积层提取特征。
  2. 特征图经过激活函数进行非线性变换。
  3. 特征图经过池化层降低分辨率。
  4. 重复步骤1-3,形成深度神经网络。
  5. 最后的特征图经过全连接层进行分类或回归任务。

四、卷积的感受野计算

感受野是指卷积神经网络中每个神经元能感知到的原始输入图像的区域。计算公式如下:
R F ( l ) = R F ( l − 1 ) + ( k e r n e l _ s i z e ( l ) − 1 ) × ∏ i = 1 l − 1 s t r i d e ( i ) RF(l) = RF(l-1) + (kernel\_size(l) - 1) \times \prod_{i=1}^{l-1} stride(i) RF(l)=RF(l1)+(kernel_size(l)1)×i=1l1stride(i)
其中, R F ( l ) RF(l) RF(l) 表示第 l l l 层的感受野大小, k e r n e l _ s i z e ( l ) kernel\_size(l) kernel_size(l) 表示第 l l l 层的卷积核大小, s t r i d e ( i ) stride(i) stride(i) 表示第 i i i 层的步长。

五、卷积的参数和运算量

卷积操作的参数量和运算量主要取决于卷积核大小、输入通道数、输出通道数、输入特征图大小和步长。计算公式如下:
参数量: k e r n e l _ h e i g h t × k e r n e l _ w i d t h × i n p u t _ c h a n n e l s × o u t p u t _ c h a n n e l s kernel\_height \times kernel\_width \times input\_channels \times output\_channels kernel_height×kernel_width×input_channels×output_channels
运算量: ( k e r n e l _ h e i g h t × k e r n e l _ w i d t h × i n p u t c h a n n e l s ) × o u t p u t c h a n n e l s × n e w h e i g h t × n e w w i d t h (kernel\_height \times kernel\_width \times input_channels) \times output_channels \times new_height \times new_width (kernel_height×kernel_width×inputchannels)×outputchannels×newheight×newwidth
其中,new_heightnew_width 是输出特征图的尺寸。

六、常见的卷积类型

  1. 标准卷积(Standard Convolution):前面提到的基本卷积操作。
  2. 深度可分离卷积(Depthwise Separable Convolution):将卷积分成深度卷积和逐点卷积两个步骤,减少参数量和计算量。
    • 深度卷积:每个输入通道使用单独的卷积核。
    • 逐点卷积:使用1x1的卷积核,将深度卷积的输出合并。
  3. 空洞卷积(Dilated Convolution):在卷积核之间插入空洞,增加感受野而不增加参数量。
  4. 反卷积(Deconvolution):通常用于上采样,通过学习一个反卷积核来扩大特征图的尺寸。
    在这里插入图片描述

七、池化的应用

池化(Pooling)是一种下采样操作,用于减少特征图的尺寸,同时保留重要的特征信息。常见的池化类型有:

  1. 最大池化(Max Pooling):选择每个局部区域的最大值作为输出。
  2. 平均池化(Average Pooling):计算每个局部区域的平均值作为输出。
    池化的数学原理较为简单,以下为最大池化的代码实现:
def max_pooling(input, pool_size, stride):"""最大池化:param input: 输入特征图,形状为(batch_size, height, width, channels):param pool_size: 池化窗口大小:param stride: 步长:return: 输出特征图,形状为(batch_size, new_height, new_width, channels)"""batch_size, height, width, channels = input.shape# 计算输出特征图的高度和宽度new_height = (height - pool_size) // stride + 1new_width = (width - pool_size) // stride + 1# 初始化输出特征图output = np.zeros((batch_size, new_height, new_width, channels))# 池化运算for i in range(new_height):for j in range(new_width):for k in range(channels):output[:, i, j, k] = np.max(input[:, i*stride:i*stride+pool_size, j*stride:j*stride+pool_size, k], axis=(1, 2))return output

总结

这里我详细介绍了卷积神经网络的原理、构成元素、运行过程、感受野计算、参数和运算量、常见卷积类型以及池化应用,并附上了相应的代码实现。卷积神经网络作为一种强大的深度学习模型,在图像处理领域具有广泛的应用。希望本文能帮助读者更好地理解和应用卷积神经网络。

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

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

相关文章

vue-router history 模式下将所有资源文件js/css/img都存放在oss 利用 cdn 访问整体思路汇总

背景 我们有一个域名https://example.com,但是ssl证书很贵,搞子域名来承接新站点有点费钱,所以我们想用一个目录https://example.com/admin/ 来作为管理后台的站点,这个站点是单页面应用,我又想让其用history router的…

Redis基础教程(十六):Redis Stream

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

Qt常用基础控件总结—带边框的部件(QFrame和QLabel)

带边框的部件 框架控件QFrame类 QFrame类介绍 QFrame 类是带有边框的部件的基类,带边框部件的特点是有一个明显的边框,QFrame类就是用来实现边框的不同效果的(把这种效果称为边框样式),所有继承自 QFrame 的子类都可以使用 QFrame 类实现的效果。 部件通常是矩形的(其他…

谷粒商城学习笔记-18-快速开发-配置测试微服务基本CRUD功能

文章目录 一,product模块整合mybatis-plus1,引入依赖2,product启动类指定mapper所在包3,在配置文件配置数据库连接信息4,在配置文件中配置mapper.xml映射文件信息 二,单元测试1,编写测试代码&am…

凯中精密:下一个正丹吗?

业绩预增超十倍! 又一匹A股业绩黑马诞生——凯中精密 近期,凯中精密发布2024年上半年业绩预告,预计净利润增速高达1068%至1402%。 从23年的209.54%到24年Q1惊人的6885.78%,再到24年上半年的十倍增速,这条业绩黑马利润…

【python算法学习2】冒泡排序的写法

目的:学习冒泡排序的写法 1 定义 1.1百度百科 冒泡排序_百度百科在程序设计语言中,排序算法主要有冒泡排序、快速排序、选择排序以及计数排序等。冒泡排序(Bubble Sort)是最简单和最通用的排序方法,其基本思想是&…

C# 中,使用 LINQ 示例 备忘

语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。 此外, … 对于编写查询的开发者来说,LINQ 最明显的“语言集成”部分就是查询表达式。 …

Elasticsearch基础教程

目录 引言Elasticsearch的特点 分布式架构实时搜索和分析强大的全文搜索RESTful接口高可用性和容错性 Elasticsearch的核心概念 索引文档分片和副本节点和集群 Elasticsearch的使用场景 日志和事件数据分析全文搜索实时数据处理数据可视化 安装和配置Elasticsearch的优化 性能…

设计模式 - 最简单最有趣的方式讲述

别名《我替你看Head First设计模式》 本文以故事的形式带你从0了解设计模式,在其中你仅仅是一名刚入职的实习生,在项目中摸爬滚打。(以没有一行真正代码的形式,让你无压力趣味学习) 设计模式 策略模式观察者模式装饰者…

技术难点思考SpringBoot如何集成Jmeter开发

技术难点思考SpringBoot如何集成Jmeter开发 需求概述 构建一个高性能的压测平台,该平台需通过Spring Boot框架调用JMeter进行自动化压力测试。 解决方案一:使用Runtime类调用外部进程 技术概述 Java的Runtime类提供了与操作系统交互的接口&#xff0…

springboot仪器校准系统-计算机毕业设计源码51504

摘 要 随着科技的不断发展。测量设备的准确性和可靠性对于各行各业都至关重要。仪器校准系统作为确保测量设备性能的重要手段,已成为工业生产、科学研究、质量控制等领域不可或缺的一部分。本文对仪器校准系统进行了概述,探讨了校准方法、流程、特点、应…

Apache防盗链、网页压缩、网页缓存

目录 网页压缩 类型 示例 动态添加模块操作步骤 重装Apache操作步骤 网页缓存 示例 操作步骤 隐藏版本信息 操作步骤 Apache防盗链 定义 原理 配置防盗链实验环境 实验环境 本地图片盗链示例 操作步骤 防盗链示例 操作步骤 网页压缩 网站的访问速度是由多个…

following a different leader because i am not the healthiest node

源代码 解决方案: 手动 patronictl failover 修改切换模式从高可靠模式改成高可用模式 patronictl edit-config-synchronous_mode: true synchronous_mode: false

2024.7.10 刷题总结

2024.7.10 **每日一题** 2970.统计移除递增子数组的数目 Ⅰ,这道题是一个考察双指针的题目,也考察了数组的基本性质。题目的意思是要统计有多少个子数组能满足移除后剩下的元素为严格递增的关系,刚开始没考虑到移除的元素要是连续的&#xff…

透明加密软件哪个好?这5款好用的加密软件尽在你眼前!

数据安全和隐私保护已成为企业和个人不可忽视的重要问题。 透明加密技术以其无需用户额外操作即可实现文件的加密和解密,大大提高了数据处理的便捷性和安全性。 下面小编将为您介绍五款优质的透明加密软件,帮助您选择最适合自己的加密工具。 1. Pg32 …

C语言 比较两个字符串

编一个程序,将两个字符串s1和s2比较,若s1>s2,输出一个正数;若s1s2,输出0;若s1<s2,输出一个负数。不要用strcpy函数。两个字符串用gets函数读入。输出的正数或负数的绝对值应是相比较的两个字符串相应字符的ASCII码的差值。例如:“A”与“C”相比,由于“A”<“C”,应输…

超秒集物商城打造“私域流量新策略”用消费增值破解流量困局

消费增值模式是什么?在如今这个公域流量的竞争愈发激烈的时代,流量已成为企业竞争的关键,消费增值可以帮助企业在私域流量的海洋中乘风破浪? 一、消费增值模式的引入 消费增值模式不仅仅是一种商业模式,更是一种营销策略。它鼓励消费者在享受商品或服务的同时,通过消费行为获…

KEIL5 MDK的(官网)下载安装(Win11)

一、KEIL5 MDK下载 1、Keil官网下载&#xff1a;Keil Product Downloadshttps://www.keil.com/download/product/ 支持包和破解软件和V5编译器下载链接 链接&#xff1a;https://pan.baidu.com/s/1ery0Q3FAR8_bLLlPQHSFNg?pwd9pxf 提取码&#xff1a;9pxf 选择最新版本下载&…

打造高效能“园区企业服务平台”,让企业更好更快发展!

​近年来&#xff0c;随着我国经济的快速发展&#xff0c;各地产业园区建设如火如荼&#xff0c;成为区域经济的支柱&#xff0c;如果说园区是区域经济的支柱&#xff0c;企业则是园区的血液&#xff0c;给园区带来生命力&#xff0c;为园区发展提供着动力&#xff0c;各地政府…

linux从入门到精通

文章目录 一.Linux 基础知识1. Linux 操作系统简介2. Linux 的基本组成3. Linux 的优势和应用领域4. 学习 Linux 的路径和资源5. Linux 的未来展望 二.Linux 命令1.linux目录结构2.linux文件基本属性2.1 Linux 文件的基本属性2.2 Linux 文件类型2.3 Linux 文件权限2.4 文件属性…