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的运行结果