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

如何在 PyTorch 中定义一个简单的卷积神经网络?

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。
👍感谢小伙伴们点赞、关注!

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称项目名称
1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】8.【基于YOLOv8深度学习的行人跌倒检测系统】
9.【基于YOLOv8深度学习的PCB板缺陷检测系统】10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统】
11.【基于YOLOv8深度学习的安全帽目标检测系统】12.【基于YOLOv8深度学习的120种犬类检测与识别系统】
13.【基于YOLOv8深度学习的路面坑洞检测系统】14.【基于YOLOv8深度学习的火焰烟雾检测系统】
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统】16.【基于YOLOv8深度学习的舰船目标分类检测系统】
17.【基于YOLOv8深度学习的西红柿成熟度检测系统】18.【基于YOLOv8深度学习的血细胞检测与计数系统】
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统】20.【基于YOLOv8深度学习的水稻害虫检测与识别系统】
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统】22.【基于YOLOv8深度学习的路面标志线检测与识别系统】
23.【基于YOLOv8深度学习的智能小麦害虫检测识别系统】24.【基于YOLOv8深度学习的智能玉米害虫检测识别系统】
25.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统】26.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统】
27.【基于YOLOv8深度学习的人脸面部表情识别系统】28.【基于YOLOv8深度学习的苹果叶片病害智能诊断系统】
29.【基于YOLOv8深度学习的智能肺炎诊断系统】30.【基于YOLOv8深度学习的葡萄簇目标检测系统】
31.【基于YOLOv8深度学习的100种中草药智能识别系统】32.【基于YOLOv8深度学习的102种花卉智能识别系统】
33.【基于YOLOv8深度学习的100种蝴蝶智能识别系统】34.【基于YOLOv8深度学习的水稻叶片病害智能诊断系统】
35.【基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统】36.【基于YOLOv8深度学习的智能草莓病害检测与分割系统】
37.【基于YOLOv8深度学习的复杂场景下船舶目标检测系统】38.【基于YOLOv8深度学习的农作物幼苗与杂草检测系统】
39.【基于YOLOv8深度学习的智能道路裂缝检测与分析系统】40.【基于YOLOv8深度学习的葡萄病害智能诊断与防治系统】
41.【基于YOLOv8深度学习的遥感地理空间物体检测系统】42.【基于YOLOv8深度学习的无人机视角地面物体检测系统】
43.【基于YOLOv8深度学习的木薯病害智能诊断与防治系统】44.【基于YOLOv8深度学习的野外火焰烟雾检测系统】
45.【基于YOLOv8深度学习的脑肿瘤智能检测系统】46.【基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于YOLOv8深度学习的橙子病害智能诊断与防治系统】48.【车辆检测追踪与流量计数系统】
49.【行人检测追踪与双向流量计数系统】50.【基于YOLOv8深度学习的反光衣检测与预警系统】
51.【危险区域人员闯入检测与报警系统】52.【高密度人脸智能检测与统计系统】
53.【CT扫描图像肾结石智能检测系统】54.【水果智能检测系统】
55.【水果质量好坏智能检测系统】56.【蔬菜目标检测与识别系统】
57.【非机动车驾驶员头盔检测系统】58.【太阳能电池板检测与分析系统】
59.【工业螺栓螺母检测】60.【金属焊缝缺陷检测系统】
61.【链条缺陷检测与识别系统】62.【交通信号灯检测识别】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

目录

    • 引言
    • 卷积神经网络组成
    • CNN 中的卷积层和池化层是什么?
      • 卷积层
      • 池化层
    • 使用 PyTorch 定义卷积神经网络
    • CNN 分类器的应用

引言

在本文中,我们将了解如何使用 Python 在PyTorch中定义一个简单的卷积神经网络。卷积神经网络 (CNN)是一种深度学习算法,在学习图像中的模式和特征方面非常有用。CNN 具有一个独特的特性,即它能够以网格状拓扑处理数据,而典型的人工神经网络(密集或稀疏)通常通过将张量展平为一维向量来获取输入。这有助于它学习和区分图像中的特征,当以数字形式表示时,这些特征本质上是一个数字网格。

卷积神经网络组成

卷积神经网络通常由多层组成。通常,初始层用于检测边缘等简单特征,随着网络的深入,再检测复杂特征。

CNN 具有无数特性,使其非常适合处理图像。让我们来看看其中的一些:

  • 与其他深度学习算法相比,它们需要的数据预处理少得多。
  • 训练有素的 CNN 模型能够学习和分类图像中的特征,从而大大提高图像特征分类和检测的准确性。
  • 通过增加卷积层和池化层等方法可以节省大量的计算资源。

CNN 中的卷积层和池化层是什么?

卷积层

这些是 CNN 中的前几层,可以将它们视为图像的“过滤器”。就像 Instagram 中的过滤器检测我们的脸一样,卷积层可以检测图像中可能存在的特征或过滤器(例如边缘)。

池化层

池化层主要通过减小图像的空间大小来降低计算成本。最好的描述方式是,它通过对图像的空间分辨率进行“汇总”,使信息网格变得更小。

