主要内容

crossentropy

分类任务的交叉熵损失

描述

交叉熵运算计算单标签和多标签分类任务中网络预测值和目标值之间的交叉熵损失。

crossentropy函数计算预测和目标之间的交叉熵损失,表示为dlarray数据。使用dlarray对象允许您标记维度,从而更容易处理高维数据。属性标记哪些维度对应于空间、时间、通道和批处理维度“S”“T”“C”,“B”标签,分别。对于未指定的维度和其他维度,使用“U”标签。为dlarray对象的函数在特定维度上操作时,可以通过格式化dlarray对象,或者使用DataFormat选择。

请注意

计算a的交叉熵损失layerGraph对象或数组,用于trainNetwork功能,使用classificationLayer

例子

损失= crossentropy (海底目标返回已格式化对象之间的分类交叉熵损失dlarray对象海底包含预测和目标值目标用于单标签分类任务。输出损失是未格式化的标量吗dlarray标量。

对于未格式化的输入数据,使用“DataFormat”选择。

损失= crossentropy (海底目标权重对计算的损耗值应用权重。使用此语法来加权类、观测值、区域或输入中的单个元素对计算损失值的贡献。

损失= crossentropy (___、“DataFormat”FMT)还指定维度格式FMT海底不是格式化的dlarray

损失= crossentropy (___名称,值除以前语法中的输入参数外,还使用一个或多个名称-值对参数指定选项。例如,“TargetCategories”、“独立”计算多标签分类任务的交叉熵损失。

例子

全部折叠

为10个班级的12个观察结果创建一个预测分数数组。

numClasses = 10;numObservations = 12;Y = rand(numClasses,numObservations);ly = darray (Y,“CB”);dlY = softmax(dlY);

查看预测分数的大小和格式。

大小(海底)
ans =1×210 12
dim(海底)
ans = 'CB'

创建一个编码为one-hot vector的目标数组。

标签= randi(numClasses,[1 numObservations]);目标= onehotencode(标签,1,“类名”1: numClasses);

查看目标的大小。

大小(目标)
ans =1×210 12

计算预测和目标之间的交叉熵损失。

漏失=交叉漏失(dlY,靶)
损失= 1x1 dlarray 2.3343

为10个班级的12个观察结果创建一个预测分数数组。

numClasses = 10;numObservations = 12;Y = rand(numClasses,numObservations);ly = darray (Y,“CB”);

查看预测分数的大小和格式。

大小(海底)
ans =1×210 12
dim(海底)
ans = 'CB'

创建一个目标的随机数组,编码为0和1的数字数组。每个观察可以有多个类。

目标= rand(numClasses,numObservations) > 0.75;目标=单个(目标);

查看目标的大小。

大小(目标)
ans =1×210 12

计算预测和目标之间的交叉熵损失。若要指定多标签分类的交叉熵损失,请设置“TargetCategories”选项“独立”

loss = crossentropy(dlY,靶标,“TargetCategories”“独立”
损失= 1x1单dlarray 9.8853

为10个班级的12个观察结果创建一个预测分数数组。

numClasses = 10;numObservations = 12;Y = rand(numClasses,numObservations);ly = darray (Y,“CB”);dlY = softmax(dlY);

查看预测分数的大小和格式。

大小(海底)
ans =1×210 12
dim(海底)
ans = 'CB'

创建一个编码为one-hot vector的目标数组。

标签= randi(numClasses,[1 numObservations]);目标= onehotencode(标签,1,“类名”1: numClasses);

查看目标的大小。

大小(目标)
ans =1×210 12

使用向量类权重计算预测和目标之间的加权交叉熵损失。指定的权重格式加州大学的(未指定的,通道)使用“WeightsFormat”选择。

weights = rand(1,numClasses);损失=交叉熵(dlY,目标,权重,“WeightsFormat”加州大学的
损失= 1x1 dlarray 1.1261

输入参数

全部折叠

预测,指定为格式化的dlarray,一个未格式化的dlarray,或数值数组。当海底不是格式化的dlarray时,必须使用DataFormat选择。

如果海底是数值数组,目标一定是dlarray

目标分类标签,指定为格式化或非格式化dlarray或者一个数字数组。

将目标指定为一个数组,该数组包含大小和格式相同的单热编码标签海底.例如,如果海底是一个numObservations——- - - - - -numClasses数组,然后目标(n,我)观测值= 1n属于班级目标(n,我)否则= 0。

如果目标是格式化的dlarray,则其格式必须与的格式一致海底,或与DataFormat如果海底未格式化。

如果目标是未格式化的dlarray或数值数组,则函数应用的格式海底或者是DataFormat目标

提示

格式化dlarray对象自动排列底层数据的维度以使其具有顺序“S”(空间),“C”(通道),“B”(批处理),“T”(时间),然后“U”(不明)。保证尺寸海底而且目标一致,当海底是格式化的dlarray,也指定目标作为格式化的dlarray

权重,指定为adlarray或者一个数字数组。

要指定类的权重,请使用“C”(通道)尺寸与尺寸匹配“C”(通道)的尺寸dlX.指定“C”(通道)维的类权重使用格式化dlarray对象或使用“WeightsFormat”选择。

要指定观测权重,请使用“B”(批)尺寸与尺寸匹配“B”(批)尺寸海底.指定“B”(批处理)维的类权重使用格式化dlarray对象或使用“WeightsFormat”选择。

若要单独为输入的每个元素指定权重,请将权重指定为大小相同的数组海底.在这种情况下,如果权重不是格式化的dlarray对象,则该函数使用与海底.方法指定权重格式“WeightsFormat”选择。

名称-值参数

的可选逗号分隔对名称,值参数。名字参数名称和价值对应的值。名字必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“TargetCategories”、“独立”、“DataFormat”、“CB”评估多标签分类任务的交叉熵损失,并指定输入数据的维度顺序为“CB”

分类任务的类型,指定为逗号分隔的对,由“TargetCategories”和以下其中之一:

  • “独家”—单标签分类。预测中的每一个观察结果海底只分配给一个类别。函数计算指定的单个类别的目标值之间的损失目标并进行相应的预测海底的平均值。

  • “独立”—多标签分类。预测中的每一个观察结果海底可以被分配到一个或多个独立的类别。函数计算指定的每个类别之间的损失之和目标在书中的预测海底对于这些类别,对观察次数取平均值。这种类型的分类任务的交叉熵损失也称为二元交叉熵损失。

掩码,指示要包括哪些元素进行损失计算,指定为dlarray对象、逻辑数组或具有相同大小的数值数组海底

当掩码中的对应值分别为1和0时,该函数包含和排除输入数据中的元素以进行损失计算。

默认值是大小相同的逻辑数组海底

提示

格式化dlarray对象会自动排列底层数据的维数,使其排列顺序如下:“S”(空间),“C”(通道),“B”(批处理),“T”(时间)“U”(不明)。例如,dlarray对象根据格式自动排列数据的维度“TSCSBS”要有格式“SSSCBT”

保证尺寸海底和面具是一致的,当海底是格式化的dlarray,也指定掩码为格式化的dlarray

减少损失值数组的模式,指定为以下之一:

  • “和”-对损失值数组中的所有元素求和。在本例中,是输出损失是标量。

  • “没有”—不要缩减损失值数组。在本例中,是输出损失是未格式化的dlarray相同大小的对象海底

用于归一化减少损失时的除数减少“和”,指定为以下其中之一:

  • “批大小”-通过将损失除以年的观测数来规范化损失dlX

  • “所有元素”-通过将其除以元素的数量来规范化损失dlX

  • “还有面具”-通过将损失值除以掩码为每个独立观测指定的包含元素的数量来归一化损失。要使用此选项,必须使用面具选择。

  • “没有”-不要将损失正常化。

未格式化输入数据的维度顺序,指定为字符向量或字符串标量FMT它为数据的每个维度提供了一个标签。

的格式时dlarray对象,每个字符为数据的每个维度提供一个标签,并且必须是以下之一:

  • “S”——空间

  • “C”——频道

  • “B”-批次(例如,样品和观察)

  • “T”-时间(例如序列的时间步长)

  • “U”——未指明的

您可以指定多个有标记的维度“S”“U”.你可以使用标签“C”“B”,“T”最多一次。

您必须指定DataFormat当输入数据未被格式化时dlarray

数据类型:字符|字符串

权重的维度顺序,指定为字符向量或字符串标量,为权重的每个维度提供一个标签。

的格式时dlarray对象,每个字符为数据的每个维度提供一个标签,并且必须是以下之一:

  • “S”——空间

  • “C”——频道

  • “B”-批次(例如,样品和观察)

  • “T”-时间(例如序列的时间步长)

  • “U”——未指明的

您可以指定多个有标记的维度“S”“U”.你可以使用标签“C”“B”,“T”最多一次。

您必须指定WeightsFormat权重是一个数字向量和海底具有两个或多个非单维。

如果权重不是向量,或者两者都是权重而且海底是向量,那么默认值是WeightsFormat的格式是否相同海底

数据类型:字符|字符串

输出参数

全部折叠

交叉熵损失,以未格式化的形式返回dlarray.输出损失是未格式化的dlarray使用与输入相同的底层数据类型海底

的大小损失取决于“还原”选择。

算法

全部折叠

叉损失

对于每个元素Yj的输入crossentropy函数使用公式计算相应的交叉熵元素损失值

损失 j T j ln Y j + 1 T j ln 1 Y j

在哪里Tj是否有相应的目标值来Yj

为了将损失值减少为标量,函数然后使用公式减少按元素计算的损失

损失 1 N j j w j 损失 j

在哪里N是归一化因子,j元素的掩码值是j,wj是元素的权重值吗j

如果不选择减少损失,则函数将掩码和权重直接应用于损失值:

损失 j j w j 损失 j

该表显示了不同任务的损失公式。

任务 描述 损失
单标牌分类 互斥类的交叉熵损失。当观测值必须只有一个标签时,这很有用。

损失 1 N n 1 N 1 K T n ln Y n

在哪里N而且K分别是观察数和类数。

多标记分类 独立类的交叉熵损失。当观测值可以有多个标签时,这很有用。

损失 1 N n 1 N 1 K T n 日志 Y n + 1 T n 日志 1 Y n

在哪里N而且K分别是观察数和类数。

带有加权类的单标签分类 与类权重的交叉熵损失。这对于具有不平衡类的数据集非常有用。

损失 1 N n 1 N 1 K w T n ln Y n

在哪里N而且K观察和类的数量分别是和吗w表示类的权重

Sequence-to-sequence分类 带掩码时间步的交叉熵损失。这对于忽略与填充数据相对应的损失值非常有用。

损失 1 N n 1 N t 1 年代 n t 1 K T n t ln Y n t

在哪里N年代,K是观察数,时间步长和类,nt表示时间步长的掩码值t的观察n

扩展功能

R2019b引入