一、大致过程有以下几个步骤
1-导入预先训练好的网络(我使用的是alexnet)
2-配置最后三层
3-利用新数据训练网络
4-检验结果
二、详细过程如下:
1-导入模型
net = alexnet;
注:如果出现如下问题,直接点击 Add-On Explorer 把模型安装好就行
2-修改模型
注:fullyConnectedLayer(5,......)此处数字5代表我新的训练集分类有5个,按照自己的情况修改
layers = net.Layers(1:end-3);
new_layers = [layers
fullyConnectedLayer(5,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20)
softmaxLayer
classificationLayer
];
3-导入数据
%如果没有合适的数据集可以使用matlab官方提供的数据集
unzip('MerchData.zip'); %运行这句话后你的工作路径下会多出一个文件夹,里面就是数据集
image = imageDatastore('MerchData','IncludeSubfolders',true,'LabelSource','foldernames');
[imageTrain,imageTest] = splitEachLabel(image,0.7,'randomized');
%将数据集%70划为训练集,其余为测试集
4-配置训练参数
ops = trainingOptions('sgdm', ...
'InitialLearnRate',0.0001, ...
'ValidationData',imageTest, ...
'Plots','training-progress', ...
'MiniBatchSize',5, ...
'MaxEpochs',10,...
'ValidationPatience',Inf,...
'Verbose',false);
%'MaxEpochs' 即训练次数,我设的较小,根据需要调整
5-开始训练
%开始训练
tic
net_train = trainNetwork(imageTrain,new_layers,ops);
toc
出现如下界面
6-测试新的图片,验证网络
image_val = imresize(imread('cap3.jpg'),[227,227]);
[label,conf] = classify(net_train,image_val);
imshow(image_val);title(sprintf('%s %.2f',char(label),max(conf)));
因为我的训练集很小,所以效果不会很好,但是结果也还是正确的
So ,enjoy it