【深度学习实验】卷积神经网络(四):自定义二维汇聚层:最大汇聚(max pooling)和平均汇聚(average pooling)

目录

一、实验介绍

二、实验环境

1. 配置虚拟环境

2. 库版本介绍

三、实验内容

0. 导入必要的工具包

1. Conv2D(二维卷积层)

2. Pool2D(二维汇聚层)

理论知识

a. 初始化

b. 前向传播(最大汇聚层)

c. 前向传播(平均汇聚层)

d. 测试


一、实验介绍

        本实验实现了一个自定义的二维汇聚层(池化层),包括前向传播中进行最大池化、平均池化等操作。

二、实验环境

    本系列实验使用了PyTorch深度学习框架,相关操作如下:

1. 配置虚拟环境

conda create -n DL python=3.7 
conda activate DL
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
conda install matplotlib
 conda install scikit-learn

2. 库版本介绍

软件包本实验版本目前最新版
matplotlib3.5.33.8.0
numpy1.21.61.26.0
python3.7.16
scikit-learn0.22.11.3.0
torch1.8.1+cu1022.0.1
torchaudio0.8.12.0.2
torchvision0.9.1+cu1020.15.2

三、实验内容

ChatGPT:

        卷积神经网络(Convolutional Neural Network,简称CNN)是一种深度学习模型,广泛应用于图像识别、计算机视觉和模式识别等领域。它的设计灵感来自于生物学中视觉皮层的工作原理。

        卷积神经网络通过多个卷积层、池化层全连接层组成。

  • 卷积层主要用于提取图像的局部特征,通过卷积操作和激活函数的处理,可以学习到图像的特征表示。
  • 池化层则用于降低特征图的维度,减少参数数量,同时保留主要的特征信息。
  • 全连接层则用于将提取到的特征映射到不同类别的概率上,进行分类或回归任务。

        卷积神经网络在图像处理方面具有很强的优势,它能够自动学习到具有层次结构的特征表示,并且对平移、缩放和旋转等图像变换具有一定的不变性。这些特点使得卷积神经网络成为图像分类、目标检测、语义分割等任务的首选模型。除了图像处理,卷积神经网络也可以应用于其他领域,如自然语言处理和时间序列分析。通过将文本或时间序列数据转换成二维形式,可以利用卷积神经网络进行相关任务的处理。

0. 导入必要的工具包

import torch
from torch import nn
import torch.nn.functional as F

1. Conv2D(二维卷积层)

【深度学习实验】卷积神经网络(三):自定义二维卷积神经网络:步长和填充、输入输出通道_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/133313330?spm=1001.2014.3001.5501

2. Pool2D(二维汇聚层

理论知识

        汇聚层池化层)是深度学习中常用的一种操作,其作用是进行特征选择,降低特征数量,从而减少参数数量。

        卷积层虽然可以显著减少网络中连接的数量,但特征映射组中的神经元个数并没有显著减少。如果后面接一个分类器,分类器的输入维数依然很高,很容易出现过拟合。

        在神经网络的卷积层之后通常会添加汇聚层。汇聚层通过将输入数据划分为不重叠的区域,并在每个区域中选择一个代表性的元素(例如最大值平均值)来减小空间尺寸。这样可以在保留重要信息的同时,减少冗余和噪声,并提高计算效率。汇聚层的操作是局部的,因此网络可以对图像的平移、旋转和缩放等变换具有一定的不变性。

        常见的汇聚层有最大汇聚(max pooling)平均汇聚(average pooling)

  • 最大汇聚从输入区域中选择最大的元素作为输出;
  • 平均汇聚则计算输入区域的平均值作为输出;
  • 这些汇聚操作可以在卷积神经网络中的多个层级上进行,以逐渐减小特征图的空间尺寸。
