package Ġs onic . de br is . neural . network Ċ Ċ import Ġk oma . randn Ċ import ĠDig it Image Ċ import Ġload Digit Images Ċ import Ġjava . io . File Ċ import Ġk oma .* Ċ import Ġk oma . extensions .* Ċ import Ġk oma . matrix . Matrix Ċ Ċ fun ĠByte . to Positive Double () Ġ= Ġ( toInt () Ġand Ġ 0 xFF ). toDouble () Ċ Ċ fun ĠDig it Image . to Case (): ĠCase Ġ{ ĊĠĠĠ Ġval Ġinput Ġ= ĠMatrix ( data . size , Ġ 1 ) Ġ{ Ġr , Ġ_ Ġ-> Ġdata [ r ]. to Positive Double () Ġ/ Ġ 2 5 5 . 0 Ġ} ĊĠĠĠ Ġval Ġoutput Ġ= ĠMatrix ( 1 0 , Ġ 1 ) Ġ{ Ġr , Ġ_ Ġ-> Ġif Ġ( r Ġ== Ġlabel ) Ġ 1 . 0 Ġelse Ġ 0 . 0 Ġ} ĊĠĠĠ Ġcheck ( output . arg Max () Ġ== Ġlabel ) ĊĠĠĠ Ġcheck ( input . num Rows () Ġ== Ġ 7 8 4 ) ĊĠĠĠ Ġcheck ( input . min () Ġ>= Ġ 0 . 0 ) ĊĠĠĠ Ġreturn ĠCase ( input , Ġoutput ) Ċ } Ċ Ċ fun Ġrandom Guess ( cases : ĠList < Case >): ĠInt Ġ{ ĊĠĠĠ Ġval Ġout s Ġ= Ġarray ListOf ( 0 , Ġ 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 , Ġ 6 , Ġ 7 , Ġ 8 , Ġ 9 ) ĊĠĠĠ Ġ// Ġguess Ġover Ġthe Ġentire Ġset Ġ 1 1 Ġtimes Ġand Ġreturn Ġthe Ġbest Ġsuccess Ġrate ĊĠĠĠ Ġreturn Ġ( 0 Ġto Ġ 1 0 ). toList (). map Ġ{ ĊĠĠĠĠĠĠĠ Ġcases . filter Ġ{ Ġcase Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġout s . random () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Max Ġ= Ġcase . output . arg Max () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ== Ġactual Max ĊĠĠĠĠĠĠĠ Ġ}. count () ĊĠĠĠ Ġ}. max () Ġ?: Ġ- 1 Ċ } Ċ Ċ const Ġval ĠHID DEN _ LAYER _ NUM _ NE UR ONS Ġ= Ġ 3 0 Ċ const Ġval ĠNUM _ TRAIN ING _ EPOCH S Ġ= Ġ 1 0 Ċ const Ġval ĠMIN I _ BATCH _ SIZE Ġ= Ġ 1 0 Ċ const Ġval ĠLE AR NING _ RATE Ġ= Ġ 3 . 0 Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġprintln (" load Ġimages ...") ĊĊĠĠĠ Ġval Ġimages Ġ= Ġload Digit Images (" train - labels "," train - images ") ĊĠĠĠ Ġval Ġcases Ġ= Ġimages . map Ġ{ Ġit . to Case () Ġ} ĊĠĠĠ Ġval Ġtest Images Ġ= Ġload Digit Images (" test - labels ", Ġ" test - images ") ĊĠĠĠ Ġval Ġtest Cases Ġ= Ġtest Images . map Ġ{ Ġit . to Case () Ġ} ĊĠĠĠ Ġprintln (" Training Ġover Ġ${ cases . size } Ġcases , Ġtesting Ġover Ġ${ test Cases . size } Ġcases .") ĊĊĠĠĠ Ġval Ġguess Success Ġ= Ġrandom Guess ( test Cases ) ĊĠĠĠ Ġprintln (" Guess ing Ġ- ĠNum . Ġcorrect Ġanswers : Ġ$ guess Success , Ġrate : Ġ${ guess Success . toFloat ()/ test Cases . size * 1 0 0 }% ") ĊĊĠĠĠ Ġval Ġin Layer Size Ġ= Ġcases [ 0 ]. input . num Rows () ĊĠĠĠ Ġcheck ( in Layer Size Ġ== Ġ 7 8 4 ) ĊĊĠĠĠ Ġval Ġout Layer Size Ġ= Ġcases [ 0 ]. output . num Rows () ĊĠĠĠ Ġcheck ( out Layer Size Ġ== Ġ 1 0 ) ĊĊĠĠĠ Ġval Ġnetwork Ġ= ĠNetwork ( listOf ( in Layer Size , ĠHID DEN _ LAYER _ NUM _ NE UR ONS , Ġout Layer Size )) ĊĊĠĠĠ Ġval Ġsuccess Count History Ġ= Ġzeros ( 1 , ĠNUM _ TRAIN ING _ EPOCH S ) ĊĠĠĠ Ġval Ġerror Images Ġ= Ġarray ListOf < Digit Image >() ĊĠĠĠ Ġval Ġresults Ġ= Ġarray ListOf < TestResult >() ĊĊĠĠĠ Ġnetwork . train ( cases , ĠMIN I _ BATCH _ SIZE , ĠNUM _ TRAIN ING _ EPOCH S , ĠLE AR NING _ RATE ) Ġ{ Ġepoch Ġ-> ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġnetwork . test ( test Cases ) ĊĠĠĠĠĠĠĠ Ġval Ġn Correct Ġ= Ġres . count Ġ{ Ġit . is Success () Ġ} ĊĠĠĠĠĠĠĠ Ġsuccess Count History [ epoch ] Ġ= Ġn Correct ĊĠĠĠĠĠĠĠ Ġprintln (" Epoch Ġ$ epoch Ġ- Ġn . Ġcorrect Ġanswers : Ġ$ n Correct , Ġrate : Ġ${ n Correct . toFloat ()/ test Cases . size Ġ* Ġ 1 0 0 }% ") ĊĠĠĠĠĠĠĠ Ġif Ġ( epoch Ġ== ĠNUM _ TRAIN ING _ EPOCH S Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults . addAll ( res ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfigure ( 1 ) ĊĠĠĠ Ġplot ( null , Ġsuccess Count History , Ġ" g ") ĊĠĠĠ Ġy label (" Correct Ġevalu ations ") ĊĠĠĠ Ġx label (" Epoch ") ĊĊĠĠĠ Ġval Ġgood Ġ= Ġresults . filter Ġ{ ĊĠĠĠĠĠĠĠ Ġit . is Success () ĊĠĠĠ Ġ}. groupBy Ġ{ ĊĠĠĠĠĠĠĠ Ġit . expected ĊĠĠĠ Ġ}. max By Ġ{ ĊĠĠĠĠĠĠĠ Ġit . value . count () ĊĠĠĠ Ġ} ?. component 2 () Ġ?: Ġempty List () ĊĊĠĠĠ Ġfigure ( 2 ) ĊĠĠĠ Ġgood . max By Ġ{ Ġit . max () Ġ- Ġit . y . mean () Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġplot ( null , Ġit . y , Ġ" g ", Ġ" best Ġsuccess ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġgood . min By Ġ{ Ġit . max () Ġ- Ġit . y . mean () Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġplot ( null , Ġit . y , Ġ" r ", Ġ" wor st Ġsuccess ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġy label (" Amp litude ") ĊĠĠĠ Ġx label (" Neuron ") ĊĊĊĊ Ċ // ĠĠĠ Ġval Ġdest Ġ= ĠFile ( System . getProperty (" user . dir "), Ġ" images "). apply Ġ{ Ġmkdir s () Ġ} Ċ // ĠĠĠ Ġprintln (" save Ġsome Ġfiles Ġto : Ġ${ dest . absolute Path }") Ċ // Ċ // ĠĠĠ Ġ( 0 .. 2 0 ). forEach Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġimages . random (). writeTo P ng ( dest , Ġit . toString ()) Ċ // ĠĠĠ Ġ} ĊĊ Ċ // ĠĠĠ Ġval Ġa Ġ= Ġrand n ( 1 0 0 , 2 ) Ċ // ĠĠĠ Ġval Ġb Ġ= Ġcum sum ( a ) Ċ // Ċ // ĠĠĠ Ġfigure ( 1 ) Ċ // ĠĠĠ Ġ// ĠSecond Ġparameter Ġis Ġcolor Ċ // ĠĠĠ Ġplot ( a , Ġ' b ', Ġ" First ĠRun ") Ċ // ĠĠĠ Ġplot ( a + 1 , Ġ' y ', Ġ" First ĠRun ĠOffset ") Ċ // ĠĠĠ Ġx label (" Time Ġ( s )") Ċ // ĠĠĠ Ġy label (" Magnitude ") Ċ // ĠĠĠ Ġtitle (" White ĠNo ise ") Ċ // Ċ // ĠĠĠ Ġfigure ( 2 ) Ċ // ĠĠĠ Ġplot ( b , Ġ' g ') Ġ// Ġgreen Ċ // ĠĠĠ Ġx label (" Velocity Ġ( light week s / minute )") Ċ // ĠĠĠ Ġy label (" Int elligence ") Ċ // ĠĠĠ Ġtitle (" Random ĠWalk ") Ċ Ċ // ĠĠĠ Ġval Ġx Ġ= Ġrand n ( 1 , Ġ 5 ) Ċ // ĠĠĠ Ġprintln ( x ) Ċ // Ċ // ĠĠĠ Ġval Ġy Ġ= Ġmat [ 1 , Ġ 2 , Ġ 3 Ġend Ġ 2 , Ġ 4 , Ġ 6 Ġend Ġ 3 , Ġ 6 , Ġ 9 ] Ċ // ĠĠĠ Ġprintln ( y ) Ċ // ĠĠĠ Ġprintln ( y [ 1 .. 2 , Ġ 1 .. 2 ]) Ċ // Ċ // ĠĠĠ Ġval Ġz Ġ= ĠMatrix ( 3 , 3 ) Ġ{ Ġrow , Ġcol Ġ-> Ġ( col Ġ+ Ġ 1 . 0 )*( row Ġ+ Ġ 1 . 0 ) Ġ} Ċ // ĠĠĠ Ġprintln ( z ) Ċ // Ċ // ĠĠĠ Ġval Ġw Ġ= Ġy Ġ* Ġz Ċ // ĠĠĠ Ġval Ġew Ġ= Ġy Ġem ul Ġz Ċ // ĠĠĠ Ġprintln ( w ) Ċ // ĠĠĠ Ġprintln ( ew ) Ċ // Ċ // ĠĠĠ Ġval Ġv Ġ= Ġmat [ 1 . 0 , Ġ 1 . 0 , Ġ 1 . 0 ] Ċ // ĠĠĠ Ġval Ġr Ġ= Ġv Ġ* Ġy Ċ // ĠĠĠ Ġprintln ( r ) Ċ // Ċ // ĠĠĠ Ġval Ġv 2 Ġ= Ġmat [ 1 . 0 , Ġ 2 . 0 , Ġ 3 . 0 ] Ċ // ĠĠĠ Ġval Ġr 2 Ġ= Ġv Ġ* Ġv 2 . T Ċ // ĠĠĠ Ġprintln ( r 2 ) Ċ // Ċ // ĠĠĠ Ġval Ġer 2 Ġ= Ġv Ġem ul Ġv 2 Ċ // ĠĠĠ Ġprintln ( er 2 ) ĊĊĊ Ċ }