/***************************************************************************** FUNCTION : cc_getErr PURPOSE : get sum of squared errors (sse) = (o_actual - y_desired)^2 NOTES : UPDATE : 19.01.96 ******************************************************************************/ float cc_getErr (int StartPattern, int EndPattern) { int p=0, sub, start, end, n, pat, dummy; float sse=0, devit,error; register Patterns out_pat; register struct Unit *OutputUnitPtr; int Correct; int WhichWin,CorrWin; float MaxAct; KernelErrorCode = kr_initSubPatternOrder(StartPattern,EndPattern); ERROR_CHECK; cc_getPatternParameter(StartPattern,EndPattern,&start,&end,&n); ERROR_CHECK; SumSqError = 0.0; for(p=start; p<=end;p++){ Correct=TRUE; MaxAct=0.0; cc_getActivationsForActualPattern(p,start,&pat,&sub); PROPAGATE_THROUGH_OUTPUT_LAYER(OutputUnitPtr,dummy,p); out_pat = kr_getSubPatData(pat,sub,OUTPUT,NULL); FOR_ALL_OUTPUT_UNITS(OutputUnitPtr,dummy){ if (*out_pat > 0.5) CorrWin = dummy; devit = OutputUnitPtr->Out.output - *(out_pat++); if (OutputUnitPtr->Out.output > MaxAct) { MaxAct=OutputUnitPtr->Out.output; WhichWin=dummy; } if (abs(devit) > 0.2) Correct=FALSE; sse += devit*devit; error = devit * (((OutputUnitPtr->act_deriv_func == ACT_DERIV_Custom_Python) ? kr_PythonActFunction(OutputUnitPtr->python_act_deriv_func, OutputUnitPtr) : (OutputUnitPtr->act_deriv_func) (OutputUnitPtr)) + cc_fse); SumSqError += error*error; } } cc_actualNetSaved=TRUE; return sse; }
/***************************************************************************** FUNCTION : cc_getErr PURPOSE : get sum of squared errors (sse) = (o_actual - y_desired)^2 NOTES : UPDATE : 19.01.96 ******************************************************************************/ float SnnsCLib::cc_getErr (int StartPattern, int EndPattern) { int p=0, sub, start, end, n, pat, dummy; float sse=0, devit,error; register Patterns out_pat; register struct Unit *OutputUnitPtr; //int Correct; //int WhichWin,CorrWin; float MaxAct; KernelErrorCode = kr_initSubPatternOrder(StartPattern,EndPattern); ERROR_CHECK; cc_getPatternParameter(StartPattern,EndPattern,&start,&end,&n); ERROR_CHECK; SumSqError = 0.0; for(p=start; p<=end;p++){ //Correct=TRUE; MaxAct=0.0; cc_getActivationsForActualPattern(p,start,&pat,&sub); PROPAGATE_THROUGH_OUTPUT_LAYER(OutputUnitPtr,dummy,p); out_pat = kr_getSubPatData(pat,sub,OUTPUT,NULL); FOR_ALL_OUTPUT_UNITS(OutputUnitPtr,dummy){ //if (*out_pat > 0.5) CorrWin = dummy; devit = OutputUnitPtr->Out.output - *(out_pat++); if (OutputUnitPtr->Out.output > MaxAct) { MaxAct=OutputUnitPtr->Out.output; //WhichWin=dummy; } //if (fabs(devit) > 0.2) Correct=FALSE; sse += devit*devit; error = devit * ((this->*OutputUnitPtr->act_deriv_func)(OutputUnitPtr) + cc_fse); SumSqError += error*error; } }