MATLAB深度学习入门

1. 加载图像
1.1 使用imread函数加载图像,可以加载GIF、JPEG、PNG等大多数标准文件格式图像。

Import an image
img = imread("file.jpg")

1.2 采用**imshow()**来显示图像。

imshow(img)

1.3 采用alexnet函数可以创建预定义的深度网络AlexNet的副本。

deepnet = alexnet

1.4 采用classify函数可以对图像进行预测。

pre1 = classify(deepnet,img2)

1.5 通过附加功能可以扩展MATLAB的功能,安装相关工具。

2.CNN
在这里插入图片描述
2.1 像任何CNN一样,在MATLAB存储在数组中,第一个和最后一个元素分别为输入层和输出层。

2.2 在AlexNet中,如上deepnet表示一个深度卷积网络,可以使用variable.Property索引来引用变量的Layers属性

ly = deepnet.Layers
%通过索引访问层数组中的某层。
inlayer = ly(1)
%网络的每个层都有与其类型相关的属性。
insz = inlayer.InputSize

2.3 图像维度
灰度图像在MATLAB中表示为m x n数组,每个元素代表对应图像像素的强度,彩色图像表示为m x n x 3 的数组,三个m x n的平面分别表示红色、绿色和蓝色的强度

2.4 AlexNet要求输入的图像大小为227 x 227 x 3。

2.5 将输入归入 n 个类之一,神经网络具有一个包含 n 个神经元的输出层,每个类对应一个神经元。网络接受输入后,会为每个神经元计算一个数值。这些数值代表网络对输入可能属于每个类的概率所做的预测
在这里插入图片描述
2.6 classify 函数默认输出网络打分最高的类。但可以使用 classify 的另一个输出参数来获得所有类的预测分数。

[pred,scrs] = classify(net,img)

2.7 使用bar函数可以绘制条形图,使用xticklabels 函数可以为条形图绘制分类标签。

%设置标签的显示形式
xticks(1:length(scores(highscores)))
xticklabels(categorynames(highscores))
xtickangle(60)

3.图像数据存储
3.1 数据存储,是一种MATLAB变量,可以引用数据源,像图像文件的文件夹。MATLAB会遍历相关文件并存储一些基本信息。如文件的名称和格式。

3.2 使用 imageDatastore 函数在 MATLAB 中创建一个数据存储,指定文件夹名称或文件名作为输入。您可以使用通配符(*)来指定多个文件。

% 引用以foo开头的所有png文件
ds = imageDatastore('foo*.png')

3.3 可以使用Files属性提取图像文件名。

fname = ds.Files

3.4 使用 read、readimagereadall 函数从数据存储手动导入数据:read 按顺序一次导入一个图像;readimage 导入单个特定图像;readall 将所有图像导入一个元胞数组中(每个图像位于一个单独元胞中)。

% 读取第n张图片
I = readimage(ds,n)

3.5 可以在classify中使用数据存储来代替单个图像。

preds = classify(net,ds)

3.6查看图像,可以通过APP中的Image Browser打开文件列表,可以查看看图像。

3.7 调整输入,使用size可以查看图像的大小;

3.8 获取AlexNet网络的层数组,并获取第一层的大小。

net = alexnet
layer = net.Layers
insz = layer(1).InputSize

3.9 可使用imresize函数调整图像的大小,使其与预期的输入大小相匹配。

%img  调整为 numrows×numcols。也就是说,imgresz 的宽度为 numcols 个像素,高度为 numrow 个像素。
imgresz = imresize(img,[numrows numcols]);
imshow(img)
img = imresize(img,[227,227])
imshow(img)

3.10.图像预处理,对整个数据集执行相同的预处理,可以使用 augmentedImageDatastore 函数执行基本预处理,该函数接受图像数据存储和图像大小作为输入。数据存储可以传递给 classify 函数。

imds = imageDatastore("*.jpg")

