MATLAB深度学习(二)——如何训练一个卷积神经网路

2.1 基本概念

从数学的角度看,机器学习的目标是建立输入和输出的函数关系,相当于 y = F(x)的过程。F(x)就是我们所说的模型,对于使用者来说,这个模型就是一个黑箱,我们不知道其具体的结构,但是给定一个输出,就可以得到我们想要的结果。F(x)的获得,我们通过的是实验法啊,经过大量数据训练出来的,我们定义一个损失函数L(x),记录真实输出与模型输出的偏差,通过数据的迭代使得损失函数L(x)达到最小。

在机器学习中,我们需要理解概念的术语的解释:

|------|------------------|
| 训练样本 | 用于训练的数据 |
| 训练 | 用于训练样本特征统计和归纳的过程 |
| 模型 | 总结出的规律、标准 |
| 验证 | 用于验证数据集评价模型是否准确 |
| 超参数 | 学习速率、迭代层神经元个数等 |
| 参数 | 权重、偏置等 |
| 泛化 | 模型对新样本的适应力 |

过拟合和欠拟合是常见的现象。但是需要说明的是,数据没有过多的这种说法,所谓的过拟合,是模型在训练集上的表现过于优异,模拟考100分你考了100分,99分,但是验证集上,相当于实际考试中你考了40分,换一场考试,换一个新的数据,导致严重误判。欠拟合就是数据过少,模型无法归纳出共性,在训练集和测试集表现都很差。

2.2 实例需求与实现步骤

第一章里面我们用了工具箱来实现,这一章我们强化一下,用m文件编写,我们构建训练一个三层卷积神经网络,对输入的图像进行预测,计算器预测准确率和RMSE均方根误差。实现步骤具体参考第一章。

Matlab 复制代码
%% 步骤1:加载和显示图像数据
[XTrain,~,YTrain] = digitTrain4DArrayData;                       
[XValidation,~,YValidation] = digitTest4DArrayData;              

% 随机显示20幅训练图像
numTrainImages = numel(YTrain);                                  
figure
idx = randperm(numTrainImages,20);
for i = 1:numel(idx)
    subplot(4,5,i)    
    imshow(XTrain(:,:,:,idx(i)))
    drawnow
end

%% 步骤2:构建卷积神经网络
layers = [
    imageInputLayer([28 28 1])   %输入 像素为28*28,1通道                    

    convolution2dLayer(3,8,'Padding','same')   %卷积层1 卷积核大小为3*3,卷积核个数为8,卷积方式用0填充          
    batchNormalizationLayer      %归一化 加快训练网络时的收敛速度                           
    reluLayer                    %ReLU函数 激活函数                              
    averagePooling2dLayer(2,'Stride',2)         %平均池化  池化区域为2*2,步长为2              

    convolution2dLayer(3,16,'Padding','same')   %第二          
    batchNormalizationLayer                                        
    reluLayer                                                
    averagePooling2dLayer(2,'Stride',2)                        

    convolution2dLayer(3,32,'Padding','same')   %第三               
    batchNormalizationLayer                                    
    reluLayer                                               

    dropoutLayer(0.2)      %随机将20%的输入置0,防止过拟合                                     
    fullyConnectedLayer(1)         %全连接层输出个数为1                           
    regressionLayer ];         %用于预测结果                               

%% 步骤3:配置训练选项
miniBatchSize = 128;  % 设置小批量的大小为 128
validationFrequency = floor(numel(YTrain)/miniBatchSize);  % 计算验证频率,根据训练数据的数量除以 miniBatchSize 并取整
% trainingOptions 用于配置网络训练的选项
options = trainingOptions('sgdm', ...  % 选择随机梯度下降动量法(SGDM)作为优化器
    'MiniBatchSize',miniBatchSize, ...  % 指定每次训练的小批量大小为 miniBatchSize
    'MaxEpochs',30, ...  % 设置训练的最大轮数为 30
    'InitialLearnRate',0.001, ...  % 设置初始学习率为 0.001
    'LearnRateSchedule','piecewise', ...  % 学习率调整方式为分段调整
    'LearnRateDropFactor',0.1, ...  % 每次学习率下降时,下降的比例为 0.1
    'LearnRateDropPeriod',20, ...  % 每 20 个周期调整一次学习率
    'Shuffle','every-epoch', ...  % 每轮训练后随机打乱数据
    'ValidationData',{XValidation,YValidation}, ...  % 指定验证数据为 XValidation 和 YValidation
    'ValidationFrequency',validationFrequency, ...  % 设置验证的频率
    'Plots','training-progress', ...  % 启用训练进度的动态绘图
    'Verbose',true);  % 打印详细的训练信息
                                

%% 步骤4:训练网络
net = trainNetwork(XTrain,YTrain,layers,options); % X训练集 Y测试集 网络结构 训练设置

%% 步骤5:测试与评估
YPredicted = predict(net,XValidation);  % 使用训练好的网络对验证集数据进行预测
predictionError = YValidation - YPredicted;  % 计算预测误差(真实值减去预测值)

% 计算准确率
thr = 10;  % 设置误差阈值为 10
numCorrect = sum(abs(predictionError) < thr);  % 统计误差绝对值小于阈值的预测数量
numValidationImages = numel(YValidation);  % 获取验证集样本总数
Accuracy = numCorrect/numValidationImages;  % 准确率计算为预测正确的样本数除以总样本数

% 计算RMSE(均方根误差)的值
squares = predictionError.^2;  % 计算误差的平方
RMSE = sqrt(mean(squares));  % 求均值后开平方,得到均方根误差

训练选项设置,读者可以进行打开帮助查看,里面还有很多内容,可以进行自动补全。

因为我有GPU,这里就改成GPU进行训练了

相关推荐
只是甲7 小时前
Text2SQL 系列博客 02:技术原理深度剖析 - 从自然语言到 SQL 的完整链路
人工智能·text2sql·nl2sql·ai agent·自助数据分析·data agent·agentic 数据洞察
懷淰メ7 小时前
【AI赋能】基于PyQt+YOLO+DeepSeek水上漂浮物检测系统(详细介绍)
人工智能·yolo·目标检测·计算机视觉·pyqt·漂浮物·水上漂浮物
EQUINOX17 小时前
【论文精读】| CLIP精读
大数据·人工智能
PC2005-cloud8 小时前
博文已索引但不展示:一次 Bing SEO 问题排查记录
服务器·人工智能
weixin_408099678 小时前
2026 图片去文字 API 实战:AI一键去除图片文字(附 Python / Java / PHP / JS 完整代码)
人工智能·api接口·图片去水印·石榴智能·ai图像修复·图片去文字
幻影123!8 小时前
从零训练一个会下五子棋的AI
python·深度学习·神经网络·强化学习·五子棋·alpha zero·mokugo
greenbbLV8 小时前
2026节日慰问品政策解读:合规标准升级与福利行业新趋势
人工智能·节日
奈斯先生Vector8 小时前
告别工具碎片化:基于 Nano Banana 全模态 AI 聚合架构搭建“文本-图像-视频”自动化协同生产线
运维·数据库·人工智能·架构·自动化·aigc·音视频
领麦微红外8 小时前
国产MEMS红外测温传感器:传感器+算法+产品级出厂标定一站式交付模式深度解读
人工智能·硬件工程·产品经理
mingo_敏9 小时前
DeepAgents : 检索(Retrieval)
人工智能·深度学习·langchain