ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【呆板学习】经典CNN架构 [打印本页]

作者: 光之使者    时间: 2025-1-22 19:26
标题: 【呆板学习】经典CNN架构

第一章:弁言

1.1 研究背景

呆板学习的发展历程
呆板学习作为人工智能的重要分支,其发展历程可以追溯到20世纪50年代。初期的呆板学习研究主要会合在规则系统和基本的统计学习方法上。随着计算能力的提拔和数据的积累,呆板学习徐徐发展出更为复杂的算法和模子。20世纪80年代和90年代,出现了许多影响深远的算法,如决策树、支持向量机(SVM)和随机森林,这些方法在多种应用场景中取得了显著的成果。
进入21世纪后,深度学习的鼓起极大地推动了呆板学习的发展。深度学习通过构建多层次的神经网络(深度神经网络),可以或许主动学习数据中的复杂特性,并在各种使命中超越传统呆板学习算法的表现。尤其是在图像处置惩罚和计算机视觉领域,深度学习表现出了非凡的能力,使得许多曾经难以解决的问题得到了突破。
卷积神经网络(CNN)的崛起
卷积神经网络(CNN)是深度学习领域的一项重要突破。CNN最早由Yann LeCun等人在20世纪80年代末期提出,用于图像识别使命。其核心头脑源于生物视觉系统的特性,模仿了人类视觉处置惩罚的过程。CNN通过卷积层、池化层和全毗连层的组合,可以或许有效地从图像数据中提取层次化特性。
在2012年,AlexNet的乐成标记着CNN在计算机视觉领域的广泛应用。AlexNet在ImageNet大规模视觉识别挑战赛中获得了巨大的乐成,将错误率大幅降低,显著提高了图像分类的准确性。这一成果标记着深度学习,尤其是CNN在图像处置惩罚领域的主导地位。
自此之后,CNN在各种图像处置惩罚使命中,如目标检测、图像分割、人脸识别等领域中,均取得了突破性的希望。例如,R-CNN和YOLO等网络布局在目标检测使命中表现优秀,U-Net在医学图像分割中取得了显著的成果。这些希望不但推动了计算机视觉技能的发展,也动员了智能驾驶、医疗影像分析等实际应用的创新。
1.2 CNN的基本概念

卷积神经网络(CNN)的定义
卷积神经网络(CNN)是一种特别类型的深度学习模子,主要用于处置惩罚具有网格布局的数据,例如图像。CNN的核心头脑是通过卷积操纵提取数据的局部特性,并通过层次化的布局逐步提取更高级的特性。CNN通常由以下几种主要层次构成:

CNN在深度学习中的地位
卷积神经网络(CNN)作为深度学习的核心架构之一,在许多应用领域表现出色。其上风主要体现在以下几个方面:

由于这些优点,CNN在图像分类、目标检测、图像分割等领域成为主流的模子架构,并不停推动计算机视觉技能的发展和应用。
1.3 研究动机与目标

研究动机
经典卷积神经网络(CNN)架构作为深度学习领域的重要构成部门,具有深远的学术价值和广泛的应用远景。随着技能的发展,新的CNN变种不停涌现,但经典CNN架构的基础知识仍然对明白和把握这些先辈模子至关重要。通过对经典CNN架构的深入研究,可以为以下几个方面提供理论支持和实践指导:

研究目标
本文旨在深入探讨经典卷积神经网络(CNN)架构,通过详细分析其核心组件和变种模子,达到以下目标:

第二章:卷积神经网络的基本构成部门

2.1 卷积层(Convolutional Layer)

卷积层的理论知识
卷积层是卷积神经网络(CNN)的核心构成部门,其主要作用是对输入数据(例如图像)应用卷积操纵,以提取特性。卷积操纵通过卷积核(或滤波器)在输入数据上滑动,计算局部区域的加权和,从而捕获局部特性。
卷积操纵的数学原理

卷积层的作用