3.11 增强的图像数据存储可以对整个集合图像执行简单的预处理。要创建此数据存储,请使用 augmentedImageDatastore 函数并将网络的图像输入大小用作输入。

auds = augmentedImageDatastore([r c],imds)
auds = augmentedImageDatastore([227,227],imds)

3.12 可以将增强的图像数据存储用作 classify 函数的输入。在对每个图像进行分类之前,将使用您创建数据存储时指定的方法对其进行预处理。

preds = classify(net,auds)

还可以使用 augmentedImageDatastore 函数将灰度图像转换为 RGB 图像

4.颜色处理
4.1 灰度图像的大小是m x n x 1,在要求m x n x 3 的网络中,可以将灰度图转化为RGB图像;

4.2 使用montage 函数显示数据存储中的图像。

montage(imds)

4.3 在创建增强的图像数据存储时,可以通过设置 ColorPreprocessing 选项将这些图像转换为三维数组

auds = augmentedImageDatastore([n m],...
imds,'ColorPreprocessing','gray2rgb')
auds = augmentedImageDatastore([227,227],imds,"ColorPreprocessing","gray2rgb")

5.用子文件夹选项创建数据存储
5.1 默认情况下,imageDatastore 只在给定文件夹内查找图像文件。可以使用 ‘IncludeSubfolders’ 选项在给定文件夹的子文件夹中查找图像。

ds = imageDatastore('Flowers','IncludeSubfolders',true)

在这里插入图片描述

6.迁移学习
6.1 采用预训练网络、并对其进行修改,并基于新数据对其进行重新训练的过程称之为迁移学习。通过迁移学习可以有效解决许多问题。其训练需要一些数据和一定的计算时间,但与从头开始训练相比要少得多,而且您可以获得适合解决您具体问题的网络。

6.2 迁移学习的要素

  • Network layers
  • Training data
  • Algorithm options
    • batch size
    • Max iterations
    • Learning rate

基于上述三要素,可以调用trainNetwork函数进行训练;

net = trainNetwork(data,layers,options)

在这里插入图片描述
6.3 标记图像
训练所需的标签可以存储在图像数据存储的 Labels 属性中。默认情况下,Labels 属性为空。可以指定 ‘LabelSource’ 选项,让数据存储根据文件夹名称自动确定标签。

%采用子文件夹名称作为标签
ds = imageDatastore(folder,'IncludeSubfolders',true,'LabelSource','foldernames')
flwrds = imageDatastore(pathToImages,'IncludeSubfolders',true,"LabelSource","foldernames");
flowernames = flwrds.Labels

6.4 训练数据和测试数据
使用 splitEachLabel 函数将数据存储中的图像分成两个单独的数据存储。

[ds1,ds2] = splitEachLabel(imds,p)

比例 p(从 0 到 1 的值)表示 imds 中各标签对应的图像应纳入 ds1 中的比例。其余文件分配给 ds2。

[flwrTrain ,flwrTest] = splitEachLabel(flwrds,0.6)

6.5 默认情况下,splitEachLabel 会保持文件有序。您可以通过添加可选的 ‘randomized’ 标志来实现随机乱序

[flwrTrain ,flwrTest] = splitEachLabel(flwrds,0.8,"randomized")

6.6 为了避免**不平衡的训练数据,**在拆分数据时,最好使每个类的训练图像数量相同。
在这里插入图片描述
6.7 当 p 是从 0 到 1 的值时,它解释为比例。图像会基于标签按比例进行拆分。您还可以指定每个标签的对应文件中要分配给 ds1 的确切数量。

% 确保 ds1 中的每个标签都有 n 个图像,即使这些类别并不都包含相同数量的图像。
[ds1,ds2] = splitEachLabel(imds,n)
[flwrTrain ,flwrTest] = splitEachLabel(flwrds,50,"randomized")