使用 PyTorch 定义卷积神经网络

现在让我们继续定义一个具有一个卷积层和一个线性层的简单卷积神经网络。

步骤1:导入必要的库。

我们将首先导入 Torch 库。如果尚未安装,只需使用以下 pip 命令即可:

pip install torch

对于这个 CNN 模型,我们将使用Adam优化器和ReLU替代激活函数。

# Step 1 is importing all the 
# necessary libraries needed for defining our CNN 
import torch 
from torch.autograd import Variable 
from torch.nn import (Linear, ReLU, CrossEntropyLoss, Sequential, Conv2d, MaxPool2d, Module, Softmax, BatchNorm2d, Dropout) 
from torch.optim import Adam, SGD 

第 2 步 :我们将首先定义 Net() 类来为我们的 CNN 构建所需形状的构造函数。

注意在步骤1中,我们导入了一个模块torch.nn。该模块包含可帮助构建神经网络的不同类。

# Step 2 is defining our CNN 
class Net(Module): def __init__(self): super(Net, self).__init__() # Now we will define a simple CNN # with only one 2D Convolutional Layer # The layer has it's own inplace # Relu activation function self.cnn_layers = Sequential( # Declaring the Convolutional Layer Conv2d(1, 4, kernel_size=3, stride=1, padding=1), BatchNorm2d(4), ReLU(inplace=True), MaxPool2d(kernel_size=2, stride=2), ) self.linear_layers = Sequential( Linear(4 * 8 * 8, 10) ) # Defining the Forward feed into the linear # layers from the Convolutional Layers. def forward(self, x): x = self.cnn_layers(x) x = x.view(x.size(0), -1) x = self.linear_layers(x) return x 

步骤 3:最后一步是定义我们选择的模型并打印其属性。

通过调用构造函数创建上述类后,我们可以轻松定义任意数量的模型,并且我们将获得一个具有一个二维卷积层和一个线性层的卷积神经网络。

打印(模型)行给出 CNN 的输出形状。

# Defining the CNN model using the 
# constructed class 
model = Net() # Adam is used as an optimizer for 
# the model parameters 
optimizer = Adam(model.parameters(), lr=0.07) # CrossEntropyLoss is chosen as the 
# criteria to evaluate the model 
# (loss function) 
criterion = CrossEntropyLoss() # CUDA tensor types use GPU instead of 
# CPUs for computation the following 
# function checks whether the GPU is available 
# If the GPU is available,the model 
# uses GPU for computation 
if torch.cuda.is_available(): model = model.cuda() criterion = criterion.cuda() print(model) 

该代码将在PyTorch中定义一个使用单个卷积层和单个线性层的简单 CNN 。

输出:

Net((cnn_layers): Sequential((0): Conv2d(1, 4, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))(1): BatchNorm2d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(2): ReLU(inplace=True)(3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False))(linear_layers): Sequential((0): Linear(in_features=256, out_features=10, bias=True)))

CNN 分类器的应用

  • 基于 CNN 的分类器可用于无数目的的对象和模式检测,例如人脸识别、分类和回归预测问题。
  • 它在癌症检测和生物特征认证方面确实大有裨益。CNN 对医疗保健和疾病检测产生了巨大影响。
  • 训练有素的 CNN 可用于为图像添加字幕。

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 主窗口的设计与开发(二)
  • LeetCode字母异位词分组
  • k8s介绍
  • UDP报文结构
  • PurchaseorderController
  • JDBC的介绍续
  • [数据集][目标检测]电动车头盔佩戴检测数据集VOC+YOLO格式4235张5类别
  • 《深入浅出WPF》读书笔记.11Template机制(上)
  • 如何编写Linux PCI设备驱动器 之一
  • 推荐9个不同风格的音频频谱波形 听音乐怎么能少了它
  • FPGA基础知识
  • 分库分表:应对大数据量挑战的数据库扩展策略
  • Apache Ignite 在处理大规模数据时有哪些优势和局限性?
  • 【第0006页 · 数组】寻找重复数
  • CRIO与Windows下LabVIEW开发对比
  • 【前端学习】-粗谈选择器
  • 【译】理解JavaScript:new 关键字
  • Android Studio:GIT提交项目到远程仓库
  • android图片蒙层
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Docker入门(二) - Dockerfile
  • jdbc就是这么简单
  • magento2项目上线注意事项
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 温故知新之javascript面向对象
  • 项目管理碎碎念系列之一:干系人管理
  • 小程序测试方案初探
  • 用 Swift 编写面向协议的视图
  • postgresql行列转换函数
  • 从如何停掉 Promise 链说起
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (5)STL算法之复制
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C++哈希表01)
  • (void) (_x == _y)的作用
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (三十五)大数据实战——Superset可视化平台搭建
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)程序员技术练级攻略
  • (自用)网络编程
  • **python多态
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .net core 连接数据库,通过数据库生成Modell
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .netcore 获取appsettings
  • .net和php怎么连接,php和apache之间如何连接
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [AI aider] 打造终端AI搭档:Aider让编程更智能更有趣!
  • [Angular] 笔记 6:ngStyle