2.4 基于深度学习工具箱函数构造卷积神经网络

在本小节中,我们通过MATLAB中的深度学习工具箱(Deep Learning Toolbox)来构建一个用于分类的卷积神经网络。

本书采用MATLAB中Deep Learning Toolbox进行开发。Deep Learning Toolbox提供了一个用于通过算法、预训练模型和应用程序来设计和实现深度神经网络的框架,可以使用卷积神经网络和长短期记忆网络对图像、时序和文本数据执行分类和回归,并且具有良好的可视化及交互效果,可以监控训练进度和训练网络架构。在Deep Learning Toolbox中,对于小型训练集,可以使用预训练深度网络模型以及从Keras和Caffe导入的模型执行迁移学习;要加速对大型数据集的训练,可以使用Parallel Computing Toolbox将计算和数据分布到多核处理器和GPU中,或者使用Distributed Computing Server扩展到群集和云中。

2.4.1 案例需求与实现步骤

【例2-1】 构建一个卷积神经网络,可实现对输入的含有0~9数字的二值图像(像素为28×28)进行分类,并计算分类准确率。

实现步骤:

步骤1:加载图像样本数据。

步骤2:将加载的图像样本分为训练集和测试集。

步骤3:构建卷积神经网络。

步骤4:配置训练选项并开始训练。

步骤5:将训练好的网络用于对新的输入图像进行分类,并计算准确率。

2.4.2 本节中用到的函数解析

1.imageInputLayer函数

功能:创建一个图像输入层。

用法:layer = imageInputLayer (inputSize)。

输入:InputSize为输入图像数据的像素大小,格式为具有三个整数值[ h w c]的行向量,其中h是高,w是宽,c是通道数。

输出:layer为图像输入层。

例如,imageInputLayer([28 28 1]),这个语句实现的功能为创建一个输入层,该输入层为1个通道,输入图像的像素大小为28×28。

2.convolution2 dLayer函数

功能:创建一个二维卷积层。

用法:

语法①

layer = convolution2dLayer(filterSize,numFilters)。

输入:filterSize为卷积核大小,格式为具有两个整数的向量[h w],其中h是高,w是宽;numFilters为滤波器个数。

输出:layer为二维卷积层。

语法②

layer = convolution2dLayer(filterSize,numFilters,Name,Value)。

该函数中常用参数的具体含义见表2-1。

表2-1 convolution2dLayer函数常用参数含义

例如,convolution2dLayer([3 3],8,'Padding','same'),这个语句实现的功能为创建一个卷积层,卷积核大小为3×3,卷积核的个数为8(每个卷积核的通道数与输入图像的通道数相等),卷积的方式为零填充方式(即设定为same方式)。

温馨提示

如果卷积核为方阵,卷积核的大小可以只用方阵的维数表示。即convolution2 dLayer ([3 3],8,' Padding ','same')也可以表示为convolution2dLayer(3,8,'Padding ',' same')。

3.batchNormalizationLayer函数

功能:创建一个批量归一化(Batch Normalization)层,将上一层的输出信息批量进行归一化后再送入下一层。

用法:layer = batchNormalizationLayer。

输出:layer为所构建的批量归一化层。

4.reluLayer函数

功能:创建一个ReLU非线性激活函数。

用法:layer = reluLayer。

输出:layer为ReLU非线性激活函数。

5.maxPooling2 dLayer函数

功能:创建一个二维最大池化层。

用法:

语法①

layer = maxPooling2dLayer (poolSize)。

输入:poolSize为池化区域的大小。

输出:layer为最大池化层。

语法②

layer = maxPooling2dLayer (poolSize,Name,Value)。

该函数中常用参数的具体含义见表2-2。

表2-2 maxPooling2dLayer函数参数含义

例如,maxPooling2dLayer(2,'Stride',2),这个语句实现的功能为创建一个最大池化层,池化层的区域为2×2,进行池化运算的步长为2。

6.fullyConnectedLayer函数

功能:创建一个全连接层。

用法:

语法①

layer = fullyConnectedLayer(outputSize)。

输入:outputSize指定所要输出的全连接层的大小。

输出:layer为全连接层。

语法②

layer = fullyConnectedLayer(outputSize,Name,Value)。

该函数中常用参数的具体含义见表2-3。

表2-3 fullyConnectedLayer函数参数含义

例如,fullyConnectedLayer (10),这个语句实现的功能为创建一个有10个输出的全连接层。

7.softmaxLayer函数

功能:创建一个softmax层。

用法:layer = softmaxLayer。

输出:layer为Softmax层。

8.classificationLayer函数

功能:该函数创建一个分类输出层。

用法:layer = classificationLayer。

输出:layer为分类层。

2.4.3 构造卷积神经网络

针对本节2.4.1中所提出的需求,构建具有两个卷积层的卷积神经网络,网络结构及各部分的参数见表2-4。

表2-4 所设计的卷积神经网络及各部分的参数

采用2.4.2节所介绍的函数,实现表2-4所示的卷积神经网络的程序代码如下。

2.4.4 程序实现与详解

满足2.4.1需求的程序代码如例程2-1所示,其运行效果如图2-19所示。请读者结合注释仔细理解。

例程2-1:构建一个用于分类的卷积神经网络。

图2-19 例程2-1的运行结果