Matlab深度学习(四)——AlexNet卷积神经网络

网络搭建参考:手撕 CNN 经典网络之 AlexNet(理论篇)-CSDN博客       

        在实际工程应用中,构建并训练一个大规模的卷积神经网络是比较复杂的,需要大量的数据以及高性能的硬件。如果通过训练好的典型网络稍加改进,用少量数据进行训练并加以应用

4.1 什么是迁移学习

        TransferLearning,把一个领域的知识迁移到另一个领域。基于共享参数的迁移学习研究如何找到源数据和目标数据的空间模型之间的共同参数或先验分布。通过修改一个通过完整训练的深度卷积神经网络模型最后几层连接层,再使用针对特定问题而建立的小数据集进行训练,使其能够适用于一个新的问题。

4.2 AlexNet

        该模型主要由卷积层、池化层和全连接层组成,并引入了一些被广泛应用的特性和技巧。AlexNet包含一个输入层,一个输出层,一个卷积层,3个下采样(池化)层,2个全连接层。其中,从输入层到卷积层1开始,之后的每一层都被分成两个相同的结构进行计算,因为AlexNet将计算平均分配到了两块GPU进行。具体的架构细节,在下面给出

4.3 基于AlexNet实现迁移学习

        Matlab有自带的封装好的工具箱可以使用,但是问题来了,作为几年前免费版的使用者,我的MATLAB不允许我进行下载,这该怎么办?花钱是不可能的,用工具箱写一个得了,强化下理解。我们上面说过, AlexNet 有 8 层权重层,包括 5 层卷积层和 3 层全连接层(FC 层),并引入了一些重要的创新,包括激活函数、Dropout 正则化和重叠池化。它通过增加网络的深度和宽度,结合 GPU 加速,极大提升了 CNN 的能力。当我们训练好了类似的模型,就可以对尾部的几层进行替换。

4.4 AlexNet的搭建

4.4.1 卷积层(C1)

        该层的处理流程是:卷积-->ReLU-->局部响应归一化(LRN)-->池化。 

        卷积:输入是227x227x3,使用96个11x11x3的卷积核进行卷积,padding=0,stride=4,根据公式:(input_size + 2 * padding - kernel_size) / stride + 1=(227+2*0-11)/4+1=55,得到输出是55x55x96。 尝试使用LeNet的红绿灯数据进行训练,但是量大,怕GPU跑坏了,所以尝试改进使用手写数字进行识别。

        ReLU:将卷积层输出的FeatureMap输入到ReLU函数中。 

        局部响应归一化:局部响应归一化层简称LRN,是在深度学习中提高准确度的技术方法。一般是在激活、池化后进行。LRN对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。归一化的模型如下:

    

        a为归一化之前的神经元,b为归一化之后的神经元;N是卷积核的个数,也就是生成的FeatureMap的个数;k,α,β,n是超参数,论文中使用的值是k=2,n=5,α=0.0001,β=0.75。

我们根据架构搭建出这个模型,包括5层卷积层,添加为3个全连接层,添加了Softmax层和分类层

        池化:使用3x3,stride=2的池化单元进行最大池化操作(max pooling)。注意这里使用的是重叠池化,即stride小于池化单元的边长。根据公式:(55+2*0-3)/2+1=27,每组得到的输出为27x27x48。

4.4.2 卷积层(C2)

        该层的处理流程是:卷积-->ReLU-->局部响应归一化(LRN)-->池化。 

        卷积:两组输入均是27x27x48,各组分别使用128个5x5x48的卷积核进行卷积,padding=2,stride=1,根据公式:(input_size + 2 * padding - kernel_size) / stride + 1=(27+2*2-5)/1+1=27,得到每组输出是27x27x128。 

        ReLU:将卷积层输出的FeatureMap输入到ReLU函数中。 

        局部响应归一化:使用参数k=2,n=5,α=0.0001,β=0.75进行归一化。每组输出仍然是27x27x128。 

        池化:使用3x3,stride=2的池化单元进行最大池化操作(max pooling)。注意这里使用的是重叠池化,即stride小于池化单元的边长。根据公式:(27+2*0-3)/2+1=13,每组得到的输出为13x13x128。

