主要内容

ResetLayers.

创建二维残留网络

    描述

    例子

    lgraph= ResetLayers(inputSizenumClasses的)创建一个二维残差网络,其图像输入尺寸为inputSize指定的类的数量numClasses.残余网络由堆栈组成。每个块包含深度学习层。网络包括图像分类层,适用于预测输入图像的分类标签。

    要创建一个三维残留网络,请使用resnet3dLayers

    例子

    lgraph= ResetLayers(___名称=值的)使用先前语法中的任何输入参数使用一个或多个名称值参数创建剩余网络。例如,InitialNumFilters = 32在初始卷积层中指定32个过滤器。

    例子

    全部收缩

    使用瓶颈架构创建一个剩余网络。

    imageSize = [224 224 3];numClasses = 10;numClasses lgraph = resnetLayers(图象尺寸)
    LAPHRAGH =具有属性的分层图:图层:[177x1 nnet.cnn.layer.layer]连接:[192x2表]输入名:{'输入'}输出名:{'输出'}

    分析网络。

    analyzeNetwork (lgraph)

    该网络相当于Reset-50剩余网络。

    使用自定义堆栈深度创建Reset-101网络。

    imageSize = [224 224 3];numClasses = 10;stackDepth = [3 4 23 3];numFilters = [64 128 256 512];numClasses lgraph = resnetLayers(图象尺寸,...stackdepth = stackdepth,...NumFilters = NumFilters)
    lgraph = LayerGraph with properties: Layers: [347x1 nnet.cnn.layer.Layer] Connections: [379x2 table] InputNames: {'input'} OutputNames: {'output'}

    分析网络。

    analyzeNetwork (lgraph)

    创建和训练残差网络来分类图像。

    将数字数据作为内存中的数字阵列加载digittrain4darraydata.digitTest4DArrayData功能。

    [Xtrain,Ytrain] = DigitTrain4darraydata;[xtest,ytest] = digittest4darraydata;

    定义残余网络。数字数据包含28×28像素图像,因此构造具有较小滤波器的剩余网络。

    imageSize = [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的初始学习率开始训练。

    选项=培训选项(“个”...maxepochs = 5,...InitialLearnRate = 0.1,...Verbose = false,...plots =.“训练进步”);

    训练网络。

    net = trainnetwork(xtrain,ytrain,3.选项);

    通过评估测试数据的预测精度来测试网络的性能。使用分类函数来预测每个测试图像的类标签。

    YPred =分类(净,XTest);

    计算准确性。准确性是网络正确预测的标签的分数。

    精度= SUM(YPRED == YTEST)/ NUMEL(YEST)
    精度= 0.9956.

    要使用自定义训练环来训练残差网络,首先将其转换为adlnetwork目的。

    创建残留网络。

    Lgraph = Resetlayers([224 224 3],5);

    删除分类层。

    lgraph = removeLayers (lgraph,“输出”);

    用具有新的输入层替换输入图层正常化设置“没有任何”.若要使用零中心或z-score规格化的输入层,必须指定imageInputLayer带有欠换价值的的意思是财产。例如,意味着=总和(XTrain, 4),在那里XTrain是一个包含输入数据的4-D数组。

    newInputLayer = imageInputLayer([224 224 3],归一化=“没有任何”);lgraph = replaceLayer (lgraph,“输入”, newInputLayer);

    转换为一个dlnetwork

    DLNET = DLNETWORK(LGAPRO)
    dlnet = dlnetwork with properties: Layers: [176x1 nnet.cnn.layer.Layer] Connections: [191x2 table] Learnables: [214x3 table] State: [106x3 table] InputNames: {'imageinput'} OutputNames: {'softmax'} Initialized: 1

    输入参数

    全部收缩

    网络输入图像大小,指定为以下之一:

    • 表格中的2元素矢量[高度宽度].

    • 形式为[高度宽度深度], 在哪里深度为通道的数量。集深度3.为RGB图像和1为灰度图像。对于多光谱和高光谱图像,设置深度到通道的数量。

    高度宽度值必须大于或等于initialStride * poolingStride * 2D.,在那里D.是下采样块的数量。使用该初步迈出初始的论点。汇集步幅是1InitialPoolingLayer被设置为“没有任何”, 和2除此以外。

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    图像分类网络中的类数,指定为大于1的整数。

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    名称 - 值参数

    指定可选的参数成对Name1 = Value1,…,以=家,在那里的名字是参数名称和价值为对应值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

    例子:InitialFiltersize = [5,5],initialNumfilters = 32,瓶颈θ=“无”指定5 × 5像素的初始过滤器大小、32个初始过滤器和没有瓶颈组件的网络架构。
    初始层

    全部收缩

    滤波器大小在第一个卷积层中,指定为以下之一:

    • 正整数。过滤器具有相同的高度和宽度。例如,指定5.产生高5宽5的过滤器。

    • 表格中的2元素矢量[高度宽度].例如,指定初始滤波器大小(1 - 5)产生高度1和宽度5的过滤器。

    例子:initialfiltersize = [5,5]

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    第一个卷积层中的过滤器数量指定为正整数。初始滤波器的数量确定残余网络中的第一卷积层输出中的通道(特征映射)的数量。

    例子:InitialNumFilters = 32

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    第一个卷积层中的Stride,指定为:

    • 正整数。步幅的高度和宽度相等。例如,指定3.产生了高3宽3的步幅。

    • 表格中的2元素矢量[高度宽度].例如,指定的初始步幅为(1 2)产生高度1和宽度2的步幅。

    stride定义垂直和水平遍历输入的步长。

    例子:InitialStride =(3、3)

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    在初始剩余块之前的第一个池化层,指定为:

    • “最大限度”- 在初始剩余块之前使用最大池层。有关更多信息,请参阅maxPooling2dLayer

    • “平均数”—在初始残留块之前使用平均池化层。有关更多信息,请参阅averagePooling2dLayer

    • “没有任何”—不要在初始残留块之前使用池化层。

    例子:InitialPoolingLayer =“平均”

    数据类型:字符|字符串

    网络架构

    全部收缩

    残块类型,指定为下列类型之一:

    • “batchnorm-before-add”- 在剩余块中的添加层之前添加批量归一化层[1]

    • “batchnorm-after-add”- 在剩余块中的添加层后添加批量归一化层[2]

    ResidualBlockType参数指定批处理归一化层在标准和下采样残留块中的位置。有关更多信息,请参阅更多关于

    例子:ResidualBlockType = " batchnorm-after-add "

    数据类型:字符|字符串

    块瓶颈类型,指定为以下类型之一:

    • “downsample-first-conv”- 使用瓶颈在下采样残余块的第一个卷积层中执行下采样的瓶颈残余块,使用2.瓶颈残留块由三个卷积层组成:一个1×1层,用于对通道尺寸下采样,a 3- 3卷积层,以及用于上采样通道尺寸的1×1层。

      最后一个卷积层的滤波器数量是前两个卷积层的4倍。有关更多信息,请参阅numfilters.

    • “没有任何”—不要使用瓶颈残留块。剩余块由两个3 × 3的卷积层组成。

    瓶颈块在进行3 × 3卷积之前执行1 × 1卷积,以将通道数量减少到原来的4倍。有瓶颈块和没有瓶颈块的网络将具有相似的计算复杂度,但当使用瓶颈单元时,剩余连接中传播的特征总数将增加四倍。因此,使用瓶颈可以提高网络的效率[1].有关每个残差块中的图层的更多信息,请参阅更多关于

    例子:BottleneckType = "没有"

    数据类型:字符|字符串

    每个堆栈中的剩余块数,指定为正整数的向量。例如,如果堆栈深度是[3 4 6],网络有四堆,三堆,四堆,六堆,三堆。

    属性指定每个堆栈的卷积层中的过滤器数量numfilters.论点。这StackDepth值的元素数量必须与numfilters.价值。

    例子:stackdepth = [9 12 69 9]

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    每个堆栈的卷积层中的过滤器数量,指定为正整数向量。

    • 当您设置瓶颈术“downsample-first-conv”,每个堆栈的每个块中的前两个卷积层具有相同数量的滤波器,由此设置numfilters.价值。最后一个卷积层的滤波器数量是前两个卷积层的四倍。

      例如,假设您设置了numfilters.[4 5]瓶颈术“downsample-first-conv”.在第一个堆栈中,每个块的前两个卷积层有4个过滤器,每个块的最后一个卷积层有16个过滤器。在第二个堆栈中,每个块的前两个卷积层有5个滤波器,最后一个卷积层有20个滤波器。

    • 当您设置瓶颈术“没有任何”,每个堆栈中的卷积层具有相同数量的过滤器,由numfilters.价值。

    numfilters.值的元素数量必须与StackDepth价值。

    numfilters.值确定初始残差块中的残余连接上的图层。如果满足以下条件之一,则在残差连接上存在卷积层:

    • BottleneckType = " downsample-first-conv "(默认)和InitialNumfilters.不等于4乘以的第一个元素numfilters.

    • BottleneckType = "没有"InitialNumfilters.不等于的第一个元素numfilters.

    有关每个残留块中的层的更多信息,请参见更多关于

    例子:numfilters = [32 64 126 256]

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    每次数据通过输入层前向传播时应用的数据规范化,指定为以下之一:

    • “Zerocenter”-减去均值。平均值是在训练时计算的。

    • “zscore”-减去平均值,然后除以标准差。在训练时计算均值和标准差。

    例子:归一化= " zscore "

    数据类型:字符|字符串

    输出参数

    全部收缩

    剩余网络,返回为a分层图目的。

    更多关于

    全部收缩

    剩余的网络

    残余网络(RESNET)是一种由构建块组成的深网络类型剩余连接(也称为跳过快捷方式连接)。这些连接允许输入跳过主分支的卷积单元,从而通过网络提供更简单的路径。通过允许从输出层更容易地将参数梯度流到网络的早期层,残差连接有助于减轻早期训练期间消失梯度的问题。

    剩余网络的结构是灵活的。关键组件是包含在内部的残余连接剩余块.一组剩余块称为A.一个ResNet架构由初始层、包含残留块的堆栈和最后的层组成。一个网络有三种类型的残留块:

    • 初始剩余块-这个块发生在第一个堆栈的开始。初始残留块的残留连接层决定了该块是否保留激活尺寸或进行下采样。

    • 标准残留块-这个块在每个堆栈中出现多次,在第一个下采样残留块之后。标准残留块保留活化尺寸。

    • 下采样残余块 - 此块发生一次,在每个堆栈的开始处发生一次。下采样块中的第一卷积单元将空间尺寸下降两倍。

    典型的堆栈具有下采样残余块,然后是M.标准剩余块,在哪里M.大于或等于一个。第一堆栈是唯一以初始剩余块开头的堆栈。

    初始、标准和下采样残留块可以瓶颈或nonbottleneck块。瓶颈块在3 × 3卷积之前执行1 × 1卷积,以将通道数量减少4倍。有瓶颈块和没有瓶颈块的网络具有相似的计算复杂度,但是当您使用瓶颈单元时,在剩余连接中传播的特征总数是原来的4倍。因此,使用瓶颈块可以提高网络的效率。

    每个块内的层由块的类型和您设置的选项决定。

    块层

    的名字 初始层 初始残余块 标准残余块(BottleneckType = " downsample-first-conv "的) 标准残余块(BottleneckType = "没有"的) 将采样剩余块 最后一层
    描述

    一个残差网络从以下几层开始,顺序如下:

    属性设置可选的池化层InitialPoolingLayer论点。

    初始残块的主要分支具有与标准残块相同的层数。

    InitialNumfilters.numfilters.值确定残留连接上的图层。残留连接具有卷积层[1,1]过滤和[1,1]如果满足以下条件之一:

    • BottleneckType = " downsample-first-conv "(默认)和InitialNumfilters.不等于4乘以的第一个元素numfilters.

    • BottleneckType = "没有"InitialNumfilters.不等于的第一个元素numfilters.

    如果ResidualBlockType被设置为“batchnorm-before-add”,残留连接也将具有批量归一化层。

    带有瓶颈单元的标准残块依次分为以下几层:

    标准块具有从前一个块的输出到附加层的剩余连接。

    使用该添加层的位置ResidualBlockType论点。

    无瓶颈单元的标准残块按顺序分为以下几层:

    标准块具有从前一个块的输出到附加层的剩余连接。

    使用该添加层的位置ResidualBlockType论点。

    下采样剩余块与标准块(无论有或没有瓶颈)相同,但有一个步伐[2,2]在第一卷积层上与附加层上的残差连接。

    残余连接上的层取决于ResidualBlockType价值。

    下采样块将输入的高度和宽度减半,并增加通道的数量。

    剩余网络以以下层结束,顺序如下:

    示例可视化

    剩余网络的初始层。

    没有瓶颈的网络的初始残留块的示例,并且在添加层之前具有批量归一化层。

    残差网络中的初始残余块的示例。

    具有瓶颈的网络的标准剩余块的示例,并在加法层之前具有批量归一化层。

    具有瓶颈单元的残余网络中标准残余块的示例。

    一个没有瓶颈且在添加层之前有批处理归一化层的网络的标准残留块的例子。

    没有瓶颈单元的残留网络中的标准残留块的例子。

    没有瓶颈的网络的下采样残余块的示例,并且在添加层之前具有批量归一化层。

    没有瓶颈单元的残差网络中的下采样残差块的例子。

    剩余网络的最后几层。

    使用HE权重初始化方法初始化卷积和完全连接的层权重[3].有关更多信息,请参阅Convolution2Dlayer.

    提示

    • 当处理小图像时,设置InitialPoolingLayer选项“没有任何”删除初始池层并减少下采样量。

    • 残留网络通常称为ResNet-X,在那里X深度网络。网络的深度被定义为从输入层到输出层的路径上的最大数量的顺序卷积或完全连接的层。您可以使用以下公式来计算网络的深度:

      深度= { 1 + 2 一世 = 1 N. S. 一世 + 1 如果没有瓶颈 1 + 3. 一世 = 1 N. S. 一世 + 1 如果瓶颈

      在哪里S.一世是堆栈的景深一世

      相同深度的网络可能具有不同的网络结构。例如,你可以创建一个有或没有瓶颈的ResNet-14架构:

      resnet14瓶颈= resnetLayers([224 224 3],10,...stackdepth = [2 2],...numfilters = [64 128]);Reset14NobottLeneck = ResetLayers([224 224 3],10,...BottleneckType =“没有任何”...StackDepth = (2 2 2),...numfilters = [64 128 256]);
      瓶颈和非瓶颈架构之间的关系还意味着,有瓶颈的网络与没有瓶颈的网络具有不同的深度。
      Resnet50bottleneck = ResetLayers([224 224 3],10);Resnet34NobottLeneck = ResetLayers([224 224 3],10,...BottleneckType =“没有任何”);

    参考文献

    [1]他,Kaiming,湘雅张,少清任,剑孙。“图像识别的深度剩余学习。”预印刷,2015年12月10日提交。https://arxiv.org/abs/1512.03385。

    何开明,张翔宇,任少青,孙健深层残留网络中的身份映射预印本,2016年7月25日提交。https://arxiv.org/abs/1603.05027。

    [3]他,Kaiming,湘雅张,少清任,剑孙。“深入研究整流器:超越了在想象中分类上的人力水平表现。”在2015年IEEE计算机愿景会议的诉讼程序, 1026 - 1034。计算机视觉,2015。

    扩展功能

    介绍在R2021B.