微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

神经网络改变损失函数

如何解决神经网络改变损失函数

我有一段使用均方误差训练简单网络的代码。 我现在想使用另一个损失函数,例如我想使用平均绝对误差。 我应该如何更改 TrainNet 函数以使用平均绝对误差作为损失函数

double input[IN]; // input
double hidden[HID]; // layer hidden
double output[OUT]; // output

double weightH[HID][IN]; // weights layer hidden
double biasesH[HID]; // biases layer hidden
double weightO[OUT][HID]; // weights output
double biasesO[OUT]; // biases output

void NetworkResult(double inp1,double inp2)
{
   // load the inputs
   input[0]=inp1;
   input[1]=inp2;
   // compute hidden layer
   for (int i=0;i<HID;i++)
   {
      hidden[i]=biasesH[i];
      for (int j=0;j<IN;j++)
         hidden[i] += input[j]*weightH[i][j];
      hidden[i]=Activation(hidden[i]);
   }
   // compute output
   for (int i=0;i<OUT;i++)
   {
      output[i]=biasesO[i];
      for (int j=0;j<HID;j++)
         output[i] += hidden[j]*weightO[i][j];
      output[i]=Activation(output[i]);
   }
}

void TrainNet(double inp1,double inp2,double result)
{
   NetworkResult(inp1,inp2);
   double DeltaO[OUT];
   double DeltaH[HID];
   // layer output
   // Use MSE as loss function
   double err= result-output[0];
   DeltaO[0]=err*Derivative(output[0]);
   // layer hidden
   for (int i=0;i<HID;i++)
   {
      double err=0;
      for (int j=0;j<OUT;j++)
         err+= DeltaO[j]*weightO[j][i];
      DeltaH[i]=err*Derivative(hidden[i]);
   }
   // change weights
   // layer output
   for (int i=0;i<OUT;i++)
   {
      for (int j=0;j<HID;j++)
         weightO[i][j]+=LEARNINGRATE*DeltaO[i]*hidden[j];
      biasesO[i]+=LEARNINGRATE*DeltaO[i];
   }
   // layer hidden
   for (int i=0;i<HID;i++)
   {
      for (int j=0;j<IN;j++)
         weightH[i][j]+=LEARNINGRATE*DeltaH[i]*input[j];
      biasesH[i]+=LEARNINGRATE*DeltaH[i];
   }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。