4.4.3 卷积层(C3)

该层的处理流程是: 卷积-->ReLU 

卷积:输入是13x13x256,使用384个3x3x256的卷积核进行卷积,padding=1,stride=1,根据公式:(input_size + 2 * padding - kernel_size) / stride + 1=(13+2*1-3)/1+1=13,得到输出是13x13x384。 

ReLU:将卷积层输出的FeatureMap输入到ReLU函数中。将输出其分成两组,每组FeatureMap大小是13x13x192,分别位于单个GPU上。

4.4.4 卷积层(C4)

该层的处理流程是:卷积-->ReLU 

卷积:两组输入均是13x13x192,各组分别使用192个3x3x192的卷积核进行卷积,padding=1,stride=1,根据公式:(input_size + 2 * padding - kernel_size) / stride + 1=(13+2*1-3)/1+1=13,得到每组FeatureMap输出是13x13x192。 

ReLU:将卷积层输出的FeatureMap输入到ReLU函数中。

4.4.5 卷积层(C5)

该层的处理流程是:卷积-->ReLU-->池化 

卷积:两组输入均是13x13x192,各组分别使用128个3x3x192的卷积核进行卷积,padding=1,stride=1,根据公式:(input_size + 2 * padding - kernel_size) / stride + 1=(13+2*1-3)/1+1=13,得到每组FeatureMap输出是13x13x128。 

ReLU:将卷积层输出的FeatureMap输入到ReLU函数中。 

池化:使用3x3,stride=2的池化单元进行最大池化操作(max pooling)。注意这里使用的是重叠池化,即stride小于池化单元的边长。根据公式:(13+2*0-3)/2+1=6,每组得到的输出为6x6x128。

4.4.6 全连接层(FC6)

该层的流程为:(卷积)全连接 -->ReLU -->Dropout (卷积)

全连接:输入为6×6×256,使用4096个6×6×256的卷积核进行卷积,由于卷积核尺寸与输入的尺寸完全相同,即卷积核中的每个系数只与输入尺寸的一个像素值相乘一一对应,根据公式:(input_size + 2 * padding - kernel_size) / stride + 1=(6+2*0-6)/1+1=1,得到输出是1x1x4096。既有4096个神经元,该层被称为全连接层。 

ReLU:这4096个神经元的运算结果通过ReLU激活函数中。 

Dropout:随机的断开全连接层某些神经元的连接,通过不激活某些神经元的方式防止过拟合。4096个神经元也被均分到两块GPU上进行运算。

4.4.7 全连接层(FC7)

该层的流程为:(卷积)全连接 -->ReLU -->Dropout

全连接:输入为4096个神经元,输出也是4096个神经元(作者设定的)。

ReLU:这4096个神经元的运算结果通过ReLU激活函数中。

Dropout:随机的断开全连接层某些神经元的连接,通过不激活某些神经元的方式防止过拟合。

4096个神经元也被均分到两块GPU上进行运算。

4.4.8 输出层(Output layer)

该层的流程为:(卷积)全连接 -->Softmax 

全连接:输入为4096个神经元,输出是1000个神经元。这1000个神经元即对应1000个检测类别。 

Softmax:这1000个神经元的运算结果通过Softmax函数中,输出1000个类别对应的预测概率值。

设计出来的C1池化后出来的不太一样,现在没有确定其影响

4.5 训练效果

        训练的时候需要注意,最后的全连接层是需要设我们需要的输出的

 

下面给出MATLAB代码

%% 步骤1:加载交通灯数据样本
imds = imageDatastore('Traffic Light Samples', ...
    'IncludeSubfolders', true, ...
    'LabelSource', 'foldernames');