6.8 增强的训练数据

  • imageDatastore
  • augmentedImageDatastore
  • imageDataAugmenter,设置变换,如旋转,翻转,平移,剪切和缩放,可作为augmentedImageDatastore函数的输入。
  • trainNetwork,augmentedImageDatastore可作为其输入参数,在训练时,数据会进行预处理。

6.9 修改网络层
主要包含卷积层,池化层和修正线性单元层,全连接层和softmax层等。在进行迁移学习时,通常只需要修改最后这几层,来建立新数据与类别的对应。

6.10 通过层数组索引相应的层,将创建的新层复制给需要修改的层。并修改。

% 创建一个具有n个神经元的全连接层
fclayer = fullyConnectedLayer(n)
fc = fullyConnectedLayer(12)
% 修改全连接层
layers(23) = fc

6.11 使用 classificationLayer 函数为图像分类网络创建一个新输出层。

layers(end) = classificationLayer

6.12 使用 trainingOptions 函数来查看所选训练算法的可用选项。

% 设置动量随机梯度下降训练算法的默认选项
opts = trainingOptions('sgdm')

6.13 学习率控制算法更改网络权重的幅度。迁移学习的目标是微调现有网络,因此与从头开始训练相比,通常希望更改权重的幅度不大。
可以在 trainingOptions 函数中使用名称-值对组指定任意数量的选项设置。

opts = trainingOptions("sgdm","InitialLearnRate",0.001)

7.训练
7.1 执行训练函数trainNetwork

% 参数info记录了损失值和准确率。
[net,info] = trainNetwork(data,layers,options)

7.2 小批量
在每次迭代中,网络都会使用训练图像的一个子集来更新权重,这个子集称为小批量。每次迭代都采用不同的小批量。如果整个训练集都被使用过了,则称为完成了一轮。

可以在训练算法选项中设置的参数是最大轮数 (MaxEpochs) 和小批量的大小 (MiniBatchSize)
默认情况下,图像在分成小批量之前会进行一次乱序处理。您可以使用 Shuffle 选项来控制此行为。

7.3 GPU
**GPU(图形处理单元)**可以大大加快深度学习所需的大量计算。如果计算机没有配备支持的 GPU,训练可以在 CPU 上执行,但可能需要很长时间。要真正地使用深度学习,最好在配备了具有足够处理能力的 GPU 的计算机上训练您的网络。

  • 如果您安装了适当的 GPUParallel Computing Toolbox,trainNetwork 函数可自动在 GPU 上执行训练,无需专门编码。
  • 如果没有安装,训练将在计算机的 CPU 上进行。您可以体验过后再决定是否购买所需的硬件和软件。

7.4 综合实例

%获取训练图像flower_ds = imageDatastore('Flowers','IncludeSubfolders',true,'LabelSource','foldernames');
[trainImgs,testImgs] = splitEachLabel(flower_ds,0.6);
numClasses = numel(categories(flower_ds.Labels));%通过修改 AlexNet 创建网络net = alexnet;
layers = net.Layers;
layers(end-2) = fullyConnectedLayer(numClasses);
layers(end) = classificationLayer;%设置训练算法选项options = trainingOptions('sgdm','InitialLearnRate', 0.001);%执行训练[flowernet,info] = trainNetwork(trainImgs, layers, options);%使用经过训练的网络对测试图像进行分类testpreds = classify(flowernet,testImgs);

8.评估训练
8.1 变量 info 是包含训练信息的结构体。TrainingLoss 和 TrainingAccuracy 字段包含网络在训练数据上进行每次迭代后达到的性能的记录。

8.2 绘制损失值和准确率曲线

plot(info.TrainingLoss)

8.3 使用逻辑比较和 nnz 函数来确定两个数组的匹配元素数;

numequal = nnz(a == b)

8.4 按类分析性能

  • 损失和准确度给出的是网络性能的总体度量。进一步地研究网络对于不同类的图像的性能表现可发掘更多信息.
  • confusionchart 函数计算并显示预测分类的 confusion matrix