class Pool2D(nn.Module):def __init__(self, size=(2,2), mode='max', stride=1):super().__init__()self.mode = modeself.h, self.w = sizeself.stride = stridedef forward(self, x):output = torch.zeros((x.shape[0], x.shape[1], (x.shape[2] - self.h + 1)//self.stride, (x.shape[3] - self.w + 1)//self.stride))for i in range(output.shape[2]):for j in range(output.shape[3]):if self.mode == 'max':output[:, :, i, j] = x[:, :, i*self.stride: i*self.stride + self.w, j*self.stride: j*self.stride + self.h].max()return output

a. 初始化

  • size参数用于指定池化窗口的大小,默认为(2, 2),表示池化窗口的高度和宽度都为2。
  • mode参数用于指定池化的模式,默认为'max',表示最大池化操作。也可以选择'average'来进行平均池化操作。
  • stride参数用于指定池化窗口的步幅,默认为1,表示窗口在输入上滑动的间距为1。

b. 前向传播(最大汇聚层)

  • 根据输入x的形状创建一个与池化后输出相同形状的零张量output
  • 使用两个嵌套的循环遍历output张量的每个空间位置(高度和宽度)。
    • 在每个位置上,根据池化模式选择不同的操作。
    • 如果self.mode为'max',则使用x张量切片操作获取对应池化窗口区域内的数据,并取最大值作为输出。
  • 最后,返回池化后的输出张量output

c. 前向传播(平均汇聚层)

        只需在forward方法中将池化操作改为计算对应窗口区域内的平均值:

class Pool2D(nn.Module):def __init__(self, size=(2 ,2), mode='average', stride=1):super().__init__()self.mode = modeself.h, self.w = sizeself.stride = stridedef forward(self, x):output = torch.zeros((x.shape[0], x.shape[1], (x.shape[2] - self.h + 1) // self.stride,(x.shape[3] - self.w + 1) // self.stride))for i in range(output.shape[2]):for j in range(output.shape[3]):if self.mode == 'max':output[:, :, i, j] = x[:, :, i* self.stride: i * self.stride + self.w,j * self.stride: j * self.stride + self.h].max()elif self.mode == 'average':output[:, :, i, j] = x[:, :, i * self.stride: i * self.stride + self.w,j * self.stride: j * self.stride + self.h].mean()return output

d. 测试

fake_feature = torch.rand((3,2,5,5))
pool = Pool2D()
output = pool(fake_feature)
print(output.shape)

输出

torch.Size([3, 2, 4, 4])

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

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

相关文章

智能的障碍:符号化

基于事实与价值叠加的算计与基于事实的计算有着明显的区别。 基于事实的计算是指根据已有的客观事实和数据进行计算和推理。在这种计算中,只考虑和利用与事实相关的信息和数据,目的是得出合理的、基于客观事实的结论。例如,使用数学公式和逻辑…

CentOS密码重置

背景: 我有一个CentOS虚拟机,但是密码忘记了,偶尔记起可以重置密码,于是今天尝试记录一下,又因为我最近记性比较差,所以必须要记录一下。 过程: 1、在引导菜单界面(grub&#xff…

【word密码】为什么word设置只读模式之后,还能编辑?

Word文档设置了只读模式,是可以编辑的,但是当我们进行保存的时候就会发现,word提示需要重命名并选择新路径才能够保存。 这种操作,即使可以编辑文字,但是原文件是不会受到影响的,编辑之后的word文件会保存到…

Android.bp常用语法和预定义属性

介绍 Android.bp是Android构建系统中用于定义模块和构建规则的配置文件,它使用一种简单的声明式语法。以下是Android.bp的一些常见语法规则和约定: 注释: 单行注释使用//符号。 多行注释使用/和/包围。 和go语言相同 // 这是单行注释 /* 这是…

Ubuntu 安装Kafka

在本指南中,我们将逐步演示如何在 Ubuntu 22.04 上安装 Apache Kafka。 在大数据中,数以百万计的数据源生成了大量的数据记录流,这些数据源包括社交媒体平台、企业系统、移动应用程序和物联网设备等。如此庞大的数据带来的主要挑战有两个方面…

性能压力测试的定义及步骤是什么

在今天的数字化时代,软件系统的性能和稳定性对于企业的成功至关重要。为了确保软件在高负载和压力情况下的正常运行,性能压力测试成为了不可或缺的环节。本文将介绍性能压力测试的定义、步骤。 一、性能压力测试的定义和目标 性能压力测试是通过模拟实际…

FragmentManager is already executing transactions

本文解决问题: java.lang.IllegalStateException: FragmentManager is already executing transactions 问题背景描述: 在Fragment中 用tablayoutviewpagerfragment,即Fragment嵌套Fragment场景、或者ViewPager2嵌套ViewPager2时。 执行生命…

vue中同一个页面参数不同动态改变数据与标题

背景 要求做一个页面,可以在菜单配置参数后直接跳转显示不同的报表; 具体步骤 步骤1:接收参数 参数配置与路由拦截这里不详细说,可以参考vue配置参数跳转 说明:这里参考的是saber框架中的特殊情况,如果…

SQLyog 连接 MySQL8.0+ 报错2058

问题如下: 解决方案: 1.首先用命令窗口进入user表 2.使用有mysql.user表权限的用户连接mysql并执行如下命令: ALTER USER sqlyoglocalhost IDENTIFIED WITH mysql_native_password BY root23456; 注:使用mysql_native_password…

DBRichEdit关联ClientDataSet不能保存的Bug

ClientDataSet的最大好处,就是建立能内存表,特别DataSnap三层运用中,主要使用ClientDataSet与运程的服务器中的数据表,建立读取存贮关系。 在软件的使用中,总有客户反映,一些数据不能保存。 发现都是使用DB…

如何使用docker快速部署MinDoc文档系统

MinDoc是非常优秀的知识分享系统,但是很多刚接触的人会一脸懵逼,而且官方文档写的也并不清晰,所以和大家分享一下快速部署MinDoc的方法。 首先docker环境先自行安装好,这里不再赘述。 拉取docker镜像: docker pull …

RS232,485,422的定义及区别

计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式。 由于串行通讯方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用。串口按电气标准及协议来划分,包括RS232、RS422、R…

RFID技术:钢条加工现场的智能化管理利器

RFID技术:钢条加工现场的智能化管理利器 RFID(Radio Frequency Identification)技术作为一种非接触式自动识别技术,近年来在工业领域得到广泛应用。本文将探讨RFID在钢条加工现场的应用,包括材料追踪与管理、生产过程…

杭州亚运会开幕式惊现数字人火炬手,动捕设备迸发动画制作新动能

在第十九届亚运会开幕式上,首次出现了“数字人”点火形式,打造了亚运史上首个数字点火仪式,这种点火方式是一种颠覆性创作的同时,这也是裸眼3D技术、现实增强和AI人工智能技术的完美结合。 此次数字火炬手的背后是采用了动捕设备&…

家电行业 EDI:Miele EDI 需求分析

Miele是一家创立于1899年的德国公司,以其卓越的工程技术和不懈的创新精神而闻名于世。作为全球领先的家电制造商,Miele的经营范围覆盖了厨房、洗衣和清洁领域,致力于提供高品质、可持续和智能化的家电产品。公司的使命是为全球消费者创造更美…

代码随想录Day03 | 链表基础1 LeetCode T203 移除链表元素 T707设计链表 T206 反转链表

本题思路和解答主要来源于: 代码随想录 (programmercarl.com) LeetCode T203 移除链表元素 题目链接:203. 移除链表元素 - 力扣(LeetCode) 首先我们回顾一下单向链表,每个链表有一个指针域和一个数据域,在内存中是呈现不连续排列的,对比之前的数组,链…

水库河道生态流量监测系统的主要内容

一、系统背景 我国为保护河流生态环境,推动水资源科学、合理、有序开发和可持续利用,各地水利和环保部门相继出台措施对不满足生态流量下泄要求的水电站责令整改或挂牌督办。近几年几百家水库在各个主要流域建成,由于缺乏对各个水库生态下泄流…

win10系统x64安装java环境以及搭建自动化测试环境

记录一下卑微C低能选手安装java和环境配置: 一、java安装包下载 进入oracle的下载界面:Java Downloads | Oracle 下拉选择对应版本,一定要选择jdk安装包下载 注:这里下载必须要注册账号,下载速度还是非常快 二、开…

容器管理工具 Docker生态架构及部署

目录 一、Docker生态架构 1.1 Docker Containers Are Everywhere 1.2 生态架构 1.2.1 Docker Host 1.2.2 Docker daemon 1.2.3 Registry 1.2.4 Docker client 1.2.5 Image 1.2.6 Container 1.2.7 Docker Dashboard 1.3 Docker版本 二、Docker部署 2.1 使用YUM源部署…

vue3+vite 引用svg图标

页面展示效果: 1、安装依赖插件vite-plugin-svg-icons和fast-glob npm install vite-plugin-svg-icons --save npm install fast-glob --save 2、在vite.config.ts文件修改配置 import {createSvgIconsPlugin} from vite-plugin-svg-icons; createSvgIconsPlugin({…