在matlab上使用自己的数据进行迁移学习

一、大致过程有以下几个步骤

1-导入预先训练好的网络(我使用的是alexnet)

2-配置最后三层

3-利用新数据训练网络

4-检验结果

 

二、详细过程如下:

1-导入模型

net = alexnet;

  注:如果出现如下问题,直接点击 Add-On Explorer 把模型安装好就行

在matlab上使用自己的数据进行迁移学习_第1张图片

 

在matlab上使用自己的数据进行迁移学习_第2张图片

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

  出现如下界面

在matlab上使用自己的数据进行迁移学习_第3张图片

 

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)));

因为我的训练集很小,所以效果不会很好,但是结果也还是正确的

在matlab上使用自己的数据进行迁移学习_第4张图片

 

So ,enjoy it

你可能感兴趣的:(在matlab上使用自己的数据进行迁移学习)