【深度学习实验】卷积神经网络(二):自定义简单的二维卷积神经网络

目录

一、实验介绍

二、实验环境

1. 配置虚拟环境

2. 库版本介绍

三、实验内容

0. 导入必要的工具包

1. 二维互相关运算(corr2d)

2. 二维卷积层类(Conv2D)

a. __init__(初始化)

b. forward(前向传播函数)

3. 模型训练


一、实验介绍

        本实验实现了一个简单的二维卷积神经网络,包括二维互相关运算函数和自定义二维卷积层类,并对一个随机生成是二维张量进行了卷积操作。

 二、实验环境

    本系列实验使用了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
  • torch.nn:PyTorch中的神经网络模块,提供了各种神经网络层和函数。
  • torch.nn.functional:PyTorch中的函数形式的神经网络层,如激活函数和损失函数等。
 

1. 二维互相关运算(corr2d)

【深度学习实验】卷积神经网络(一):卷积运算及其Pytorch实现(一维卷积:窄卷积、宽卷积、等宽卷积;二维卷积)_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/133278425?spm=1001.2014.3001.5501

        如前文所示,在计算卷积的过程中,需要进行卷积核翻转.在具体实现上,一般会以互相关操作来代替卷积,从而会减少一些不必要的操作或开销。

  • 翻转指从两个维度(从 上到下、从左到右)颠倒次序,即旋转180度。
  • 互相关和卷积的区别仅仅在于卷积核是否进行翻转.因此互相关也可以称为不翻转卷积

        在神经网络中使用卷积是为了进行特征抽取卷积核是否进行翻转和其特征抽取的能力无关。特别是当卷积核是可学习的参数时,卷积和互相关在能力上是等价的.因此,为了实现上(或描述上)的方便起见,我们用互相关来代替卷积.事实上,很多深度学习工具中卷积操作其实都是互相关操作。

def corr2d(X, K): h, w = K.shapeY = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1))for i in range(Y.shape[0]):for j in range(Y.shape[1]):Y[i, j] = (X[i:i + h, j:j + w] * K).sum()return Y

  • 输入:输入张量X和卷积核张量K。
  • 输出:互相关运算结果张量Y,形状为(X.shape[0] - K.shape[0] + 1, X.shape[1] - K.shape[1] + 1)。
  • 通过两个嵌套的循环遍历输出张量Y的每个元素,使用局部相乘和求和的方式计算互相关运算结果。

2. 二维卷积层类(Conv2D)

class Conv2D(nn.Module):def __init__(self, kernel_size, weight=None):super().__init__()if weight is not None:self.weight = weightelse:self.weight = nn.Parameter(torch.rand(kernel_size))self.bias = nn.Parameter(torch.zeros(1))def forward(self, x):return corr2d(x, self.weight) + self.bias

a. __init__(初始化)

  • 接受一个kernel_size参数作为卷积核的大小,并可选地接受一个weight参数作为卷积核的权重。
  • 如果没有提供weight参数,则会随机生成一个与kernel_size相同形状的权重,并将其设置为可训练的参数(nn.Parameter)。
  • 定义了一个偏置项bias,也将其设置为可训练的参数。

b. forward(前向传播函数)

        调用之前的corr2d函数,对输入x和卷积核权重self.weight进行相关性计算,并将计算结果与偏置项self.bias相加,作为前向传播的输出。

3. 模型测试

# 由于卷积层还未实现多通道,所以我们的图像也默认是单通道的
fake_image = torch.randn((5,5))
# 实例化卷积算子
conv = Conv2D(kernel_size=(3,3))
output = conv(fake_image)

        创建了一个大小为(5, 5)的随机输入图像fake_image,然后实例化了Conv2D类,传入了卷积核大小为(3, 3)。接着调用conv对象的forward方法,对fake_image进行卷积操作,并将结果保存在output变量中。最后输出output的形状。

注意:本实验仅简单的实现了一个二维卷积层,只支持单通道的卷积操作,且不包含包含训练和优化等过程,欲知后事如何,请听下回分解。

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

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

相关文章

第十四届蓝桥杯大赛软件赛决赛 C/C++ 大学 B 组 试题 B: 双子数

