你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
CNTK包含许多常见的预定义损失函数 (或训练条件,用于优化训练) ,以及用于性能跟踪) 的指标 (或评估条件。 此外,自定义丢失函数/指标可以定义为 BrainScript 表达式。
CrossEntropy () , CrossEntropyWithSoftmax ()
计算 (分类交叉负数,或只计算两个概率分布) 之间的交叉负值。
CrossEntropy (y, p)
CrossEntropyWithSoftmax (y, z)
parameters
y:标签 (一热) 或更普遍的引用分布。 必须求和到 1。p) 的 (CrossEntropy():后概率分布,以针对引用进行评分。 必须求和到 1。z) 的CrossEntropyWithSoftmax()(:对 Softmax 操作的输入,以计算后方概率分布,以针对引用进行评分
返回值
此操作计算两个概率分布yp和定义为:
ce = E_y{-log p} = -sum_i y_i log p_i
循环 i 访问所有元素 y 和 p。 对于 CrossEntropyWithSoftmax(), p 从输入参数 z 计算为
p = Softmax (z)
说明
这些函数计算两个概率分布的 交叉枚举 。 分类交叉萎缩是单类分类 (损失函数) 最常见的训练标准,其中 y 将分类标签编码为单热向量。
另一个用途是概率分布回归的损失函数,其中 y 目标分布 p 应匹配。
当用作损失函数时,CNTK的 SGD 过程将汇总微型样本中所有单个样本的交叉枚举值,并通过聚合整个纪元来计算每纪元损失。
然后,此形式报告了这一点: L * S 每个 L 样本的平均损失以及 S 样本数。 例如, -1.213 * 3600000表示平均跨量损失 -1.213,平均超过 3,600,000 个样本。
CrossEntropyWithSoftmax() 是分类交叉萎缩的最常见用例的优化,它利用 Softmax 的特定形式。
它接受其输入 Softmax 操作的参数,这与日志 Softmax 的非规范化版本(也称为“logit”)相同,而不是规范化概率。
这是CNTK计算分类交叉枚举条件的建议方法。
请注意,分类交叉萎缩不是多类标签的合适损失函数,其中 y 包含多个包含 1 的位置。
在这种情况下,请考虑使用 Sigmoid() 而不是 Softmax,并丢失 Logistic() 。
另请参阅 本文。
替代定义
CrossEntropyWithSoftmax()当前是具有限制的CNTK基元。
更灵活、建议的替代方法是手动将其定义为:
CrossEntropyWithSoftmax (y, z) = ReduceLogSum (z) - TransposeTimes (y, z)
稀疏标签
若要使用稀疏 (标签(例如,使用 Input (./Inputs#input) {..., sparse=true}) 读取)的交叉枚举,必须使用上述替代形式。
对排名>为 1 的张量的 Softmax
若要对排名>1 的张量进行计算CrossEntropyWithSoftmax(),例如任务确定 2D 网格上的位置,则必须使用另一种替代形式:
CrossEntropyWithSoftmax (y, z, axis=None) = ReduceLogSum (z, axis=axis) - ReduceSum (y .* z, axis=axis)
此窗体还允许仅在特定轴上应用 Softmax 操作。
例如,如果输入和标签具有形状 [10 x 20],并且应单独对 20 列中的每个列计算 Softmax,请指定 axis=1。
示例
labels = Input {9000}
...
z = W * h + b
ce = CrossEntropyWithSoftmax (labels, z)
criterionNodes = (ce)
与稀疏标签相同:
labels = Input {9000, sparse=true}
...
z = W * h + b
ce = ReduceLogSum (z) - TransposeTimes (labels, z)
criterionNodes = (ce)
逻辑{}、WeightedLogistic{}
计算逻辑损失函数。
Logistic (y, p)
WeightedLogistic (y, p, instanceWeight)
parameters
y:地实标签、0 或 1p:类的后概率1
返回值
计算 (加权) 逻辑损失,定义为:
ll = -sum_i { y_i * log(p_i) + (1-y_i)*log(1-p_i))} * weight
(其中 Logistic(),权重为 1) 。
说明
此函数是逻辑损失函数。
Logistic (y, Softmax (z)) 与 CrossEntropyWithSoftmax (y, z) 两类问题相同,其中只有两个 (互补) 地真相标签之 Logistic()一。
另请参阅 本文 ,了解如何训练多类分类器。
示例
multiLabels = Input {1000} # 0 or 1 for each value
...
p = DenseLayer {1000, activation=Sigmoid} (h) # element-wise predictor for 1000 values
ll = Logistic (multiLabels, p)
trainingCriterion = (ll)
ClassificationError{}
计算分类标签预测的错误率。 对于二进制标签,可以使用 哈明丢失。
ClassificationError (y, z)
parameters
y:单热形式的分类标签z:预测分数的向量,例如对数概率
返回值
如果最大值 z 位于 1 的位置 y ,则为 1;否则为 0;求和整个迷你包。
说明
此函数接受后向量概率、对数或其他匹配分数,其中每个元素表示类或类别的匹配分数。
该函数通过测试最高评分位置是否包含 1,确定最高评分类是否等于标签输入 y所表示的类。
当用作评估标准时,SGD 过程将聚合一个纪元的所有值并报告平均值,即错误率。
ClassificationError() 不能与稀疏标签一起使用。
注意:在版本 1.7 之前的 CNTK中,调用ErrorPrediction()了此操作。
仍可以使用该名称,但已弃用。
示例
labels = Input {9000}
...
z = W * h + b
errs = ClassificationError (labels, z)
evaluationNodes = (errs)