使用Alexnet进行交互式迁移学习

前言
本文主要展示如何微调一个预先训练过的AlexNet来对一个新的图像集合进行分类。这个过程也被称为转移学习,通常比训练一个新的网络要快得多,也容易得多,因为你可以使用更少的训练图像将学到的特性应用到新的任务中。要交互式地为转移学习准备网络,请使用深度网络设计器。
一、加载预先训练好的网络

net = alexnet;

命令行窗口输入net = alexnet;然后enter进入。。。
使用Alexnet进行交互式迁移学习
上面的语句运行成功之后,工作区就会出现对应的数据
使用Alexnet进行交互式迁移学习
二、导入网络到深度网络设计器中
怎么打开深度网络设计器呢,只需要在命令行窗口输入:

deepNetworkDesigner

使用Alexnet进行交互式迁移学习
然后就会弹出下面的界面
使用Alexnet进行交互式迁移学习
然后单击import按钮,从工作区间中选择网络。
使用Alexnet进行交互式迁移学习
导入成功后,整个网络就会出现在桌面上呢
使用Alexnet进行交互式迁移学习
这里导入过程已经完成,接下来就要进行编辑过程了。
三、为迁移学习编辑网络
要重新训练一个预训练的网络来对新图像进行分类,用适应新数据集的新层替换最后的层。必须更改类的数量以匹配您的数据。这个地方呢,要取决于你的数据集的类数,然后更改类的数量即可。
从图层面板中拖拽一个新的全连接图层到画布上。将OutputSize编辑为新数据中的类数,在本例中为5。
编辑学习率,以便在新层中学习的速度比在传输层中更快。将WeightLearnRateFactor和BiasLearnRateFactor设置为10。删除原来的图层,然后连接你的新图层。如下图所示:
使用Alexnet进行交互式迁移学习
使用Alexnet进行交互式迁移学习
四、验证网络是否修改成功
点击Analyze按钮进行分析
使用Alexnet进行交互式迁移学习
显示无任何错误即可,说明修改成功!
使用Alexnet进行交互式迁移学习
五、导出网络
单击export按钮
使用Alexnet进行交互式迁移学习
到处成功后工作区间就会出现
使用Alexnet进行交互式迁移学习
六、加载数据训练网络
(1)解压缩并将新图像作为图像数据存储加载。将数据分为70%的培训数据和30%的验证数据。

unzip('MerchData.zip'); 
imds = imageDatastore('MerchData','IncludeSubfolders',true,'LabelSource','foldernames'); 
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized'); 

(2)调整图像大小以匹配预先训练的网络输入大小。

augimdsTrain = augmentedImageDatastore([227 227],imdsTrain); 
augimdsValidation = augmentedImageDatastore([227 227],imdsValidation); 

(3)指定培训选项
•指定小批处理大小,即每次迭代使用多少图像。
•指定少量的epoch。epoch是整个训练数据集上的一个完整训练周期。对于转移学习,您不需要训练多个epoch。在每个epoch中重新洗牌数据。
•将InitialLearnRate设置为一个小值,以降低传输层的学习速度。
•指定验证数据和较小的验证频率。
•打开训练计划,在你训练的时候监控进度。

options = trainingOptions('sgdm',...
    'MiniBatchSize',10,...
    'MaxEpochs',6,...
    'Shuffle','every-epoch',...
    'InitialLearnRate',1e-4,...
    'ValidationData',imdsValidation,...
    'ValidationFrequency',3,...
    'Verbose',false,...
    'Plots','training-progress');

(4)将到处的模型加载到训练网络中

netTransfer = trainNetwork(imdsTrain,lgraph_1,options);

(5)训练网络
训练的结果如下图
使用Alexnet进行交互式迁移学习
七、测试训练好的网络
利用微调网络对验证图像进行分类,计算分类精度

[YPred,probs] = classify(netTransfer,imdsValidation);
accuracy = mean(YPred == imdsValidation.Labels)

显示四个带有预测标签和预测概率的样本验证图像。

figure
for i = 1:4
    subplot(2,2,i)
    I = readimage(imdsValidation,idx(i));
    imshow(I)
    label = YPred(idx(i));
    title(string(label)+","+num2str(100*max(probs(idx(i),:)),3) + "%");
end

八、输出结果
使用Alexnet进行交互式迁移学习