% 将数据集划分为 70% 训练集和 30% 验证集
[imdsTrain, imdsValidation] = splitEachLabel(imds, 0.7);

% 图像大小调整到 AlexNet 的输入尺寸
inputSize = [227 227 3];
augimdsTrain = augmentedImageDatastore(inputSize, imdsTrain, ...
    'OutputSizeMode', 'resize');
augimdsValidation = augmentedImageDatastore(inputSize, imdsValidation, ...
    'OutputSizeMode', 'resize');

%% 步骤2:定义 AlexNet 风格的架构并加入局部响应归一化(LRN)
layers = [
    imageInputLayer([227 227 3], 'Name', 'input', 'Normalization', 'rescale-zero-one')  % 将输入归一化到 [0, 1]

    % 第一卷积层 + 局部响应归一化 + ReLU + 最大池化
    convolution2dLayer(11, 96, 'Stride', 4, 'Padding', 'same', 'Name', 'conv1')
    crossChannelNormalizationLayer(5, 'Name', 'lrn1')  % LRN 层,邻域深度为 5
    reluLayer('Name', 'relu1')
    maxPooling2dLayer(3, 'Stride', 2, 'Name', 'pool1')
    
    % 第二卷积层 + 局部响应归一化 + ReLU + 最大池化
    convolution2dLayer(5, 256, 'Padding', 'same', 'Name', 'conv2')
    crossChannelNormalizationLayer(5, 'Name', 'lrn2')  % LRN 层
    reluLayer('Name', 'relu2')
    maxPooling2dLayer(3, 'Stride', 2, 'Name', 'pool2')
    
    % 第三卷积层 + ReLU
    convolution2dLayer(3, 384, 'Padding', 'same', 'Name', 'conv3')
    reluLayer('Name', 'relu3')
    
    % 第四卷积层 + ReLU
    convolution2dLayer(3, 384, 'Padding', 'same', 'Name', 'conv4')
    reluLayer('Name', 'relu4')
    
    % 第五卷积层 + 最大池化
    convolution2dLayer(3, 256, 'Padding', 'same', 'Name', 'conv5')
    reluLayer('Name', 'relu5')
    maxPooling2dLayer(3, 'Stride', 2, 'Name', 'pool5')
    
    % 全连接层
    fullyConnectedLayer(4096, 'Name', 'fc6')
    reluLayer('Name', 'relu6')
    dropoutLayer(0.5, 'Name', 'dropout1')
    
    fullyConnectedLayer(4096, 'Name', 'fc7')
    reluLayer('Name', 'relu7')
    dropoutLayer(0.5, 'Name', 'dropout2')
    
    fullyConnectedLayer(numel(categories(imdsTrain.Labels)), 'Name', 'fc8')
    softmaxLayer('Name', 'softmax')
    classificationLayer('Name', 'output')];

%% 步骤3:配置训练选项
options = trainingOptions('sgdm', ...
    'MiniBatchSize', 15, ...
    'MaxEpochs', 5, ...
    'InitialLearnRate', 0.001, ...
    'LearnRateSchedule', 'piecewise', ...
    'LearnRateDropFactor', 0.1, ...
    'LearnRateDropPeriod', 20, ...
    'Shuffle', 'every-epoch', ...
    'ValidationData', augimdsValidation, ...
    'ValidationFrequency', 3, ...
    'Plots', 'training-progress', ...
    'ExecutionEnvironment', 'auto', ...
    'Verbose', true);

%% 步骤4:训练网络
net = trainNetwork(augimdsTrain, layers, options);

%% 步骤5:测试与评估
YPredicted = classify(net, augimdsValidation);  % 使用网络对验证集进行预测
accuracy = mean(YPredicted == imdsValidation.Labels);  % 计算分类准确率
disp(['Validation Accuracy: ', num2str(accuracy)]);