confusionchart(knownclass,predictedclass)
  • 混淆矩阵的 (j,k) 元素值用于统计网络将 j 类中的多少个图像预测为属于类 k。因此,对角线上的元素代表正确分类;非对角线上的元素代表误分类。
    在这里插入图片描述
    8.5 提高性能
    为了防止模型在训练集上表现好而在测试集上表现差,可以把训练的数据划分为训练集和验证集,在训练期间,在通过训练数据更新网络后,需要基于验证数据集测试网络性能。如果测试性能提高,则继续训练,否则停止训练,防止过拟合

9.迁移学习总结
在这里插入图片描述
在这里插入图片描述

10.综合实例
10.1 回归与目标检测

  • 回归是指在网络分析图像后返回一个数值,而非一个标签。可以使用Deep Learning Toolbox来执行回归。
  • 返回图像中的特定区域,可以使用R-CNN,在Computer Vision System Toolbox中提供了可实现此目的的函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot笔记整理(三)

SpringBoot笔记整理(一) SpringBoot笔记整理(二) SpringBoot笔记整理(三) SpringBoot笔记整理(四) Web开发 1、使用SpringBoot: 1)创建SpringBoot应用&…

图神经网络,如何变深?

来源:智源社区版式制作:Camel撰文:侯振宇编辑:贾 伟现实世界中很多很多任务可以描述为图(Graph)问题,比如社交网络,蛋白质结构,交通路网数据,图是一个很值得研究的领域。近年来&am…

机器学习分类与性能度量

机器学习分类与性能度量 数据集:训练集(Training Set)、验证集(Validation Set)和测试集(Test Set) 1、 当模型无需人为设定超参数,所用参数都通过学习得到,则不需要验证集。验证集适合多个不同超参数训练多个模型,通过验证集,…

中国人民大学孟小峰教授:“科学数据智能——人工智能在科学发现中的机遇与挑战”...

来源:国家自然科学基金委员会微信公号 孟小峰 博士,中国人民大学教授,博士生导师,CCF会士。主要研究方向为数据库理论与系统、大数据管理系统、大数据隐私保护、大数据融合与智能、大数据实时分析、社会计算等。摘 要随着全球各科…

Java 面向对象语言基础

面向过程 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象 是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解…

全球首例!这台机器人发明了两项新技术,已获专利授权!

文章来源:EETOP几天前前人工智能系统专利申请权有最新发展。南非率先成为第一个授予人工智能专利权的国家,承认人工智能机器人DABUS为「发明者」,6日澳大利亚联邦法院也做出裁决:发明者可以是非人类。 这算是有历史里程碑意义的判…

成员变量、局部变量、实例变量、静态变量、类变量、常量

成员变量: 直接在类中声明的变量叫成员变量(又称全局变量) ▲ 初始化: 如果未对成员变量设置初始值,则系统会根据成员变量的类型自动分配初始值:int分配初始值0、boolean分配初始值false,而自定义类型则分配初始值null…

行业洞见 | 一文了解自动驾驶汽车

文章来源:ancholabs.medium.com文字翻译: 新能源情报局封面配图:原作者驾驶是人类日常从事的活动中最困难的之一。遵循交通规则,通过眼神与其他司机沟通交流、对天气状况做出反应是成为优秀司机的先决条件。在自动驾驶汽车中&…

MATLAB高光谱图像处理基础

介绍高光谱图像的基本知识,便通过MATLAB对高光谱图像进行基本的处理。 文章目录前言一、高光谱图像二、MATLAB高光谱图像处理1.加载.MAT文件数据2.图像的显示3.图像维度变换总结前言 高光谱图像是一个立方体结构,维度为M x N x B,M为水平方向…

中国千亿科技巨头,成功收购英国最大芯片制造商!

