定义自定义深度学习层
提示
本主题解释如何为您的问题定义自定义深度学习层。有关深度学习工具箱™中的内置层列表,请参见深度学习层列表.
您可以为您的任务定义自己的自定义深度学习层。您可以使用自定义输出层指定自定义损失函数,并定义带有或不带有可学习参数和状态参数的自定义层。定义自定义层后,可以检查该层是否有效,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
(真正的)。对于大的输入大小,梯度检查需要更长的时间运行。要加快检查速度,请指定较小的有效输入大小。
有关更多信息,请参见检查自定义层有效性.
另请参阅
functionLayer
|checkLayer
|setLearnRateFactor
|setL2Factor
|getLearnRateFactor
|getL2Factor
|findPlaceholderLayers
|replaceLayer
|assembleNetwork
|PlaceholderLayer