如何在 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 可用于为图像添加字幕。
好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!