来源:世界先进制造技术论坛内容来源:每日经济新闻综合自每经App、界面新闻、财联社等本期编辑:小艾 在全球缺芯的背景下,8月15日,国产芯片巨头闻泰科技(600745.SH)披露,旗下全资子公…

MATLAB图自编码器

通过MATLAB来实现图自编码器,用于高光谱图像特征的提取。 文章目录前言一、MATLAB相关知识二、编写算法1.图自编码器搭建2.可视化相关参数总结前言 算法输入数据: 图节点属性矩阵;邻接矩阵;概率p; W为自编码器的隐藏…

考夫曼:破解大脑代码并创建真正的人工智能

来源:CSDN博主「CDA数据分析师」原文链接:https://blog.csdn.net/yoggieCDA/article/details/1045567421955年,计算机科学家约翰麦卡锡(John McCarthy)首次创造了“人工智能”一词。当时,人工智能是对可以表…

MATLAB高光谱图像构建KNN图

在高光谱图像的特征提取过程中,采用非线性降维的方式对高光谱图像降维的过程中,采用图自编码器来对数据进行降维,需要将利用高光谱图像的结构信息和内容信息,则需要将高光谱图像数据构造为一个图结构,图结构的构建需要…

类脑量子叠加脉冲神经网络:从量子大脑假说到更好的人工智能

来源:神经现实作者:曾毅研究团队 |封面:Mario De Meyer排版:光影以深度神经网络为代表的现代人工智能模型在识别图像、语音、文字等模式信息任务取得优异表现。然而,生物大脑具有处理复杂多变的环境信息的能力&#xf…

遥感图像分类原理

1.原理 1.1 每一个像元作为一个样本,波段作为特征,理想情况下,同类地物应该具有相同或相似的特征描述,因此像元在n维特征空间中聚集在一起,而不同地物应该具有不同的特征描述,因此不同特征地物像元在n维空间…

2019第一次作业

10.实验代码 include <stdio.h> int main(void) { int i, f, X, N; scanf("%d",&N); int a [N]; scanf("%d",&X); f0; for(i0;i<N;i){ scanf("%d",&a[i]); if(a[i]X){ printf("%d",i); f; } } if(f0){ printf(&q…

分布式——ACID原则 CAP理论

分布式计算的原理 分布式计算就是将计算任务分摊到大量的计算节点上&#xff0c;一 起完成海量的计算任务。而分布式计算的原理和并行计算 类似&#xff0c;就是将一个复杂庞大的计算任务适当划分为一个个 小任务&#xff0c;任务并行执行&#xff0c;只不过分布式计算会将这些…

Matlab高光谱样本相关性分析

一.高光谱图像数据分析 1.分析光谱波段的相关性 1.1 对于维度为(m,n,b)的高光谱数据&#xff0c;使用reshape函数将其变换为(N,b)维度的&#xff0c;其中N m x n&#xff0c;表示像素数量&#xff0c;b表示波段数。 1.2 分析样本(像素)间波段的相关性&#xff0c;采用函数c…

万众瞩目的特斯拉AI日,会有哪些惊喜?

来源&#xff1a;华尔街见闻作者&#xff1a;方凌8月19日&#xff0c;特斯拉AI日即将举行。马斯克此前曾表示&#xff0c;此次AI日将展示特斯拉在人工智能方面硬件和软件开发的进展&#xff0c;并且招募顶级人才。活动的日子日渐临近&#xff0c;对于特斯拉究竟将在放出什么“大…

第一次会议(2019/02/22)

小组名称及成员介绍 小组名称&#xff1a;Triple兔成员介绍&#xff08;均为1703班&#xff09;项目经理&#xff1a;刘晓丽&#xff08;右上&#xff09;前端开发&#xff1a;刘晓丽&#xff08;右上&#xff09;、王亚群&#xff08;右下&#xff09;后端开发&#xff1a;乔疏…