主要内容

crossentropy

分类任务的交叉熵损失

描述

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

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

请注意

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

例子

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

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

损失= crossentropy (Y目标权重对计算的损失值应用权重。使用此语法可以对类、观察值、区域或输入的单个元素对计算损失值的贡献进行加权。

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

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

例子

全部折叠

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

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

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

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

创建一个编码为单一热点向量的目标数组。

label = randi(numClasses,[1 numObservations]);Targets = onehotencode(labels,1,“类名”1: numClasses);

查看目标器的大小。

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

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

损失=交叉熵(dd,靶)
损失= 1x1 dlarray 2.3343

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

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

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

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

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

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

查看目标器的大小。

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

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

损失= crossentropy(d,目标,“TargetCategories”“独立”
损失= 1x1单美元9.8853

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

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

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

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

创建一个编码为单一热点向量的目标数组。

label = randi(numClasses,[1 numObservations]);Targets = onehotencode(labels,1,“类名”1: numClasses);

查看目标器的大小。

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

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

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

输入参数

全部折叠

预测,指定为格式化的dlarray,一个未格式化的dlarray,或数字数组。当Y不是格式化的dlarray方法指定尺寸格式DataFormat选择。

如果Y是一个数值数组,目标一定是dlarray

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

指定目标为一个数组,该数组包含具有相同大小和格式的一次性编码标签Y.例如,如果Y是一个numObservations——- - - - - -numClasses数组,然后目标(n,我)如果观察到= 1n属于阶级目标(n,我)否则= 0。

如果目标是格式化的dlarray,则其格式必须与的格式相同Y,或与DataFormat如果Y未格式化。

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

提示

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

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

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

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

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

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

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

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

  • “独家”-单标签分类。预测中的每一个观察结果Y只属于一个类别。函数计算指定的单个类别的目标值之间的损失目标并进行了相应的预测Y,除以观察次数的平均值。

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

掩码,指示要包含哪些元素用于损失计算,指定为dlarray对象、逻辑数组或大小相同的数字数组Y

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

如果面具是格式化的dlarray对象,则其格式必须与Y.如果面具不是格式化的dlarray对象,则函数使用与Y

如果指定DataFormat选项,则函数也使用指定的掩码格式。

各维度的尺寸面具尺寸必须匹配对应的尺寸在Y.默认值是1的逻辑数组。

提示

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

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

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

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

  • “没有”—不减少丢失值数组。在本例中,输出损失是未格式化的dlarray对象,其大小与Y

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

  • “批大小”-将损失归一化,用它除以观察的次数X

  • “所有元素”的元素个数除以,将损失归一化X

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

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

未格式化输入数据的维度顺序,指定为字符向量或字符串标量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权重是一个数字向量和Y具有两个或多个非单例维度。

如果权重不是向量,还是两者都是权重而且Y是向量,则默认值为WeightsFormat和的格式一样吗Y

数据类型:字符|字符串

输出参数

全部折叠

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

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

算法

全部折叠

叉损失

对于每个元素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 ln Y n + 1 T n ln 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中引入