如果深度学习工具箱不提供任务所需的输出层,则可以使用本主题作为指南定义自己的自定义层。定义自定义层后,可以自动检查该层是否有效,GPU是否兼容,输出正确定义的梯度。
在训练时的前向传递结束时,输出层获取预测(网络输出)Y,并计算损失l在这些预测和训练目标之间。输出层计算损耗的导数l关于预测Y并将结果输出(向后传播)到前一层。
下图描述了通过卷积神经网络和输出层的数据流。
要定义自定义中间层,请使用这些类定义模板之一。模板概述了输出层类定义的结构。他们大纲:
这个模板概述了带有损失函数的分类输出层的结构。有关如何定义分类输出层和指定损失函数的示例,请参见定义自定义分类输出层.
classdefmyClassificationLayer < nnet.layer.ClassificationLayer特性%(可选)图层属性。%图层属性到这里。结束方法函数tillay = myclassificationlayer()%(可选)创建一个myclassificationLayer。%层构造函数在这里。结束函数loss = forwardLoss(layer, Y, T)%返回预测Y和训练之间的损失%的目标T。%%的输入:%层 - 输出层% Y -网络预测% T -训练目标%%输出:% loss - Y和T之间的损失%层前向损失功能到这里。结束函数dLdY = backwardLoss(layer, Y, T)%(可选)反向传播损失的导数%的功能。%%的输入:%层 - 输出层% Y -网络预测% T -训练目标%%输出:% dLdY -损失对…的导数%预测y%层向后损失功能在这里。结束结束结束
这个模板概述了带有损失函数的回归输出层的结构。有关如何定义回归输出层和指定损失函数的示例,请参见定义自定义回归输出层.
classdefmyRegressionLayer < nnet.layer.RegressionLayer特性%(可选)图层属性。%图层属性到这里。结束方法函数层= myRegressionLayer ()%(可选)创建myRegressionLayer。%层构造函数在这里。结束函数loss = forwardLoss(layer, Y, T)%返回预测Y和训练之间的损失%的目标T。%%的输入:%层 - 输出层% Y -网络预测% T -训练目标%%输出:% loss - Y和T之间的损失%层前向损失功能到这里。结束函数dLdY = backwardLoss(layer, Y, T)%(可选)反向传播损失的导数%的功能。%%的输入:%层 - 输出层% Y -网络预测% T -训练目标%%输出:% dLdY -损失对…的导数%预测y%层向后损失功能在这里。结束结束结束
属性中声明图层属性特性
类定义的部分。
默认情况下,自定义输出层有以下属性:
的名字
- - - - - -图层名称,指定为字符向量或字符串标量。为了层
数组输入,trainNetwork
,汇编
,layerGraph
,dlnetwork
函数自动为层分配名称的名字
设置为''
.
描述
-层的单行描述,指定为字符向量或字符串标量。该描述出现在层显示在层
数组中。如果您没有指定层描述,则软件显示“分类输出”
或者“回归输出”
.
类型
- 图层的类型,指定为字符向量或字符串标量。的价值类型
当层显示在层
数组中。如果不指定层类型,则软件将显示层类名称。
自定义分类层也有以下属性:
类
- - - - - -输出层的类,指定为分类向量,字符串阵列,字符向量的单元格数组,或“汽车”
.如果类
是“汽车”
,然后软件在训练时自动设置课程。如果指定字符向量的字符串数组或单元格数组str
,然后软件将输出层的类设置为分类(str, str)
.
自定义回归层也有以下属性:
响应
- - - - - -响应的名称,指定了字符向量或字符串数组的单元格数组。在培训时,软件根据培训数据自动设置响应名称。默认为{}
.
如果图层没有其他属性,那么您可以省略特性
部分。
输出层计算损失l
在预测和目标之间使用正向损失函数,并计算损失相对于使用向后损失函数的预测的导数。
的语法forwardLoss
是损失= forwardLoss(层,Y, T)
.输入Y
与电视台的预测相符。这些预测是前一层的输出。输入T
与培训目标相对应。输出损失
是两者之间的损失Y
和T
根据指定的损耗函数。输出损失
必须是标量。
如果支持层转发丢失功能万博1manbetxdlarray
对象,则软件自动确定后向损失功能。获取支持的函数列表万博1manbetxdlarray
对象,参见支持dlarray的函数列表万博1manbetx.或者,要定义自定义向后损失函数,请创建名为backwardLoss
.有关如何定义自定义向后损失函数的示例,请参见指定自定义输出层向后损耗功能.
的语法backwardLoss
是dLdY = backwardLoss(层,Y, T)
.输入Y
包含网络和网络所做的预测T
包含培训目标。输出dLdY
关于预测的损失是衍生的Y
.输出dLdY
必须与图层输入的大小相同Y
.
对于分类问题,的维数T
这取决于问题的类型。
分类任务 | 输入的大小 | 观察维度 |
---|---|---|
二维图像分类 | 1-by-1-by -K——- - - - - -N,在那里K班级的数量是多少N为观察次数。 | 4 |
三维图像分类 | 1-by-1-by-1-by -K——- - - - - -N,在那里K班级的数量是多少N为观察次数。 | 5 |
Sequence-to-label分类 | K——- - - - - -N,在那里K班级的数量是多少N为观察次数。 | 2 |
Sequence-to-sequence分类 | K——- - - - - -N——- - - - - -年代,在那里K为班级数,N是观察的次数,和年代是序列长度。 | 2 |
的大小Y
取决于前一层的输出。以确保Y
大小是一样的吗T
,则必须在输出层之前包含输出正确大小的层。例如,确保Y
4-D数组的预测得分是什么K类,您可以包含大小完全连接的层K在输出层之前有一个softmax层。
对于回归问题,的维度T
也取决于问题的类型。
回归的任务 | 输入的大小 | 观察维度 |
---|---|---|
二维图像回归 | 1-by-1-by -R——- - - - - -N,在那里R是多少回应和N为观察次数。 | 4 |
二维Image-to-image回归 | h——- - - - - -w——- - - - - -c——- - - - - -N ,在那里h,w,c输出通道的高度、宽度和数量分别是N为观察次数。 |
4 |
3-D图像回归 | 1-by-1-by-1-by -R——- - - - - -N,在那里R是多少回应和N为观察次数。 | 5 |
3 d Image-to-image回归 | h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N ,在那里h,w,d,c输出的高度、宽度、深度和通道数分别是N为观察次数。 |
5 |
Sequence-to-one回归 | R——- - - - - -N,在那里R是多少回应和N为观察次数。 | 2 |
Sequence-to-sequence回归 | R——- - - - - -N——- - - - - -年代,在那里R为响应次数,N是观察的次数,和年代是序列长度。 | 2 |
例如,如果网络定义了一个只有一个响应的图像回归网络,并且有大小为50的小批量,那么T
是1-×1×1-50的4-D阵列。
的大小Y
取决于前一层的输出。以确保Y
大小是一样的吗T
,则必须在输出层之前包含输出正确大小的层。例如,对于图像回归R回应,以确保Y
是一个4-d阵列的正确尺寸,您可以包含完全连接的大小层R在输出层之前。
的forwardLoss
和backwardLoss
函数有以下输出参数。
功能 | 输出参数 | 描述 |
---|---|---|
forwardLoss |
损失 |
预测之间的计算损失Y 真正的目标T . |
backwardLoss |
dLdY |
损失相对于预测的导数Y . |
的backwardLoss
必须输出dLdY
与前一层所期望的大小dLdY
与尺寸相同Y
.
如果层转发功能完全支持万博1manbetxdlarray
对象,则该层是GPU兼容的。否则,为了与GPU兼容,层函数必须支持输入和返回输出类型万博1manbetxgpuArray
(并行计算工具箱).
许多MATLAB®内置函数支持万博1manbetxgpuArray
(并行计算工具箱)和dlarray
输入参数。获取支持的函数列表万博1manbetxdlarray
对象,参见支持dlarray的函数列表万博1manbetx.有关在GPU上执行的函数列表,请参见在GPU上运行MATLAB函数(并行计算工具箱).要使用GPU进行深度学习,您还必须有支持的GPU设备。万博1manbetx有关支持的设备的信息,请参见万博1manbetxGPU支万博1manbetx持情况(并行计算工具箱).有关在MATLAB中使用gpu的更多信息,请参见MATLAB中的GPU计算(并行计算工具箱).
如果您创建了自定义深度学习图层,那么您可以使用checkLayer
函数检查图层是否有效。该功能检查有效性,GPU兼容性,正确定义渐变和代码生成兼容性的图层。要检查图层是否有效,请运行以下命令:
validInputSize checkLayer(层)
层
是该层的实例,validInputSize
指定层的有效输入大小的向量或单元格数组。要用多重观察进行检查,请使用ObservationDimension
选择。要检查代码生成兼容性,请设置CheckCodegenCompatibility
选择1
(真正的)。对于较大的输入,梯度检查需要更长的时间来运行。要加快测试速度,请指定较小的有效输入大小。
有关更多信息,请参见检查自定义层有效性.
checkLayer
|FindPlaceHolderLayers.
|replaceLayer
|汇编
|占位持票人