matlab版深度学习入门之旅----体验过后的个人记录

本文记录了一次MATLAB深度学习的实践,包括使用预训练的AlexNet网络进行图像分类,查看CNN架构,管理图像数据集,以及进行迁移学习的详细步骤,如修改网络层、设置训练选项、训练网络并评估性能。
摘要由CSDN通过智能技术生成

目录

1. 简介

2. 使用预训练网络:使用已创建和训练后的网络进行分类

2.1 课程示例-识别一些图像中的对象

2.1.1  导入图像

2.1.2  显示导入的图像。

2.1.3 存储图像

2.2 执行预测

2.2.1  创建预定义的深度网络“AlexNet”的副本

2.2.2  分类预测

2.2.3 img2和3的分类预测

2.3 CNN架构 查看网络层

2.3.1  查看网络的层

2.3.2 索引查看单个层

2.3.3  提取某一层的某种属性

2.3.4  图像维度

2.3.5  提取输出层的类属性

2.4 研究预测

2.4.1  预测分数

2.4.2  创建预测分类的条形图

2.4.3  挑出主要分数

2.4.4  显示挑选预测分数后的条形图

2.4.5  为x轴增加类别标签

3 管理数据集:使用已创建和训练后的网络执行分类

3.1 图像数据存储

3.1.1  使用imageDatastore创建数据存储(DataStore)

3.1.2  数据存储的属性包含有关数据文件的元信息

3.1.3  从数据存储(DataStore)中导入某幅图像

3.1.4  预测数据存储(DataStore)中的所有图像

3.2 准备输入图像

3.2.1  查看图像大小

3.2.2  网络的输入层指定网络要求的图像大小

3.2.3  将输入图像调整至要求大小并显示

3.3 处理数据存储(DataStore)中的图像

3.3.1  创建增强的图像数据存储(DataStore)

3.3.2  使用增强的图像数据存储(DataStore)进行颜色预处理

3.4 用子文件夹创建一个数据存储(DataStore)

3.4.1  创建数据存储(Data Store)

3.4.2  分类预测

4 迁移学习:修改预训练网络对图像分类

4.1 什么是迁移学习?

4.2 迁移学习所需的组件

4.3 准备训练数据

4.3.1  标记图像

4.3.2  拆分训练和测试

4.4 修改网络层

4.4.1  使用fullyConnectedLayer函数创建一个新的全连接层

4.4.2  对层的数组通过索引进行修改

4.4.3  将输出层与前面的层(第23层)进行匹配

4.5 设置训练选项

4.5.1  使用trainingOptions来查看所选训练算法的可用选项(一定要查看帮助手册)

4.5.2  设置初始学习率

4.6 训练网络

4.6.1  mini-batch小批量

4.6.2  使用GPUs

4.6.3  迁移学习示例(脚本)

4.7 评估性能

4.7.1  评估训练和测试性能

4.7.2  调查测试性能

4.8 迁移学习摘要




1. 简介

该课程为MATLAB官网免费课程,此笔记只对该课程进行一定的翻译和记录,方便日后复习。官网链接为https://ww2.mathworks.cn/learn/tutorials/deep-learning-onramp.html(深度学习入门之旅)。

2. 使用预训练网络:使用已创建和训练后的网络进行分类

2.1 课程示例-识别一些图像中的对象

在本节课程中,您将学习如何使用预先构建的深度神经网络对下面 12 个图像的内容进行分类。理想的分类应为 'beach'、'cat'、'cupcakes'、'lake'、'fish' 等。

在此交互练习中,您会将部分图像文件导入到 MATLAB 中并查看它们。

2.1.1  导入图像

将文件 file01.jpg 中的图像导入 MATLAB 工作区中。将其存储在名为 img1 的变量中。
I = imread('filename.png')

2.1.2  显示导入的图像。

imshow(I)

2.1.3 存储图像

前两项任务将导入并显示 file01.jpg 中的图像。在脚本中添加命令,以导入并显示 file02.jpg 和 file03.jpg 文件中的图像。将图像分别存储在名为 img2 和 img3 的变量中。

img2 = imread('file02.jpg');

imshow(img2)

img3 = imread('file03.jpg');

imshow(img3)

2.2 执行预测

2.2.1  创建预定义的深度网络“AlexNet”的副本

使用 alexnet 函数加载一个预训练网络。将结果保存为一个名为 deepnet 的变量。
deepnet = alexnet  % 这里的网络模型使用Alexnet;可以通过matlab官方下载Alexnet安装包,安装后可用(APP----安装APP)