卷积运算的实现
  1. import torch
  2. import torch.nn as nn
  3. import torch.nn.functional as F
  4. # 定义一个简单的卷积操作
  5. class SimpleConvNet(nn.Module):
  6.     def __init__(self):
  7.         super(SimpleConvNet, self).__init__()
  8.         # 定义一个卷积层,输入通道数1,输出通道数6,卷积核大小3x3
  9.         self.conv1 = nn.Conv2d(1, 6, kernel_size=3)
  10.         
  11.     def forward(self, x):
  12.         x = self.conv1(x)
  13.         return x
  14. # 初始化网络并输入一个4x4的张量
  15. net = SimpleConvNet()
  16. input_data = torch.randn(1, 1, 4, 4)
  17. output_data = net(input_data)
  18. print(output_data)
复制代码
2.2 激活函数(Activation Function)

激活函数的理论知识
激活函数在神经网络中引入非线性,从而使网络可以或许学习和表示复杂的非线性关系。激活函数的选择对网络的性能和训练效果有着重要影响。
常见激活函数

ReLU 激活函数的应用
  1. class ReLUNet(nn.Module):
  2.     def __init__(self):
  3.         super(ReLUNet, self).__init__()
  4.         self.conv1 = nn.Conv2d(1, 6, kernel_size=3)
  5.         self.conv2 = nn.Conv2d(6, 16, kernel_size=3)
  6.         self.fc1 = nn.Linear(16*4*4, 120)
  7.         self.fc2 = nn.Linear(120, 84)
  8.         self.fc3 = nn.Linear(84, 10)
  9.     def forward(self, x):
  10.         x = F.relu(self.conv1(x))
  11.         x = F.relu(self.conv2(x))
  12.         x = x.view(-1, 16*4*4)
  13.         x = F.relu(self.fc1(x))
  14.         x = F.relu(self.fc2(x))
  15.         x = self.fc3(x)
  16.         return x
  17. # 测试网络
  18. net = ReLUNet()
  19. input_data = torch.randn(1, 1, 8, 8)
  20. output_data = net(input_data)
  21. print(output_data)
复制代码
2.3 池化层(Pooling Layer)

池化层的理论知识
池化层主要用于对特性图举行下采样,淘汰数据的空间维度,从而降低计算复杂度和防止过拟合。池化层通过对局部区域举行汇聚操纵,保留特性图中的重要信息。
池化操纵的种类

池化层的作用

最大池化操纵
  1. class MaxPoolNet(nn.Module):
  2.     def __init__(self):
  3.         super(MaxPoolNet, self).__init__()
  4.         self.conv1 = nn.Conv2d(1, 6, kernel_size=3)
  5.         self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
  6.     def forward(self, x):
  7.         x = F.relu(self.conv1(x))
  8.         x = self.pool(x)
  9.         return x
  10. # 测试网络
  11. net = MaxPoolNet()
  12. input_data = torch.randn(1, 1, 8, 8)
  13. output_data = net(input_data)
  14. print(output_data)
复制代码
2.4 全毗连层(Fully Connected Layer)

全毗连层的理论知识
全毗连层是神经网络中一种重要的层,其作用是将前一层的全部神经元毗连到当前层的每一个神经元。这种毗连方式允许全毗连层举行高维度的特性组合。
全毗连层的特点

    2.特性组合:全毗连层通过对特性举行线性组合,可以或许学习到数据中的复杂特性。
    3.高维特性映射:全毗连层可以将低维特性映射到高维空间,加强模子的表达能力。
全毗连层的作用

全毗连层的实现
  1. class FullyConnectedNet(nn.Module):
  2.     def __init__(self):
  3.         super(FullyConnectedNet, self).__init__()
  4.         self.conv1 = nn.Conv2d(1, 6, kernel_size=3)
  5.         self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
  6.         self.fc1 = nn.Linear(6*3*3, 120)
  7.         self.fc2 = nn.Linear(120, 84)
  8.         self.fc3 = nn.Linear(84, 10)
  9.     def forward(self, x):
  10.         x = F.relu(self.conv1(x))
  11.         x = self.pool(x)
  12.         x = x.view(-1, 6*3*3)
  13.         x = F.relu(self.fc1(x))
  14.         x = F.relu(self.fc2(x))
  15.         x = self.fc3(x)
  16.         return x
  17. # 测试网络
  18. net = FullyConnectedNet()
  19. input_data = torch.randn(1, 1, 8, 8)
  20. output_data = net(input_data)
  21. print(output_data)
