/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠDeep ĠLearning Ġproject Ġcontributors . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin x . dl . api . core . loss Ċ Ċ import Ġorg . jetbrains . kotlin x . dl . api . core . util . get D Type Ċ import Ġorg . tensorflow . Operand Ċ import Ġorg . tensorflow . op . Ops Ċ import Ġorg . tensorflow . op . core . Reduce Sum Ċ import Ġorg . tensorflow . op . math . Mean Ċ Ċ /** Ċ Ġ* ĠLoss Ġfunctions . Ċ Ġ*/ Ċ public Ġenum Ġclass ĠLos ses Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComputes Ġmulti - dimensional Ġsig moid Ġfunction Ġ( softmax ) Ġfor Ġoutputs Ġwith Ġlog it Ġoperation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNOTE : ĠThis Ġloss Ġfunctions Ġincluding Ġanother Ġway Ġof Ġprediction Ġoutput Ġmanip ulations . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠS OFT _ MAX _ CROSS _ ENT RO PY _ WITH _ LOG ITS , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComputes Ġthe Ġh inge Ġloss Ġbetween Ġ` y _ true ` Ġand Ġ` y _ pred `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ` loss Ġ= Ġmaximum ( 1 Ġ- Ġy _ true Ġ* Ġy _ pred , Ġ 0 )` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ` y _ true ` Ġvalues Ġare Ġexpected Ġto Ġbe Ġ- 1 Ġor Ġ 1 . ĠIf Ġbinary Ġ( 0 Ġor Ġ 1 ) Ġlabels Ġare ĊĠĠĠĠ Ġ* Ġprovided Ġwe Ġwill Ġconvert Ġthem Ġto Ġ- 1 Ġor Ġ 1 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠH INGE , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComputes Ġthe ĠH uber Ġloss Ġbetween Ġ` y _ true ` Ġand Ġ` y _ pred `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġeach Ġvalue Ġx Ġin Ġ` error Ġ= Ġy _ true Ġ- Ġy _ pred `: ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġloss Ġ= Ġ 0 . 5 Ġ* Ġx ^ 2 ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ| x | Ġ<= Ġd ĊĠĠĠĠ Ġ* Ġloss Ġ= Ġ 0 . 5 Ġ* Ġd ^ 2 Ġ+ Ġd Ġ* Ġ( | x | Ġ- Ġd ) Ġ Ġif Ġ| x | Ġ> Ġd ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠH UB ER , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComputes Ġthe Ġbinary Ġcross - entropy Ġbetween Ġ` y _ true ` Ġand Ġ` y _ pred `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠBINARY _ CROSS ENT RO PY , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComputes Ġthe Ġmean Ġof Ġabsolute Ġdifference Ġbetween Ġlabels Ġand Ġpredictions . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ` loss Ġ= Ġabs ( y _ true Ġ- Ġy _ pred )` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠM AE , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComputes Ġthe Ġmean Ġof Ġsquares Ġof Ġerrors Ġbetween Ġlabels Ġand Ġpredictions . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ` loss Ġ= Ġsquare ( y _ true Ġ- Ġy _ pred )` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠM SE , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComputes Ġthe Ġmean Ġabsolute Ġpercentage Ġerror Ġbetween Ġ` y _ true ` Ġand Ġ` y _ pred `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ` loss Ġ= Ġ 1 0 0 Ġ* Ġabs ( y _ true Ġ- Ġy _ pred ) Ġ/ Ġy _ true ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠMA PE , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComputes Ġthe Ġmean Ġsquared Ġlog arith mic Ġerror Ġbetween Ġ` y _ true ` Ġand Ġ` y _ pred `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ` loss Ġ= Ġsquare ( log ( y _ true Ġ+ Ġ 1 .) Ġ- Ġlog ( y _ pred Ġ+ Ġ 1 . )) ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠMS LE , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComputes Ġthe Ġsquared Ġh inge Ġloss Ġbetween Ġlabels Ġand Ġpredictions . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ` loss Ġ= Ġsquare ( maximum ( 1 Ġ- Ġlabels Ġ* Ġpredictions , Ġ 0 )) ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠS QUARE D _ H INGE , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComputes Ġthe Ġlog arith m Ġof Ġthe Ġhyper b olic Ġcos ine Ġof Ġthe Ġprediction Ġerror . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ``` log ( co sh ( x )) ``` Ġis Ġapproximately Ġequal Ġto Ġ``` ( x Ġ** Ġ 2 ) Ġ/ Ġ 2 ``` Ġfor Ġsmall Ġ``` x ``` Ġand ĊĠĠĠĠ Ġ* Ġto Ġ``` abs ( x ) Ġ- Ġlog ( 2 ) ``` Ġfor Ġlarge Ġ``` x ``` . ĠThis Ġmeans Ġthat Ġlog co sh Ġworks Ġmostly ĊĠĠĠĠ Ġ* Ġlike Ġthe Ġmean Ġsquared Ġerror , Ġbut Ġwill Ġnot Ġbe Ġso Ġstrongly Ġaffected Ġby Ġthe ĊĠĠĠĠ Ġ* Ġocc as ional Ġwild ly Ġincorrect Ġprediction . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠLOG _ CO SH , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComputes Ġthe ĠPo isson Ġloss Ġbetween Ġ` y _ true ` Ġand Ġ` y _ pred `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ` loss Ġ= Ġy _ pred Ġ- Ġy _ true Ġ* Ġlog ( y _ pred )` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠPO IS SON ; ĊĊĠĠĠ Ġpublic Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠConverts Ġenum Ġvalue Ġto Ġsub - class Ġof Ġ[ Loss Function ]. Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġconvert ( loss FunctionType : ĠLos ses ): ĠLoss Function Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( loss FunctionType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS OFT _ MAX _ CROSS _ ENT RO PY _ WITH _ LOG ITS Ġ-> ĠSoft max Cross Entropy With Log its () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠH INGE Ġ-> ĠH inge () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠH UB ER Ġ-> ĠH uber () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBINARY _ CROSS ENT RO PY Ġ-> ĠBinary Cross Entropy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM AE Ġ-> ĠM AE () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM SE Ġ-> ĠM SE () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMA PE Ġ-> ĠMA PE () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMS LE Ġ-> ĠMS LE () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPO IS SON Ġ-> ĠPo isson () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS QUARE D _ H INGE Ġ-> ĠS quared H inge () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG _ CO SH Ġ-> ĠLog C osh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ see Ġ[ Los ses . SOFT _ MAX _ CROSS _ ENT RO PY _ WITH _ LOG ITS ] Ċ Ġ*/ Ċ public Ġclass ĠSoft max Cross Entropy With Log its ( reduction Type : ĠRed uction Type Ġ= ĠRed uction Type . SUM ) Ġ: ĊĠĠĠ ĠLoss Function ( reduction Type ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply ( ĊĠĠĠĠĠĠĠ Ġtf : ĠOps , ĊĠĠĠĠĠĠĠ Ġy Pred : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ Ġy True : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ ĠnumberOf Los ses : ĠOper and < Float >? ĊĠĠĠ Ġ): ĠOper and < Float > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbatch Loss Ġ= Ġtf . nn . softmax Cross Entropy With Log its ( y Pred , Ġy True ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtf . math . mean ( batch Loss . loss (), Ġtf . constant ( 0 )) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* Ġ@ see Ġ[ Los ses . M SE ] Ċ Ġ*/ Ċ public Ġclass ĠM SE ( reduction Type : ĠRed uction Type Ġ= ĠRed uction Type . SUM _ OVER _ BATCH _ SIZE ) Ġ: ĠLoss Function ( reduction Type ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply ( ĊĠĠĠĠĠĠĠ Ġtf : ĠOps , ĊĠĠĠĠĠĠĠ Ġy Pred : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ Ġy True : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ ĠnumberOf Los ses : ĠOper and < Float >? ĊĠĠĠ Ġ): ĠOper and < Float > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsquared Error Ġ= Ġtf . math . squared Difference ( y Pred , Ġy True ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmean Of Los ses ( tf , Ġreduction Type , Ġsquared Error , ĠnumberOf Los ses ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ see Ġ[ Los ses . MA E ] Ċ Ġ*/ Ċ public Ġclass ĠM AE ( reduction Type : ĠRed uction Type Ġ= ĠRed uction Type . SUM _ OVER _ BATCH _ SIZE ) Ġ: ĠLoss Function ( reduction Type ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply ( ĊĠĠĠĠĠĠĠ Ġtf : ĠOps , ĊĠĠĠĠĠĠĠ Ġy Pred : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ Ġy True : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ ĠnumberOf Los ses : ĠOper and < Float >? ĊĠĠĠ Ġ): ĠOper and < Float > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġabsolute Errors Ġ= Ġtf . math . abs ( tf . math . sub ( y Pred , Ġy True )) ĊĠĠĠĠĠĠĠ Ġreturn Ġmean Of Los ses ( tf , Ġreduction Type , Ġabsolute Errors , ĠnumberOf Los ses ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ see Ġ[ Los ses . MA PE ] Ċ Ġ*/ Ċ public Ġclass ĠMA PE ( reduction Type : ĠRed uction Type Ġ= ĠRed uction Type . SUM _ OVER _ BATCH _ SIZE ) Ġ: ĠLoss Function ( reduction Type ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply ( ĊĠĠĠĠĠĠĠ Ġtf : ĠOps , ĊĠĠĠĠĠĠĠ Ġy Pred : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ Ġy True : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ ĠnumberOf Los ses : ĠOper and < Float >? ĊĠĠĠ Ġ): ĠOper and < Float > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġepsilon Ġ= Ġ 1 e - 7 f ĊĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= Ġtf . math . abs ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtf . math . div ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtf . math . sub ( y True , Ġy Pred ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtf . math . maximum ( tf . math . abs ( y True ), Ġtf . constant ( epsilon )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmean Of Los ses ( tf , Ġreduction Type , Ġtf . math . mul ( diff , Ġtf . constant ( 1 0 0 f )), ĠnumberOf Los ses ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ see Ġ[ Los ses . MS LE ] Ċ Ġ*/ Ċ public Ġclass ĠMS LE ( reduction Type : ĠRed uction Type Ġ= ĠRed uction Type . SUM _ OVER _ BATCH _ SIZE ) Ġ: ĠLoss Function ( reduction Type ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply ( ĊĠĠĠĠĠĠĠ Ġtf : ĠOps , ĊĠĠĠĠĠĠĠ Ġy Pred : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ Ġy True : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ ĠnumberOf Los ses : ĠOper and < Float >? ĊĠĠĠ Ġ): ĠOper and < Float > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġepsilon Ġ= Ġ 1 e - 5 f ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Log Ġ= Ġtf . math . log ( tf . math . add ( tf . math . maximum ( y Pred , Ġtf . constant ( epsilon )), Ġtf . constant ( 1 . 0 f ))) ĊĠĠĠĠĠĠĠ Ġval Ġsecond Log Ġ= Ġtf . math . log ( tf . math . add ( tf . math . maximum ( y True , Ġtf . constant ( epsilon )), Ġtf . constant ( 1 . 0 f ))) ĊĊĠĠĠĠĠĠĠ Ġval Ġloss Ġ= Ġtf . math . squared Difference ( first Log , Ġsecond Log ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmean Of Los ses ( tf , Ġreduction Type , Ġloss , ĠnumberOf Los ses ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* Ġ@ see Ġ[ Los ses . PO IS SON ] Ċ Ġ*/ Ċ public Ġclass ĠPo isson ( reduction Type : ĠRed uction Type Ġ= ĠRed uction Type . SUM _ OVER _ BATCH _ SIZE ) Ġ: ĠLoss Function ( reduction Type ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply ( ĊĠĠĠĠĠĠĠ Ġtf : ĠOps , ĊĠĠĠĠĠĠĠ Ġy Pred : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ Ġy True : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ ĠnumberOf Los ses : ĠOper and < Float >? ĊĠĠĠ Ġ): ĠOper and < Float > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġepsilon Ġ= Ġ 1 e - 5 f ĊĠĠĠĠĠĠĠ Ġval Ġloss Ġ= Ġtf . math . sub ( y Pred , Ġtf . math . mul ( y True , Ġtf . math . log ( tf . math . add ( y Pred , Ġtf . constant ( epsilon ))))) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmean Of Los ses ( tf , Ġreduction Type , Ġloss , ĠnumberOf Los ses ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* Ġ@ see Ġ[ Los ses . H INGE ] Ċ Ġ*/ Ċ public Ġclass ĠH inge ( reduction Type : ĠRed uction Type Ġ= ĠRed uction Type . SUM _ OVER _ BATCH _ SIZE ) Ġ: ĠLoss Function ( reduction Type ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply ( ĊĠĠĠĠĠĠĠ Ġtf : ĠOps , ĊĠĠĠĠĠĠĠ Ġy Pred : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ Ġy True : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ ĠnumberOf Los ses : ĠOper and < Float >? ĊĠĠĠ Ġ): ĠOper and < Float > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġfirst Ġneed Ġto Ġconvert Ġbinary Ġlabels Ġto Ġ- 1 / 1 Ġlabels Ġ( as Ġfloats ). ĊĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= Ġtf . constant ( 2 f ) ĊĠĠĠĠĠĠĠ Ġval Ġone Ġ= Ġtf . constant ( 1 f ) ĊĠĠĠĠĠĠĠ Ġval Ġzero Ġ= Ġtf . constant ( 0 f ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlabels Shift ed Ġ= Ġtf . math . sub ( tf . math . mul ( two , Ġy True ), Ġone ) ĊĊĠĠĠĠĠĠĠ Ġval Ġloss : ĠOper and < Float > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtf . math . maximum ( tf . math . sub ( one , Ġtf . math . mul ( labels Shift ed , Ġy Pred )), Ġzero ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmean Of Los ses ( tf , Ġreduction Type , Ġloss , ĠnumberOf Los ses ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ see Ġ[ Los ses . S QUARE D _ H INGE ] Ċ Ġ*/ Ċ public Ġclass ĠS quared H inge ( reduction Type : ĠRed uction Type Ġ= ĠRed uction Type . SUM _ OVER _ BATCH _ SIZE ) Ġ: ĠLoss Function ( ĊĠĠĠ Ġreduction Type Ċ ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply ( ĊĠĠĠĠĠĠĠ Ġtf : ĠOps , ĊĠĠĠĠĠĠĠ Ġy Pred : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ Ġy True : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ ĠnumberOf Los ses : ĠOper and < Float >? ĊĠĠĠ Ġ): ĠOper and < Float > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġfirst Ġneed Ġto Ġconvert Ġbinary Ġlabels Ġto Ġ- 1 / 1 Ġlabels Ġ( as Ġfloats ). ĊĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= Ġtf . constant ( 2 f ) ĊĠĠĠĠĠĠĠ Ġval Ġone Ġ= Ġtf . constant ( 1 f ) ĊĠĠĠĠĠĠĠ Ġval Ġzero Ġ= Ġtf . constant ( 0 f ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlabels Shift ed Ġ= Ġtf . math . sub ( tf . math . mul ( two , Ġy True ), Ġone ) ĊĊĠĠĠĠĠĠĠ Ġval Ġloss : ĠOper and < Float > Ġ= Ġtf . math . square ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtf . math . maximum ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtf . math . sub ( one , Ġtf . math . mul ( labels Shift ed , Ġy Pred )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzero ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmean Of Los ses ( tf , Ġreduction Type , Ġloss , ĠnumberOf Los ses ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ see Ġ[ Los ses . LOG _ CO SH ] Ċ Ġ*/ Ċ public Ġclass ĠLog C osh ( reduction Type : ĠRed uction Type Ġ= ĠRed uction Type . SUM _ OVER _ BATCH _ SIZE ) Ġ: ĠLoss Function ( ĊĠĠĠ Ġreduction Type Ċ ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply ( ĊĠĠĠĠĠĠĠ Ġtf : ĠOps , ĊĠĠĠĠĠĠĠ Ġy Pred : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ Ġy True : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ ĠnumberOf Los ses : ĠOper and < Float >? ĊĠĠĠ Ġ): ĠOper and < Float > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= Ġtf . constant ( 2 f ) ĊĠĠĠĠĠĠĠ Ġval Ġminus Two Ġ= Ġtf . constant (- 2 f ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= Ġtf . math . sub ( y Pred , Ġy True ) ĊĠĠĠĠĠĠĠ Ġval Ġs of tpl us Ġ= Ġtf . math . sof tpl us ( tf . math . mul ( minus Two , Ġdiff )) ĊĠĠĠĠĠĠĠ Ġval Ġloss Ġ= Ġtf . math . sub ( tf . math . add ( diff , Ġs of tpl us ), Ġtf . math . log ( two )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmean Of Los ses ( tf , Ġreduction Type , Ġloss , ĠnumberOf Los ses ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ see Ġ[ Los ses . HUB ER ] Ċ Ġ* Ċ Ġ* Ġ@ param Ġ[ delta ] ĠH uber Ġloss Ġdelta . Ċ Ġ*/ Ċ // ĠTODO : ĠH uber Ġis Ġclose Ġto ĠM AE / M SE Ġvia Ġdelta Ġparameter : Ġhttps :// www . machine curve . com / index . php / 2 0 1 9 / 1 0 / 1 2 / using - h uber - loss - in - keras / Ċ public Ġclass ĠH uber ( ĊĠĠĠ Ġpublic Ġval Ġdelta : ĠFloat Ġ= Ġ 1 . 0 f , ĊĠĠĠ Ġreduction Type : ĠRed uction Type Ġ= ĠRed uction Type . SUM _ OVER _ BATCH _ SIZE Ċ ) Ġ: ĊĠĠĠ ĠLoss Function ( reduction Type ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply ( ĊĠĠĠĠĠĠĠ Ġtf : ĠOps , ĊĠĠĠĠĠĠĠ Ġy Pred : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ Ġy True : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ ĠnumberOf Los ses : ĠOper and < Float >? ĊĠĠĠ Ġ): ĠOper and < Float > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġtf . math . sub ( y Pred , Ġy True ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdelta Const : ĠOper and < Float > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtf . dtypes . cast ( tf . constant ( delta ), Ġget D Type ()) Ġ// Ġto Ġactual . as Output (). dataType () Ġin ĠTF Ġ 2 . x ĊĠĠĠĠĠĠĠ Ġval Ġpoint 5 : ĠOper and < Float > Ġ= Ġtf . dtypes . cast ( tf . constant ( 0 . 5 ), Ġget D Type ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġabs Error : ĠOper and < Float > Ġ= Ġtf . math . abs ( error ) ĊĠĠĠĠĠĠĠ Ġval Ġquadr atic : ĠOper and < Float > Ġ= Ġtf . math . minimum ( abs Error , Ġdelta Const ) ĊĠĠĠĠĠĠĠ Ġval Ġlinear : ĠOper and < Float > Ġ= Ġtf . math . sub ( abs Error , Ġquadr atic ) ĊĊĠĠĠĠĠĠĠ Ġval Ġq 2 Point 5 : ĠOper and < Float > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtf . math . mul ( point 5 , Ġtf . math . mul ( quadr atic , Ġquadr atic )) ĊĊĠĠĠĠĠĠĠ Ġval Ġdelta Linear : ĠOper and < Float > Ġ= Ġtf . math . mul ( delta Const , Ġlinear ) ĊĠĠĠĠĠĠĠ Ġval Ġloss : ĠOper and < Float > Ġ= Ġtf . math . add ( q 2 Point 5 , Ġdelta Linear ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmean Of Los ses ( tf , Ġreduction Type , Ġloss , ĠnumberOf Los ses ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ see Ġ[ Los ses . BINARY _ CROSS ENT RO PY ] Ċ Ġ*/ Ċ public Ġclass ĠBinary Cross Entropy ( reduction Type : ĠRed uction Type Ġ= ĠRed uction Type . SUM _ OVER _ BATCH _ SIZE ) Ġ: ĠLoss Function ( ĊĠĠĠ Ġreduction Type Ċ ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply ( ĊĠĠĠĠĠĠĠ Ġtf : ĠOps , ĊĠĠĠĠĠĠĠ Ġy Pred : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ Ġy True : ĠOper and < Float >, ĊĠĠĠĠĠĠĠ ĠnumberOf Los ses : ĠOper and < Float >? ĊĠĠĠ Ġ): ĠOper and < Float > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġepsilon Ġ= Ġ 1 e - 7 f ĊĊĠĠĠĠĠĠĠ Ġ// ĠCompute Ġcross Ġentropy Ġfrom Ġprobabilities . ĊĠĠĠĠĠĠĠ Ġval Ġone Op Ġ= Ġtf . constant ( 1 . 0 f ) Ġas ĠOper and < Float > ĊĠĠĠĠĠĠĠ Ġval Ġminus One Op Ġ= Ġtf . constant (- 1 . 0 f ) Ġas ĠOper and < Float > ĊĠĠĠĠĠĠĠ Ġval Ġepsilon Op Ġ= Ġtf . constant ( epsilon ) Ġas ĠOper and < Float > ĊĠĠĠĠĠĠĠ Ġval Ġone Minus Epsilon Op Ġ= Ġtf . math . sub ( one Op , Ġepsilon Op ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġval Ġcli pped Y Pred Ġ= Ġtf . clip By Value ( y Pred , Ġepsilon Op , Ġone Minus Epsilon Op ) ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġsection Ġcommented Ġdue Ġto Ġmissed Ġgradients Ġfor Ġclip By Value Ġop ĊĠĠĠĠĠĠĠ Ġval Ġcli pped Y Pred Ġ= Ġtf . math . minimum ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġone Minus Epsilon Op , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtf . math . maximum ( epsilon Op , Ġy Pred ) ĊĠĠĠĠĠĠĠ Ġ) Ġ// Ġprobably Ġtakes Ġ 2 Ġtimes Ġmemory Ġfor Ġgradients Ġinstead Ġof Ġcommented Ġvariant ĊĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġtf . math . mul ( y True , Ġtf . math . log ( tf . math . add ( cli pped Y Pred , Ġepsilon Op ))) ĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtf . math . mul ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtf . math . log ( tf . math . add ( tf . math . sub ( one Op , Ġcli pped Y Pred ), Ġepsilon Op )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtf . math . sub ( one Op , Ġy True ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsum Ġ= Ġtf . math . add ( right , Ġleft ) ĊĠĠĠĠĠĠĠ Ġval Ġloss Ġ= Ġtf . math . mul ( minus One Op , Ġsum ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmean Of Los ses ( tf , Ġreduction Type , Ġloss , ĠnumberOf Los ses ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġmean Of Los ses ( ĊĠĠĠ Ġtf : ĠOps , ĊĠĠĠ Ġreduction Type : ĠRed uction Type , ĊĠĠĠ Ġloss : ĠOper and < Float >, ĊĠĠĠ ĠnumberOf Los ses : ĠOper and < Float >? Ċ ): ĠOper and < Float > Ġ{ ĊĠĠĠ Ġval Ġmean Loss Ġ= Ġtf . math . mean ( loss , Ġtf . constant (- 1 ), ĠMean . keep Dims ( false )) ĊĊĠĠĠ Ġ// ĠE ager Ġsession , Ġcorrect Ġcalculation ĊĠĠĠ Ġ// ĠnumberOf Los ses Ġ= Ġtf . constant ( Tensor Shape ( loss . as Output (). shape ()). num Elements (). toFloat ()) ĊĊĠĠĠ Ġvar Ġtotal Loss : ĠOper and < Float > Ġ= Ġtf . reduce Sum ( ĊĠĠĠĠĠĠĠ Ġmean Loss , ĊĠĠĠĠĠĠĠ Ġall Axes ( tf , Ġmean Loss ), ĊĠĠĠĠĠĠĠ ĠReduce Sum . keep Dims ( false ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġif Ġ( reduction Type Ġ== ĠRed uction Type . SUM _ OVER _ BATCH _ SIZE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( numberOf Los ses Ġ!= Ġnull ) Ġ{ Ġ" Operand ĠnumberOf Los ses Ġmust Ġbe Ġnot Ġnull ." Ġ} ĊĊĠĠĠĠĠĠĠ Ġtotal Loss Ġ= Ġsafe Mean ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtf , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloss , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Los ses ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġtotal Loss Ċ } Ċ Ċ internal Ġfun Ġsafe Mean ( tf : ĠOps , Ġloss : ĠOper and < Float >, Ġnum Elements : ĠOper and < Float >): ĠOper and < Float > Ġ{ ĊĠĠĠ Ġval Ġtotal Loss : ĠOper and < Float > Ġ= Ġtf . reduce Sum ( loss , Ġall Axes ( tf , Ġloss )) ĊĠĠĠ Ġreturn Ġtf . math . div No Nan ( total Loss , Ġnum Elements ) Ċ } Ċ Ċ internal Ġfun Ġall Axes ( tf : ĠOps , Ġop : ĠOper and < Float >): ĠOper and < Int > Ġ{ ĊĠĠĠ Ġval Ġrank Ġ= Ġop . as Output (). shape (). num Dimensions () ĊĠĠĠ Ġreturn Ġif Ġ( rank Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaxes Ġ= ĠInt Array ( rank ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġrank ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaxes [ i ] Ġ= Ġi ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtf . constant ( axes ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġtf . range ( tf . constant ( 0 ), Ġtf . rank ( op ), Ġtf . constant ( 1 )) ĊĠĠĠ Ġ} Ċ } Ċ