跳至内容

Loss

Loss

计算损失函数的值。

double vector::Loss(
  const vector&       vect_true,     // 真值向量
  ENUM_LOSS_FUNCTION  loss,          // 损失函数
   ...                               // 附加参数
   );

double matrix::Loss(
  const matrix&       matrix_true,   // 真值矩阵
  ENUM_LOSS_FUNCTION  loss,          // 损失函数
   );

double matrix::Loss(
  const matrix&       matrix_true,   // 真值矩阵
  ENUM_LOSS_FUNCTION  loss,          // 损失函数
  ENUM_MATRIX_AXIS    axis,          // 轴线
   ...                               // 附加参数
   );

参数

vect_true/matrix_true

[in] 真值的向量或矩阵。

loss

[in] ENUM_LOSS_FUNCTION枚举中的损失函数。

axis

[in] ENUM_MATRIX_AXIS枚举值(AXIS_HORZ — 横轴,AXIS_VERT — 竖轴)。

[in] 附加参数’delta’只能由Hubert损失函数(LOSS_HUBER)使用

返回值

双数值。

如果Hubert损失函数(LOSS_HUBER)中使用在’delta’参数

double delta = 1.0;
   double error = fabs(y - x);
   if(error<delta)
      loss = 0.5 * error^2;
   else
      loss = 0.5 * delta^2 + delta * (error - delta);

注意

神经网络的目标是找到最小化训练样本误差的算法,为此使用损失函数。

损失函数的值表示模型预测值与实际值偏差的程度。

根据不同的问题使用不同的损失函数。例如,均方误差(MSE)用于回归问题,二元交叉熵(BCE)用于二元分类。

调用Hubert损失函数的示例:

vector y_true = {0.0, 1.0, 0.0, 0.0};
   vector y_pred = {0.6, 0.4, 0.4, 0.6};
   double loss=y_pred.Loss(y_true,LOSS_HUBER);
   Print(loss);
   double loss2=y_pred.Loss(y_true,LOSS_HUBER,0.5);
   Print(loss2);

/* Result
   0.155
   0.15125
*/