问题描述
我有一段使用均方误差训练简单网络的代码。 我现在想使用另一个损失函数,例如我想使用平均绝对误差。 我应该如何更改 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 (将#修改为@)