MATLAB | Deep Learning Onramp 总结

MATLAB Self-Paced Online Courses
Deep Learning Onramp

Introduction

使用MATLAB的deep learning designer和googlenet,完成图像分类。

Using Pretrained Networks

深度学习的使用主要包括三个方面:网络结构,训练数据和优化策略。在MATLAB的deep learning designer中包含预先训练好的模型,我们可以直接使用。在Deep Learning Onramp中使用Googlenet实现图像分类。

基础语法

googlenet 的输入为2242243的三通道图像,输出为分类结果和概率(confidence)。

图片的导入与显示

img1 = imread("file01.jpg");
imshow(img1)

加载预训练模型

deepnet = googlenet

classify分类

[pred,scores] = classify(deepnet,img1)
[pred,scores]  = classify(net,imds)

模型输入输出层参数

ly = deepnet.Layers
inlayer = ly(1)
outlayer = ly(end)
insz = inlayer.InputSize	% 输入图像大小
categorynames = outlayer.Classes 	% 输出分类

图像分析

%% bar
highscores = scores > 0.01;
bar(scores(highscores))
xticklabels(categorynames(highscores))
xtickangle(60) 		% 横坐标旋转60°

%% bar datastore
[preds,scores] = classify(net,imds)
bar(max(scores,[],2))
xticklabels(preds)
xtickangle(60)
ylabel("Score of Prediction")

 bar datastore

DataStore

imds = imageDatastore("*.jpg")
fname = imds.Files
img = readimage(imds,7);
preds = classify(net,imds)

%%  with subfolders 	将subfolders作为laber
flwrds = imageDatastore("Flowers","IncludeSubfolders",true)
flwrds = imageDatastore(pathToImages,"IncludeSubfolders",true,"LabelSource","foldernames")

图片预处理

%% img
img = imresize(img,[224 224]);

%% imds
auds = augmentedImageDatastore([224 224],imds)
auds = augmentedImageDatastore([224 224],imds,"ColorPreprocessing","gray2rgb")

分割训练集和测试集

[flwrTrain,flwrTest] = splitEachLabel(flwrds,0.6)
[flwrTrain,flwrTest] = splitEachLabel(flwrds,0.8,"randomized")
[flwrTrain,flwrTest] = splitEachLabel(flwrds,50)		% 数量不同时

训练选项(Training Optional)

opts = trainingOptions("sgdm")
opts = trainingOptions("sgdm","InitialLearnRate",0.001)		% 学习率

更换输入输出层

net = googlenet;
lgraph = layerGraph(net);

newFc = fullyConnectedLayer(2,"Name","new_fc")
lgraph = replaceLayer(lgraph,"loss3-classifier",newFc)
newOut = classificationLayer("Name","new_out")
lgraph = replaceLayer(lgraph,"output",newOut)

训练

[flowernet,info] = trainNetwork(trainImgs, lgraph, options);
plot(info.TrainingLoss)

实现方法

MATLAB中的googlenet包含1000种标签,可以实现常见物品图像的分类。

基本步骤

  1. 建立数据集:建立datastore,关联标签
  2. 图像预处理:转换为2242243的三通道图片,划分训练集和测试集
  3. 引入预训练网络进行分类
  4. 结果处理:使用bar或confusionchart观察结果。

Transfer Learning

在实际工程中,我们往往仅需要几种分类结果。此时,可以从0开始训练一个网络,但这种方法需要大量的数据和计算资源。一种更好的方法是在原有参数的基础上修改输出层结构,再用小样本训练微调参数,在轻量级下实现较好的效果。
Transfer Learning

实例

MATLAB教程中提供了一个例子,可以根据蠕虫图像判断死活。具体资源可去文章开头的课程链接进行下载。

imds = imageDatastore("WormImages");
groundtruth = readtable("WormData.csv");
imds.Labels = categorical(groundtruth.Status);

[trainImgs,testImgs] = splitEachLabel(imds,0.6,"randomized");
trainds = augmentedImageDatastore([224 224],trainImgs,"ColorPreprocessing","gray2rgb");
testds = augmentedImageDatastore([224 224],testImgs,"ColorPreprocessing","gray2rgb");

net = googlenet;
lgraph = layerGraph(net);
newFc = fullyConnectedLayer(2,"Name","new_fc")
lgraph = replaceLayer(lgraph,"loss3-classifier",newFc)
newOut = classificationLayer("Name","new_out")
lgraph = replaceLayer(lgraph,"output",newOut)

options = trainingOptions("sgdm","InitialLearnRate", 0.001);

wormsnet = trainNetwork(trainds,lgraph,options)

preds = classify(wormsnet,testds);
truetest = testImgs.Labels;
nnz(preds == truetest)/numel(preds)
confusionchart(truetest,preds);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值