龙空技术网

使用MATLAB神经网络生成手写数字识别程序

sunbhtt 84

前言:

现在小伙伴们对“matlab中network尺寸”都比较注重,各位老铁们都想要学习一些“matlab中network尺寸”的相关内容。那么小编也在网络上搜集了一些有关“matlab中network尺寸””的相关资讯,希望朋友们能喜欢,同学们快快来了解一下吧!

程序

% 读取MATLAB自带数字图像数据集,数据集有10000幅0-9图像,各数字有1000幅图像digitDatasetPath = fullfile(matlabroot,'toolbox','nnet', ...    'nndemos','nndatasets','DigitDataset');imds = imageDatastore(digitDatasetPath, ...    'IncludeSubfolders',true,'LabelSource','foldernames');% 将每个标签文件夹中的文件随机拆分为两组,750个为imdsTrain,其余为imdsTestnumTrainingFiles = 750;[imdsTrain,imdsTest] = splitEachLabel(imds,numTrainingFiles,'randomize');% 定义一个简单的三层CNN网络结构layers = [    % 输入层,接收28×28×1的灰度图像    imageInputLayer([28 28 1])        % 卷积层,使用3×3的卷积核,输出8个特征图,保持边界不变    convolution2dLayer(3,8,'Padding','same')    % 归一化层,对卷积层的输出进行归一化处理,提高训练效率和泛化能力    batchNormalizationLayer    % 激活层,使用ReLU函数作为激活函数,增加非线性特征    reluLayer        % 池化层,使用2×2的最大池化核,步长为2,降低特征图的尺寸和参数数量    maxPooling2dLayer(2,'Stride',2)        % 卷积层,使用3×3的卷积核,输出16个特征图,保持边界不变    convolution2dLayer(3,16,'Padding','same')    % 归一化层,对卷积层的输出进行归一化处理,提高训练效率和泛化能力    batchNormalizationLayer    % 激活层,使用ReLU函数作为激活函数,增加非线性特征    reluLayer        % 池化层,使用2×2的最大池化核,步长为2,降低特征图的尺寸和参数数量    maxPooling2dLayer(2,'Stride',2)        % 卷积层,使用3×3的卷积核,输出32个特征图,保持边界不变    convolution2dLayer(3,32,'Padding','same')    % 归一化层,对卷积层的输出进行归一化处理,提高训练效率和泛化能力    batchNormalizationLayer    % 激活层,使用ReLU函数作为激活函数,增加非线性特征    reluLayer        % 全连接层,将卷积层的输出展平为一维向量,并连接到10个神经元上,对应10个类别(0-9)    fullyConnectedLayer(10)    % softmax层,将全连接层的输出转换为概率分布    softmaxLayer    % 分类层,根据softmax层的输出和真实标签计算损失函数,并评估分类准确率    classificationLayer];% 设置训练参数options = trainingOptions('sgdm', ...    'InitialLearnRate',0.01, ... % 初始学习率为0.01    'MaxEpochs',5, ... % 最大迭代次数为5次        'Shuffle','every-epoch', ... % 每次迭代都打乱数据顺序    'ValidationData',imdsTest, ... % 使用imdsTest作为验证数据集    'ValidationFrequency',30, ... % 每30次迭代进行一次验证    'Verbose',false, ... % 不在命令窗口显示训练过程信息    'Plots','training-progress'); % 绘制训练进度图% 训练网络,并保存训练好的模型net = trainNetwork(imdsTrain,layers,options);save net% 使用classify函数对测试数据进行分类,并计算准确率YPred = classify(net,imdsTest);YTest = imdsTest.Labels;accuracy = sum(YPred == YTest)/numel(YTest);% 使用imshow函数显示一些测试图片和分类结果figure;perm = randperm(2500,20);for i = 1:20    subplot(4,5,i);    s = classify(net,readimage(imdsTest,perm(i)));    imshow(imdsTest.Files{perm(i)});    title(string(s));end

训练进度

识别结果

识别结果

标签: #matlab中network尺寸