如今最热的方向莫过于深度学习了,什么AlexNet,GoogleNet,几乎都耳熟能详,毕竟毕业设计一般的题目都和深度学习有关。
相信看到这篇文章的同学,对深度学习大概是干啥的,肯定有所理解。但是可能苦恼于怎么把我自己的数据导入这些网络里,怎么让模型输出分类/识别的结果?
下面以在 Matlab 里用 AlexNet 进行 分类 为例,带大家从零开始使用模型,一直到输出分类结果。
首先要进行分类的话,肯定需要有已经分好类的数据库,如下图所示。ClassficationData文件夹里有五个子文件夹,代表五类样本。
可以看到,每个子文件夹中的数据格式均为jpg
现在要做的事,就是用这些数据,训练AlexNet模型,使其可以自动对照片进行分类。由于AlexNet对输入图片尺寸有要求(227227),所以我们首先要对原始数据库的图片尺寸统一为227227。这部分代码参考链接1。
值得注意的是,在使用链接1里的代码时,需要预先建立一个新的文件夹,以及里面的子文件夹(同名),这样才可以把修改好的图片存进来。如下图:
接下来只需要把照片导入模型里就OK了,我们这里参考matlab官方例程,为大家做个示范,代码如下:
imds = imageDatastore('F:\模式识别作业\ResizeClassificationData\', ...
'IncludeSubfolders',true,'LabelSource','foldernames');
% 每类样本中测试集的个数,若每类样本有50个,测试集:训练集 = 7:3 = 35:15
numTrainFiles = 35;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomize');
layers1 = alexnet; % 引入alexnet
layers2 = layers1.Layers(1:end-3); % 去掉alexnet后3层
layers = [layers2 % 修改alexnet后3层
fullyConnectedLayer(5,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20)
softmaxLayer
classificationLayer];
inputSize = layers1.Layers(1).InputSize;
augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);
options = trainingOptions('sgdm', ... % 模型参数调整
'MiniBatchSize',10, ...
'MaxEpochs',6, ...
'InitialLearnRate',1e-4, ...
'Shuffle','every-epoch', ...
'ValidationData',augimdsValidation, ...
'ValidationFrequency',3, ...
'Verbose',false, ...
'Plots','training-progress');
net = trainNetwork(imdsTrain,layers,options); % 训练好的模型
YPred = classify(net,imdsValidation); % 预测结果输出
YValidation = imdsValidation.Labels;
accuracy = sum(YPred == YValidation)/numel(YValidation) % 精度输出
结果输出如下:
最后,将整个功能代码封装成一个简单好操作的形式,点下“运行”就完事了,实现 尺寸重定义 + alexnet模型训练输出 一条龙,不用再手动建立新的文件夹,效果如下:
猜你喜欢:👇🏻
⭐基于小波变换的图像边缘检测(matlab祖传代码注释)
⭐Matlab对话框总结