主要内容

定义自定义深度学习层

提示

本主题说明如何为您的问题定义自定义深度学习层。有关深度学习工具箱™中的内置层列表,请参见深度学习层列表

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

本主题介绍了深度学习层的体系结构以及如何定义自定义图层以用于您的任务。

类型 描述
中间层

定义自定义深度学习层并指定可选的可被动参数和状态参数。

有关更多信息,请参见定义自定义深度学习中间层

有关如何使用可学习参数定义自定义层的示例,请参见用可学习参数定义自定义深度学习层.有关如何使用多个输入定义自定义层的示例,请参见定义自定义深度学习层与多个输入

分类输出层

定义自定义分类输出层并指定丢失函数。

有关更多信息,请参见定义自定义深度学习输出图层

有关如何定义自定义分类输出层和指定损失函数的示例,请参见定义自定义分类输出层

回归输出层

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

有关更多信息,请参见定义自定义深度学习输出图层

有关展示如何定义自定义回归输出层并指定丢失功能的示例,请参阅定义自定义回归输出层

层模板

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

过渡层模板

分类输出层模板

回归输出层模板

中间层架构

在训练过程中,软件迭代地向前和向后通过网络。

在通过网络进行前进传递时,每层都会占用上一层的输出,应用函数,然后输出(向前传播)结果到下一个层。状态层,如LSTM层,也更新了图层状态。

层可以具有多个输入或输出。例如,可以采取层X1,......,XN从多个先前的图层,向前传播输出Z1,......,Z到后续层。

在网络的前向传递结束时,输出层计算损失l在预测之间Y和目标T

在网络的反向传递过程中,每一层取损耗相对于该层输出的导数,计算损耗的导数l然后反向传播结果。如果该层有可学习参数,则该层也计算层权值的导数(可学习参数)。该层利用权值的导数来更新可学习参数。

下图描述了通过深神经网络的数据流程,并突出显示通过单个输入的层的数据流X单个输出Z,和学习参数W

有关自定义中间层的更多信息,请参阅定义自定义深度学习中间层

输出层的体系结构

在训练时的前向传递结束时,输出层接收输出Y计算前一层(网络预测)的损失l在这些预测和培训目标之间。输出层计算损耗的衍生物l关于预测Y并将结果输出(向后传播)到前一层。

下图描述了通过神经网络和输出层的数据流。

有关更多信息,请参见定义自定义深度学习输出图层

检查自定义层的有效性

如果你创建一个自定义的深度学习层,那么你可以使用核对层函数检查该层是否有效。该函数检查层的有效性、GPU兼容性、正确定义的梯度和代码生成兼容性。检查层是否有效,使用如下命令:

validInputSize checkLayer(层)
在哪里是该层的实例,validInputSize是指定到图层的有效输入大小的矢量或单元格数组。要检查多个观察,请使用观察层选项。要检查代码生成兼容性,请设置CheckCodegenCompatibility选项1(真的)。对于大输入大小,渐变检查需要更长时间运行。要加快测试,请指定较小的有效输入大小。

有关更多信息,请参见检查自定义层有效性

另请参阅

|||||||||

相关的话题