C++ 交叉熵误差计算

C++ 交叉熵误差计算,c++,function,neural-network,entropy,loss,C++,Function,Neural Network,Entropy,Loss,我不完全理解交叉熵误差是如何计算的。由于一些负数的对数没有定义(或虚构),神经网络的输出可能是一些负数(权重和偏差随机初始化),因此我经常得到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; 如果您的任务是二进制分类,我建议您将目标值“-1”更改为“0”。在最后一层,即

我不完全理解交叉熵误差是如何计算的。由于一些负数的对数没有定义(或虚构),神经网络的输出可能是一些负数(权重和偏差随机初始化),因此我经常得到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;

如果您的任务是二进制分类,我建议您将目标值“-1”更改为“0”。在最后一层,即输出层,您有两个神经元(每个类一个)。对于您应该使用的神经网络的输出,它为每个类分配概率(也就是说,您没有负值)。最后,每个实例的输出都是类的标签,对应于这两个概率中较大的一个

在交叉熵的定义中,显示了两个概率分布之间的量化差异。在机器学习的情况下,它计算“目标”(真实值)和模型“输出”预测值之间的差异。 概率可能仅在[0;1]范围内变化,在任何情况下都不可能为负。负数在概率方面没有任何意义