resnetLayers
描述
创建一个二维剩余的网络图像输入指定的大小lgraph
= resnetLayers (inputSize
,numClasses
)inputSize
和一些指定的类numClasses
。剩余网络由成堆的街区。每个块包含深度学习层。网络层包括一个图像分类,适用于预测输入图像的分类标签。
创建一个三维残余网络使用resnet3dLayers
。
例子
剩余网络瓶颈
创建一个残余网络瓶颈的架构。
图象尺寸= (224 224 3);numClasses = 10;numClasses lgraph = resnetLayers(图象尺寸)
lgraph = LayerGraph属性:InputNames:{“输入”}OutputNames:{“输出”}层:x1 nnet.cnn.layer.Layer[177]连接:[192 x2表)
分析了网络。
analyzeNetwork (lgraph)
这个网络相当于ResNet-50残余网络。
剩余网络使用自定义堆栈深度
使用自定义创建一个resnet - 101网络堆栈深度。
图象尺寸= (224 224 3);numClasses = 10;stackDepth = [3 4 23 3];numFilters = (64 128 256 512);numClasses lgraph = resnetLayers(图象尺寸,…StackDepth = StackDepth,…NumFilters = NumFilters)
lgraph = LayerGraph属性:InputNames:{“输入”}OutputNames:{“输出”}层:x1 nnet.cnn.layer.Layer[347]连接:[379 x2表)
分析了网络。
analyzeNetwork (lgraph)
火车残余网络
创建和火车残余网络对图像进行分类。
数字数据加载内存数值数组使用digitTrain4DArrayData
和digitTest4DArrayData
功能。
[XTrain, YTrain] = digitTrain4DArrayData;[XTest,欧美]= digitTest4DArrayData;
定义残余网络。数字数据包含28-by-28像素图像,因此,构建一个较小的残余网络过滤器。
图象尺寸= [28 28 1];numClasses = 10;numClasses lgraph = resnetLayers(图象尺寸,…InitialStride = 1,…InitialFilterSize = 3,…InitialNumFilters = 16,…StackDepth = [4 3 2],…NumFilters = [16 32 64]);
将选项设置为默认设置随机梯度下降的势头。时代的最大数量为5,开始培训一个初始的学习速率为0.1。
选择= trainingOptions (“个”,…MaxEpochs = 5,…InitialLearnRate = 0.1,…Verbose = false,…情节=“训练进步”);
培训网络。
网= trainNetwork (XTrain YTrain、lgraph选项);
测试网络的性能评估测试数据的预测精度。使用分类
每个测试函数来预测类标签的图片。
YPred =分类(净,XTest);
计算的准确性。标签的准确性是分数网络预测正确。
精度= (YPred = =次)/元素个数之和(欧美)
精度= 0.9956
剩余网络转换为dlnetwork
对象
训练一个残余网络使用自定义训练循环,首先将它转换成一个dlnetwork
对象。
创建一个残余网络。
lgraph = resnetLayers ((224 224), 5);
删除分类层。
lgraph = removeLayers (lgraph,“输出”);
用一个新的替换输入层,输入层归一化
设置为“没有”
。使用一个输入层与中心零位或z分数归一化,您必须指定一个imageInputLayer
非空的值的意思是
财产。例如,意味着=总和(XTrain, 4)
,在那里XTrain
是一个四维数组包含输入数据。
newInputLayer = imageInputLayer(224 224 3,标准化=“没有”);lgraph = replaceLayer (lgraph,“输入”,newInputLayer);
转换为一个dlnetwork
。
dlnet = dlnetwork (lgraph)
dlnet = dlnetwork属性:层:x1 nnet.cnn.layer.Layer[176]连接:[191 x2表]可学的:[214 x3表]状态:[106 x3表]InputNames: {“imageinput”} OutputNames: {“softmax”}初始化:1观点总结总结。
输入参数
inputSize
- - - - - -网络输入图像大小
2-element向量|转换向量
网络输入图像大小,指定为以下之一:
2-element向量形式(高度,宽度]。
转换向量形式(高度,宽度,深度),深度通道的数量。集深度来
3
并为RGB图像1
为灰度图像。多光谱和高光谱图像集深度通道的数量。
的高度和宽度值必须大于或等于initialStride * poolingStride * 2D,在那里D是将采样块的数量。设置初始步使用InitialStride
论点。池的跨越1
当InitialPoolingLayer
被设置为“没有”
,2
否则。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
numClasses
- - - - - -类的数量
比1大的整数
图像分类的类网络,指定为一个比1大的整数。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
名称-值参数
指定可选的双参数作为Name1 = Value1,…,以=家
,在那里的名字
参数名称和吗价值
相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。
例子:InitialFilterSize = [5,5], InitialNumFilters = 32, BottleneckType =“没有”
指定一个初始过滤5-by-5像素大小,32初始过滤,和没有瓶颈的网络体系结构组件。
InitialFilterSize
- - - - - -在第一次卷积滤波器尺寸层
7
(默认)|正整数|2-element向量的正整数
过滤器尺寸在第一个卷积层,指定为以下之一:
正整数。过滤器有同样的高度和宽度。例如,指定
5
产量一个过滤器的高度和宽度5。2-element向量形式(高度,宽度]。例如,指定一个初始过滤的大小
(1 - 5)
收益率高度1和宽度5的一个过滤器。
例子:InitialFilterSize = (5, 5)
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
InitialNumFilters
- - - - - -第一次卷积的过滤层
64年
(默认)|正整数
第一卷积的过滤层,指定为一个正整数。初始过滤的数量决定了渠道的数量(特征图谱)的输出第一卷积层残余网络。
例子:InitialNumFilters = 32
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
InitialStride
- - - - - -步在第一次卷积层
2
(默认)|正整数|2-element向量的正整数
大步的卷积层,指定为:
正整数。步有同样的高度和宽度。例如,指定
3
收益率高度和宽度3步。2-element向量形式(高度,宽度]。例如,指定一个初始的步伐
(1 2)
收益率高度宽度1和2的步伐。
步定义的步长遍历输入垂直和水平。
例子:InitialStride = (3、3)
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
InitialPoolingLayer
- - - - - -第一个池层
“马克斯”
(默认)|“平均”
|“没有”
第一个池层初始残余块之前,指定为以下之一:
“马克斯”
——使用max池层之前最初的残块。有关更多信息,请参见maxPooling2dLayer
。“平均”
——使用平均池层之前最初的残块。有关更多信息,请参见averagePooling2dLayer
。“没有”
——不使用池层之前最初的残块。
例子:InitialPoolingLayer =“平均”
数据类型:字符
|字符串
ResidualBlockType
- - - - - -剩余块类型
“batchnorm-before-add”
(默认)|“batchnorm-after-add”
BottleneckType
- - - - - -块瓶颈类型
“downsample-first-conv”
(默认)|“没有”
块瓶颈类型,指定为以下之一:
“downsample-first-conv”
——使用瓶颈残块执行将采样的卷积层将采样的残块,使用2的步伐。瓶颈残块包含三个卷积层:将采样通道尺寸1×1层,3 x3的卷积层和一层1×1 upsampling通道尺寸。过滤器的数量在最后卷积层是四倍,在前两个卷积层。有关更多信息,请参见
NumFilters
。“没有”
——不使用瓶颈残块。剩余3×3的卷积模块由两层。
瓶颈块执行1×1 3×3的卷积,卷积之前减少渠道的四个因素之一。网络有或没有瓶颈块会有类似水平的计算复杂度,但传播特性的总数在剩余连接四倍使用瓶颈时单位。因此,使用一个瓶颈增加网络的效率[1]。更多信息在每个层残块,明白了更多关于。
例子:BottleneckType = "没有"
数据类型:字符
|字符串
StackDepth
- - - - - -在每个堆栈的残块
(3 4 6 3)
(默认)|向量的正整数
每个栈的残块,指定为一个向量的正整数。例如,如果堆栈深度(3 4 6 3)
网络有四个栈,三块,四块,六块,三块。
指定的过滤器的卷积层堆栈使用NumFilters
论点。的StackDepth
值必须有相同数量的元素NumFilters
价值。
例子:StackDepth = (9 69 9)
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
NumFilters
- - - - - -每个栈的卷积的过滤层
(64 128 256 512)
(默认)|向量的正整数
数量的每个堆栈滤波器的卷积层,指定为一个向量的正整数。
当您设置
BottleneckType
来“downsample-first-conv”
在每个块,前两个卷积层每个堆栈有相同数量的过滤器,设定的NumFilters
价值。最后卷积层有四倍的过滤器在第一两个卷积层。例如,假设您设置
NumFilters
来5 [4]
和BottleneckType
来“downsample-first-conv”
。在第一个堆栈,前两个卷积层每一块有4个过滤器和每一块的最后卷积层有16个过滤器。在第二个堆栈,前两个卷积层每一块有5过滤器、过滤最后卷积有20层。当您设置
BottleneckType
来“没有”
,每个堆栈中的卷积层具有相同数量的过滤器,设定的NumFilters
价值。
的NumFilters
值必须有相同数量的元素StackDepth
价值。
的NumFilters
价值决定了层残连接在最初的残块。有一个卷积层剩余连接如果满足下列条件之一:
BottleneckType = " downsample-first-conv "
(默认),InitialNumFilters
不等于四倍的第一个元素NumFilters
。BottleneckType = "没有"
和InitialNumFilters
不等于第一个元素的NumFilters
。
更多信息关于每一层的残块,明白了更多关于。
例子:NumFilters = (32 64 126 256)
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
归一化
- - - - - -数据归一化
“zerocenter”
(默认)|“zscore”
数据规范化应用每次通过输入层数据forward-propagated,指定为以下之一:
“zerocenter”
——减去均值。在训练时间平均计算。“zscore”
——减去均值和除以标准差。平均值和标准偏差计算训练时间。
例子:归一化= " zscore "
数据类型:字符
|字符串
输出参数
lgraph
——剩余网络
layerGraph
对象
剩余的网络,作为一个返回layerGraph
对象。
更多关于
剩余的网络
剩余网络(ResNets)是一种深层网络组成的构建块剩余的连接(也称为跳过或快捷方式连接)。这些连接允许跳过卷积的输入单元的主要分支,从而提供一个更简单的路径通过网络。通过允许参数梯度流更容易从输出层到层网络的早些时候,剩余连接帮助缓和梯度消失在早期训练的问题。
剩余的结构网络是灵活的。剩余的关键组件是包含关系剩余块。一群被称为残块堆栈。ResNet架构由初始层,其次是堆栈包含残块,然后最后一层。网络有三个类型的残块:
初始残余块——这个块发生在第一个堆栈的开始。剩余的层连接的初始残余块确定块保存激活大小或执行将采样。
标准残差块——这在每个堆栈块发生多次,第一次将采样后残块。标准的残块保存激活大小。
Downsampling残块——这个块发生一次,每个堆栈的开始。第一个回旋的单位将采样块downsamples空间维度的两倍。
一个典型的堆栈downsampling残块,紧随其后米
标准残块,米
大于或等于1。第一个堆栈是唯一的堆栈,始于最初的残块。
最初的标准,将采样残块瓶颈或nonbottleneck块。瓶颈块执行1×1 3×3的卷积,卷积之前减少渠道的数量的四倍。网络有或没有瓶颈街区有类似水平的计算复杂度,但传播特性的总数在剩余连接四倍当你使用瓶颈单元。因此,使用瓶颈块增加网络的效率。
层内每一块都是由块的类型和设置的选项。
屏蔽层
的名字 | 初始层 | 初始残余块 | 标准残差块(BottleneckType = " downsample-first-conv " ) |
标准残差块(BottleneckType = "没有" ) |
将采样剩余块 | 最后一层 |
描述 | 剩余网络始于以下层,为了:
设置可选池层使用 |
的主要分支初始残块具有相同的层作为标准残块。 的
如果 |
标准的残块与瓶颈单位有以下层,为了:
标准块已经从先前的输出剩余连接块添加层。 设置的位置添加层使用 |
标准残差块没有瓶颈单元具有以下层,为了:
标准块已经从先前的输出剩余连接块添加层。 设置的位置添加层使用 |
downsampling残块是一样的标准块(有或没有瓶颈)但的步伐 剩余的层依赖于连接
将采样块部分输入的高度和宽度,并增加渠道的数量。 |
剩余网络以以下层,为了: |
可视化例子 |
|
的初始残余块没有瓶颈和批处理的网络标准化层之前添加层。 |
标准残块的例子网络瓶颈和批处理标准化层之前添加层。 |
标准残块的例子一批网络没有瓶颈和归一化层之前添加层。 |
例子downsampling残块的网络没有瓶颈和批处理标准化层之前添加层。 |
|
卷积和完全连接层权值初始化使用他体重初始化方法[3]。有关更多信息,请参见convolution2dLayer
。
提示
在处理小图片,设置
InitialPoolingLayer
选项“没有”
删除初始池层和减少将采样的数量。剩余网络通常叫ResNet -X,在那里X是深度的网络。的深度网络被定义为最多的连续卷积或完全连接层路径从输入层到输出层。您可以使用以下公式计算网络的深度:
在哪里年代我堆栈的深度吗我。
网络具有相同的深度可以有不同的网络架构。例如,您可以创建一个ResNet-14架构有或没有一个瓶颈:
resnet14Bottleneck = resnetLayers ([224 224 3] 10…StackDepth = (2 - 2),…NumFilters = [64 - 128]);resnet14NoBottleneck = resnetLayers ([224 224 3] 10…BottleneckType =“没有”,…StackDepth = (2 2 2),…NumFilters = (64 128 256));
resnet50Bottleneck = resnetLayers ((224 224), 10);resnet34NoBottleneck = resnetLayers ([224 224 3] 10…BottleneckType =“没有”);
引用
[1]他开明、象屿张任Shaoqing,剑太阳。“深层残留图像识别的学习。“预印本,2015年12月10日提交。https://arxiv.org/abs/1512.03385。
[2]他开明、象屿张任Shaoqing,剑太阳。“身份映射在深残余网络。“预印本,提交2016年7月25日。https://arxiv.org/abs/1603.05027。
[3]他开明、象屿张任Shaoqing,剑太阳。“深深入整流器:超越人类表现ImageNet分类。”In学报2015年IEEE计算机视觉国际会议,1026 - 1034。华盛顿特区:IEEE计算机视觉的社会,2015年。
扩展功能
GPU的代码生成
生成NVIDIA的CUDA®代码®GPU使用GPU编码器™。
使用笔记和限制:
您可以使用剩余网络代码生成。首先,创建网络使用resnetLayers
函数。然后,使用trainNetwork
函数来训练网络。培训和评估网络之后,可以生成代码DAGNetwork
对象通过使用GPU编码器™。
版本历史
介绍了R2021b
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。万博1manbetx
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。