[蓝桥杯 2023 国 B] 双子数 试题 B: 双子数 【问题描述】 若一个正整数 x x x 可以被表示为 p 2 q 2 p^2 \times q^2 p2q2,其中 p p p、 q q q 为质数且 p ≠ q p \neq q pq,则 x x x 是 一个 “双子数”。请计算区间 [ 2333 , 233333333333…

千兆光模块和万兆光模块的差别是什么?

千兆光模块和万兆光模块是目前使用最广泛的光模块之一,它们之间有什么差别呢?下面从传输速率、光纤类型、距离等多个方面详细分析千兆光模块和万兆光模块的差别。 一、传输速率 千兆光模块的传输速率为1.25Gbps,而万兆光模块的传输速率为10…

记录一下 malloc 是如何分配内存的

系统深入学习笔记-malloc 以 32 位系统为例,,通过这张图你可以看到,用户空间内存从低到高分别是 6 种不同的内存段: 代码段,包括二进制可执行代码;数据段,包括已初始化的静态常量和全局变量B…

燃气安全如何保障?万宾燃气管网监测系统时刻感知管网运行态势

近年来随着我国城镇化建设的加快,燃气已经成为每个家庭的必需品。然而,每年夏季频繁发生的燃气爆炸事故,已经严重危害人民生命财产安全危害社会公共安全和公共利益。为了保障燃气安全运行,近日,许多城市都在大力推进燃…

深入浅出Java的多线程编程——第二篇

目录 前情回顾 1. 中断一个线程 1.1 中断的API 1.2 小结 2. 等待一个线程 2.1 等待的API 3. 线程的状态 3.1 贯彻线程的所有状态 3.2 线程状态和状态转移的意义 4. 多线程带来的的风险-线程安全 (重点) 4.1 观察线程不安全 4.2 线程安全的概念 4.3 线程不安全的原因…

代码随想录算法训练营第23期day7| 454.四数相加II 、383. 赎金信 、15. 三数之和、18. 四数之和

目录 一、(leetode 454)四数相加II 二、(leetcode 383)赎金信 暴力解法 哈希法 三、(leetcode 15)三数之和 四、(leetcode 18)四数之和 一、(leetode 454&#xf…

电涌保护器外部专用脱离器(SCB)后备保护器产品说明

为了更好的满足不同应用场景的市场需求,地凯科技经过两年多不断的研发与试验,对电涌保护器外部专用脱离器 SCB 后备保护器产品(以下简称 SCB)进行了技术升级,升级后的SCB 产品在电气性能、外观尺寸、智能化和可靠性等方…

springboot+vue智能诊后随访系统 java医院挂号预约诊断系统

本系统是基于java前端架构Vue用java编程语言及javascript、CSS、HTML语言进行编写设计并实现相关功能的。 设计步骤及措施: (1)确定项目名称、项目研究内容,开题报告提交及修改。 (2)项目开发准备&#xff…

全志H616在低温reboot过程中进入休眠解决方法

主题 H618在DDR物料适配支持时候,reboot实验异常进休眠,在reboot老化测试中报如下log1 [2023-07-11,16:56:44][ 40.325238][ T1] init: Untracked pid 1888 exited with status 0 [2023-07-11,16:56:44][ 40.325295][ T5] binder: undeliver…

比起“如果环境这样这样,那便那样那样”,我更喜欢听到“要怎样怎样变成想要的样子”

比起“如果环境这样这样,那便那样那样”,我更喜欢听到“要怎样怎样变成想要的样子” 许多事情不只是选择题、判断题,还可以是填空题、论文,重点是你怎么看待,格局有没有打开.

中睿天下参展2023海军工程大学首届网络安全文化周并发表主题演讲

2023年9月3日至9月8日,海军工程大学首届网络安全文化周活动于武汉举办。本次活动以“守护蓝疆网安有我”为主题,设有特邀嘉宾前沿讲座、网络安全圆桌交流论坛、网络安全科技展、网络对抗实战竞技、网络安全保密视频创作和信息安全知识竞赛等系列活动。 海…

自学WEB后端03-Node.js 语法

学习后端路线: JavaScript 基础语法 Node,js 内置 API 模块 (fs、 path、 http等) 第三方 API 模块 (express、mysql等) 今天主要回顾下Node.js 语法 Node.js 是基于 Chrome V8 引擎的 JavaScript 运行环境,它提供了一种能够在服务器端运行 JavaScr…

Selenium和Requests搭配使用

Selenium和Requests搭配使用 前要1. CDP2. 通过requests控制浏览器2. 1 代码一2. 2 代码2 3. 通过selenium获取cookie, requests携带cookie请求 前要 之前有提过, 用selenium控制本地浏览器, 提高拟人化,但是效率比较低,今天说一种selenium和requests搭配使用的方法 注意: 一定…

2023网络安全面试题(附答案)+面经

前言 随着国家政策的扶持,网络安全行业也越来越为大众所熟知,相应的想要进入到网络安全行业的人也越来越多,为了拿到心仪的Offer之外,除了学好网络安全知识以外,还要应对好企业的面试。 所以在这里我归纳总结了一些网…

软件的开发步骤,需求分析,开发环境搭建,接口文档 ---苍穹外卖1

目录 项目总览 开发准备 开发步骤 角色分工 软件环境 项目介绍 产品原型 技术选型 开发环境搭建 前端:默认已有 后端 使用Git版本控制 数据库环境搭建 前后端联调 ​登录功能完善 导入接口文档 使用swagger​ 和yapi的区别 常用注解 项目总览 开发准备 开发步骤…

如何通过bat批处理实现快速生成文件目录,一键生成文件名和文件夹名目录

碰对了情人,相思一辈子。 具体方法步骤: 一、创建一个执行bat文件(使用记事本即可); 1、新建一个txt文本空白记事本文件 2、复制以下内容进记事本内 dir/a/s/b>LIST.TXT (其中LIST.TXT文件名是提取后将…

小皮面板配置Xdebug,调试单个php文件

小皮面板配置Xdebug 首先下载phpstrom,和小皮面板 打开小皮面板,选中好要使用的php版本 然后点击【管理】> 【php扩展】> 【xdebug】 然后打开选中好版本的php位置 D:\Program_Files\phpstudy_pro\Extensions\php\php7.4.3nts打开php.ini文件…

Java8实战-总结34

Java8实战-总结34 重构、测试和调试使用 Lambda 重构面向对象的设计模式观察者模式责任链模式 重构、测试和调试 使用 Lambda 重构面向对象的设计模式 观察者模式 观察者模式是一种比较常见的方案,某些事件发生时(比如状态转变)&#xff0…

it网络设备监控系统

企业对网络监控系统的需求也在增加。网络监控系统是一种软件和硬件的组合,用于监控和管理企业的网络系统。它帮助企业实时了解网络情况,防范和处理网络问题,保证企业业务的正常使用。那么,IT网络监控系统监控什么设备呢&#xff1…

前端求职指南

简历求职指南 为什么没有面试? 1、简历写的不好 2、简历投递不好 简历的定义是什么? 是求职者向未来雇主展示自己专业技能和职业素养的自我推销工具,以找到工作为目的。 什么时候改简历? 每半年或一年更新一次工作中的成长 再工…