神经网络与深度学习课程第5周总结

1. 深度学习的必要性

深度学习是一种机器学习技术,通过模拟人脑处理和识别模式的方式来解决复杂问题。它主要基于多层的神经网络结构,能够自动从大数据中提取特征,减少对人工特征设计的依赖。这种技术特别适合处理大规模数据集,改善了传统算法在图像识别、自然语言处理等领域的性能。随着技术的进步,深度学习在适应新数据和任务方面显示出显著优势,成为推动现代人工智能发展的核心技术。

2. 卷积神经网络基础

2.1 卷积神经网络背景

卷积神经网络(CNN)是一种特殊类型的深度学习模型,主要用于处理具有网格结构的数据,如图像。CNN的发展始于20世纪80年代,由神经网络研究者们推动,但直到1998年,Yann LeCun及其同事通过引入LeNet-5网络架构,成功应用于数字识别任务,才真正证明了其潜力。此后,随着计算能力的提升和大数据的可用性,CNN开始在图像和视频分析、医学图像处理等领域显示出强大的性能。

卷积神经网络示意图

CNN的核心思想是利用卷积层自动从图像中提取空间层次的特征。不同于传统神经网络必须依赖手工特征提取,CNN能够通过学习得到高效的特征表示。卷积层通过滤波器(或称为卷积核)扫描整个图像,捕捉局部依赖关系和图像的空间层次结构。这些特性使CNN在处理视觉任务时,比其他深度学习模型更加高效和准确。随着技术的发展,CNN不仅在视觉领域取得成功,也逐渐被应用于语音识别和自然语言处理等其他领域,成为深度学习研究和应用的重要基石。

2.2 卷积神经网络基本概念

2.2.1 特征提取

卷积神经网络(CNN)的核心功能是自动进行特征提取,这是其在图像处理领域表现卓越的关键。在传统机器学习模型中,特征提取往往需要专门的领域知识来手动设计。而CNN通过其卷积层自动从输入数据中提取重要特征,无需人工干预。卷积层使用一系列的过滤器(或称为卷积核),这些过滤器在输入数据上滑动,识别局部特征如边缘、角点等,并将这些信息传递到网络的更深层次以捕获更抽象的特征,从而形成一个有效的数据表示。

2.2.2 卷积神经网络结构

卷积神经网络通常包括几种主要的层类型:卷积层、池化层、全连接层和激活层。卷积层负责提取输入图像的特征,池化层则用于降低特征的空间维度,减少参数数量和计算复杂性,同时保持特征的重要信息。全连接层位于网络的末端,将前面层次提取的特征汇总,用于分类或回归任务。激活层如ReLU函数,用于引入非线性,使得网络可以学习更复杂的模式。整体上,这些层相互作用,形成一个强大的特征学习和决策制定机制。

3. LeNet-5网络

3.1 LeNet-5网络基本概念

LeNet-5是一种早期的卷积神经网络(CNN),由Yann LeCun于1998年设计,主要用于手写数字识别。这种网络标志着深度学习技术在图像识别领域的初步应用。

LeNet-5的结构包含7层,不包括输入层。输入层接收大小为32x32的图像。首先是一个卷积层,使用6个大小为5x5的卷积核,输出6个特征图(feature map)。接下来是一个平均池化层,用于降低特征图的空间分辨率。第二个卷积层包含16个卷积核,进一步提取特征,并由第二个池化层处理。然后是两个全连接层,最终通过一个softmax层输出10个类别的概率,对应于10个数字(0到9)。

LeNet-5的设计非常高效,通过逐层提取更加抽象的特征,逐步缩减图像的空间大小,同时保留关键信息,这使得网络能够在较低的计算成本下实现高效的图像识别。 LeNet-5不仅在数字识别上表现出色,而且为后续更复杂的网络结构如AlexNet和VGG提供了框架和启示。

LeNet-5网络基本结构

3.2 matlab代码实现

由于作者比较熟悉Matlab,所以在Matlab中实现一个简单的示例代码,该代码构建了LeNet-5网络的结构,并可以用于训练和测试手写数字识别任务。需要在Matlab环境中已安装了Deep Learning Toolbox。

% 加载Matlab自带的手写数字数据集
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos','nndatasets','DigitDataset');
digitData = imageDatastore(digitDatasetPath, ...
    'IncludeSubfolders',true,'LabelSource','foldernames');

% 分割数据集为训练集和验证集
trainNumFiles = 750;
[trainingImages, validationImages] = splitEachLabel(digitData, trainNumFiles, 'randomize');

% 定义LeNet-5网络结构
layers = [
    imageInputLayer([28 28 1]) % 输入层,调整图像大小为28x28

    convolution2dLayer(5,6,'Padding',2) % 第一个卷积层,6个5x5的滤波器,边缘填充2
    batchNormalizationLayer
    reluLayer % 激活层

    averagePooling2dLayer(2,'Stride',2) % 第一个池化层,2x2区域,步长2

    convolution2dLayer(5,16) % 第二个卷积层,16个5x5的滤波器
    batchNormalizationLayer
    reluLayer % 激活层

    averagePooling2dLayer(2,'Stride',2) % 第二个池化层,2x2区域,步长2

    fullyConnectedLayer(120) % 第一个全连接层
    reluLayer % 激活层

    fullyConnectedLayer(84) % 第二个全连接层
    reluLayer % 激活层

    fullyConnectedLayer(10) % 输出层,10类输出
    softmaxLayer % Softmax激活函数
    classificationLayer]; % 分类层

% 设置训练选项
options = trainingOptions('sgdm', ...
    'InitialLearnRate',0.01, ...
    'MaxEpochs',10, ...
    'Shuffle','every-epoch', ...
    'ValidationData',validationImages, ...
    'ValidationFrequency',30, ...
    'Verbose',false, ...
    'Plots','training-progress');

% 训练网络
net = trainNetwork(trainingImages,layers,options);

% 使用训练好的网络进行预测和评估
YPred = classify(net,validationImages);
YValidation = validationImages.Labels;

accuracy = sum(YPred == YValidation)/numel(YValidation);
fprintf('Accuracy: %.2f%%\n', accuracy * 100);

这段代码首先加载并准备数据集,定义了LeNet-5网络的结构,并设置了训练的参数。之后,使用trainNetwork函数训练模型,并评估其在验证集上的性能。

  • 13
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值