交叉熵误差计算
Cross-entropy error calculation
我不太明白交叉熵误差是如何计算的。由于某些负数的对数未定义(或虚数)并且神经网络的输出可能是某个负数(权重和偏差是随机初始化的),因此我经常得到 NaN 作为结果。我该如何避免这种情况?
示例:
output[] = {-0.78, -0.98, 0.78, -0.68};
target[] = {-1.0, -1.0, 1.0, 1.0};
error = ln(0.78) * 1.0 + ln(-0.68) * 1.0;
如果您的任务是二进制 class化,我建议您将目标值“-1”更改为“0”。在最后一层,输出层,你有两个神经元(每个 class 一个)。对于神经网络的输出,您应该使用 softmax function,它将概率分配给每个 class(意思是,您没有负值)。最后,每个实例的输出是 class 的标签,它对应于这两个概率中较大的一个。
在交叉熵的定义中显示了两个概率分布之间的量化差异。在机器学习的情况下,它会计算您的 "target"(真实值)与模型预测的值 "output" 之间的差异。
概率可能仅在 [0;1] 范围内变化,并且在任何情况下都可能不是负数。负数在概率方面没有任何意义。
我不太明白交叉熵误差是如何计算的。由于某些负数的对数未定义(或虚数)并且神经网络的输出可能是某个负数(权重和偏差是随机初始化的),因此我经常得到 NaN 作为结果。我该如何避免这种情况?
示例:
output[] = {-0.78, -0.98, 0.78, -0.68};
target[] = {-1.0, -1.0, 1.0, 1.0};
error = ln(0.78) * 1.0 + ln(-0.68) * 1.0;
如果您的任务是二进制 class化,我建议您将目标值“-1”更改为“0”。在最后一层,输出层,你有两个神经元(每个 class 一个)。对于神经网络的输出,您应该使用 softmax function,它将概率分配给每个 class(意思是,您没有负值)。最后,每个实例的输出是 class 的标签,它对应于这两个概率中较大的一个。
在交叉熵的定义中显示了两个概率分布之间的量化差异。在机器学习的情况下,它会计算您的 "target"(真实值)与模型预测的值 "output" 之间的差异。 概率可能仅在 [0;1] 范围内变化,并且在任何情况下都可能不是负数。负数在概率方面没有任何意义。