Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

定义自定义深度学习层

提示

本主题说明如何针对您的问题定义自定义深度学习层。有关 Deep Learning Toolbox™ 中的内置层的列表,请参阅深度学习层列表

您可以针对您的任务定义自己的自定义深度学习层。您可以使用自定义输出层指定自定义损失函数,并定义具有或不具有可学习参数和状态参数的自定义层。定义自定义层后,您可以检查该层是否有效,是否与 GPU 兼容,以及是否输出正确定义的梯度。

本主题说明深度学习层的架构,以及如何针对您的任务定义自定义层。

类型描述
中间层

定义一个自定义深度学习层,并指定可选的可学习参数和状态参数。

有关详细信息,请参阅Define Custom Deep Learning Intermediate Layers

有关如何使用可学习参数定义自定义层的示例,请参阅Define Custom Deep Learning Layer with Learnable Parameters。有关如何定义具有多个输入的自定义层的示例,请参阅Define Custom Deep Learning Layer with Multiple Inputs

分类输出层

定义一个自定义分类输出层并指定损失函数。

有关详细信息,请参阅Define Custom Deep Learning Output Layers

有关如何定义自定义分类输出层和指定损失函数的示例,请参阅Define Custom Classification Output Layer

回归输出层

定义一个自定义回归输出层并指定损失函数。

有关详细信息,请参阅Define Custom Deep Learning Output Layers

有关如何定义一个自定义回归输出层和指定损失函数的示例,请参阅Define Custom Regression Output Layer

层模板

您可以使用以下模板来定义新层。

 中间层模板

 分类输出层模板

 回归输出层模板

中间层架构

在训练过程中,软件在网络中以迭代方式执行前向传导和后向传导。

在网络的前向传导过程中,每个层获取前面各层的输出,应用一个函数,然后将结果输出(正向传播)到后面各层。有状态的层(如 LSTM 层)也会更新层状态。

层可以有多个输入或输出。例如,层可以从多个前面的层中获取 X1、…、XN,并将输出 Z1、…、ZM 正向传播到后续各层。

在执行网络的前向传导结束时,输出层计算预测值 Y 和目标 T 之间的损失 L。

在网络的后向传导过程中,每个层都接受损失关于该层的输出的导数,计算损失 L 关于输入的导数,然后反向传播结果。如果层具有可学习参数,则该层还会计算层权重(可学习参数)的导数。该层使用权重的导数来更新可学习参数。

下图说明通过深度神经网络的数据流,重点显示通过具有单个输入 X、单个输出 Z 和可学习参数 W 的层的数据流。

有关自定义中间层的详细信息,请参阅Define Custom Deep Learning Intermediate Layers

输出层架构

在训练时的前向传导结束时,输出层获取前一个层(网络预测)的预测输出 Y,并计算这些预测和训练目标之间的损失 L。输出层计算损失 L 关于预测 Y 的导数,并将结果输出(反向传播)到前一个层。

下图说明通过神经网络和输出层的数据流。

有关详细信息,请参阅Define Custom Deep Learning Output Layers

检查自定义层的有效性

如果您创建自定义深度学习层,则可以使用 checkLayer 函数来检查该层是否有效。该函数检查层的有效性、GPU 兼容性、正确定义的梯度和代码生成兼容性。要检查层是否有效,请运行以下命令:

checkLayer(layer,validInputSize)
layer 是层的实例,validInputSize 是指定层的有效输入大小的向量或元胞数组。要检查多个观测值,请使用 ObservationDimension 选项。要运行代码生成兼容性检查,请将 CheckCodegenCompatibility 选项设置为 1 (true)。对于较大的输入大小,梯度检查的运行时间较长。为了加快检查速度,请指定较小的有效输入大小。

有关详细信息,请参阅Check Custom Layer Validity

另请参阅

| | | | | | | | |

相关主题