当前位置:首页 > 学习资源 > 讲师博文 > 卷积神经网络(CNN)必备基础知识

卷积神经网络(CNN)必备基础知识 时间:2025-06-09      来源:华清远见

在计算机视觉和深度学习领域,卷积神经网络(Convolutional Neural Networks, CNN) 是一类深度学习算法,广泛应用于计算机视觉、自然语言处理、语音识别等领域。作为深度学习的重要组成部分,CNN的核心思想是通过模仿生物视觉皮层的工作原理,有效地提取和学习图像或其他数据中的特征。

本文将带你快速掌握 CNN 的核心概念,并通过 PyTorch 实现一个经典的手写数字分类模型(MNIST),助你快速入门!

一、 神经网络基础

首先需要了解神经网络的基础知识。神经网络由多个神经元(或节点)组成,每个神经元通过连接传递信息,类似于生物神经系统的运作方式。最简单的神经网络结构包括输入层、隐藏层和输出层。

· 输入层:接受外部数据输入。

· 隐藏层:通过加权计算输入信号并进行非线性变换。

· 输出层:根据隐藏层的计算结果产生输出。

CNN 是一种特殊的神经网络,它在传统的全连接层基础上引入了卷积层、池化层等层次结构,专门设计用于处理具有格状结构的数据(如图像)。

二、CNN 的核心组成结构

1. 卷积层(Convolutional Layer)

· 使用可学习的卷积核(Filter)对输入进行滑动卷积操作,提取局部特征。

· 卷积操作的基本过程如下:

o 使用卷积核在输入数据上滑动,通过点乘计算卷积结果。

o 通过滑动窗口将卷积核应用于图像的不同区域,从而提取局部特征(如边缘、纹理等)。

o 结果称为特征图(Feature Map),是对输入数据局部区域的提取。

· 卷积的主要作用是提取边缘、纹理、形状等局部结构。

2. 池化层(Pooling Layer)

· 池化层用于减少数据的维度,从而降低计算复杂度并避免过拟合。最常用的池化方式有最大池化和平均池化。

o 最大池化:从池化窗口中选取最大的值作为输出。

o 平均池化:从池化窗口中选取平均值作为输出。

· 池化操作通过减少空间维度,使得CNN更具鲁棒性,能够识别图像中的重要特征,而不受小的平移和变形影响。

3. 激活函数

激活函数的作用是引入非线性特征,使得网络能够逼近复杂的函数。CNN中常用的激活函数包括ReLU(Rectified Linear Unit)、Sigmoid和Tanh等。

· ReLU:最常用的激活函数,定义为:ReLU(x)=max(0,x)

ReLU 函数具有较好的非线性特性,且能够避免梯度消失问题,因此广泛应用于现代深度神经网络中。

· 激活函数通过在卷积层和全连接层后进行非线性变换,增加了网络的表达能力。

4. 全连接层(Fully Connected Layer)

· 全连接层(Fully Connected Layer,简称FC)在CNN中通常位于网络的最后部分,用于将卷积和池化操作提取到的特征映射到最终的类别标签。全连接层的每个神经元都与上一层的所有神经元相连,因此参数较多,计算量较大。

三、卷积神经网络的工作流程

CNN的工作流程可以简要总结为以下几个步骤:

1. 输入图像:图像被输入到CNN的输入层。

2. 卷积层:卷积层使用卷积核对图像进行卷积操作,提取局部特征。

3. 池化层:池化层对卷积后的特征图进行下采样,减少数据维度。

4. 激活函数:激活函数对每一层的输出进行非线性变换。

5. 全连接层:将提取到的特征映射到最终的类别标签。

6. 输出层:网络输出分类结果或回归预测。

四、卷积神经网络的工作流程

卷积输出尺寸计算公式:

五、PyTorch 实现一个简单的 CNN 分类模型

我们将使用 MNIST 数据集(10类手写数字,图像大小为 28×28)来训练和测试一个基本的卷积神经网络。

安装依赖

pip install torch torchvision matplotlib

代码示例

import torch

import torch.nn as nn

import torch.optim as optim

from torchvision import datasets, transforms

from torch.utils.data import DataLoader

# 设置运行设备

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

# 数据预处理:转为Tensor,并进行归一化

transform = transforms.Compose([

    transforms.ToTensor(),

    transforms.Normalize((0.1307,), (0.3081,))

])

# 加载 MNIST 数据集

train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True)

test_dataset  = datasets.MNIST(root='./data', train=False, transform=transform)

train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)

test_loader  = DataLoader(test_dataset, batch_size=1000, shuffle=False)

# 定义 CNN 模型

class SimpleCNN(nn.Module):

    def __init__(self):

        super(SimpleCNN, self).__init__()

        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)

        self.pool  = nn.MaxPool2d(2)

        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)

        self.fc1   = nn.Linear(320, 50)

        self.fc2   = nn.Linear(50, 10)

 

    def forward(self, x):

        x = self.pool(torch.relu(self.conv1(x)))  # 输出大小:(10, 12, 12)

        x = self.pool(torch.relu(self.conv2(x)))  # 输出大小:(20, 4, 4)

        x = x.view(-1, 320)                       # 展平

        x = torch.relu(self.fc1(x))

        x = self.fc2(x)

        return x

# 模型训练配置

model = SimpleCNN().to(device)

criterion = nn.CrossEntropyLoss()

optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练模型

for epoch in range(1, 6):

    model.train()

    for data, target in train_loader:

        data, target = data.to(device), target.to(device)

        optimizer.zero_grad()

        output = model(data)

        loss = criterion(output, target)

        loss.backward()

        optimizer.step()

    print(f'Epoch {epoch}, Loss: {loss.item():.4f}')

 

# 模型测试

model.eval()

correct = 0

with torch.no_grad():

    for data, target in test_loader:

        data, target = data.to(device), target.to(device)

        output = model(data)

        pred = output.argmax(dim=1)

        correct += pred.eq(target).sum().item()

 

accuracy = 100. * correct / len(test_loader.dataset)

print(f'\nTest Accuracy: {accuracy:.2f}%')

总结

卷积神经网络(CNN)通过模拟生物视觉系统的工作方式,有效地提取图像等数据中的特征,广泛应用于计算机视觉和其他深度学习任务。理解CNN的基本构成,包括卷积操作、池化操作、激活函数和全连接层,是掌握这一技术的基础。

随着深度学习研究的不断深入,CNN在多个领域的应用也不断扩大,不仅限于图像处理,也已延伸到语音识别、自然语言处理等多种领域。掌握CNN的基础知识,能为进一步深入学习和研究深度学习奠定良好的基础。

 

上一篇:联邦学习在多源数据AI中的应用:开启隐私保护新时代

下一篇:基于AI的嵌入式语音交互技术

戳我查看嵌入式每月就业风云榜

点我了解华清远见高校学霸学习秘籍

猜你关心企业是如何评价华清学员的

干货分享
相关新闻
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2024 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部