什么是深度学习
深度学习是一种使用深度神经网络的机器学习技术。它使用多层网络来进行预测。深度学习开始火热是源于它在图片识别上的高准确性。
如果使用传统的机器学习方法去识别手写数字,首先需要找出一些度量标准或图像特征用来区分每个数字。针对于我的图像集计算这些特征,然后使用这些特征来训练分类器。
之后,当你要使用这个训练好的分类器对新的图像进行分类时,首先需要计算图像的特征,然后将这些特种传递给分类器。
深度学习的目标是进行端到端的学习,图像本身就是输入,省去了特征寻找的步骤,由深度神经网络自行在图像中学习。
使用预训练网络
将图像导入MATLAB中
在本节课程中,您将学习如何使用预先构建的深度神经网络对下面 12 个图像的内容进行分类。理想的分类应为 ‘beach’、‘cat’、‘cupcakes’、‘lake’、‘fish’ 等。
在此交互练习中,您会将其中部分图像文件导入到 MATLAB 中并查看它们。
可以使用 imread 函数来导入大多数标准文件格式(GIF、JPEG、PNG 等)的图像。
使用 imshow 函数来显示存储在 MATLAB 变量中的图像。
img1 = imread('file01.jpg')
imshow(img1)
img2 = imread('file02.jpg');
imshow(img2)
img3 = imread('file03.jpg');
imshow(img3)
执行预测
下面的程序将使用AlexNet网络,该网络是由一个深度学习研究团队,在2012年设计和训练的。
他们使用1000个类别中的100万个图像,对AlexNet进行了为期一周的训练。下面将学习如何把AlexNet加载到MATLAB中。然后使用AlexNet对图像进行分类。
可以使用 alexnet 函数在 MATLAB 工作区中创建预定义的深度网络“AlexNet”的副本。使用 classify 函数对图像进行预测。
deepnet = alexnet
img1 = imread('file01.jpg');
imshow(img1)
pred1 = classify(deepnet,img1)
通过附加功能管理器来安装预训练网络的支持包。
CNN架构
CNN中的层
预训练网络AlexNet是一个卷积神经网络(Convolutional Neural Network, CNN)。CNN是一种常用的神经网络,它适用于其输入本身具有二维结构(如图像)的应用。
像所有神经网络一样,CNN由多个层组成,信息在这些层之间传递。
对于分类问题,输出层会返回网络对每个可能的类的预测强度。CNN包含由丰富多样的层,但一般来说,其中大部分的层是将输入图像转换维一组特征,最后几层用于执行分类。
网络是如何做到这一点的呢?
网络的架构,即层的类型、大小、顺序,由架构师选择。这些层本身有许多参数称为权重,权重决定数据在通过层时,各层的行为。这些权重的值是基于已知数据对网络进行训练来确定的。通过这种方式,网络可以从这些数据中学习到其行为。两个网络可以有相同的架构,但如果使用不同数据集进行训练,这两个网络的行为会有所不同。
查看网络层
像任何 CNN 一样,AlexNet 在 MATLAB 中表示为一个层数组。需要特别关注此数组的第一个和最后一个元素,它们分别代表输入层和输出层。
下面练习中,您将查看这些层的属性,以确定 AlexNet 接受什么形式的图像作为输入,以及它可以返回哪些类作为输出。
deepnet = alexnet;
ly = deepnet.Layers
% 变量 ly 是由网络层构成的数组
% 通过使用常规的 MATLAB 数组索引对 ly 进行索引来查看单个层
inlayer = ly(1)
% 网络的每个层都有与其类型相关的属性
% 输入层的一个重要属性是 InputSize,它是网络要求的输入图像大小(维度)
insz = inlayer.InputSize
灰度图像在 MATLAB 中表示为 m×n 数组,每个元素的值代表对应图像像素的强度。彩色图像表示为 m×n×3 数组,三个 m×n 平面分别表示红色、绿色和蓝色强度。
% 输出层的 Classes 属性给出了训练的网络可预测的类别名称。
outlayer = ly(end)
categorynames = outlayer.Classes