{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Digit Recognizer\nA set of handwritten numbers (MNIST), classify 0-10 at best effort.\n\nI wanted to try do the challange consulting nothing but api documentation. No tutorials. *I might have cheated a little* =)\n","metadata":{}},{"cell_type":"markdown","source":"## Replicate the best performant model on Papers with Code\n**Apply what we learned after reading:**\n\n[An Ensemble of Simple Convolutional Neural Network Models for MNIST Digit Recognition](https://paperswithcode.com/paper/an-ensemble-of-simple-convolutional-neural) by Sanghyeon An, Minjun Lee, Sanglee Park, Heerin Yang, Jungmin So\n\nThe paper propose a combination of 3 models. The approach is to not use Pooling layers, instead they take advantage of no padding. Let's try and replicate and see if we can achieve the same results.\n\n![image.png](attachment:72b38796-d350-42a0-a487-dc8c2dea36db.png)\n\n**Steps for replication:**\n- Transform rotation **20 degrees** and shifts vertical and horizontal **up to 20%**.\n- First Model is ten Conv2D layers a kernel size of **3x3**. \n- Second model is five Conv2D layers with kernal size of **5x5**.\n- Third model is 4 Conv2D layers with kernal size of **7x7**.\n- All layers have ReLu activation, and batch normalization.\n- The three models then votes and if two agrees that is result. If there are three unique votes. A random is picked, we are gonna pick the one with highest prediction instead.\n- Learning rate starts at **0.001** and decays with **γ=0.98 exponentially**.\n- Batch size use is **120**","metadata":{},"attachments":{"72b38796-d350-42a0-a487-dc8c2dea36db.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAoIAAAF5CAYAAAALTUtSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAANkCSURBVHhe7N0FmGTF1cbxmxABggaXAMEJHoJ7cIIGt2Dhw90luBM8SHB3d3cPJHhwCe7u0l//znZtejszMLs7M4yc//PMdN/bV+rWLXnrVNWpH9XqVEmSJEmSJEm/48eNzyRJkiRJkqSfkUIwSZIkSZKkn5JCMEmSJEmSpJ+SQjBJkiRJkqSfkkIwSZIkSZKkn5JCMEmSJEmSpJ+SQjBJkiRJkqSfkkIwSZIkSZKkn5JCMEmSJEmSpJ+SQjBJkiRJkqSfMszudRrf+yQffPBBdemll1ZPPvlkNcEEE1Q/+9nPGr8MHf/5z3+q8847r/rwww+rX//61429XcM///nParTRRqtuu+226qSTTqpGGmmkatxxx62+/fbb6vLLL49nG2644aqRRx65ccZ/sYLgKaecUl122WXVVFNNVY0wwggRJ1dddVX1xBNPVBNNNFH105/+tHH0oDz33HPVQw89FMe08uqrr1Z77rlntfDCCzf2VNV9991XjT766NVPfvKTxp6kr+L9S//vvPNOpP8f/ehHjV+GDmldfv3FL35RjTHGGI29nY+8c//990c+Ou2006pLLrmkmmKKKaoRRxyx+uijj6orr7yy+ve//11NOOGEbeaPTz75pDr00EPjGr/97W+rYYYZpnr66aeru+++u3rmmWeqSSedtN04ufPOO6vPPvss8korDzzwQHX22WdXc8wxR2zLv47/1a9+1WlxnPRcHnnkkeriiy+OemqsscZq7B06vv766+r666+vbr/99mqcccaJOqCreP/996sXXnihGn744avDDjusuvfee6sZZ5wx6gT1yR133BH5ZLLJJmszPTtXvnrzzTeraaaZJvZJ/+qqN954I/JBW3zzzTfV+eefX00yySRt5tcLLrggrqEOhHrb9thjjx3b/Z0+bxEkjp5//vmouIYmA9xyyy2NbwMgKs8444x2E2Znce6558YzvPLKK9WLL75YLbjggtUqq6xSvfvuu9WZZ54Zz7TkkktWu+22W+OMQbnuuuuq8ccfP8TciiuuGPt22GGHavHFF69mmWWWau+99459rSg8rrnmmihA2kIFes899zS2BiDD77///lF5JX0b7594ImZ+/OMhK0akk5tvvrmxNYAZZpih2meffQYW2F2FSmraaaetbrzxxqgMVEzLLbdc/CZ/LLrootVcc81VtddOli9///vfVy+99FK16667xr599923WmKJJUJIyjttoRGmYfbss8829gwKAXnTTTc1tqqoLOXdY489trEn6csQP9K/tDmkaKRolBeIsFFGGaW64oorulT4fPHFF9UJJ5xQTTnllCHK5p133hB0O+20U/y+1157Rf746quvwjDRFhdeeGG1zDLLxHUYOdTbjBYMDhdddFH19ttvN44clNdff706+OCDqy+//LKxZ1AIU8KvwJgibK31en+lX3QNywhaCe+99171t7/9LVopCngF9r/+9a8otA866KAo3O079dRTo2Wjda+iIni23HLLaM00U67LaiZhn3jiidXxxx9fPf7449XOO+8clQTLgwR88sknR4sIDz/8cFyXkBMWokuiP+KII6KlUpChXVcrR+twrbXWisw1++yzV59//nkIRBnGdSeeeOIQhyqMxx57rLr66quj5TX33HNXCy20ULXmmmsOtIYOO+ywYVlkfZhtttliXyuebfrpp29sDeDRRx+N1iprCVhBtDL32GOPsHCIizHHHLO64YYb4vekbyON+NPQkpYV/tKw1rn0x4JNJMk/CnRpTn6QhhTKxxxzTHX44YeH5a1AVP785z8PkShfusZ+++0Xaeraa6+NykTal09YJI877rjq448/jnPlKee4Piu5SkPFIk+6b0Ged458wPK2yCKLVKuttlpUFtC4ct2SP+Qjz/XWW2/FcypHVl555WrmmWeuNt1009gP1oy77rorRJ7KsC3kWaKzGc/IKil/iU/PrpH597//PX7XkGMpZX1N+jaEv/TvU90gH7GQqQc+/fTTaESol9QvL7/8cqRlAk+95Td1wEYbbRR1DqFTKHlVOe04luy//OUvkU+kdfUIWLPlGfWVdCjfuD6LmrzFKqd+O+ecc2J/M/KZhhxWWGGFMDRsttlmA/OH8BaL4G9+85uBPVzStXxFxAk7g4K6znnyqHwvb6knCbi2GG+88cLaWSjh9mzKAc+u3DjwwAPjemBUka+TfjZGUEGvwFUYEywqLhUU8bTUUktFIpExiBuJ0HEqG5WBFhULQVtIwDKSykEGkRmJL5WcjMqap9I45JBD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kiRJku+n24Sginrrrbeuttlmm/i84IILGr8MHttuu2116KGHVrPPPnuIjgIxctpppzW2BmDgqnV7zznnnOqQQw6pllxyyeruu+9u/Ppfjj/++Dh2oYUWqp544onG3v/y8MMPV7vssku1+eabx3XAxchhhx1WzTnnnCFIWjnxxBMb3wbADUx7z7zgggtWe+21V9z/6aefbuz9L9zIHH300Y2tQTnppJMa3wbw+OOPV2OMMUZM7MGqq64an0OKON13332rBRZYIIR1M2VSBZH74x//OISxd+tZttxyy/hNPHlfc8wxx0BR6vi2mG+++ardd9+9WnjhhQeGvxnnNz/PqaeeWl122WXxnVBde+2143uSJEmSJB2j24TgAw88EBa5E044oTruuOOqP/7xj9V//vOfarPNNqs23HDDEDCEBHG1wQYbVMccc0z1xhtvVKecckqcf/PNN1cPPvhg9de//rU66KCDql/96lfV66+/Xj377LMxE7AItALrEIH2s5/9LJwy77PPPtVKK60UQuv8888PVzgPPfRQde2111brrbdeteeee4YAeeGFFxpX+C/TTTddhIsYdB5sC8foo48eFjPCZaONNqq23377sHh5Vt8JX1ar+eefv7ryyivj3FZGGWWU6sADD6yWW265CNNLL70U57kedyYEDzF11FFHhfjdaaed4jfPTmCLE88gPlgVl1lmmViRpJn77rsv4nmLLbaI8JodK85sE8eE8DrrrFNdccUVEe6dd945rv2nP/0pfOuJ4/vvvz9EqXjw3lhR4bmIuPHGGy/CuP/++8f7hHCLp7HGGissqmaWuUdbmJHuXt7TbbfdFvG29957h6i86667GkclSZIkSdJZdJsQJHBmnXXWxlb9xj/+cYgdokNlz5L03nvvVbfeemuIiUsvvbQaeeSRqzPPPDMECQE58cQTx7kECKE14YQThmD5y1/+Eta0ZggzYhGED+FE7BB7c801V7XDDjuE5Yql6sUXX6zWX3/96pJLLonttthjjz1CUK622mqNPVV0gRJ9Y489drXjjjvGMQQSPIt9ww8/fHXPPfdUI444YuxrC+HbZJNNqiOOOCJE5wgjjBDCdeONNw6r2xprrBHLztlmafSdEB1uuOFCLC2++OLV8ssvH4IRk046aYiqYv0Uf8JClHkG4SQ2n3zyyRBezz//fMSp+3sn4kYX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zbvvvhvHEDtEj7XCiT6VfBFPH374YYxHnWyyyUKYFBHiOMc7toxXxcsvv1yNMMII1U9+8pPq8ssvrzbYYIP4M7O93I/4IEhvuOGGgb/zJdcK/4mEIIsC0eM+hkYYFlHC4VkIRtf76quv4hh+AN0Ds802W4xLasUzE46utf/++1dvvfVWXOvFF18MMYVrrrmmOvTQQweKwddee61655134vt7770X55Rnuvfee0OwmuFNiF100UWx3/ennnpqoHAiiIXRueJWuIUXPo2jAtFGoBHLwonXX389/IeW8F166aUx21aYNt5442raaacNsS+83A5tttlmA+Np5plnrm677bb43oyw6Lb7v//7v2qvvfaK9IE333wznhfSyj333BPf4b2Wdy7ui9hMkrYoVsG0BvZeOuw+RmFUCsmk63n11VfDMqiiSCHYfUw00UTdtvRYZ7iP2XLLLasVVlihmmOOORp7qvBLOO6448YgbtY7Ff2VV14ZY3mIjCWXXLJ69NFHowB3fyJsuOGGCzGz6KKLVrfffnu1zjrrxLhUFsEVV1wxxBzOO++8EGFW5uBzce655w5RMs8884RlwH4uJA488MBq0003rRZeeOFqxhlnrGaZZZY4vxnC7vHHH68OP/zwuH45hoBaeumlQ+AJB5Hqnp5ztdVWi0/WLULzoYceijDtu+++cW6BoFp11VWjIeW3s846q7r22mtj0pXr7r333uHfjtgVD+KI2FOhsWASmJ6bpYyjcaKM+L3uuusivjwnF0/CMu+888b+Y445Jv6IzWWXXTbikVD0PIQfkUtUEVoFK504h8VRGEcbbbQQhq4nDhyriObDVVkgvu0Hsabi9Y7+8Y9/xCQzYrUZglTcsqR6H6yajven10GakFb+9a9/Vdtss02cw22V48caa6wQy6yCzh1Sfgj3MaXRk3QP++23X+SZ+eefv7En6Wo0vscbb7zG1tDRYSHopqOMMkr6tOtGvJoUgd2HCo9ljYjpDjpDCBJKuoWJDBBzBNrFF18c1h/diUTi+OOPH6KB8ND1RwwSMkSPbmEQlYTgAgssUC2zzDIhLMxiJ2yKECTaJp544jifeCJyDj744BBNVusgVNZff/0QDipjFjLihOVPRdEMIUP8EFvCtfzyy0eaZ8VbbrnlQhh6PkIPjzzySIgywm6VVVaJweksd8Se780QgosttlhY1j2HeJhiiikiXjhqFxdjjjlmiGVdrEsssUR12WWXVT/+8YBOEs9HhBG1zvMsBKn4WGSRRaqTTz45wnnjjTdGt61jdbGKc46TWe9Y8Ty35yQ6WW7dR3jgWrp+DznkkBC4RxxxRKzcJO6JPlY8XdAEzUknnRTd5fy1iVvxxCLoWO/Lu5BuicpmCEFifNZZZ41rizthsK1ssXoRAd8qBFlRdfsJo2fvTULwggsuCIHufSXdgwaP9FTyT9L1qK8YjMYZZ5zGnqGAEOwIo446au2dd95pbCVJ3+PYY4+t1SvfxlbX8/jjj9emnHLKxtaQURcqtbqQiO9fffVV7c0336zVBVBs1wVmrS5G4rnqFXrsW3rppeOzLmJqW2yxRa0uZGK7XvHX/v73v8f3r7/+ulYXD/H9nHPOqdXFRXxHXTTGvmbqoiWOeeihh+L6dSHY+GUABx10UK0uPiN8/gruA/Gw0korxfc999yzVhdZ8b0uamuLL754fP/8889rddFWqwvX2K4Lp1pdZNaeeOKJWl3Ixb7PPvssPlEXiHEM6mKqVhertbp4jGscd9xx8Qx1QTgw7urCMO4nTMJY4unoo4+uXXvttfFZF21RBi600EK1lVdeuXbffffVtttuuzjuzDPPrNXFWq3ekKg99dRTsW+jjTaq1YVh7cknnxx4XF1gxuddd91VqwujgfGx5ppr1l566aUIg/fneYUJJZ7qgrI2++yzx/d99tmnVheX8R11kVyrC7laXTQOEg/SQ12YxnfXFS/LLrts7e2336598cUXcf8bbrgh3lGh3iCIZ4P32vq+Bxf3rzc6GltdjzRabwA0tpKkb1JvkNfqjbTG1tCR8j1JejG6fnUb1oVUdFeyPrHKsaSxlLEWjjjiiNH1C919YJ258847o1uTxa9e2Ue3JSuUISCseyxDLF7OL+jmZUUDixjrny5aFjrLULJk1RuN0WUrDK7H4lkXdGEVK9Y9sF453xAI4xO1cFnsTH5xnvF1xj0Kh8kOuuz1SoCLCtYH9xEmYRaGgm7cYslkgWMlNY7OPT23no26CI+uT797FlY58cmayFqIEnflk1WN5VIr3JgoFklh1ZXLKurZy0QvxwqHbftR4p8VkQVFN744Fk7fWaRZXH/+85+HlaVeRkecGQvonbFsGrfH6mVcX3lfJR5MLGm2vBmbOcYYY8R3E2A8L8sfa+X2228f28Z8+vS7LnDvQte5eGeFZHVMkqQPM0APfj9pEUz6Or3RItjd1MVJbYUVVgjL0+DCQvbpp582tjoH1kflEisfK1tfYo899ggra0eoC9haXcCG5bJY83oKaRFMks4nLYJJkvwgsMKxNLJWDS7GEhbLZGfBssXyZlze7LPP3tjbN2CZG2mkkRpb343xgiOPPHJY9Vg+kyRJOkoKwSRJBgsTFnR5Di7Njmc7C5My0BXX/qEhAs1i7wh9OR6SJOlaulUIcqHA7YNZgkM6tZ/7C2N6im+uAv9cZfZjwexIPrT4TDOOqT3HqFxTGCPDhcN3wdWFWTowW1I4uOFoC/6+muEo13iitjBjjzsHY5oGF7M4mzGuqtkZ79DMSEWJu7Z8iZlRCWOqjL0qmD3pD+KJ6xIzPmEcmX1tIf7FQ/F11oo00xzf3kXxucZC5f0kSZJ0BsohZVd75dH3UavVwq2P8lPd10yZ1V9QtnHZw0dkce/jz/jPZvjebP69LUfuUB9yX1QwrteztHW8MaqlfIb6sLX+KpT7q0vVNYPDSy+9FGNbmzEumE9LuHapX4cUdagZ/MX/Z4GPznJvHgbMpod35HnK+2mOJx4YzORvC3We87ic+uqrrxp7B4Wrqua6rjmO1Y/Gc/cUuk0IimiuMlTkXBbICEMCsScCDT6XcApeRqtDVYOsJ5988hBsjpW4m314FQhGiXrnnXduVyxKrAaTOxYGnxsEzklrW6sgtHrxZ0VpXaGhwG0H5666uSSsVsRdce3QSut9ZCy+nAyIB/cgQwPHuTKRwfrisRkFHLgAMfAeChED2wk+6LIzYJ3bCoUiVxyObwvdWxwWO7/ZwW2BKOWEtyDDlneuAN1zzz3je5IkydCgXOVWR12j7BoSw4V6QTlmIpFJPs1o/DeLFaLNBKbi+N2fIRiclTejfC2/qxOUzW3BUbqJT+A3U0NdY1l53EpxQ1IwfENZXZzON8OIY+17gomLnraw6k1bjXKGkDLRrMC1lEluBBlDQHHUPiSoJ92beOYyqRnCzftwH++jTKBSJ7u/sBF26i3vWv3ufdADbQk96eO0006LeKJr2sLvJvIV+CstcD8l3nsK3SYERVxZNcAfP2EyiYRJYF111VWRuL0UM+H4rZLIiTNIfF6KGYYrr7xy9etf/zoUOyEgQbYKJS+eUDMzz4tyP2LMSzZ7kf8u97zkkkvipXPSOskkkzTO/l84zCTYCjIJP1XG5Zh15/lch98ymVVrT0Hi3goTfrvaWgEBEpxnMlNTgiSWiSLxInFKUGbzHXXUUdGSEWcyueXAZG7PLvwl0Zk1SKBK9AXiyyxO92ElFBazAsWzeDBj0axLYsp3MyBlAMd7Ln7ViFXPwlGv5yyFlGsVH3EKoOYlh1rjiU87LdC2MDPTM/PTxi8a8W5Wqbjg8y5JkqQ7YJ3ju9FsfOWueoRPSGWbcZganhql6iPOw9VNBKMZ3cpdddzvfve7KF8dr+y037ayu3XZQ9uWEzUrXtmqHDRLvsyaJ3Jck8Nxv7sn36Bt+UrUW0ZkanTDuWahM4oYT6sONP5U2VrKVcLEPUuv2nTTTddmYxxmy6tjikBS5rue59RDw3OA+odjdN/VO6V+Vp+p35XpBddTDxfUMZ7RTHrxK954P6ANiDjn+uN7lG9OddS5554bw1W8A8cVCEv1mlnwIL7EG1jr6Ad+OCGexHmJJxQn8G3Bz6k4pDXASOQdCXvpqeotDP5AnyGEmXTSSSdtbA1gn332iRdIsHH+ymKnNaIblYAiHqh4CU5C4UwWBM/www8fHvGJFqpeK6DZ+uV+foffZFrXInA4N5WRjMFxf+ZkCch1m1V7geD61a9+FS4jihVSoidArb5gHA+3D5y/KjAkSM+hAOEs1vnWCyYQ20L4JCDhs0IDwaqlxDooIUvsuq5ZDAlSGYvVj/lfJiGWiTvHcvXAtYbEXkzhMr6MLhMRWDKp47ip4MaCSDTGSAYl1LjvcE2tOisPsJa6tviX2DkdJka5HoE48bziUeZqLkSEVZyLP+LdGKb2ujOKyCWihVXrzKoVBLJCWKHclyB8FZbSUNI9aGgpT4p7mKTrIUx6W95VuStHC8pwZTvL2nHHHRc9Wso75TQBceSRR0aZyg2T+qXZya/uRWUra5i6zrHK8mYISGVkweo1BA4Bp6xX5hIYzocwFItfK5yBF/c/4E5KPaQc5nRc2Uxwqm/VIeoGDX0NfM7G9chY5lRdoT5qRZ2pjlB+eXbiVlwQbRr+nLULLyHKWbu6y37DtAgr5br6vXQtl9WRlPFg9KEHuGkiBpWR4s59CbSDDjoonL8z6NABjne9ksb8xpgAWoJTdM+sR0s8FyEoLrhQUqdCPWNCm7CIQ5R4aGsimnqTBVIdCu9Z2DQKhLU30W1CUIRa4qkZiZCAKOIJJfOxkklkEhSLmIxFres6JFIkXriGY1tN92Y3ln1aURIf0zPBpxUkEbuebksVsRcqfMbcSQzNEJpagCxfKhIZvfhd85vCQUKXaQsSrDCwgrVlWm5G+Iy34wOstDiFhTgrz1Csewqo4pPM/cSb7db7yIAyd4lHzyqehcuzoLngEe/iQjz7lMFcz7kyowJPOAk9AtK1ik+3gsRvHIguDSJShhA/4omI9A622mqrxtH/C3O9TE0MynyeVfrQLV8sw814fq1HEJeO7U0okLzz9hoISeejslGpsIIn3YPypFS+vQX1gx4pq6tAuV/qJmWobdinDFJWahhrtLPGFaHHWjbNNNOEGNP9W65RyvBCc32lrFduEjBg9dP7oiENdY36oS2jhfLE0CtGEelcmauB7VgWRwYJRovmOgTCpUwvQlNPk/fWFgSXeoqVTtnuGQ3VUgY3P4M/z+W6zfeB+qV4HvCdhdHYPcJT3DIAQDiVj+q3YqXzXVmvblMnlZ4/6KplkGGJhGfwV563xLM/VljvyjAq9b4wqp+8R1ZC9bwwlrC3QjgTnMoUjQD1qrhm8PLOW3ux1KXiRFjFVU+a2NVtQlACJHa0GkQES5MIF4leZHtrFGoVsZCV8WlaLI4l3CQ+Kt74C93EzTMZiRViAlpgEoNWDGHJ5O/F6Yo2ZpAlkKiRubTctGBlxDKuowwYlXCKBUdildhKl7AEUFpExtO1QkAVVxCElZZKgUVNV4RwMHe7loReJsQIuzEcrHKemdBiufsuNxHOJygJKCLQ88mwCgctReHsCCypwsOkr2CUQRQABr6WcSAymfgoBZNCS4t1hhlmiGcj2pngZRwZT+ZFazwUmNvtF6+sl5zwykSeWfzbxwrrXSqUCEYi/btEZk8lLVPdS2kAphU2+S6Um7oU1TeElbKTtUf6UWco35onY0A5ra7SO6P+IeR0tRI56hDlsfKUgPFbs5VUd6RyU2NYbwjRRigop9UNLJKuY1y0se8sYEQNivWP2FZWquegLtFjVhy5s4Ypq9WZBKv6srnObEZYnK8x73tzd6vwKccNYVLX6QYlcMqkD8YEDXrCTZ3HsKIOUf63h8a/epoQFOfqUmW9uNTD1BHUQeKF5dTzCbN6gnXPM4gb8aweFXdlPL7jGU5oDL1oehPVl3SJ82gQ71p9rPu8GdfXCNCLpYub1VP5UkQ7rWEsvfPU3eo2QtG1Std9j6D+AjtEPQENtUPpugqv1cVOrR7RjT21WCLq6aefju9ffPFFLH2E1157LZzXoi7oBjqwdW49QcdfXVXH/rq4CWeq9dZQHFNYccUV45r1zFT717/+VatHfuyvv7Q4z291cRNLMv3zn/+Me6Iu8Gr1DBffm7H8Uz2xxfd6K7BWb33U6gIttl3PMk+uh7JfuJx3ySWXxHWFsd5ajN8KwuN5yrVdq57JIi4sEQVhe/HFF+O7pajEm+PKfUrc+Szvye+ujbqQqtULtIHbwl8XafG9LlIjLlGu51qff/553L/Ed4nfl19+eZDt0047LZYQK4jvesaP7569OZ4s92U5LtubbbZZ7CuUY4TbPeD+9VZnhNd+acG9y7Hl+iXdDA118dmtDqWT7me99dar1Rsoja2kL9JZDqWVx+oFZQxKmV/KylJHKVtLWei3UmYrV0vZWeq8uoCKst21ldWFBx54IJZXhLLs04bjdcc01wHKVvcq57p/XWQMsnRjoZSReO655+JZnA/3Vyc6r9RRKOessMIK8Vz1RnfUrwV1gudRDvsd6hGOz4Xb9YTJOepV2+7rHqWOQok79aVyHY4pceuZxUkJb/OzlO/u653APuEp8e1PWO3znK5b6iRLLJZ7QhjKs7TG0/LLLx/h3H333WMBgIL7Ci/Ut+LPNT13XTzGd+ErYSnv0/XFlWsOLZ3pULpbhWB3U2/NDFFENSf8zoJQkhgUCCUB9RVk+HpLqrH13RCCMqgMoaDsSaQQ7PukEOz7dJYQ7G40kAcXZaiytDNRT5WGfVfUhT8011577UBx/V0QexdffHF874nx0JlC8Ef+NYyD3wkzr67U0k+fJH0Nww3qrcH4TPomhn4YR8R9R9I3MdbM5ACfSdJX4eVEN/13eTvpKLmySJIkSZIkST8lhWCSJEmSJEk/JYVgkiRJkiRJP6XDYwS5fOHgkZPnpOsxPZ+LFv6nipuApGvhPogz1LZc2iR9gxwj2PfhsoPbFO6nku7B2GpuwdItU/fBLdBzzz030FXN0NBhIcgPHJ86SffAFxT/e3wvtufQMul8OAhtdrSd9C1SCPZ9OPbl8P/bhnPjpOvhH5ET6O/yFZh0LnxCWjq3M+iwEEy6F17JOQn9+OOPwwFpkiRDTwrBJOl8ONIui0YkvY/sc0ySJEmSJOmnpBDsYViT19rFxWJhSSFrQ5bl8pIkSZIkSTqLFII9DAtdb7PNNrEINqxHab3FzhgQmiRJkiRJ0kwKwR6GRcc32WSTxtYALOydJEmSJEnS2aQQ7IGwCA4//PDxnTuTmWeeOb4nSZIkSZJ0JikEeyDNVsG0BiZJkiRJ0lV02H3M008/Xf3nP/9pbCVdzfvvv18deeSR4Z8p6T5+97vfpdP0Pky6j0mSzifdx/RuOiwErW6hkhxxxBEbe5KuxquxokvSPdx9993Vn//85+qII45o7En6GikEk6TzSSHYu+mwEPzlL39ZPfPMM/GZJH2Rv//977FUks+kb5JCMEk6nxSCvZscI5gkSZIkSdJPSSGYJEmf5+KLL67efPPN6uuvv441aD/44INYj/bLL79sHJEkSdI/SSGYJEmfhwgca6yxqpNPPrl6+OGHq1FGGaW68cYbq5/97GeNI5IkSfonKQSTJOnzrL322tWvfvWrxlZV/eQnP6l22mmnxlaSJEn/pVuF4EcffVSdfvrpsZ7up59+2tg7eDzxxBPV0UcfXT3wwAONPQP47LPPqv3337+xNYDjjz++evLJJ6v33nuvOumkk6rzzjsvuoVaeeONN+LYyy67LGbqtsWrr74akwiuueaaxp6qeu211+Kctthll10a3wZw8MEHx/FtcfXVV1dnnHFGzFodXFrdy4jjSy65ZOBz3H777fE5pIg7VpSLLrrof+Jm9913j8/XX3+9Ouigg+K740888cTq/PPPj234/dJLL43vBx54YFhn2sK6yuLh/vvvb+wZlG+++aa65ZZbGluDujT66quvqttuuy2+J0krLH8777xzY6uq1lprrVy2MUmSpE63CcEvvviiWmaZZaqRRhqp+sUvflHddNNNsZ+4aBUY7YkxqOynn376aOG//fbbsc/xRMJjjz0W24XrrruummKKKar77ruvmmaaaUJEEIOt3HPPPdVvf/vbEKg333xzY+9/MZ5o/fXXjxU+OHsu7LHHHtWhhx7a2Br0WR599NFBtueZZ57qtNNOi++t/PWvf41KyYyrtuKFyPG8zTTfB2X7hRdeqNZbb73qqquuiu3DDjssPtF8zULzdvnefNwdd9xRTTzxxCEuzz333NgHvz/44IPxnXibe+65Y/zVmmuuGTPIJphggvgNzfE011xzxfFtQUw6T3zccMMNjb3/DZd4KGsww/ssovHzzz+PBkKStIc8JH2lNTBJkuS/dJsQvP7666t55523WnrppaulllqqWmKJJUKsrLLKKtWqq64aIunf//53tfDCC4foWnHFFcOSxN0D+Ha78847Y3vOOeesxhtvvLDuESjLLrtstfHGG8dxBSKR4IRrTjvttNVPf/rTaswxx6yOPfbYGCjunixdwjPllFOG1aAt9zjXXnttXOOdd94Z2L3keQjD4lfRdTzLn/70p7B2Pvvss9WGG25YLbDAAtW7775bzTjjjO1a/Nx3hhlmiGdSSRnDtPnmm0ccsDiyohJkRx11VPXiiy/G8xJ79hFfnl34CFoQY4ccckj8VrDNR55zHSfuF1988bjPBRdcUK200krVyiuvHNcV7gUXXDCsrEsuuWS8Nz4kiXnx6jzXEk54L4Q0USaePf+4444bvxmH5TcNALhOe1bK4YYbLgTl1FNPHZZN73+11VartthiixCHSTI0FKtgWgOTJEn+S7cJQZV6EQcFFjDWoTPPPLM69dRTw6rHcnfcccfF70SW7lSChKVsttlmi/0EkJY9UacbkpWvdE0WdBkaHA5CTAWgm5jYWHfddaO7U5csYfTSSy9FV64uS0KsFWHgd4w4+eMf/1h9/PHHEe5mK52uZ89BXLrH2GOPXR1zzDEhfPmmc11Wq7awigirmW5v1sfpppuu2mCDDUIss4ytscYaISQJvlNOOaXafvvtqxNOOCEEMYfTup333XffEKwYYYQRqhVWWCGeEeKVcBVXrGZWLGFdI1IJbDMniTviWHercM8+++wRHgjfFVdcUS233HIhvFWkrjXppJPG7+JDJesdP/LII9WHH34YgviVV16J+FhnnXXiODjO+2yLt956K0QsSx/rsTieZJJJwppaupb7EoYkeH/5131/GpnyTlu/5V/X/d16662NVJ8kSU+j24SgLlqOXAvECYvVMMMMEwUFax2GH374+Pz5z38eFj/WOsJlsskmi2Mff/zxEC+li9A1iKxWAUdwFNcQo402WljEjE9jVYP7FGFGVOq63GabbULgtMJKyCpGBLLasXx98skn1aabbhpWMUKUsLL6Sin4WCN9eg7PCr+3hesLm3sTlASQblj7m7trwSpXntX1xcmwww47yH3AYidcRFfzuEjx7Dw0Wz/Fh/1mU/oUf67HusdKKM4J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SZL0X1II9kBYBQ2+xeabb57WwCTpBHbYYYeYaYfdd989rYFJkiR1Ugj2QIpVMK2BSdJ5FKtgWgOTJEn+S4fdxxhs/cgjj6SPtW7Ca3nllVeq8ccfv7En6WpMyCEUFlhggcaersVY0M022yxcBCXdQ/GHOvroozf2JN3B/vvvX0044YSNraSvke5jejcdFoK6Ubzk7KZM+ip8N04wwQTVcccd19jTtfz73/+OAvSss85q7EmSvsdOO+1U7bHHHtWf/vSnxp6kr5FCsHczWEvMPfPMMykEkz7L3//+9+qf//xnfHYHhCAXJj6TpK9CAC644IIpBPswKQR7N9nPmyRJkiRJ0k9JIZgkSZIkSdJPSSGYJEmSJEnST+kzQtBQx9b1RG2/8847ja3u5fXXX298G8CTTz4ZYexsWu/Tnbz11lvx6bk8X0fo6HFJz+Dzzz+vPvroo8bWAJ599tnq66+/bmx1H9YFbs3PXZWeekK+Mpv85Zdfju/fR+arJEmGlG4VgpZLW2WVVao11lijuu+++xp7B48DDjigWn311cO/XrOw4hJiyy23bGwNYM899wyXINYX3XDDDasVVlghXLK0cuGFF8bvwvbee+819v6Xd999t9pggw2qddZZp7riiitin4kz6667brXRRhvF2qWtOL6Zm266qbrjjjsaW4Pi3v5cq7XShWe49957G1uD4rxm/vOf/1RLLrnkwOtwnDs0WIprrbXWCifXr732WmPvANZbb734vPvuu6vrr78+RAMH2FywnHTSSfEb0fDnP/85nk2cXXvttdU999wTv7Xieuuvv367LlUIgV122aWxVcW7uP322+P7p59+GjMT+xvywKGHHlqtttpqkT7feOONxi8dx3vbdNNNq+WWW6464YQTGnsHcOutt1ZnnnlmY2vA/f7yl7+Er0supaQNfx988EHjiP+y/fbbx29rr7129c033zT2/peHHnoo0oZJBEXIyKvy1SabbPI/DSfHHHbYYY2tAXj2tu4tPSyzzDKRnvbaa6//uRYILmmyLVrz75VXXhlxhK+++iqefWg48sgjoxwUvlZRXVZAOfroo6Mxa1k8eWPNNdeMvAb5TTxtvPHGUT789a9/bbPssJze0ksvHfHMhUtb8WCC1DnnnNPYqqr99ttvYDmonL7ooovie5IkfZNuE4Jatocffnh12mmnVSeffHI15phjRgF4ySWXVOeee27491Jo8VV49tlnV48++mj1/vvvVw8//HCcT+C89NJLUbGcccYZUSm88MIL1RdffBGFWFmbt6Dicc8xxhij+t3vflcdc8wx1UILLRQF+v333x+Vh8LOfeaff/74fZpppomKrxWzSM3uPP7446tDDjkk9u24445R+CqsJ5544giH57jhhhvidwXu1VdfHQIQxJnf28Kzuf+UU04Z4VPRXHrppeFWRLwQTkRuET3CKI78BgX5eeedF/HpuVhNhA3iEyoJFToxLmyvvvpqVMQKefFq5ir3KSpH4q+I1t/+9rfVKaecUs0333whmGHNVuepgOC5PJ990047bcSX8IkT8XTggQdGPE066aTfGQ/el3Mnn3zy6oILLoh9BLA0Iy2432OPPRb7QZgW64n33R9n30on4sG7lTYJNGlAHiG6vWsNlSeeeCLeI6FI/Hj/kHYIbCJaPpJHIV4d39pwevzxx6uJJpoo3Em5jmP8jTzyyJHW3c9+FjX38pv8Llyt7LbbbtXBBx8cQo2wIt6kE/nM7EP3IISky5KOpSlpq6QDeVc+a8UzjTDCCJGenOs55PfmPCBcRI9nknekb9fym7/m/CuPPvDAAyFU/Vbub79GjzIF7qUskn98urZ8rGEj3E899VQct+KKK1ann356lHnKIGn74osvHpjHcdddd1XTTz99NH632mqr6qijjoq4ku/Fj3iyj2/XeeedN8LWivjybgj8Bx98MN6Ne11++eXxvJ5bvDRbHpWt4g8awW01npMk6Tt0mxC8+eabq6WWWqr66U9/Wv3kJz+JysSSTwSKfSxbClWt3LHGGita5PY7BsQEgeQ3hZfzxhlnnPBRpdBqLkDx/PPPx0oCUAkpOFWaiy++eBy/8847x597uO4RRxwRrW0FaivOV6kpzBXcCtKnn346Ki8WMAWpRe0VyApUFZrCnaWFwFNpcAzdluUQrun+Cuc55pgjCmuVmHAddNBB8f1nP/tZrDSiEvMcBK7rehbhLhU9rJqggi+VPVgTxB1hrbL/xz/+EVbVUUYZJeLOSiac7M4555wR/n322SfOJ9ghTESe8zyT8KgYIS743yvx5Hy/v/nmm1HxuZZ4Uql478X604p3qtIUnllnnbW67bbbQuByTdBq+UwGQLSvuuqq8d279A5ZzKV9DQhCiPXIO5BfWGal12JZ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OzgE8Tv59ttvG9/+yxtvvFG98MILja0BXHvttY1vbZ/TzPf93hG+6xp33XVX49sALLtjHcbOpvU+XYF32NZ7vPfee+Pzm2++qW644Yb43hHEW7mecadlFZUkSZIfmqGts5rLt2ZKeck7wd133x3ff2isXGVZ04I6qiuWiPvwww+rRx55pLHVdbRVJ1sT+aGHHorvDz/88BCv2288Xl+ly4Sg2ZerrbZa9ac//alafvnlq7feeqvxS8d59dVXqzXWWKP6wx/+UO23336NvQN44IEHquuvv76xNeB+559/fny3JNuGG25YLbrooiFSWtlmm23C8aXrtpVwZIw///nP1dZbbx3brvHXv/61mnXWWWMb66yzTrXqqqvGX1sceOCBjW8DePvtt6vLL7+8sTUoCy+8cLXRRhuFi56XX365sfe/uL9ZcG1x0EEHNb4N4Mknn6x+9atfVa+88kpsr7nmmvE5pJx55pnxrLPPPnu4D2qmvJMrr7wy3q/C7/jjj68mn3zy2A+FnyXzSuFiIgbfiK5HyI822mgRt21hveWVVlop0s+ll17a2DsofiuF7rvvvjuI38UVVlih8S1JkuS7Oe+886qll1466pyjjz66sXfwOPTQQ6MMmnPOOcNY0cz+++8fnyeffHK4/rjqqquifvQ32WST/U9dpMwrv08xxRSNvYNyxRVXVNNMM02s9VtQTo877rhRf8Lyb7/97W8H1o/NXHPNNdWjjz7a2BrgHeSkk05qs9687777YrEDz7f99ts39g7KLbfcMrDuacYydOeee25jawAbb7xxtcUWW8T3O++8c6gn6amz1ccrr7xyY88A1AvFE8TBBx8cdY7wqFuadcVnn31WzTTTTIOEk1ZYa6214rt4EgdtMe2008ZENNf85JNPGnv/y+uvvx7PW5BO7rjjjvj+0ksvVVtttVV8/6HoMiF42GGHRaY6/fTTQ8SMMsooId623HLLiAQtj5tuuqm65JJLqs0337x66qmnqptvvrl67rnn4nzn8VR+2mmnhYC68MILY79ZnZtttlmbFrfZZpstvnu5EpXMpvV1zDHHRCZzHYKMeJIw+OmTSVohatZbb73qq6++im0ik1gbddRRYxsEj+cSbs/y/vvvV3/5y1+qvffeO67rTzjcy70XWmihdsUM34wKHk45ZQhh3HPPPSOzycwS5h577DEwg4pb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c06MKZ5nnnkivtuCyHXuUUcdFY2Btij3gnRiTdPCfvvt1/iWJElfIIVgD4UAnGKKKdIamAwCS48KnKuG3Xbbrfr8889DNG244YbVaqutVn3xxRfVBhtsUG2yySbVIossElafjTbaKCxGrHuEx7zzzhsNjYUWWigE0zfffBPn8hVKoDTDKjX77LPH9+GGG64ae+yxq9/97nchrFZcccW4pvGsrHLl9/acoDuOKCv84Q9/qBZffPEIj+sQkZxrE6njjz9+HHPkkUeG82fPA+FZf/31q1VXXTW2CaViNWtlrLHGCqernNwKHyvolltuWS2xxBJh4TvppJNCTF999dVhSfM8XJy88847YZEUjwsvvHAIL7jvHnvsEd/hmsIl7onEd999t9prr73ifQg3n5RbbLFFrGjCcil+HQvXWmCBBcLi750RW0suuWS17rrrhj9L137vvfciTiaaaKLq6KOPHtgg5K9t0003rZZaaqmBllTim3WXSDWeeLLJJgt/em3BF6x3L+7efvvtSAPiWNy0WkKTJOn7dFgITjnllFEQDT/88PnXDX9zzjlnVFYmi7T1e/51/h8BcvDBBzdSfM9ExW/1kwIRY9UG1q/pp58+BM0rr7xSHXjggSFa/M6Hmy5SIm/uueeO84g/gpIwJBaJDSKTJakZ3YJltQBCSZeo6xF9888/fwhS4kbZQAyxzhFPBEkrbVm2iZ6zzjorhB3xZ+WirbfeOsQmrrzyyrAWshRilllmCYuoeGC5HHfccdudUU9cuZZ7EGlLL710iDTxdO+991arr756WNQWW2yxuL5ucV3uwjD66KNHnPqtdKG6N9FU/D5yosvHp+PEjW5uYSLyCDWiVtx4F8Sk+G0O62OPPRbPQbQReuVPPDmXCERb8YbDDz883h84Qdd49Jzel7Tc1juAxgMLove/3nrrRZc/yypxKL201dWeJEnfpcNCUIVAmGhB5l/3/LFMtLU//7rmz5JUTz31VCPF90ysMsNSBBU2S1pxOE44EHgsPoRt2WZ1u/baa6srrrgihI/zrLXL4mVlE8Kg+RrNuJ9rYI011gjrIosTC6NGCpFlBQfCg8hiISOkCJLvgwWLkDEGkfAixFjJWP2IuOeee26gxausruOeKM/mGu11Rc8888zRnS3MurhZ5x599NGInyJ2yierHIHtOfy5j89ynwKLWbGatcZ9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c8898ZkkfZVJJpmkuu666+JzaMkxgkmSJEmSJP2UFIJJkvR5br311urLL79sbA3oyrrlllsG2ZckSdIfSSGYJEmfR3fwqKOOWp122mnVI488Uo0yyiixAsLPfvazxhFJkiT9kxSCSZL0efg6M9Htiy++iElYH3/8cfWXv/yl8WuSJEn/pcuFoCVorJ373HPPNfYMPgZ2X3XVVbGeYTP33ntvdd999zW2BrDvvvvG5yuvvFJdeuml1UsvvRTbrdjvd8e1opJgNWiGO4Lm9X7fe++9/7l34dBDD218G8App5zS5n3w0EMPVTfffHNMxBlcWu+jkmsO0+OPP974NmR8/fXX1Y033ljdeeedVeucIhMq3O/TTz8dGA7HGKTdzPvvvx/vqeAYXXLONevJDL+2sNayeLHWcnvzmR577LEIIxwjLguPPvpoVPhJAiLQjPCCWaXTTDNNYyvp7yg/7r///uraa6+NMm1I+Oyzz6qrr766zYlIRx55ZOPbAJTN1pUv5Zw/wxdayzp1Tvn9tttua+z9X0xyU6ZCONSXyk4oB5W5/toqS0s5W3D+IYcc0tgaFOW549UJrfXx96HOPf/88xtbA1CvvvHGG/HdtdurJzuK+FKvt7q6e+211wbe+7jjjot1keGzue4tWqPEpfBddtll1QcffBDb3OS0V694P+K4PTd7n3zyySD38t0+0BzPPvtsfP8h6FIhKFLXWGONSFh/+9vfBkbm4OBFWMhaJb/++us39g7AS28WZzJXeYFnnHFG9eMf/7hacskl23xxfjfV3XI4zZmDAGQ9OOCAAxp7BrwkDp5PPPHExp6q2nXXXavtt9++sTUorRl2xhlnrE4++eTG1qConCScHXbYobrhhhsae/+LsG+55ZaNrUFpvY+EteCCC0aBgqG1eFxxxRUxPf3www+vzjrrrMbeAdx+++3VV199VV100UUxa8n3jTbaqFprrbUaRwxAPDVXwNZNXmeddSJjTj755LE+ZVsce+yxIWoJxZ122qmxd1D222+/QdKUFVkKe+21V6S7JClIn2OMMUbk+7QGJs1wikyYEQbKniHhnHPOifJoq622CqHUjDqsGQ1pa/QSPy+88ELUY80rdBTK7wwpm2yySWPvoEjL6tkibv70pz/F2Ne//vWvEQ71iusbFnHUUUfFMc0QIM0CbLjhhqseeOCBNsfPup66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SgrBJEmSJEmSfkoKwSRJkiRJkn5KCsEkSZIkSZJ+SpcKQTP0uA2wPNq3337b2Ntxvvnmm+r000+Pazz33HONvQO44447qgsvvLCxNQADweE3C95fc801sd3KLbfcEr9bJL89Hn744Vhkv/DUU09Ve+21V4QHjz32WLX77rtXl112WWy3summmza+DWDfffetXnjhhcbWoJxxxhmxrvCll14aM4Xb4quvvmp8G5TW+7z33nvVcccdN/A6FuwfGqwZu//++1fHHnts9fXXXzf2DmCLLbaITy459t577/j+6aefDjLr1sL/Jl+IuzfffDNmyB5yyCHVoYceGsfef//9Ed62uOuuuyJeTjrppHZn1l500UUDn9UC+RbqL1jsPkmSJEmS9ukyIXjrrbdWf/3rX6uVV145BB0RgHfffTfEAQgLlbh9zdsgfJwz5phjxmLya6+9duwH9w/W5C3n4dFHHx3o/40YWn/99atdd9011uwtIko4CFJ+xIjG7bffPsRIKzfffHN1/PHHV5dffnlsu8+2224bYZhrrrnC7cfWW29drbfeeiFGywxEYsVveOmll+LaZZvrnSIiWznttNOqpZdeOoTr1VdfHfuc5xlB4Ky66qoRfnzxxRfxDCDUPF/z9h577FGdd955sX3yySfHJ8RFCY94cD33KPHiOcW/cLsnCGBhE78EK7y/jz76aKCw9VyLL754XEc8ibvCNttsE2sn//nPf66GHXbY+H2WWWYJVxIE/kwzzVRdd911jaMHhciebLLJqhFHHHGg4BW+t99+e2BcnHDCCfEJvhfPOuusxtagvyVJkiRJ8r90mRBUCbMCTT755CFiiDTi7MADDwxfbY888khYyVZfffUQB/YTLZwowzFjjTVWtcgii1RTTz119fOf/zz2b7LJJnFdIrOZ2267rZp11lnjO+FI1Fim7Re/+EW10korVc8//3y12mqrhUg0zZ2YHH300QdetxnnW+atwHJIvBC3xCpr4cwzz1yNN954IZLuvPPOsD5tsMEGYSUjYJ9++ulwpCr8r732WjiwZSFtC74ChxlmmOrHP/5xhMn1WRv5mCNsxMlDDz0UAuuJJ56IZef8fvvtt0d43FMc84OHNdZYI6xwBGPBCiUEoji48cYbQ+TON9981UEHHRQW26WWWirCu8wyy1Q777xztdBCC4WwFVdTTTVViDlx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/OhHP2rsGXI6LATdTGYeZZRRGnuSrsar6YyXnHQMjZ2555672ybmsEpNNdVU1XbbbdfYk3QHma+6l6OOOqo65phjqjXWWKOxp2vhecEKQRtssEFjT9LVZJ7qfg488MDq2WefjcmlQ0uHheAvf/nL6plnnonPJOmL/P3vf49uQ5/dAQv7H//4x7S0J32aP/3pT9WCCy4Yn93BCSecUN1zzz3xmSR9FRPerrvuuvgcWnKySJIkSZIkST8lhWCSJEmSJEk/JYVgkiRJkiRJP6VPCUGrcvRUenLYOoMhfT6uB77++uvGVtLbkQ46OOy4W8h8N4C+Hg/9hR/yPcrXfTkdffHFFx1aJ1k8fP75542tvkGXCsFLLrkkpjdbd5A7lMFFZO+zzz4xW/mBBx5o7B3A9ddfX5166qmNrQEvx71w3nnnxYwxs8fa4qyzzorfm89v5dprr63OP//8+H7bbbdVW2yxxcA/4oUbCiuA2OauoJWVV1658W0Ahx56aPXYY481tgbloIMOiuv87W9/a1MUebbmJeeaWWWVVRrfBvDmm2+GU89yHctoDQ2W5tpkk01idZNPPvmksXcAq6++enya/VrWlnzjjTcGOhj1zpvjjTscLh3MInRN674695BDDonjW7n66qvjvD322KPd5zexowiPTz/9tDrttNPiO3JZvvaxxu5bb70V38WbOO4MLDflHStQjz766OrBBx+M/R999FGkS+/zP//5T+QZTp033HDD6qmnnopjIK9JH3j55ZerrbfeOvJZey52XnrppUHCbp3ujTfeOPxwShdHHnlk9fDDDzd+HZQ999wzwiOdtOVqxDPIT23Rmu9efPHFuF65ztDmO5jF7q+Vku/uvffecJOC74sHeczSX0n3oO4pdZ50LB0OLdJWWc5N+lKHnXPOObEtnW677bbxZ5169Vcpd+UhaUD9su6668Zv7aHOvuKKK+K7+x188MHVRhttVN1///2RH9qbif3kk0/GvXhAMOGuLd59990QW62oF/fee+/G1gA8lzoeJqnecccd8X1IUcbREq+99lpjzwDUP+XeZporp8TVBRdcUF1zzTWx33OboSs//etf/4q6ta/NSO8yIagAE5EywGyzzRYFuQhVMRALkDCIi4ceeigS3dtvvx0iCyp+L2XZZZetdtxxx2rTTTeN/V6CazivHAsJ9Te/+U18N51a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wdUaa6xRnXTSSfGs119/fXXiiSdWb731VvX444+H4+nLL788jnedk08+eeAzEGOnnHJKWNqcKy48A5588snwn0cQn3/++dU555wTYRQHRK34IhTFnd+sgezPd+e59mijjRafBeEt5+Hiiy+uFl544fh+xx13DBIPe++99yDxMO200w4U10mSJEmSdC29rmuYhQvrrrtuCI2zzjorRCEfh6+99lqIkp122iksZ1bm+NnPflbtt99+YYH605/+FCKEVWqCCSaI68wzzzwhPgqjjz56tdJKK4W1EMMMM0xcUzcyH3PQzUkUbrjhhnEfjp8JwBlmmCF+b4t11lmnGn744RtbVQivn//859U000xTPfXUU7HvJz/5SQiwtiA6WSRZ89yLuJ1yyimrzTffvBphhBGqYYcdthprrLFC2B1wwAHxWxGWN954Y9zrL3/5S2xzUj322GMPYkXceuut41MYNt100+r111+vVltttVje7v333w+L3ZhjjhkWWVZa4pPoJqIXXXTROBespdtss0010UQTVbfcckvsu//++6vpppsuvhPyzfFAtDfHg3j3V4RikiRJkiRdR68dIzjxxBNXf/zjH0MYEXnEDlFWxA3xduutt4Ylq1jGdN0uscQSYRlrFiPfB+sicXTIIYfENqHCkkUIEl277757rEaha5PIZHX7PsoxVhD56U9/Gt+FicBri8UXX7zaeOONwzJI+BGjnvm9994LUet5Z5llluquu+6qlltuuWr22WcfuEIG32krrrhiCNYCUcgqWcIh3CussEJ0gXsOiKsll1wyxOFcc80VfqLEu27qRRZZZGD3bjOshX4jsIUZH3zwQbvx3VY8DDfccEPVXZ0kSZIkScfoFUKQWCh/rRTL3bjjjhuWvD322CPG/+ka1W3LClgox7L6tdeF2wqBstFGG4UIm3rqqWPfyCOPHJY7Xay+E0tElgkfzz33XJzzfd2bupydr6uUgAPBxALHksdS1gwBxqpGKF577bUhloxdLEv+EaviZ5xxxqkeffTRCAMH4IXy7AVxsMACC0QXM4g9gpklcMQRR4x9reeg7GvrN7A0suzpNn7sscdin3u1NzGnrXgg1MVrkiRJkiRdS48Xgroeja/TtcoCNv/888f+8kkgsYgZx2f8nLFyt912W1i2TPowjpB1bJRRRqlmnHHGOOfXv/51iDYQILpdCSziUTco6994440XXZzEEVFz+umnR7coK5iu5h122CHGIO64447VMsssE+HT7ekPZQxewTnE3aGHHhrj6VgSjYu77rrr4rMIXV3ZLHWfffZZ48wqrJ6OMalFF/i8884b1k/jEolQCIMwlbF4rJW6aWeaaaboIsd88803yKfndJ6uWV3uO++8c1g6WT6JQedCt7M4xNxzzx3d5bqJdecaW1niS7h1s4tf+whNgm6OOeaI7mF8XzwQsMSheyRJkiRJ0rX02yXmjCM0znCSSSZp7Ok8CFfRqnu0oxCvLGi6Zy+66KLozu0rsPBtueWW1QknnNDY0z6li//Pf/5zY0/3kUvM9X1yibkk6XxyibneTb8Vgqx8Hl2XaE9A1y4rWOnq7WuYHMPa+X2IB++kva7nriSFYN8nhWCSdD4pBHs3fVN1dACiq6eIQJgo0VdFIDoiAiEefggRmCRJkiT9kX4rBJMkSZIkSfo7KQSTJEmSJEn6KR0eI2hmqeXA+soYwZ6OMXUvvPBCNfnkkzf2JF2NZfDMEi/L4SV9jxwjmCSdT44R7N10WAhyYWI1iY6O9UqGDn4K+d771a9+1afHDvYk+JbksLuz1rNOeh4pBJOk80kh2LvpsBBMupdTTz21WmuttUIQ/uIXv2jsTZJkaEghmCSdTwrB3k2ampIkSZIkSfopKQR7GA8++GBYAZvhv7GshJIkyeBzzz33hO/Qgo4Q+4zFTZJk8Pn8888HrhhV4AfWXIKkd5FCsIdh3d2xxhorlsqDJfYs1Wa93iRJhoybb7458tCZZ54ZK/jIYwcddFCOeU6SIcTSo7vvvnusL//0009Xp5xySuSxFIK9jxwj2AMh/G666abGVlUdc8wx1QYbbNDYSpJkcLHM4UQTTRQTggqs79NPP31jK0mSwcV421lmmaWxVUUD67nnnquGH374xp6kN5AWwR7Ibrvt1vhWxazhtddeu7GVJMmQMOKII1bbbLNNY6uq/vjHP6YITJKhZOaZZ67+8Ic/NLaqavvtt08R2AtJi2APpVgF0xqYJJ1Ds1UwrYFJ0jkUq2BaA3svKQR7KLfddlu1+uqrx9gLzryTJBl69ttvvxjgfuGFFzb2JEkytCyxxBJhvNhyyy0be5LeRArBHsx99903yPiLJEmGDlbBl19+uZpqqqkae5IkGVoeffTRauKJJ05rYC8lhWCSJEmSJEk/JSeLJEmSJEmS9FNSCCZJkiRJkvRTUggmSZIkSZL0U1IIJkmSJEmS9FNSCHYifCidd9551RlnnBHLWHU1zz77bPXmm2/GuqnXXXdd9fzzzzd+GbBqwgUXXBDrFFv/8a677mr8kiS9C7PnS7564403Gnu7Dnnns88+i3WITz755MhfhRtuuKE655xzYj1w/ggfeeSRxi9J0nuw7va1114bafn888+P9N6VyEP33ntvfH/vvfeqc889N75DWLhzuuiii+I49ehLL73U+DXpDlIIdhKE1gEHHFAtv/zy1WqrrVadcMIJ1RVXXNH4dVAk/FtuuaWx9f288MILIfqaefLJJ6t//etf1ZhjjhkZ67TTTqteeeWV+E1leeyxx1bLLbdcrAUpc3H2edJJJ8XvSdJbOProo6sHHnigWnHFFSM9r7/++lFRtIX0/8QTTzS2vp/mZRwLF198caw/PNxww0U+Ovjggxu/VFFxaljxmbb55ptXv/zlLyMshGqS9Cb+/Oc/V6ONNlq18sorV7POOmvUW59//nnj10G58cYbG986Rlv56vDDD6+mnnrq+M590xFHHBHfseeee1aTTz551GV/+9vfwg0Ncfr22283jki6mhSCncSuu+4aS8H9+Mc/rn70ox9V//d//1ftuOOOUTkRhcQfCx0Bt8suu1Snn356CLnjjjuuuv7666udd965ev/992Nx/FtvvTUygUqQ5WHdddetLr/88uqTTz5p3K0KgVeW9lEhWTGhoJU37bTTRjgsCH7HHXdUk0wySVzb9ZKkN8BKse+++1brrLNObBNnRNhBBx0U4lBD68MPP4z8RbTJJ/ax6KlI5K1DDz00KjgWRSJO/mONYD3faKONqquuuiquDRbAs88+u/rNb34T25Z3HGOMMeI73Gf22WevRhhhhLgWn4RLLrlkNACTpLfwz3/+MwwLv/vd72J7ggkmCBEmz6hn/K7eOvHEE6v//Oc/1YYbbhj56s4776yuueaaEG6sd+oreezTTz+NuuX2228Pi7l6r1j/oHH26quvRr6BuumnP/1pfIf6appppqlmm2226swzz4x9iy66aOTdpHtIIdhJEHXNYozw4mSTECP6hhlmmOjGVUlxEm15K05tWe5GGWWUauSRR6623XbbyCwy4+ijjx4Vlm0V04ILLlj94he/iGsTlbqeVYwFoq+g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"}}},{"cell_type":"markdown","source":"\n\n\n","metadata":{}},{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt\nimport os\nimport random\nimport tensorflow as tf\nfrom tensorflow.keras.layers import Dense, Input, Flatten, Conv2D, Dropout, BatchNormalization, ReLU\nfrom tensorflow.keras import Model, layers\nfrom keras.utils.vis_utils import plot_model\nimport math\nimport datetime as dt\n\ntf.random.set_seed(42) # Spike seed for reproduceability","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:52:58.841007Z","iopub.execute_input":"2022-11-17T09:52:58.841442Z","iopub.status.idle":"2022-11-17T09:53:04.910342Z","shell.execute_reply.started":"2022-11-17T09:52:58.841342Z","shell.execute_reply":"2022-11-17T09:53:04.909340Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Extract the label and use numby to reshape and visualize images\nraw_df = pd.read_csv('../input/digit-recognizer/train.csv')\nlabels_df = pd.DataFrame({'label': raw_df['label']})\nimages_df = raw_df.drop(columns=['label'])\n\ntrain_images = images_df.to_numpy(dtype='uint8')\n\n\n# Lets convert the labels into an numpy array to\ntrain_labels = labels_df.to_numpy(dtype='uint8')\n# Flatten the trainlabels. to make it look right\ntrain_labels = train_labels.flatten()\n\n# After to_numpy we have shape (42000, 784), convert it into a list of 2d array as it is an image sqr(784)=28.\ntrain_images = train_images.reshape(42000,28,28)\nprint(f\"Images array shape: {train_images.shape}\")\nprint(f\"Labels array shape: {train_labels.shape}\")","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:53:04.912506Z","iopub.execute_input":"2022-11-17T09:53:04.913154Z","iopub.status.idle":"2022-11-17T09:53:08.606260Z","shell.execute_reply.started":"2022-11-17T09:53:04.913114Z","shell.execute_reply":"2022-11-17T09:53:08.605022Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Preprocessing: Image Augmentation layer\nSplit the data and then create the Augmentation layer and test it.","metadata":{}},{"cell_type":"code","source":"# Normalize\nX_norm = train_images.astype('float32')/255.\n\n# Split dataset\nfrom sklearn.model_selection import train_test_split\nX_train, X_test, y_train, y_test = train_test_split(X_norm, train_labels, test_size=0.23808, shuffle=True)\nX_train = tf.expand_dims(X_train, -1) # Expand color channels becouse Conv2D wants it.\nX_test = tf.expand_dims(X_test, -1)   # Expand color channels becouse Conv2D wants it.\nX_train.shape, y_train.shape, X_test.shape, y_test.shape\n\n","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:53:08.608629Z","iopub.execute_input":"2022-11-17T09:53:08.609307Z","iopub.status.idle":"2022-11-17T09:53:13.284713Z","shell.execute_reply.started":"2022-11-17T09:53:08.609265Z","shell.execute_reply":"2022-11-17T09:53:13.283701Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Define augmentation model\ninputs = Input(shape=(28,28,1), name=\"input_layer\")\nx = layers.RandomRotation(0.05, fill_mode=\"constant\", fill_value=0., seed=42, name=\"rotation\")(inputs)\nx = layers.RandomTranslation(0.2, 0.2, fill_mode=\"constant\", fill_value=0, seed=42, name=\"translation\")(x)\noutputs = x\naugmentation = Model(inputs, outputs, name=\"augmentation_layer\")\n\ntf.keras.utils.plot_model(augmentation, show_shapes=True)","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:53:13.287562Z","iopub.execute_input":"2022-11-17T09:53:13.288288Z","iopub.status.idle":"2022-11-17T09:53:14.535755Z","shell.execute_reply.started":"2022-11-17T09:53:13.288247Z","shell.execute_reply":"2022-11-17T09:53:14.534189Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train_aug = augmentation(X_train)\nX_train_aug.shape\nplt.imshow(X_train_aug[10])","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:53:14.537990Z","iopub.execute_input":"2022-11-17T09:53:14.538721Z","iopub.status.idle":"2022-11-17T09:53:14.854514Z","shell.execute_reply.started":"2022-11-17T09:53:14.538678Z","shell.execute_reply":"2022-11-17T09:53:14.853497Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Build model function\n\nA function that simplifies building the models later.","metadata":{}},{"cell_type":"code","source":"def buildModel(conv2d_segments, kernel_size, name, dropout=0.2, augment_data=True):\n    \"\"\"\n    Builds Conv2D model.\n    - conv2d_segments: Array of filter values for each sequence\n    - kernel_size: kernel size as integer\n    - name: string with model name\n    - dropout: float of dropout value\n    - augment_data: Add augmentation layer if True\n    \n    **return:** Model\n    \"\"\"\n    inputs = Input(shape=(28,28,1), name=\"input_layer\")\n    if augment_data:\n        x = augmentation(inputs)\n    else:\n        x=inputs\n    print(x.shape)\n    \n    for index, segment in enumerate(conv2d_segments):\n        x = Conv2D(filters=segment, kernel_size=kernel_size, name=f\"conv2d_{index+1}\")(x)\n        x = BatchNormalization(axis=1, name=f\"conv2d_{index+1}_batchnorm\")(x)\n        x = ReLU(name=f\"conv2d_{index+1}_activation\")(x)\n        \n    x = Flatten(name=\"flatten_layer\")(x)\n    x = Dropout(dropout, name=\"dropout_layer\")(x)\n    outputs = Dense(10, activation=\"softmax\", name=\"output_layer\")(x)\n    return Model(inputs, outputs, name=name)\n    ","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:53:14.856164Z","iopub.execute_input":"2022-11-17T09:53:14.856811Z","iopub.status.idle":"2022-11-17T09:53:14.866132Z","shell.execute_reply.started":"2022-11-17T09:53:14.856770Z","shell.execute_reply":"2022-11-17T09:53:14.865114Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Build And Train each model\n\nThis should probably be functionalized for easier re-training. The configuration could easely be used at WandB. One should also simplify the training data ingestion into training.","metadata":{}},{"cell_type":"code","source":"conf = {'epochs': 150,\n        'batch_size': 32,\n        'validation_batch_size': 32,\n        'lr': 0.001,\n       }","metadata":{"execution":{"iopub.status.busy":"2022-11-17T10:10:34.725567Z","iopub.execute_input":"2022-11-17T10:10:34.726043Z","iopub.status.idle":"2022-11-17T10:10:34.736108Z","shell.execute_reply.started":"2022-11-17T10:10:34.726001Z","shell.execute_reply":"2022-11-17T10:10:34.734821Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Define the LearningrateScheduler and implement exponential decay.","metadata":{}},{"cell_type":"code","source":"def exp_decay(epoch, lr):\n    return lr * tf.math.exp(-0.02)\n\nlrate_cb = tf.keras.callbacks.LearningRateScheduler(exp_decay)","metadata":{"execution":{"iopub.status.busy":"2022-11-17T10:10:59.338582Z","iopub.execute_input":"2022-11-17T10:10:59.338949Z","iopub.status.idle":"2022-11-17T10:10:59.344251Z","shell.execute_reply.started":"2022-11-17T10:10:59.338918Z","shell.execute_reply":"2022-11-17T10:10:59.342992Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"I need to visualize the learningrate curve to see what happens.","metadata":{}},{"cell_type":"code","source":"# Test Learning rate scheduler curve.\ntest_res = []\nlr = conf['lr']\nfor i in range(0,conf['epochs']):\n    lr = exp_decay(i, lr)\n    test_res.append(lr)\n    \n\nplt.plot(test_res)","metadata":{"execution":{"iopub.status.busy":"2022-11-17T10:11:01.360194Z","iopub.execute_input":"2022-11-17T10:11:01.360583Z","iopub.status.idle":"2022-11-17T10:11:01.591453Z","shell.execute_reply.started":"2022-11-17T10:11:01.360549Z","shell.execute_reply":"2022-11-17T10:11:01.590366Z"},"jupyter":{"source_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Model A\ntime = dt.datetime.now()\nversion = f\"{time.year}{time.month}{time.day}_{time.hour}{time.minute}{time.second}\"\na_checkpoint_cb = tf.keras.callbacks.ModelCheckpoint(f\"/kaggle/working/models/a/{version}\",\n                                             monitor=\"loss\",\n                                             verbose=0,\n                                             save_best_only=True,\n                                             save_weights_only=False,\n                                             mode=\"auto\",\n                                             save_freq=\"epoch\", \n                                            )\n\nmodel_A = buildModel(conv2d_segments=[32, 48, 64, 80, 96, 112, 128, 144, 160, 176], kernel_size=3, name=\"model_a\", dropout=0.2, augment_data=True)\nmodel_A.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(),\n                optimizer=tf.keras.optimizers.Adam(),\n                metrics=['sparse_categorical_accuracy'])\n\nA_hist = model_A.fit(#X_train, y_train,\n                     X_norm, train_labels,\n                     batch_size=conf['batch_size'],\n                     epochs=conf['epochs'],\n                     #validation_data=(X_test, y_test),\n                     #validation_batch_size=conf['validation_batch_size'],\n                     callbacks=[a_checkpoint_cb, lrate_cb],\n                     verbose=0)\n\n# Load best epoch and save as h5\nmodel = tf.keras.models.load_model(f\"/kaggle/working/models/a/{version}\")\nmodel.save('/kaggle/working/models/best_model_a.h5')","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:53:15.127317Z","iopub.execute_input":"2022-11-17T09:53:15.128217Z","iopub.status.idle":"2022-11-17T09:55:41.931084Z","shell.execute_reply.started":"2022-11-17T09:53:15.128178Z","shell.execute_reply":"2022-11-17T09:55:41.929882Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Model B\nb_checkpoint_cb = tf.keras.callbacks.ModelCheckpoint(f\"/kaggle/working/models/b/{version}\",\n                                             monitor=\"loss\",\n                                             verbose=0,\n                                             save_best_only=True,\n                                             save_weights_only=False,\n                                             mode=\"auto\",\n                                             save_freq=\"epoch\", \n                                            )\n\nmodel_B = buildModel(conv2d_segments=[32, 64, 96, 128, 160], kernel_size=5, name=\"model_b\", dropout=0.2, augment_data=True)\nmodel_B.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(),\n              optimizer=tf.keras.optimizers.Adam(),\n              metrics=['sparse_categorical_accuracy'])\n\nB_hist = model_B.fit(#X_train, y_train,\n                     X_norm, train_labels,\n                     batch_size=conf['batch_size'],\n                     epochs=conf['epochs'],\n                     #validation_data=(X_test, y_test),\n                     #validation_batch_size=conf['validation_batch_size'],\n                     callbacks=[b_checkpoint_cb, lrate_cb],\n                     verbose=0)\n\n# Load best epoch and save as h5\nmodel = tf.keras.models.load_model(f\"/kaggle/working/models/b/{version}\")\nmodel.save('/kaggle/working/models/best_model_b.h5')","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:55:41.932854Z","iopub.execute_input":"2022-11-17T09:55:41.933196Z","iopub.status.idle":"2022-11-17T09:57:07.106797Z","shell.execute_reply.started":"2022-11-17T09:55:41.933161Z","shell.execute_reply":"2022-11-17T09:57:07.105732Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Model C\nc_checkpoint_cb = tf.keras.callbacks.ModelCheckpoint(f\"/kaggle/working/models/c/{version}\",\n                                             monitor=\"loss\",\n                                             verbose=0,\n                                             save_best_only=True,\n                                             save_weights_only=False,\n                                             mode=\"auto\",\n                                             save_freq=\"epoch\", \n                                            )\n\nmodel_C = buildModel(conv2d_segments=[48, 96, 144, 192], kernel_size=7, name=\"model_c\", dropout=0.2, augment_data=True)\nmodel_C.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(),\n              optimizer=tf.keras.optimizers.Adam(),\n              metrics=['sparse_categorical_accuracy'])\n\nC_hist = model_C.fit(#X_train, y_train,\n                     X_norm, train_labels,\n                     batch_size=conf['batch_size'],\n                     epochs=conf['epochs'],\n                     #validation_data=(X_test, y_test),\n                     #validation_batch_size=conf['validation_batch_size'] ,\n                     callbacks=[c_checkpoint_cb, lrate_cb],\n                     verbose=0)\n\n# Load best epoch and save as h5\nmodel = tf.keras.models.load_model(f\"/kaggle/working/models/c/{version}\")\nmodel.save('/kaggle/working/models/best_model_c.h5')","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:57:07.108713Z","iopub.execute_input":"2022-11-17T09:57:07.109114Z","iopub.status.idle":"2022-11-17T09:58:31.723837Z","shell.execute_reply.started":"2022-11-17T09:57:07.109072Z","shell.execute_reply":"2022-11-17T09:58:31.722838Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(20,5))\npd.DataFrame(A_hist.history).plot(ax=axes[0])\npd.DataFrame(B_hist.history).plot(ax=axes[1])\npd.DataFrame(C_hist.history).plot(ax=axes[2])\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-11-17T10:09:31.705625Z","iopub.execute_input":"2022-11-17T10:09:31.705990Z","iopub.status.idle":"2022-11-17T10:09:32.213109Z","shell.execute_reply.started":"2022-11-17T10:09:31.705960Z","shell.execute_reply":"2022-11-17T10:09:32.211945Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Combine the Models\n\nLoad the models and sum the outputs. This should generate a maximum \"score\" of 3 if all models agree. If all models disagree the model with highest prediction will be choosen.","metadata":{}},{"cell_type":"code","source":"model_A = tf.keras.models.load_model('/kaggle/working/models/best_model_a.h5')\nmodel_B = tf.keras.models.load_model('/kaggle/working/models/best_model_b.h5')\nmodel_C = tf.keras.models.load_model('/kaggle/working/models/best_model_c.h5')\n\n#model_A = tf.keras.models.load_model('/kaggle/working/models/a/20221115_9453')\n#model_B = tf.keras.models.load_model('/kaggle/working/models/b/20221115_9453')\n#model_C = tf.keras.models.load_model('/kaggle/working/models/c/20221115_9453')","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:58:32.481795Z","iopub.execute_input":"2022-11-17T09:58:32.482451Z","iopub.status.idle":"2022-11-17T09:58:34.161874Z","shell.execute_reply.started":"2022-11-17T09:58:32.482389Z","shell.execute_reply":"2022-11-17T09:58:34.160834Z"},"jupyter":{"source_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Finnished model. Add predictions from trained models and output sum.","metadata":{}},{"cell_type":"code","source":"inputs = Input(shape=(28,28,1), name=\"input_layer\")\na = model_A(inputs)\nb = model_B(inputs)\nc = model_C(inputs)\n\noutputs = tf.keras.layers.Add(name='output_layer')([a,b,c])\n\n\nmodel_E = Model(inputs, outputs)   ","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:58:34.163308Z","iopub.execute_input":"2022-11-17T09:58:34.163679Z","iopub.status.idle":"2022-11-17T09:58:34.619477Z","shell.execute_reply.started":"2022-11-17T09:58:34.163642Z","shell.execute_reply":"2022-11-17T09:58:34.618471Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Evaluate Ensamble\n\nRun evaluation on ensamble for sanity check.","metadata":{}},{"cell_type":"code","source":"# Evaluate ensemble\nmodel_E.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(),\n                optimizer=tf.keras.optimizers.Adam(),\n                metrics=['accuracy'])\n\nmodel_E.evaluate(X_test, y_test)","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:58:34.621057Z","iopub.execute_input":"2022-11-17T09:58:34.621469Z","iopub.status.idle":"2022-11-17T09:58:39.433254Z","shell.execute_reply.started":"2022-11-17T09:58:34.621414Z","shell.execute_reply":"2022-11-17T09:58:39.432358Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tf.keras.utils.plot_model(model_E, show_shapes=True, dpi=68 )","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:58:39.434629Z","iopub.execute_input":"2022-11-17T09:58:39.435537Z","iopub.status.idle":"2022-11-17T09:58:39.648752Z","shell.execute_reply.started":"2022-11-17T09:58:39.435499Z","shell.execute_reply":"2022-11-17T09:58:39.647511Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Randomly Visualize Predictions on validation data\n\nMore sanity checks.","metadata":{}},{"cell_type":"code","source":"result = model_E.predict(X_test)","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:58:39.650551Z","iopub.execute_input":"2022-11-17T09:58:39.651312Z","iopub.status.idle":"2022-11-17T09:58:45.162536Z","shell.execute_reply.started":"2022-11-17T09:58:39.651265Z","shell.execute_reply":"2022-11-17T09:58:45.161385Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"INDEX = random.randrange(0, len(result))\nnp.set_printoptions(suppress=True)\nprint(result[INDEX])\nplt.imshow(X_test[INDEX])\nplt.title(f\"Predicted to {result[INDEX].argmax()}, labeled as {y_test[INDEX]}\")","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:58:45.164209Z","iopub.execute_input":"2022-11-17T09:58:45.165011Z","iopub.status.idle":"2022-11-17T09:58:45.390912Z","shell.execute_reply.started":"2022-11-17T09:58:45.164964Z","shell.execute_reply":"2022-11-17T09:58:45.389918Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Make Predictions on Test samples and submit","metadata":{}},{"cell_type":"code","source":"test_df = pd.read_csv('../input/digit-recognizer/test.csv')\n\ntest_images = test_df.to_numpy(dtype='uint8')\ntest_images.shape\n\ntest_images = test_images.reshape(len(test_images),28,28)\nX_pred = test_images.astype('float32')/255.\nprint(f\"Images array shape: {test_images.shape}\")","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:58:45.392552Z","iopub.execute_input":"2022-11-17T09:58:45.393159Z","iopub.status.idle":"2022-11-17T09:58:47.480632Z","shell.execute_reply.started":"2022-11-17T09:58:45.393117Z","shell.execute_reply":"2022-11-17T09:58:47.479483Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred = model_E.predict(tf.expand_dims(X_pred, axis=-1))","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:58:47.482522Z","iopub.execute_input":"2022-11-17T09:58:47.482969Z","iopub.status.idle":"2022-11-17T09:58:58.469038Z","shell.execute_reply.started":"2022-11-17T09:58:47.482925Z","shell.execute_reply":"2022-11-17T09:58:58.467960Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"INDEX = random.randrange(0, len(test_images))\nplt.imshow(test_images[INDEX])\nplt.title(f\"Predicted this to: {y_pred[INDEX].argmax()}\")","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:58:58.470812Z","iopub.execute_input":"2022-11-17T09:58:58.471796Z","iopub.status.idle":"2022-11-17T09:58:58.695671Z","shell.execute_reply.started":"2022-11-17T09:58:58.471751Z","shell.execute_reply":"2022-11-17T09:58:58.694663Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Prepare the results and save to submit","metadata":{}},{"cell_type":"code","source":"results = []\nid = []\ncounter = 1\nfor i in y_pred:\n    id.append(counter)\n    results.append(i.argmax())\n    counter += 1\n    \nresults_df = pd.DataFrame({'ImageId': id,'Label': results})\nresults_df.to_csv('/kaggle/working/submission.csv', index=False)\nresults_df","metadata":{"execution":{"iopub.status.busy":"2022-11-17T09:58:58.697145Z","iopub.execute_input":"2022-11-17T09:58:58.698054Z","iopub.status.idle":"2022-11-17T09:58:58.780355Z","shell.execute_reply.started":"2022-11-17T09:58:58.698009Z","shell.execute_reply":"2022-11-17T09:58:58.779065Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Conclusion\n\nThe score on submission was **0.99292** on models trained for 20 epochs. On fully trained model we got **0.99603**.\nI didn't manage to replicate result from the paper, but main goal was to learn how to build this kind of model.\n\nMy assumption was that augmentation in model isn't done on validation data when training but I might be wrong, so there is one questionmark. And I also have a questionmark on how to interperet the factor on ```RandomRotation()```\n\nIt builds successfully and get's better result than my first simple CNN model so I count this as **mission acomplished**.","metadata":{}}]}