主要内容

指定自定义输出层反向损失函数

如果深度学习工具箱™不提供分类或回归问题所需的层,则可以定义自己的自定义层。有关内置层的列表,请参见深度学习层列表

这个例子定义自定义分类输出层展示了如何定义和创建具有平方和误差(SSE)损失的自定义分类输出层,并执行以下步骤:

  1. 命名层-给层一个名称,以便它可以在MATLAB中使用®

  2. 声明层属性-指定层的属性。

  3. 创建一个构造函数(可选)-指定如何构造层并初始化其属性。如果没有指定构造函数,则软件将使用在创建。

  4. 创建一个正向损失函数——指定预测和训练目标之间的损失。

  5. 创建反向损失函数(可选)-指定损失相对于预测的导数。如果没有指定反向损失函数,则正向损失函数必须支持金宝appdlarray对象。

创建反向损失函数是可选的。如果正向损失函数只使用支持金宝appdlarray对象,然后软件自动确定导数使用自动微分。获取支持的函数列表金宝appdlarray对象,看到支持dlarray的函数列表金宝app.如果您想使用不支持的函数金宝appdlarray对象,或者希望为向后损失函数使用特定的算法,则可以使用此示例作为指导定义自定义向后函数。

创建自定义图层

这个例子定义自定义分类输出层展示了如何创建SSE分类层。

分类SSE层计算分类问题的平方和误差损失。SSE是两个连续随机变量之间的误差度量。为预测Y以及培训目标T, SSE损失之间Y而且T是由

l 1 N n 1 N 1 K Y n T n 2

在哪里N观察的次数和K是类的数量。

查看示例中创建的层定义自定义分类输出层.这一层没有backwardLoss函数。

classdefssecassificationlayer < nnet.layer.ClassificationLayer…& nnet.layer.Acceleratable示例自定义分类层的平方和误差损失。方法函数layer = ssecassificationlayer (name)% layer = ssecassificationlayer (name)创建一个平方和%错误分类层,并指定层名。设置层名。层。Name = name;设置层描述。层。描述=平方和误差结束函数损失(层,Y, T)% loss = forwardLoss(layer, Y, T)返回之间的SSE损失预测Y和训练目标T。计算平方和。sumSquares = sum((Y-T).^2);对小批量取平均值。N = size(Y,4);损失= sum(sumSquares)/N;结束结束结束

创建反向损失函数

实现backwardLoss函数,返回损失相对于输入数据和可学习参数的导数。

的语法backwardLossdLdY = backwardLoss(layer,Y,T).输入Y包含由网络和做出的预测T包含培训目标。输出dLdY是损失对预测的导数吗Y.输出dLdY必须与层输入相同的大小Y

的维度Y而且T和里面的输入一样吗forwardLoss

SSE损失相对于预测的导数Y是由

δ l δ Y 2 N Y T

在哪里N是输入中的观察数。

创建返回这些导数的反向损失函数。

函数dLdY = backwardLoss(layer, Y, T)% dLdY = backwardLoss(layer, Y, T)返回的导数% SSE损失相对于预测Y。N = size(Y,4);dLdY = 2*(Y-T)/N;结束

完整的层

查看完成的层类文件。

classdefssecassificationlayer < nnet.layer.ClassificationLayer示例自定义分类层的平方和误差损失。方法函数layer = ssecassificationlayer (name)% layer = ssecassificationlayer (name)创建一个平方和%错误分类层,并指定层名。设置层名。层。Name = name;设置层描述。层。描述=平方和误差结束函数损失(层,Y, T)% loss = forwardLoss(layer, Y, T)返回之间的SSE损失预测Y和训练目标T。计算平方和。sumSquares = sum((Y-T).^2);对小批量取平均值。N = size(Y,4);损失= sum(sumSquares)/N;结束函数dLdY = backwardLoss(layer, Y, T)% dLdY = backwardLoss(layer, Y, T)返回的导数% SSE损失相对于预测Y。N = size(Y,4);dLdY = 2*(Y-T)/N;结束结束结束

GPU的兼容性

如果层转发功能完全支持金宝appdlarray对象,那么该层是GPU兼容的。否则,为了与GPU兼容,层函数必须支持类型的输入和返回输出金宝appgpuArray(并行计算工具箱)

许多MATLAB内置函数支持金宝appgpuArray(并行计算工具箱)而且dlarray输入参数。获取支持的函数列表金宝appdlarray对象,看到支持dlarray的函数列表金宝app.有关在GPU上执行的函数的列表,请参见在图形处理器上运行MATLAB函数(并行计算工具箱)要使用GPU进行深度学习,还必须有支持GPU的设备。金宝app有关受支持设备的信息,请参见金宝appGPU支金宝app持版本(并行计算工具箱)有关在MATLAB中使用gpu的更多信息,请参见MATLAB中的GPU计算(并行计算工具箱)

另请参阅

||||

相关的话题