Tversky 损失
Tversky 损失基于 Tversky 指数,用于测量两个分割图像之间的重叠 [1]。一个图像 Y 较其对应真实值 T 之间的 Tversky 指数 TIc 由下式给出
TIc=∑m=1MYcmTcm∑m=1MYcmTcm+α∑m=1MYcmTc‾m+β∑m=1MYc‾mTcm
c 对应于类,c‾ 对应于不在 c 类中。
M 是沿 Y 的前两个维度的元素数目。
α 和 β 是控制每个类的假正和假负对损失的贡献的加权因子。
基于类数目 C 的损失 L 由下式给出
L=∑c=1C1-TIc
分类层模板
在 MATLAB® 中将分类层模板复制到一个新文件中。此模板提供分类层的大致结构,并包括用于定义层行为的函数。示例的后续部分将说明如何完成 tverskyPixelClassificationLayer。
classdef tverskyPixelClassificationLayer < nnet.layer.ClassificationLayer
properties
% Optional properties
end
methods
function loss = forwardLoss(layer, Y, T)
% Layer forward loss function goes here
end
end
end
声明层属性
默认情况下,自定义输出层具有以下属性:
Name - 层名称,指定为字符向量或字符串标量。要将此层包括在层次图中,您必须指定非空的唯一层名称。如果您使用此层训练串行网络并且 Name 设置为 '',则软件会在训练时自动指定名称。
Description - 层的单行描述,指定为字符向量或字符串标量。当层显示在 Layer 数组中时,会出现此描述。如果没有指定层描述,则软件将显示层类名。
Type - 层的类型,指定为字符向量或字符串标量。当层显示在 Layer 数组中时,会显示 Type 的值。如果未指定层类型,则软件将显示 'Classification layer' 或 'Regression layer'。
自定义分类层还具有以下属性:
Classes - 输出层的类,指定为分类向量、字符串数组、字符向量元胞数组或 'auto'。如果 Classes 是 'auto',则软件会在训练时自动设置类。如果您指定字符串数组或字符向量元胞数组 str,则软件会将输出层的类设置为 categorical(str,str)。默认值为 'auto'。
如果层没有其他属性,则您可以省略 properties 部分。
Tversky 损失必须具有一个小常量值以防止除零错误。指定属性 Epsilon 以保留此值。它还需要两个可变属性:Alpha 和 Beta,分别控制假正和假负的加权。
classdef tverskyPixelClassificationLayer < nnet.layer.ClassificationLayer
properties(Constant)
% Small constant to prevent division by zero.
Epsilon = 1e-8;
end
properties
% Default weighting coefficients for false positives and false negatives
Alpha = 0.5;
Beta = 0.5;
end
...
end
创建构造函数
创建用于构造层并初始化层属性的函数。将创建层所必需的所有变量指定为构造函数的输入。
指定可选的输入参数 name,以便在创建层时赋给 Name 属性。
function layer = tverskyPixelClassificationLayer(name, alpha, beta)
% layer = tverskyPixelClassificationLayer(name) creates a Tversky
% pixel classification layer with the specified name.
% Set layer name
la