package Ġcom . github . j nex il . ne u vi . internal Ċ Ċ import Ġcom . github . j nex il . ne u vi . api .* Ċ import Ġcom . github . j nex il . ne u vi . api . Activation .* Ċ import Ġcom . github . j nex il . ne u vi . api . Direction .* Ċ import Ġcom . github . j nex il . ne u vi . api . layers .* Ċ import Ġcom . github . j nex il . ne u vi . util .* Ċ import Ġcom . github . j nex il . ne u vi . util . Layers . linear Ċ import Ġcom . github . j nex il . ne u vi . util . Layers . sigmoid Ċ import Ġorg . jetbrains . spe k . api .* Ċ import Ġorg . jetbrains . spe k . api . dsl .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠAb sor b ent Test : ĠSpe k ( spec Ġ= Ġ{ ĊĠĠĠ Ġdescribe (" layer Ġabsor bing ") Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T : ĠMutable Layer > ĠT . enter ing ( var arg Ġvalues : ĠDouble ) Ġ= Ġapply Ġ{ Ġenter (* values ) Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġ< T : ĠMutable Layer > ĠT . random () Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . replace Ġ{ ĠMath . random () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext (" ab sor b Ġlon ely Ġlayer Ġwith Ġ 1 Ġne uron ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlon ely Ġ= Ġlinear (). random () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġfalse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġlon ely . ab sor b () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext (" ab sor b Ġlon ely Ġlayer Ġwith Ġ 1 5 Ġne urons ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlon ely Ġ= Ġlinear ( 1 5 ). random () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġfalse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse Ġ{ Ġlon ely . ab sor b () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext (" ab sor b Ġright Ġlayer Ġof Ġ 1 x 1 Ġlayers ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon (" linear Ġactivation ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġlinear (). enter ing ( 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġlinear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . attach ( RIGHT , Ġright ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . right ! ![ 0 , Ġ 0 ] Ġ= Ġ 0 . 4 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġcalculate Ġvalues ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue (" should Ġreturn Ġtrue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . ab sor b () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . values . should Have ( 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . values . should Have ( 0 . 5 Ġ* Ġ 0 . 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon (" sigmoid Ġactivation ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġsig moid (). enter ing ( 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġsig moid () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . attach ( RIGHT , Ġright ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . right ! ![ 0 , Ġ 0 ] Ġ= Ġ 0 . 4 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġcalculate Ġvalues ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue (" should Ġreturn Ġtrue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . ab sor b () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsig moid Left Ġ= ĠSig moid . activate ( 0 . 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsig moid Right Ġ= ĠSig moid . activate ( sigmoid Left Ġ* Ġ 0 . 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . values . should Have ( sigmoid Left ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . values . should Have ( sigmoid Right ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext (" ab sor b Ġper ce ptr on Ġlayers ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon (" linear Ġactivation ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠENTER Ġ= Ġ 0 . 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġlinear (). enter ing ( ENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġlinear ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . attach ( RIGHT , Ġright ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw 0 0 Ġ= Ġ 0 . 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . right ! ![ 0 , Ġ 0 ] Ġ= Ġw 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw 0 1 Ġ= Ġ 0 . 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . right ! ![ 0 , Ġ 1 ] Ġ= Ġw 0 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġcalculate Ġvalues ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue (" should Ġreturn Ġtrue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . ab sor b () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . values . should Have ( ENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . values . should Have ( ENTER Ġ* Ġw 0 0 , ĠENTER Ġ* Ġw 0 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon (" sigmoid Ġactivation ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠENTER Ġ= Ġ 0 . 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġsig moid (). enter ing ( ENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġsig moid ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . attach ( RIGHT , Ġright ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw 0 0 Ġ= Ġ 0 . 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . right ! ![ 0 , Ġ 0 ] Ġ= Ġw 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw 0 1 Ġ= Ġ 0 . 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . right ! ![ 0 , Ġ 1 ] Ġ= Ġw 0 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġcalculate Ġvalues ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue (" should Ġreturn Ġtrue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . ab sor b () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsig moid Left Ġ= ĠSig moid . activate ( ENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsig moid Right _ 0 Ġ= ĠSig moid . activate ( sigmoid Left Ġ* Ġw 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsig moid Right _ 1 Ġ= ĠSig moid . activate ( sigmoid Left Ġ* Ġw 0 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft . values . should Have ( sigmoid Left ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright . values . should Have ( sigmoid Right _ 0 , Ġsig moid Right _ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ })