主要内容

定义自定义深度学习层

提示

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

您可以为您的任务定义您自己的自定义深度学习层。您可以使用自定义输出层指定自定义损失函数,并定义带有或不带有可学习参数和状态参数的自定义层。定义自定义层后,您可以检查该层是否有效,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(真正的)。对于较大的输入,梯度检查需要更长的时间来运行。要加快测试速度,请指定较小的有效输入大小。

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

另请参阅

|||||||||

相关的话题