我是靠谱客的博主 花痴小霸王,最近开发中收集的这篇文章主要介绍Deep Learning Onramp 学习笔记Transfer Learning Example ScriptPerformance by class,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.1

deepnet = alexnet %利用库内pretrained alexnet

img  = imread('filename')  %使用变量存储图片

imshow(img)  %展示图片

classify(deepnet,img) %使用alexnet来分类当前的图片

1.2

ly=deepnet.Layers  %用ly变量存储deepnet的layers信息,如下图

inlayer = ly(1) %提取输入层的信息

insz = inlayer.InputSize %提取输入层的维度




outlayer=ly(end) %提取输出层的信息

categorynames = outlayer.ClassNames %提取输出层的分类名



1.3  对每个类别的输出概率

[pred,scrs] = classify(net,img) %获取每个标签的概率scrs


thresh = median (scores) + std(scores) %中值+ 标准差
highscores = scores > thresh %大于该阈值的分数置1其余置0
有许多概率远低于阈值的标签,在绘制直方图时应将这些标签去除。
scores(highscores) %提取出大于阈值的分数
bar(scores(highscores)) %直方图展示

xticks(1:length(scores(highscores))) %划出有多少个刻度值
xticklabels(categorynames(highscores)) %标出该刻度值的标签
xtickangle(60) %标签显示角度

1.4 创造一个datastore

将图片存在硬盘中即可,使用datastore来索引图片,还可以不必考虑内存使用

imds = imageDatastore('file*.jpg')  %创建一个datastore *号代表任意值

fname = imds.Files %提取所有文件的名字


[pred,scores] = classify(deepnet,imds) %将ds的图片都送入进行分类,scores = 文件数*预测单元数

[C,labels]=max(scores,[],2)                   %C为预测的最大值,labels 为预测的种类标签  长度= 文件数*1

bar(C)

xticks(1:length(labels,2)) %划出有多少个刻度值
xticklabels(categorynames(labels)) %标出该刻度值的标签
xtickangle(60) %标签显示角度


1.5 

用自己的文件夹把不同的花进行分类

利用

flwrds= imageDatastore('Flowers','IncludeSubfolders',true);

‘includeSubfolders’可以将子文件夹也包括进去;


2. 迁移学习

 迁移学习中我们需要的有三件事。1.选取一个pretrained神经网络 2.所需的数据集 3.超参数的设置 

利用文件夹的名字对datastore里的数据进行标记。

  load pathToImages


flwrds = imageDatastore(pathToImages,'IncludeSubfolders',true,...
'LabelSource','foldernames')

flowernames = flwrds.Labels %获取标签


将数据集进行分块

[ds1,ds2]=splitEachLabels(ds,p or n,'randomlize');

防止数据偏斜,将ds的数据随机分为两个部分,p值决定ds1中数据量的占比,n值可以决定ds1中数据量


对预训练的神经网络进行修改

例中我们要识别12种花,我们要将第23层有1000个单元的神经层替换成12个单元的全连接层。再将最后一层1000个类别的输出层换成我们的类别输出层(无需加上类型?);


Layer(23) = fullyConnectedLayer(12)

layers(25) = classificationLayer


修改超参数的设置


opts = trainingOptions('sgdm') %显示随机梯度下降的默认options

opts = trainingOptions('sgdm','name',value) %name中填入对应想修改的参数名


迁移学习总览

Transfer Learning Example Script

The code below implements transfer learning for the flower species example in this chapter. It is available as the script  trainflowers.mlx in the course example files. You can download the course example files from the help menu in the top-right corner. Note that this example can take some time to run if you run it on a computer that does not have a GPU.

Get training images


flower_ds = imageDatastore('Flowers','IncludeSubfolders',true,'LabelSource','foldernames');
[trainImgs,testImgs] = splitEachLabel(flower_ds,0.6);
numClasses = numel(categories(flower_ds.Labels));

 

Create a network by modifying AlexNet


net = alexnet;
layers = net.Layers;
layers(end-2) = fullyConnectedLayer(numClasses);
layers(end) = classificationLayer;

 

Set training algorithm options


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

 

Perform training


[flowernet,info] = trainNetwork(trainImgs, layers, options);

 

%可使用 plot(info.TrainingLoss) 绘图loss的变化

Use trained network to classify test images


testpreds = classify(flowernet,testImgs)

correct = nn(AuctualLabels == testpreds) %输出一个分类正确与否的向量

Performance by class





loss与accuracy 给予了全面的关于神经网络表现的信息,但是不能直观的看出那些数据的分类情况

这时候我们使用分类混淆矩阵(confusion matrix)来帮助我们直观的看见哪些数据被误分类

[flwrconf,flwrnames]=confusionmat(testImgs.Labels,flwrPreds)



还是不够直观,我们使用heatmap(xlabels,ylabels,confusionmat)来构建直观的图像



对输入图像进行处理

图像切割


减少图片像素



为图像增加两个通道




wormds = imageDatastore(pathToImages,'ReadFcn',@wormread)

function img = wormread(file)
% Import image
img = imread(file);
% Crop and resize
img = imcrop(img,[130 80 426 426]);
img = imresize(img,[227 227]);
% Adjust intensity levels (NOTE: not needed when training a CNN as inputs are normalized anyway)
img = imadjust(img);
% Convert grayscale to color (RGB)
img = repmat(img,[1 1 3]);
end

使用DataStore时使用@myfun


fuction myfun

....

end


来自定义读取文件时的操作


img = read(wormds); %读取图片时的操作


通过对图片的修改来增强自己的图片集





最后

以上就是花痴小霸王为你收集整理的Deep Learning Onramp 学习笔记Transfer Learning Example ScriptPerformance by class的全部内容,希望文章能够帮你解决Deep Learning Onramp 学习笔记Transfer Learning Example ScriptPerformance by class所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部