深度学习网络构成
要创建一个自定义层来定义一个图层图,你可以指定一个dlnetwork
对象作为可学习参数。这种方法被称为网络的作文.你可以使用网络组合:
创建一个单独的自定义层,表示可学习层的块,例如,残留块。
创建具有控制流的网络,例如,具有可以根据输入数据动态更改的部分的网络。
创建一个具有循环的网络,例如,一个具有将输出反馈回自身的部分的网络。
下面是一个演示如何定义包含可学习对象的自定义层的示例dlnetwork
对象,看到定义嵌套深度学习层.
有关演示如何使用嵌套层训练网络的示例,请参见用嵌套层训练深度学习网络.
自动初始化可学的dlnetwork
培训对象
您可以创建一个自定义层,并允许软件自动初始化任何嵌套的可学习参数dlnetwork
对象在父网络完全构建之后。嵌套网络的自动初始化意味着您不需要跟踪传递给每个包含嵌套网络的自定义层的输入的大小和形状dlnetwork
要利用自动初始化,必须指定构造函数创建未初始化的对象dlnetwork
对象。创建一个未初始化的dlnetwork
对象,设置初始化
名称-值选项设置为false。您不需要指定输入层,因此不需要指定该层的输入大小。
函数层= myLayer初始化层属性。...%定义网络。层= [%网络层到这里。];层。网络= dlnetwork (lgraph“初始化”、假);结束
当父网络初始化时,任何嵌套的可学习参数dlnetwork
对象同时初始化。可学习参数的大小取决于自定义层的输入数据的大小。该软件通过嵌套网络传播数据,并根据传播的大小和嵌套网络各层的初始化属性自动初始化参数。
类来训练父网络trainNetwork
函数,然后任意嵌套dlnetwork
对象在调用时初始化trainNetwork
.如果父网络是dlnetwork
,则任何嵌套dlnetwork
对象在父网络构造时初始化dlnetwork
在构造时初始化)或使用初始化
与父网络(如果父网络dlnetwork
在构造时未初始化)。
另外,您可以使用已经初始化的嵌套网络来构造自定义层,而不是延迟嵌套网络的初始化。这意味着在父网络之前初始化嵌套网络。这需要手动指定对嵌套网络的任何输入的大小。可以通过使用输入层或提供示例输入来实现这一点dlnetwork
构造函数。的任何输入的大小都必须指定dlnetwork
对象,您可能需要在创建层时指定输入大小。要帮助确定层输入的大小,可以使用analyzeNetwork
函数并检查前一层激活的大小。
预测和转发功能
有些层在训练和预测过程中表现不同。例如,dropout层只在训练期间执行dropout,在预测期间没有影响。一个层使用两个函数中的一个来执行转发:预测
或向前
.如果正向传递在预测时间,则该层使用预测
函数。如果前传是在训练时,那么该层使用向前
函数。如果对预测时间和训练时间不需要两个不同的函数,则可以省略向前
函数。在本例中,该层使用预测
在训练时间。
当实现预测
和向前
自定义层的功能,以确保层在dlnetwork
对象的正确行为,则使用预测
而且向前
功能dlnetwork
对象,分别。
自定义层可学习dlnetwork
对象不支持自定义向后函数。金宝app
类的内存输出参数仍然必须赋值向前
函数。
的示例代码展示了如何使用预测
而且向前
功能与dlnetwork
输入。
函数Z =预测(层,X)将输入数据转换为格式化的dlarray。X = dlarray (X,“SSCB”);%利用网络进行预测。dlnet = layer.Network;Z =预测(dlnet X);条尺寸标签。Z = stripdims (Z);结束函数向前(Z,内存)=(层,X)将输入数据转换为格式化的dlarray。X = dlarray (X,“SSCB”);%使用网络转发通过。dlnet = layer.Network;Z =前进(dlnet X);条尺寸标签。Z = stripdims (Z);内存= [];结束
如果dlnetwork
对象在训练和预测期间没有不同的行为,那么可以省略forward函数。在这种情况下,软件使用预测
函数在训练。
金宝app支持层
自定义层支持金宝appdlnetwork
不需要状态更新的对象。这意味着dlnetwork
对象不能包含有状态的层,例如批处理规范化层和LSTM层。
这个列表显示了完全支持网络组合的内置层。金宝app
输入层
层 | 描述 |
---|---|
图像输入层向网络输入二维图像,并应用数据归一化。 | |
三维图像输入层向网络输入三维图像或卷,并应用数据归一化。 | |
序列输入层向网络输入序列数据。 | |
特征输入层向网络输入特征数据并进行数据规范化。当您拥有表示特征的数值标量数据集(没有空间或时间维度的数据)时,请使用此层。 |
卷积和完全连通层
层 | 描述 |
---|---|
二维卷积层对输入应用滑动卷积滤波器。 | |
三维卷积层将滑动立方卷积滤波器应用于三维输入。 | |
二维分组卷积层将输入通道分组,并应用滑动卷积滤波器。使用分组卷积层进行通道可分(也称为深度可分)卷积。 | |
一个转置的二维卷积层上采样特征映射。 | |
一个转置的三维卷积层对三维特征图进行采样。 | |
全连接层将输入乘以一个权重矩阵,然后添加一个偏置向量。 |
激活层
层 | 描述 |
---|---|
ReLU层对输入的每个元素执行阈值操作,其中任何小于零的值都被设置为零。 | |
泄漏的ReLU层执行阈值操作,其中任何小于零的输入值都乘以一个固定的标量。 | |
剪切的ReLU层执行阈值操作,其中小于零的输入值被设置为零,高于的输入值被设置为零剪裁天花板被设置在那个天花板上。 | |
ELU激活层对正输入执行标识运算,对负输入执行指数非线性。 | |
swish激活层对层输入应用swish函数。 | |
双曲正切(tanh)激活层在层输入上应用tanh函数。 | |
softmax层对输入应用softmax函数。 |
归一化、删除和裁剪图层
层 | 描述 |
---|---|
组归一化层针对每个观察独立地跨分组子集通道归一化一个小批数据。为了加快卷积神经网络的训练速度,降低网络初始化的敏感性,可以在卷积层和非线性层之间使用分组归一化层,如ReLU层。 | |
一个层归一化层独立地对每个观测的所有通道的小批数据进行归一化。为了加快循环和多层感知器神经网络的训练,降低网络初始化的敏感性,可在可学习层之后使用层归一化层,如LSTM和全连接层。 | |
通道级本地响应(跨通道)规范化层执行通道级规范化。 | |
dropout层以给定的概率将输入元素随机设置为零。 | |
二维作物层将二维裁剪应用于输入。 |
池化和取消池化层
层 | 描述 |
---|---|
平均池化层通过将输入划分为矩形池化区域并计算每个区域的平均值来执行下采样。 | |
三维平均池化层通过将三维输入划分为立方池化区域并计算每个区域的平均值来进行下采样。 | |
全局平均池化层通过计算输入的高度和宽度维度的平均值来执行下采样。 | |
一个三维全局平均池层通过计算输入的高度、宽度和深度维度的平均值来执行下采样。 | |
最大池化层通过将输入划分为矩形池化区域,并计算每个区域的最大值来执行下采样。 | |
三维最大池化层通过将三维输入划分为立方池化区域,并计算每个区域的最大值来进行下采样。 | |
全局最大池化层通过计算输入的高度和宽度维度的最大值来执行下采样。 | |
一个三维全局最大池化层通过计算输入的高度、宽度和深度维度的最大值来执行下采样。 | |
最大反池层将最大反池层的输出反池。 |
结合层
层 | 描述 |
---|---|
添加层按元素添加来自多个神经网络层的输入。 | |
乘法层将来自多个神经网络层的输入按元素相乘。 | |
深度连接层接受具有相同高度和宽度的输入,并沿第三维度(通道维度)将它们连接起来。 | |
连接层接受输入并沿着指定的维度连接它们。除了连接维度外,所有维度的输入必须具有相同的大小。 |
GPU的兼容性
如果转发层功能完全支持金宝appdlarray
对象,那么该层是GPU兼容的。否则,为了与GPU兼容,层函数必须支持类型的输入和返回输出金宝appgpuArray
(并行计算工具箱).
许多MATLAB®内置函数支持金宝appgpuArray
(并行计算工具箱)而且dlarray
输入参数。获取支持的函数的列表金宝appdlarray
对象,看到dlarray支持的函数列表金宝app.有关在GPU上执行的函数列表,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).要使用GPU进行深度学习,还必须有支持的GPU设备。金宝app有关支持的设备的信息,请参见金宝appGPU支金宝app持按版本划分(并行计算工具箱).有关在MATLAB中使用gpu的更多信息,请参见MATLAB中的GPU计算(并行计算工具箱).
另请参阅
analyzeNetwork
|checkLayer
|dlnetwork
|trainingOptions
|trainNetwork