2.2.2  分类预测

用 classify 函数和预训练的 AlexNet 网络来预测变量 img1 中存储的图像的主题类别。将网络的预测存储在名为 pred1 的变量中。     pred1 = classify(deepnet,img1)
也可用 [pred, score] = classify(net,img)  % 将网络和输入图像传入分类函数,将得到输入图像的类别preds以及它在每一类中的预测分数score

2.2.3 img2和3的分类预测

在脚本中添加命令,对变量 img2 和 img3 中存储的图像的内容进行预测。将预测的类分别存储在名为 pred2 和 pred3 的变量中。

pred2 = classify(deepnet,img2)

pred3 = classify(deepnet,img3)

2.2.4 获取预训练网络

2.3 CNN架构 查看网络层

MATLAB将CNN表示为一个层的数组,数组的第一个元素为输入层,最后一个元素为输出层。

2.3.1  查看网络的层

将 deepnet 的 Layers 属性提取到名为 ly 的变量中。

ly = deepnet.Layers  % 由下图可以看出Alexnet是一个具有25层的数组

2.3.2 索引查看单个层

将网络的第一层(输入层)提取到名为 inlayer 的变量中。

inlayer = ly(1)

2.3.3  提取某一层的某种属性

提取网络第一层的 InputSize 属性(存储在变量 inlayer 中)。将结果存储在名为 insz 的变量中。
insz = inlayer.InputSize  % 输入层的输入图像大小

2.3.4  图像维度


输入图像是彩色图像,尺寸为:227×227×3。灰度图像的尺寸为227×227。

将网络的最后一层(输出层)提取到名为 outlayer 的变量中。

outlayer = ly(end)

2.3.5  提取输出层的类属性

提取网络最后一层的 Classes 属性(存储在变量 outlayer 中)。将结果存储在名为 categorynames 的变量中。
categorynames = outlayer.Classes  % 得到一个列向量,表示Alexnet的1000个类的名字

2.4 研究预测


2.4.1  预测分数

使用 classify 函数和预训练的 AlexNet 网络 net 来预测变量 img 中存储的图像的主题类别。将网络的预测存储在名为 pred 的变量中,并将所有预测分数存储在名为 scores 的变量中。上面的分类函数classify只是将输入图像预测为某一类,并不知道输入图像是该类的概率。该任务不仅会得到预测分类,还会得出预测分数。

前期输入:

img = imread('file01.jpg');

imshow(img)

net = alexnet;

categorynames = net.Layers(end).ClassNames;

分数预测:

[pred,scores] = classify(net,img)   % 得到的分数是一个行向量,表示1000个类的预测分数

2.4.2  创建预测分类的条形图

创建预测分数的条形图。
bar(scores)%因为有 1000 个预测分数,所创建的条形图会难以阅读。

2.4.3  挑出主要分数

创建一个逻辑数组 highscores,其中的值 1 (true) 对应于 scores 大于 0.01 的情况。

highscores = (scores > 0.01)   或者 highscores = scores > 0.01  % 将scrs数组中大于0.01的元素赋为1,其他为0

2.4.4  显示挑选预测分数后的条形图

使用逻辑索引创建高于阈值 0.01 的预测值的条形图。

bar(scores(highscores))   %scores(highscores)返回大于0.01的类别的预测分数

2.4.5  为x轴增加类别标签

使用逻辑索引和 xticklabels 函数为条形图添加对应的预测类名标签。类名的完整列表存储在变量 categorynames 中。
xticklabels(categorynames(highscores)) % categorynames(highscores) 返回大于0.01的类别的名字

3 管理数据集:使用已创建和训练后的网络执行分类

3.1 图像数据存储

ls *.jpg

net = alexnet;

3.1.1  使用imageDatastore创建数据存储(DataStore)

创建一个名为 imds 的数据存储,该数据存储引用当前文件夹中文件名从 file01.jpg 到 file12.jpg 的图像文件。(请注意,在此文件夹中,只有这些图像文件的名称为 filenn.jpg 形式。)

imds = imageDatastore('*.jpg')  % 使用通配符*指定多个文件。

3.1.2  数据存储的属性包含有关数据文件的元信息

使用数据存储 imds 的 Files 属性提取图像的文件名。将结果存储在名为 fname 的变量中。
fname = imds.Files  

3.1.3  从数据存储(DataStore)中导入某幅图像

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值