/* Ċ Ġ* Ġ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 Ġexamples . cnn . mnist Ċ Ċ import Ġorg . jetbrains . kotlin x . dl . api . core . Sequential Ċ import Ġorg . jetbrains . kotlin x . dl . api . core . activation . Activ ations Ċ import Ġorg . jetbrains . kotlin x . dl . api . core . initializer . Constant Ċ import Ġorg . jetbrains . kotlin x . dl . api . core . initializer . He Normal Ċ import Ġorg . jetbrains . kotlin x . dl . api . core . layer . con volution al . Conv 2 D Ċ import Ġorg . jetbrains . kotlin x . dl . api . core . layer . con volution al . Conv Padding Ċ import Ġorg . jetbrains . kotlin x . dl . api . core . layer . core . Dense Ċ import Ġorg . jetbrains . kotlin x . dl . api . core . layer . core . Input Ċ import Ġorg . jetbrains . kotlin x . dl . api . core . layer . pool ing . Max Pool 2 D Ċ import Ġorg . jetbrains . kotlin x . dl . api . core . layer . resh aping . Flatten Ċ import Ġorg . jetbrains . kotlin x . dl . api . core . loss . Los ses Ċ import Ġorg . jetbrains . kotlin x . dl . api . core . metric . Metrics Ċ import Ġorg . jetbrains . kotlin x . dl . api . core . optimizer . SG D Ċ import Ġorg . jetbrains . kotlin x . dl . dataset . handler . NUMBER _ OF _ CLASSES Ċ import Ġorg . jetbrains . kotlin x . dl . dataset . mnist Ċ Ċ private Ġconst Ġval ĠE POCH S Ġ= Ġ 2 Ċ private Ġconst Ġval ĠTR AIN ING _ BATCH _ SIZE Ġ= Ġ 1 0 0 0 Ċ private Ġconst Ġval ĠTEST _ BATCH _ SIZE Ġ= Ġ 1 0 0 0 Ċ private Ġconst Ġval ĠNUM _ CHANNEL S Ġ= Ġ 1 L Ċ private Ġconst Ġval ĠIMAGE _ SIZE Ġ= Ġ 2 8 L Ċ private Ġconst Ġval ĠSE ED Ġ= Ġ 1 2 L Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġan ĠCNN Ġbased Ġon Ġan Ġimplementation Ġof ĠLe Net - 5 Ġfrom Ġclassic Ġpaper , Ġbut Ġwith Ġa Ġfew Ġminor Ġchanges Ġto Ġimprove Ġperformance . Ċ Ġ* Ċ Ġ* Ġ@ see Ġ< a Ġhref =" http :// y ann . lec un . com / ex db / pub lis / pdf / lec un - 9 8 . pdf "> Ċ Ġ* ĠĠĠ ĠGradient - based Ġlearning Ġapplied Ġto Ġdocument Ġrecognition :[ Y ann ĠLe C un , ĠL Ã© on ĠBot to u , ĠY osh ua ĠB eng io , ĠPat rick ĠH aff ner , Ġ 1 9 9 8 ]</ a > Ċ Ġ*/ Ċ private Ġval Ġmodern Le Net Ġ= ĠSequential . of ( ĊĠĠĠ ĠInput ( ĊĠĠĠĠĠĠĠ ĠIMAGE _ SIZE , ĊĠĠĠĠĠĠĠ ĠIMAGE _ SIZE , ĊĠĠĠĠĠĠĠ ĠNUM _ CHANNEL S ĊĠĠĠ Ġ), ĊĠĠĠ ĠConv 2 D ( ĊĠĠĠĠĠĠĠ Ġfilters Ġ= Ġ 3 2 , ĊĠĠĠĠĠĠĠ Ġkernel Size Ġ= Ġlong ArrayOf ( 5 , Ġ 5 ), ĊĠĠĠĠĠĠĠ Ġstrides Ġ= Ġlong ArrayOf ( 1 , Ġ 1 , Ġ 1 , Ġ 1 ), ĊĠĠĠĠĠĠĠ Ġactivation Ġ= ĠActiv ations . Rel u , ĊĠĠĠĠĠĠĠ Ġkernel Initializer Ġ= ĠHe Normal ( SEED ), ĊĠĠĠĠĠĠĠ Ġbias Initializer Ġ= ĠHe Normal ( SEED ), ĊĠĠĠĠĠĠĠ Ġpadding Ġ= ĠConv Padding . SAME ĊĠĠĠ Ġ), ĊĠĠĠ ĠMax Pool 2 D ( ĊĠĠĠĠĠĠĠ Ġpool Size Ġ= Ġint ArrayOf ( 1 , Ġ 2 , Ġ 2 , Ġ 1 ), ĊĠĠĠĠĠĠĠ Ġstrides Ġ= Ġint ArrayOf ( 1 , Ġ 2 , Ġ 2 , Ġ 1 ) ĊĠĠĠ Ġ), ĊĠĠĠ ĠConv 2 D ( ĊĠĠĠĠĠĠĠ Ġfilters Ġ= Ġ 6 4 , ĊĠĠĠĠĠĠĠ Ġkernel Size Ġ= Ġlong ArrayOf ( 5 , Ġ 5 ), ĊĠĠĠĠĠĠĠ Ġstrides Ġ= Ġlong ArrayOf ( 1 , Ġ 1 , Ġ 1 , Ġ 1 ), ĊĠĠĠĠĠĠĠ Ġactivation Ġ= ĠActiv ations . Rel u , ĊĠĠĠĠĠĠĠ Ġkernel Initializer Ġ= ĠHe Normal ( SEED ), ĊĠĠĠĠĠĠĠ Ġbias Initializer Ġ= ĠHe Normal ( SEED ), ĊĠĠĠĠĠĠĠ Ġpadding Ġ= ĠConv Padding . SAME ĊĠĠĠ Ġ), ĊĠĠĠ ĠMax Pool 2 D ( ĊĠĠĠĠĠĠĠ Ġpool Size Ġ= Ġint ArrayOf ( 1 , Ġ 2 , Ġ 2 , Ġ 1 ), ĊĠĠĠĠĠĠĠ Ġstrides Ġ= Ġint ArrayOf ( 1 , Ġ 2 , Ġ 2 , Ġ 1 ) ĊĠĠĠ Ġ), ĊĠĠĠ ĠFlat ten (), Ġ// Ġ 3 1 3 6 ĊĠĠĠ ĠDense ( ĊĠĠĠĠĠĠĠ Ġoutput Size Ġ= Ġ 5 1 2 , ĊĠĠĠĠĠĠĠ Ġactivation Ġ= ĠActiv ations . Rel u , ĊĠĠĠĠĠĠĠ Ġkernel Initializer Ġ= ĠHe Normal ( SEED ), ĊĠĠĠĠĠĠĠ Ġbias Initializer Ġ= ĠConstant ( 0 . 1 f ) ĊĠĠĠ Ġ), ĊĠĠĠ ĠDense ( ĊĠĠĠĠĠĠĠ Ġoutput Size Ġ= ĠNUMBER _ OF _ CLASSES , ĊĠĠĠĠĠĠĠ Ġactivation Ġ= ĠActiv ations . Linear , ĊĠĠĠĠĠĠĠ Ġkernel Initializer Ġ= ĠHe Normal ( SEED ), ĊĠĠĠĠĠĠĠ Ġbias Initializer Ġ= ĠConstant ( 0 . 1 f ) ĊĠĠĠ Ġ) Ċ ) Ċ Ċ /** Ċ Ġ* ĠThis Ġexample Ġshows Ġhow Ġto Ġdo Ġimage Ġclassification Ġfrom Ġscratch Ġusing Ġ[ modern Le Net ], Ġwithout Ġlever aging Ġpre - trained Ġweights Ġor Ġa Ġpre - made Ġmodel . Ċ Ġ* ĠWe Ġdemonstrate Ġthe Ġworkflow Ġon Ġthe ĠM nist Ġclassification Ġdataset . Ċ Ġ* Ċ Ġ* ĠIt Ġincludes : Ċ Ġ* Ġ- Ġdataset Ġloading Ġfrom ĠS 3 Ċ Ġ* Ġ- Ġmodel Ġcompilation Ċ Ġ* Ġ- Ġmodel Ġsummary Ġ( including ĠTensorFlow Ġgraph Ġoperands ) Ċ Ġ* Ġ- Ġmodel Ġtraining Ċ Ġ* Ġ- Ġmodel Ġevaluation Ċ Ġ*/ Ċ fun Ġmodern Len et () Ġ{ ĊĠĠĠ Ġval Ġ( train , Ġtest ) Ġ= Ġmn ist () ĊĊĠĠĠ Ġmodern Le Net . use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . compile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptimizer Ġ= ĠS GD ( learning Rate Ġ= Ġ 0 . 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloss Ġ= ĠLos ses . SOFT _ MAX _ CROSS _ ENT RO PY _ WITH _ LOG ITS , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetric Ġ= ĠMetrics . AC CUR ACY ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġprintln (" Graph Ġafter Ġcompilation .") ĊĠĠĠĠĠĠĠ Ġprintln ( it . k Graph ) ĊĊĠĠĠĠĠĠĠ Ġit . init () ĊĠĠĠĠĠĠĠ Ġvar Ġaccuracy Ġ= Ġit . evaluate ( dataset Ġ= Ġtest , Ġbatch Size Ġ= ĠTEST _ BATCH _ SIZE ). metrics [ Metrics . AC CUR ACY ] ĊĠĠĠĠĠĠĠ Ġprintln (" Accuracy Ġbefore : Ġ$ accuracy ") ĊĊĠĠĠĠĠĠĠ Ġprintln (" Graph Ġafter Ġevaluation .") ĊĠĠĠĠĠĠĠ Ġprintln ( it . k Graph ) ĊĊĠĠĠĠĠĠĠ Ġit . fit ( dataset Ġ= Ġtrain , Ġepochs Ġ= ĠE POCH S , Ġbatch Size Ġ= ĠTR AIN ING _ BATCH _ SIZE ) ĊĊĠĠĠĠĠĠĠ Ġprintln (" Graph Ġafter Ġtraining .") ĊĠĠĠĠĠĠĠ Ġprintln ( it . k Graph ) ĊĊĠĠĠĠĠĠĠ Ġaccuracy Ġ= Ġit . evaluate ( dataset Ġ= Ġtest , Ġbatch Size Ġ= ĠTEST _ BATCH _ SIZE ). metrics [ Metrics . AC CUR ACY ] ĊĊĠĠĠĠĠĠĠ Ġprintln (" Graph Ġafter Ġtraining Ġand Ġevaluation .") ĊĠĠĠĠĠĠĠ Ġprintln ( it . k Graph ) ĊĊĠĠĠĠĠĠĠ Ġprintln (" Accuracy Ġafter : Ġ$ accuracy ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ġ*/ Ċ fun Ġmain (): ĠUnit Ġ= Ġmodern Len et () Ċ