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

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

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

数据迁移学习是指使用预训练的神经网络模型作为基础,通过微调模型的权重来解决新的任务。在MATLAB中,使用迁移学习可以通过以下步骤实现: 1. 导入数据:通过使用`imageDatastore`函数导入数据集,将数据集分为训练集和测试集。 2. 加载预训练模型:使用`alexnet`函数加载预训练的AlexNet模型。 3. 修改模型结构:将预训练模型的最后几层替换为适合新任务的层,例如全连接层和分类层。 4. 配置训练选项:使用`trainingOptions`函数配置训练选项,例如选择优化算法、设置迭代次数等。 5. 进行训练:使用`trainNetwork`函数对模型进行训练。 6. 进行预测:使用训练好的模型对新数据进行分类预测。 下面是一个示例代码,展示了如何在MATLAB进行数据迁移学习: ``` unzip('MerchData.zip');imds = imageDatastore('MerchData','IncludeSubfolders',true,'LabelSource','foldernames'); [imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized'); net = alexnet; layersTransfer = net.Layers(1:end-3); numClasses = numel(categories(imdsTrain.Labels)); layers = [ layersTransfer fullyConnectedLayer(numClasses,'WeightLearnRateFactor',10,'BiasLearnRateFactor',10) softmaxLayer classificationLayer]; options = trainingOptions('sgdm', ... 'MiniBatchSize',10, ... 'MaxEpochs',6, ... 'InitialLearnRate',1e-4, ... 'ValidationData',imdsValidation, ... 'ValidationFrequency',3, ... 'Verbose',false, ... 'Plots','training-progress'); netTransfer = trainNetwork(imdsTrain,layers,options); YPred = classify(netTransfer,imdsValidation); accuracy = mean(YPred == imdsValidation.Labels); ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值