主要内容

定义自定义深度学习层

提示

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

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

本主题解释深度学习层的体系结构,以及如何定义用于任务的自定义层。

类型 描述
中间一层

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

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

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

分类输出层

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

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

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

回归输出层

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

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

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

层模板

你可以使用下面的模板来定义新的图层。

中间层模板

分类输出层模板

回归输出层模板

中间层架构

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

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

层可以有多个输入或输出。例如,一层可以取X1、……XN从多个先前的层和向前传播输出Z1、……Z到后续的层。

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

在反向通过网络的过程中,每一层对该层的输出求损失的导数,计算损失的导数l相对于输入,然后反向传播结果。如果该层具有可学习参数,则该层还计算层权值(可学习参数)的导数。该层使用权重的导数来更新可学习参数。

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

有关自定义中间层的详细信息,请参见定义自定义深度学习中间层

输出层体系结构

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

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

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

检查自定义层的有效性

如果您创建了自定义深度学习层,则可以使用checkLayer函数检查该层是否有效。该函数检查层的有效性、GPU兼容性、正确定义的梯度和代码生成兼容性。使用实例检查某层是否有效。

validInputSize checkLayer(层)
是层的实例和validInputSize指定层的有效输入大小的向量或单元格数组。要检查多个观察结果,请使用ObservationDimension选择。要运行代码生成兼容性检查,请设置CheckCodegenCompatibility选项1(真正的)。对于大的输入大小,梯度检查需要更长的时间运行。要加快检查速度,请指定较小的有效输入大小。

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

另请参阅

|||||||||

相关的话题