当然这个结构有点庞大,所以运行需要比较长的时间和硬件资源,所以我们也可以进行删减,迁移学习得到的效果如下:

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/922492.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《Python基础》之循环结构

目录 简介 一、for循环 1、基本语法与作用 2、使用 range() 函数配合 for 循环 3、嵌套的for循环 二、while循环 1、基本语法与作用 2、while 循环嵌套 (1)、while循环与while循环嵌套 (2)、while循环与for循环嵌套 简介 …

深入探索JMeter bin目录中的Properties文件:优化性能测试的关键

引言 在现代软件开发中,性能测试是确保应用质量和用户体验的重要环节。Apache JMeter作为一款流行的开源性能测试工具,提供了丰富的功能来模拟各种用户行为和负载情况。本文将深入探讨JMeter中的Properties(属性)功能&#xff0c…

第三十九篇 ShuffleNet V1、V2模型解析

摘要 ShuffleNet V1 ShuffleNet V1是由旷视科技(Megvii,又称Face)在2017年底提出的一种轻量级卷积神经网络架构。该网络专为移动设备和边缘计算环境设计,旨在以较低的计算资源实现高效的图像分类和其他计算机视觉任务。 特点与…

JavaScript练习——文本与图形

要求实现下面这个效果&#xff1a; 观察图片&#xff0c;我们的需求如下&#xff1a; 准备画布和上下文&#xff1a;在开始绘制之前&#xff0c;需要有一个HTML5 <canvas> 元素&#xff0c;并且获取其绘图上下文&#xff08;context&#xff09;&#xff0c;这是进行绘图…

[ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案

问题log /tmp/ccByifPx.o: In function main: read.c:(.text0x1a): undefined reference to shm_open read.c:(.text0xd9): undefined reference to shm_unlink collect2: error: ld returned 1 exit status 程序代码 #include <stdio.h> #include <stdlib.h> #…

【redis】哈希类型详解

哈希类型详解 一、哈希类型的介绍二、哈希类型的常用命令2.1 HSET2.2 HGET2.3 HEXISTS2.4 HDEL2.5 HKEYS2.6 HAVLS2.7 HGETALL2.8 HMGET2.9 HLEN2.10 HSETNX2.11 HINCRBY2.12 HINCRBYFLOAT 三、哈希类型命令小结四、哈希类型内部编码五、哈希类型应用场景 一、哈希类型的介绍 …

单片机GPIO的8种工作模式

1、输入 GPIO_MODE_AIN:模拟输入 GPIO_MODE_IN_FLOATING:浮空输入 GPIO_MODE_IPD:下拉输入 GPIO_MODE_IPU:上拉输入 2、输出 GPIO_MODE_OUT_OD:开漏输出&#xff08;特殊情况使用&#xff09; GPIO_MODE_OUT_PP&#xff1a;推挽输出-----点灯&#xff08;通用&#…

YOLO-World解读:零基础学习开放世界模型

文章目录 一、摘要二、引言相关工作方法预训练公式模型架构可重新参数化的视觉-语言路径聚合网络&#xff08;RepVL-PAN&#xff09; 3.4 预训练方案 实验YOLO-World: 利用多样化数据集进行开放词汇对象检测的预训练方法YOLO-World: LVIS数据集上的零样本性能评估YOLO-World: 预…

深入理解下oracle 11g block组成

深层次说&#xff0c;oracle数据库的最少组成单位应该是块&#xff0c;一般默认情况下&#xff0c;oracle数据库的块大小是8kb&#xff0c;其中存储着我们平常所需的数据。我们在使用过程中&#xff0c;难免会疑问道&#xff1a;“oracle数据块中到底是怎样组成的&#xff0c;平…

《智慧教育实时数据分析推荐项目》详细分析

一、项目介绍 1、背景介绍 在互联网、移动互联网的带动下&#xff0c;教育逐渐从线下走向线上&#xff0c;在线教育近几年一直处于行业的风口浪尖&#xff0c;那随着基础设施的不断完善&#xff0c;用户需求也发生不少变化&#xff0c;因此传统教育机构、新兴互联网企业都在探…

stable-diffusion-webui 安装

一、安装 Python 3.11.8 (略) 二、下载stable-diffusion-webui cd E:\AITOOLS git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui 下载完成后&#xff1a; cd E:\AITOOLS\stable-diffusion-webui #运行 webui-user.bat 我们会发现要下载一下&#xff1a…

【Seed-Labs 2.0】The Kaminsky Attack Lab

说在前面 本实验属为Seed-Labs 的DNS LAB 中的第二个实验&#xff0c;是第一个实验的延伸&#xff0c;从攻击者和受害者同一个LAN中变成不在同一个LAN中&#xff0c;该系列一共有五个实验: Local DNS Attack LabThe Kaminsky Attack LabDNS Rebinding Attack LabDNS Infrastr…

类的实例化

文章目录 一、实例化2.1 实例化概念 一、实例化 2.1 实例化概念 用类类型在物理内存中创建对象的过程&#xff0c;称为类实例化出对象。 类是对象进行⼀种抽象描述&#xff0c;是⼀个模型⼀样的东西&#xff0c;限定了类有哪些成员变量&#xff0c;这些成员变量只是声明&…

《图像梯度与常见算子全解析:原理、用法及效果展示》

简介:本文深入探讨图像梯度相关知识&#xff0c;详细介绍图像梯度是像素灰度值在不同方向的变化速度&#xff0c;并以 “pig.JPG” 图像为例&#xff0c;通过代码展示如何选取图像部分区域并分析其像素值以论证图像梯度与边缘信息的关联。接着全面阐述了 Sobel 算子&#xff0c…

解决IDEA报包不存在,但实际存在的问题

前言 最近在把一个亿老项目交割给同事&#xff0c;同事在导入项目运行时遇到IDEA报包不存在&#xff0c;但实际存在的问题&#xff0c;最终通过以下方式解决 现象 在IDEA里启动运行项目&#xff0c;报某个类有问题&#xff0c;引入的包不存在。 点击这个引入的包&#xff0c;可…

C++(进阶) 第1章 继承

C&#xff08;进阶) 第1章 继承 文章目录 前言一、继承1.什么是继承2.继承的使用 二、继承方式1.private成员变量的&#xff08;3种继承方式&#xff09;继承2. private继承方式3.继承基类成员访问⽅式的变化 三、基类和派生类间的转换1.切片 四、 继承中的作⽤域1.隐藏规则&am…

resnet50,clip,Faiss+Flask简易图文搜索服务

一、实现 文件夹目录结构&#xff1a; templates -----upload.html faiss_app.py 前端代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…

SFP+光模块介绍

SFP光模块介绍 1 SFP光模块简介(Small Form -Factor Pluggable)2 光模块管脚定义 1 SFP光模块简介(Small Form -Factor Pluggable) 光模块&#xff08;Optical Module&#xff09;由光电子器件、功能电路和光接口等组成&#xff0c;光电子器件包括激光发射器(Laser Transmitte…

Redis——Raft算法

Raft使用较为广泛的强一致性、去中心化、高可用的分布式协议&#xff0c;即使在网络、节点故障等情况下&#xff0c;多个节点依然能达到一致性。 其中redis、etcd等都用到了这种算法 在Redis集群中&#xff0c;采取的主从复制结构&#xff0c;当主节点宕机后&#xff0c;哨兵会…

【网络系统管理】2023年全国职业院校技能大赛:组策略--10套题组合--3

11、阻止Microsoft账户登录 (1)计算机配置\策略\Windows设置\安全设置\本地策略\安全选项 12、允许更改系统时间 (1)计算机配置\策略\Windows设置\安全设置\本地策略\用户权限分配 13、可以登录本机的用户 (1)计算机配置\策略\Windows设置\安全设置\本地策略\用户权限…