复制代码
2.5 归一化技能(Normalization Techniques)

归一化技能的理论知识
归一化技能用于改善神经网络训练的稳定性和加速收敛速度。通过对网络中的激活值或梯度举行归一化,可以或许有效减轻梯度消散和梯度爆炸问题。
常见归一化技能

归一化技能的作用

批量归一化(Batch Normalization)示例
  1. class BatchNormNet(nn.Module):
  2.     def __init__(self):
  3.         super(BatchNormNet, self).__init__()
  4.         self.conv1 = nn.Conv2d(1, 6, kernel_size=3)
  5.         self.bn1 = nn.BatchNorm2d(6)
  6.         self.conv2 = nn.Conv2d(6, 16, kernel_size=3)
  7.         self.bn2 = nn.BatchNorm2d(16)
  8.     def forward(self, x):
  9.         x = F.relu(self.bn1(self.conv1(x)))
  10.         x = F.relu(self.bn2(self.conv2(x)))
  11.         return x
  12. # 测试网络
  13. net = BatchNormNet()
  14. input_data = torch.randn(1, 1, 8, 8)
  15. output_data = net(input_data)
  16. print(output_data)
复制代码
第三章:经典CNN架构的演进与分析

3.1 LeNet-5

  1. INPUT => CONV => POOL => CONV => POOL => FC => FC => OUTPUT
复制代码

LeNet-5网络布局实现
  1. class LeNet5(nn.Module):
  2.     def __init__(self):
  3.         super(LeNet5, self).__init__()
  4.         self.conv1 = nn.Conv2d(1, 6, kernel_size=5)
  5.         self.conv2 = nn.Conv2d(6, 16, kernel_size=5)
  6.         self.fc1 = nn.Linear(16*4*4, 120)
  7.         self.fc2 = nn.Linear(120, 84)
  8.         self.fc3 = nn.Linear(84, 10)
  9.     def forward(self, x):
  10.         x = F.relu(self.conv1(x))
  11.         x = F.max_pool2d(x, 2)
  12.         x = F.relu(self.conv2(x))
  13.         x = F.max_pool2d(x, 2)
  14.         x = x.view(-1, 16*4*4)
  15.         x = F.relu(self.fc1(x))
  16.         x = F.relu(self.fc2(x))
  17.         x = self.fc3(x)
  18.         return F.log_softmax(x, dim=1)
  19. # 测试网络
  20. net = LeNet5()
  21. input_data = torch.randn(1, 1, 32, 32)
  22. output_data = net(input_data)
  23. print(output_data)
复制代码
3.2 AlexNet

  1. INPUT => CONV => POOL => CONV => POOL => CONV => CONV => CONV => POOL => FC => FC => FC => OUTPUT
复制代码
AlexNet的主要创新点包括:

AlexNet网络布局实现
  1. class AlexNet(nn.Module):
  2.     def __init__(self):
  3.         super(AlexNet, self).__init__()
  4.         self.conv1 = nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=2)
  5.         self.conv2 = nn.Conv2d(96, 256, kernel_size=5, stride=1, padding=2)
  6.         self.conv3 = nn.Conv2d(256, 384, kernel_size=3, stride=1, padding=1)
  7.         self.conv4 = nn.Conv2d(384, 384, kernel_size=3, stride=1, padding=1)
  8.         self.conv5 = nn.Conv2d(384, 256, kernel_size=3, stride=1, padding=1)
  9.         self.fc1 = nn.Linear(256*6*6, 4096)
  10.         self.fc2 = nn.Linear(4096, 4096)
  11.         self.fc3 = nn.Linear(4096, 1000)
  12.     def forward(self, x):
  13.         x = F.relu(self.conv1(x))
  14.         x = F.max_pool2d(x, 3, 2)
  15.         x = F.relu(self.conv2(x))
  16.         x = F.max_pool2d(x, 3, 2)
  17.         x = F.relu(self.conv3(x))
  18.         x = F.relu(self.conv4(x))
  19.         x = F.relu(self.conv5(x))
  20.      
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4