From 45cf60134608f2ca0c09c0549c613bcb4dca1bc9 Mon Sep 17 00:00:00 2001 From: Lanka Naga Sai Deep <cb.en.p2aid19019@cb.students.amrita.edu> Date: Wed, 10 Nov 2021 10:05:33 +0530 Subject: [PATCH] Update accuracy graph.png, loss_graph.png, resnet18.ipynb, acc_train.txt, acc_valid.txt, loss_train.txt, loss_valid.txt --- acc_train.txt | 1 + acc_valid.txt | 1 + accuracy graph.png | Bin 0 -> 19079 bytes loss_graph.png | Bin 0 -> 14093 bytes loss_train.txt | 1 + loss_valid.txt | 1 + resnet18.ipynb | 2187 ++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 2191 insertions(+) create mode 100644 acc_train.txt create mode 100644 acc_valid.txt create mode 100644 accuracy graph.png create mode 100644 loss_graph.png create mode 100644 loss_train.txt create mode 100644 loss_valid.txt create mode 100644 resnet18.ipynb diff --git a/acc_train.txt b/acc_train.txt new file mode 100644 index 0000000..89d6617 --- /dev/null +++ b/acc_train.txt @@ -0,0 +1 @@ +58.35839080810547,38.974273681640625,41.86991882324219,53.82002258300781,62.150569915771484,67.65229797363281,72.93128204345703,75.7545394897461,78.23253631591797,79.93094635009766,81.49014282226562,83.03820037841797,84.1463394165039,84.70319366455078,85.55518341064453,86.44615173339844,86.72457885742188,87.13665008544922,87.7658920288086,88.30047607421875,88.75152587890625,89.07450103759766,89.0967788696289,89.78170776367188,89.88751220703125,90.31072235107422,90.65597534179688,90.85643768310547,91.14600372314453,91.496826171875,92.03140258789062,91.70842742919922,92.05924987792969,92.39892578125,92.2708511352539,92.84441375732422,92.6495132446289,92.68849182128906,92.93907928466797,93.03931427001953,93.4625244140625,93.39012908935547,93.22864532470703,93.70196533203125,93.60173797607422,93.77436065673828,93.90800476074219,94.21427154541016,94.21427154541016,94.44815063476562,94.32564544677734,94.4815673828125,94.50383758544922,94.45928955078125,94.96045684814453,94.78783416748047,94.85466003417969,95.01614379882812,94.98273468017578,95.07183074951172,95.07740020751953,95.45049285888672,95.47833251953125,95.59527587890625,95.45049285888672,95.46720123291016,95.79574584960938,95.46720123291016,95.90154266357422,95.77346801757812,95.94609069824219,95.97950744628906,96.0853042602539,96.01848602294922,95.83472442626953,96.20781707763672,96.30248260498047,96.25236511230469,96.43612670898438,96.21895599365234,96.32475280761719,96.54749298095703,96.60874938964844,96.23565673828125,96.30248260498047,96.2579345703125,96.52522277832031,96.50851440429688,96.72012329101562,96.78694152832031,96.87603759765625,96.66443634033203,96.56977081298828,97.10435485839844,96.98741149902344,97.2212905883789,97.09321594238281,97.43846130371094,96.93172454833984,97.3382339477539, \ No newline at end of file diff --git a/acc_valid.txt b/acc_valid.txt new file mode 100644 index 0000000..44da34c --- /dev/null +++ b/acc_valid.txt @@ -0,0 +1 @@ +41.695804595947266,42.07459259033203,50.786712646484375,53.93356704711914,67.04545593261719,72.29021453857422,75.96154022216797,76.34032440185547,80.97319793701172,82.54662322998047,84.76107788085938,82.28438568115234,84.00350189208984,84.09091186523438,80.50699615478516,85.05245208740234,85.81002807617188,86.74242401123047,87.6748275756836,88.37413024902344,89.53962707519531,87.47086334228516,85.13986206054688,89.7144546508789,89.07342529296875,89.8892822265625,90.3846206665039,88.60723114013672,89.18997955322266,90.3846206665039,87.41259002685547,90.06410217285156,91.84149169921875,90.26806640625,90.00582885742188,90.96736907958984,92.80303192138672,92.4825210571289,91.92890930175781,92.51165771484375,92.51165771484375,91.8123550415039,91.9871826171875,92.68648529052734,90.73426818847656,91.84149169921875,91.60839080810547,91.08391571044922,90.15151977539062,92.33683013916016,93.0361328125,92.8613052368164,91.14219665527344,93.0361328125,92.22028350830078,93.50233459472656,91.84149169921875,92.42424774169922,93.12354278564453,91.8123550415039,91.89977264404297,93.38578033447266,92.91958618164062,92.97785949707031,92.97785949707031,92.89044189453125,92.77389526367188,93.26923370361328,92.27855682373047,93.67715454101562,90.64685821533203,93.35664367675781,92.83216857910156,90.55944061279297,93.09440612792969,93.76457214355469,93.2109603881836,93.82284545898438,94.2016372680664,94.2599105834961,93.15267944335938,94.05594635009766,93.12354278564453,92.71562194824219,93.24009704589844,93.09440612792969,93.706298828125,93.09440612792969,93.5314712524414,93.0361328125,93.0361328125,91.84149169921875,93.26923370361328,93.64801788330078,93.5897445678711,93.24009704589844,93.4149169921875,92.365966796875,93.32750701904297,93.26923370361328, \ No newline at end of file diff --git a/accuracy graph.png b/accuracy graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f294f5bfb3abe4aa0a3b0bad1edc0c84a2ca7c92 GIT binary patch literal 19079 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 E09jOMlK=n! literal 0 HcmV?d00001 diff --git a/loss_graph.png b/loss_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0724b14c24211d183649a100975317bcccb354f7 GIT binary patch literal 14093 zcmeAS@N?(olHy`uVBq!ia0y~yV4TFjz$nJS#=yYfvsloCfq}uY#5JNMI6tkVJh3R1 z!8fs_ASb^hCo@T*EVZaOGe6H*&sfhyM<Ju6q@dVJUq2VFKrg>2U0)#N%q|872F?PH z$YKTtZeb8+WSBKaf`P%T%G1R$q+-t7yX7-Np5FZN@x5*8Z@tn+)+HQbOFV=FbtHPa zlxBELIl`9JG0Vj>^z*acS<ChxxxT_M@ZycYMH<^~D2wHAh_Sdhz6zSYZSUDLe}6x= z<UYJ<x6bY}XWqT}yK~*%vS)LQ{Vk1)-&LNnbPo|t?lD}pvZhn7!SL9OYiF4{4Uf%8 z+vt$gW4J6*XM#j>Po@~R$}x%LSw~?~LHvT1kuG|cH*Tv<>R2N<F*td`yJ)4No!@^j z30AH(yltj9KTat~N$KCRX<L^HPn33jvN3JXKXav`{|9w~bvjQ(2%gM;vhD0G^WHOy zFV5e%?L%eGnk8H+_hv_Z78jiOX~lDK8IPz{R&k;7b~kQsb5SbV+p#D3_@{G9L8?m4 zQnRP6Iu~^HGGEZnZ(KF2cKL;F4l%7UxU_!i^e&J8&2#hitb8>;bgO4$RsEjYEv_z1 zfv1_2Hifzfl{wA&{&?xL>bQ5c-^=B>`Bc_2|Li&X>GO?SDxnG=?_JReJ<D{BG2LBv zcIf8VFX9IoK4=u|>G-mCYYo?j)>V3*4l~a%c3pm6C2nB%>gUV@=PaH?>%TwlefE2u z&4!KFHYS*7+a7TXVx9EsiphM}CsBeod2BS4WL=)P3Tg^WoO|!_yukIH@7B%KQu^%r zBrN~-RVAZ+owvV<PAqp>65(=BU}F81>oNH$lK&Ny-dDcdtEMz}@wIprrEJ%f-5r1Y zYk#|ker_~x?9N)dOQNEp{^^R)XDgMA>|g!d?wYc*L!|3OY=g_%*Xm07RZnlLDQ$LH zvUmHtzy;zTn!ca@bY1Dv@!z2`AGW>JQ##*$f=@6~Q^~%^>$jU=Wsr;9$8TqY1SKQy z+pXyD*z)<3#)ofD^IeZTU;A2LDZje(wwluaZ_~Ov{+#{2G)_aQd+EHex!)@*Zfie& z?eOLIcK_}DE?Y0{u{tL>@wm$pju~2kckKgzzZMdVd_MJK{h~`=;uG8Ve*fZ~FaLi1 z?3aOeo-aCf^nmi#Q#UUBo}{P5Us<Wg+_&=aR{!eX)muAa_Rjxga^m#sJi$s&7q7-( zmnS-cKSNx)TvGOS+>zK?`}Taq-uoMwZ(fV8-}vUI-M{rmR;;!Zyyc?sv4q)*X>a4p z9lPvb*uH0-!d!0p;a76w`hxf``x*WV31%MJ*3Zn{;CG<+P4$PqYcq`gG0b2qVGL@B zXX-c+c;If_ue*Eyyt4UGE!U^l-66xs!#Xb`#q!(3+Rk}wb=|kc?=vJXGH1;DcFLT= zf@QmZz}4;>yF-6Yx7t*}bmDuQz2uM09X;Jq_JT8bx3JI4_nG<nL-_*P0*wNrcLyxb zMt^62V7h=g@BY8L(RES<LIpdffB$*lTh*m{nTVF#_Vo;WC2Mkp433{p53{{Jhe3w1 zhq+E&iFwacbB5Z2(%)tUiOQd<#VkBsZgq42QfE4U_13b5-=DHAnE$=pD)8%9rZ3zF zo;&cb-(&3Z<cr&s)r$5E|5#F(KQ{*5`F%sqf_q1h%ekB9Uw{AECwpSsz3(6AA7FKm zduM!gap%{}$`Dh{{|%-GR^EHO(Lr>=wFBRr8|Ma|zt5!iUCy61%x&#y29XzK3b!Be z9a2<K&ib2tAh~x<aBS+I+$*0~H-zswzMnbGeeLNl-wv+)x@0b+2;=eU^Z!|Ft{<s2 zy<c5p_#yF1S(EjFm^lAk&l%=l`zlv;{&&T1qXurPL<Q@tzh@6P-+L_GXujy0EbA2W z4f&!k;<IPUuVCrxiu$JfK==Je<pVwo($`+E<^CZh!TUq%#O7z8CrEC6^KsUB=6A)j z?;m*n%k9D3sMq;DRkdgTy^`Eo$7pc0dJmU{ZPwkVTR*SPmS_B4{re%;1H1g0Rkz=~ zuZ?7#Be*rM%6Hxl`GnV5Pb+OdB)r{a8gOjyH^~nIA5PT86<dGUerx_lx0>U8DYx%4 z`d|6A@9OW`oZR}{m99YxR*9PWyQnz3y!$$9mg@m)hw7F4`Adt>GKcDZmP?a;u<dT6 zY~X2zYuCdcxJ@f8zVdj}3Zv3~zvxi!mH)#FeJ$rR>3xgx7k?0?>3cKWG;6x!;`!Yk z;({}Em8AES$SbePUM`sVKH%!36{*=be}~7tt(~mKZq|1}^84zdT-(Y&QsOe=9j~o+ zi#UYdKeDy%A7hT-#F<Kyg8gO7s^0sS{9<2p@4WvMw^}!;nPNK_stij@vN!(!zO-!K z#jkI9OT;I}n${o4Z&=r>6JGmm)$|S-ZKcn9-feb@amaa59De_w^@QB)dht^k4}Rac zwPmS8P<7Zz{erW9lS56}uZuDU*8VWu!1+Q$Niy&>UuMGZXHyD;OK!!@oBQqatoFvw z1$Sj`9_T)+<Nnr&qx$;yv^&3zj(C4R6qRXaBAlU|7oX;?`<gZ9hW|{yBW4Sv${TL0 z^M~GDv&uf?>bo8BFaC?<KbyYl-pW<V4UIeW*2Q0)_)l#?b4SWGul;VC@1|>Ss9s>P zJxuECOx>-Wdv{w)|I%@*7Qb$LS@e3SNN)Z6({b}TzpZ;;m9TZyw*FtI!>$@jN3Q#I z<(_;0<6Tz#fmh28*dF;-&A;{A){Z5c|G!UOeQ_F-XYS1%`~Jl$T@t)rE*-pTmskYH z9StQ-r6QSvvYt~G>@yUU)H^)5K2(4EU$?(|_Eclx>$+iA&lLS(m(WnU|22v!{PC_I zSt-n_al349d{5ZTdcA%>e`qZK9{xKzN|{PVEIWFB9p{u%KI*OQ>vCyNsy|b`(8L_U zm%M*ut`|AE>{G8+lYMhUcEcg1qMq-o%{#c+M0dQKcdK;8Pn$bWYUTVA-k(2weMi`p z$hfHetU<E__urbwvQFH5<|6hFlaK8=ksUdY*JsVk^IcKf_kUNlIzR7#|KhlP3>re_ znrg8wf0T?oT)s(7u;<uRxON$rpk%A`^^UEU2W~1A?fG82r}GB;`W>048=sUZ$bMh_ z+4;d#i>K9$1v2X*f4e`pzoYKQt~-9hr&p}<Zj^sqSDSlC_J!1(iH~JP<PQF2>VLN> zBgitORQiMM1F@J|e&&1Kx1OjaSOj!%Tb;k+^(gJZ_BeC*SmrtRkADr$XL-hCzT(yE zUd?FRX^)uF&fYh<)3{FL`gVKy?e_8?w%N1&@VK*+>pb)I6|b@s*v-o}2wyMVEW2at zJe&FkY3Un{+!uC#-@Qug(XX5DkN;hypKAa9A>*&T)9+<H;JtHj-M;gW;zCMSewSSB z?fm|<?~d9{Qs#jVFRm~-yo15?O7wo-@b6{p0n3l=;QFz*L*(%>y?Hh#UcNtkJKX-L z@4p)?BFxd5PyXe-Tyl+{OE~?}vL3zgt24HD^kjB)#B@q`*jrvq^(<4G)SCTQ{@LFj z8CP!=b*m`u$?LCEdL%s2xZtw+eBXkNKGG^ml}bj(e(T6JN^{Si{h~-!ThQ|M>>ZOj zvlrGi&ThT_>ZatqkJovxw_fJFzP4cLs=8S>lxCV~vF;Fm(fzyBM!I}mb7!yTj&(K% zdwYFX+8(<S6?uIcxCOROH@U~~?4?D!wpo?GTT}b%i)V>pkKwYb5nD1YnuV^dtqY9V zy29boa({U-y_gv<k|dISRx2v8SDCgnpWC&q$MBd*H>(iHh@{3N63ITBx2!Onv@0Y$ zeDeJH{;sY^|C#4Ky>#i)i<_I(4<;B~bTvFS!!7$`ql&%#{5NlMetmiA{P+9BtiK^s z-`?I1(sF;_*7p_JJ%+mB-S2O$TCrk5@Nz#-Sr-PE7QeYxTRW#sH&olX<%a{4O0B@k zi(#)adpz~lDouD3{xNNZhF6JZkKr<3uRe#MO{`ko-}lD~zqz%wyZ+zj1M8E^pUq6) zlzn|&bG$-wPiEpI<p~NV@B0>iU9CT%<?!!2AM*6|_kIz2dwYAo=gc0%WvZDUH*b@2 zWl1U#ef)ae?!NqeKid{Mw+r#Goji3)NngMJyxs4f)YH=n&sjd-Q1`b=OG|6Vvsu|Q z>}stxJTKB$RaNbgx1T5MXVLime*Jto+o}(DiqB7+H&1TzC#htgJzG~f6kX=_j@-7f zZ{vhjK_7D44>aCy{j%bn<(-0W2db{$FFLKO6S=7cWXtw@Ro$D<S#_&=PkS?O(eDGy z{1-MRyPrCJ+Va_qWQ*^2ieFw?c{wg~O~l3~^?4Odzu)cd|9sB6fBF2nS={=2J~W)p z>M_&}T+OBORj4EMdRXpax87T?ZThX>@0q-__^$8MYwP3BcZq6$<5a2r{Vnyyg@p_~ z5{6Bt+1HLNU2{xAn18L-ge$j;Zfp_>GFs?7f5vo0W8>oQk3p_7zgN-BZ}+32r-$cQ zpKSE=N`;jxSMHYo{kQJa>C?$^e#t$Z)1OG@^k0<lEGsiRdbIRBhqjK+66bcll$4YW zH9w2&{(Lw*W6D8^<fu(ySCv*yKazJXY`NcD3F9=LW;R|WTidzoVt2obD?cWgUU1&_ zyFtncfj)~z9B%z`vXhM@l6}0dEqZs;uIP!!+S=sR`uqP(Vq|7B`EzLP>4Wkuet(l9 zcKyf*sqHm9rmWN*QktT4dV)-Bv|-LfiR7Nlh$5Cr5`8eHQ1(QLWS>JvN;bs0Tw^%u zAi;5ToxHz;@<z{F63ITzj|{V4i-g`4yDXDb(J7MLW60~>w@&v+)wUi(HOC}b50MIA z7qQM0Uv`-ZOnj-dDZoWcOhm*)ce<E~+oY*eSq~iRm7Zx+Sv2={kF52yTbJkb8ZO(~ zRjMGlc-7&?j|ci)pDej0z2cQmsO-vB%EiUSvuF68etqlJy}j1O&(47JquR41DUXoS z#oz0-4a6lxC-)@XP}=$JR`&N@@+W)E@15{9zk6gy;bRHA8jEIj{%1R%&%6D+H2d0` z#0v`?8Kz91Zk&2bq>V@N(9h@d^RM4BI;Jvp2Jg0R548uuSCig<%slXZ_S6@ruOED- z|1DN-RfETk*c~4oN~L)o=dUdPIz=;hhG8;Wcx<UCgTLKRmGyf*aoPXAdH%%7lZm&t z<@U(g&gv9azgB(z>+bjaX7}{)i0Q|jd33Z}(yr!5<MhiC$x$mJ&fR*&b>=JII>rZu zp|z@IH;*oJHOjeRur2TIsbjs;ni?7loZI=HJbn6c^ZdU(<@YMt=bt~`#w&eeQ!4k} zU8Spyd&}=twy$2lPpU!Dxy>Nu#Dp1Bu1X{eDW)~LgoZP^%U^MMooy+yu6@(o3F5Pv zzdSiPd8TnX-)!^zv{O?w&&)FIZfar@(~WX5kXYhB->x*y&MvBUt!Q#j=G#f>zw&v~ zbA4wTwcgyEZk&EjM$LboPhz5C?5+|;2_B>Tdp6hB#om7K+TZG>O4`|3tOq8kdPnT3 zC_Hm2tH<!;G@I!Y`yZ}Z+sMow6cgjqFK2t=^y$Y<+<Fh*Y(Ag%<itcCS*t0^{WhBp zUXQPQI@M>kSue;3B`*Tpdb`ffVNUMxY<a?=Vwg9Pq2}Y!d5-_i&9(k~kX`=D&R9=R zPKMfFUlLDFQe{}Oe7SM;w>LAUotH=!QnlQ*E$f(k)Qz1g$0RO`skkdFOjEcG>NX#V zUd^HMdvAC0q%9s%m+ory8ZO%yRiohP?VbGl+uPrkC${|)>s+;|_IKH(OP7RVMUs0g z6?E%1>`gyE@5%G$mmjdoYIiTJQGXM|XIKA+t9-)JrAsevPCxG=epn)z&!d}P<zT{u zeYL;M_FO!~{_v{ghtK+o%d2BfrS=#e%lsG{-TR1t*Z+sFj!Zi&k$h{x6Al$S{Ru8k zox1IY$F?}06!iEL$3J(gM~|V}yGhCuBD#-ABnzo|GId^8>I8Eh=~^<Ke0Q)6oEP_~ zx+`oH>oh#3;#0&TH2Yt6k0Iw|nZ^`QGe{`8r*r!g4wc=@|KF16G(2`Bx`+jugH_xW zHW~^g_jt~D!l6>;v<Rwyw@Vk4C9Q0DY(|S`pF>iz$}x$_1}6nQ%I4q91961&#XLY2 zns*V4(Cb@9$7Zy2Rw@Vz?(eA4Qqn)BBMfnbaKG3|(*x5D&mMeU{(r4&QjcMw_+<wr zCELc$4Zo9T@+++iO}bp)YpC`v>8{dF*&n6?EAyEJXX+_&yQU;MIyzo1{=^Q}#woDb zK}kutVeP72D;B;DDP6XzFXZaPojZ5>p1&Zz1?-82h;1In7=&F@cnzd~OzW@_+kEE_ zBRF`Nj_6ES@#^cUTfw2f8G;+kL%$x1c$yCK#bk+-g>sw~$tu^jruG<q6zgzTTlGuq zLzs{8N7gkU=W<R+(G>!XwFu{*6!yruHqG#uipwV!q51=$B&6c-iA89>?|;){Gh93t zIY7K3I7xlNjW6-ZJ)Rv;I91I4UYAG~QmSO?1S@Otm<Ls+2vX)M-D{`@X06eMX~;ee z)o>OZtRM}WL1iac87KxJ4iHd!=ra9~MDndUPdHV|F1mrWb3r^(INhf4h&)TLgUX~A zlO&RTW>2zdJo5Z*-MuK)V-mvQCxt!!IDWr>%(KT(ZQUgG2|xBYB<X_E$?7MZD!Zdq z%4Uir_jE1?x!x_Q$B=WPP2-Vcpri<L!W%i|ji7cASiWw3_UR}UsF~2vIm6W1v83|^ zli<%7muX!md^eur-T;oE2@X7$*Rkwdx=K|^h~-)LiPNioCHfTIzN@rRn?X9+$L6Tc zgcYlpRPSA0@O}BlQ~dMq|J@F@X!VS~i5(sBE_Te@nAWd;<!*TT45%@srU)wLP1me) zZk%^OLr^lLS{ga!7;ipU1`3lMXKn>ujXe;3K(chr?3JsOLrYWg^71Yl-?aUE{TwKL zS9CpHvo=OB^S!MfyC3Vc<68FMM3ZEqHKF5#snR6nbNgMM2n$-~+UuWYe%5&+=|S=x ziId%Dbqn_9^nkMEqK%uk>4jdkc6m~wAU=c5hGS3IeeRG_LxVLxU2{|*xydDY_qHRy z>(xFiSXC#tbxrC9?<Eq+K29cP6Lf?oUN2~T5-NC-E$Z6Yi@8uEW22`tIyZ){ic(XO zExa48+ujSRbe&ALxfaQMn7Znn&_wRW`%JAHwZnwp?AtgMENf$GHsKEMl+F_u53Fz8 zdO+DwJ2V(vSO_iJ*r@U();e3LpncUn#+2jhB774diAu`aEl5Y{I<q*VdRK>hx!|#B zhx0*=Q=x?$btio;oZh-WB-EVQwqgIVH6gx=aiMEK$@9^wz{Vroa+@2<l#Ccx1YDhF z>ZbH)*Y=!W>kW?`2~F0YSR}WB;fGv-+=q!BK7FYNXC0B>0xF)4L?$2i_{VPH7P`G@ zw}SEqHUsrA)@-5p3*gjsPRiQt(P~bmd2iW2-1_m69h?CRuiX$ksjc)$>qE=;KQ#}Q z-Vj+S2@dv0>jE2HLhDtPo--vEh-c4PxvDrhYSXe0>~D{S9g`4F@6DaKV3j|!|M3kv zXP<L}gW=JdgAPhcM;oqf<q8Nr+v&M-)~U2y$z-29rV<_@TT^4%QtQEK_(<&O*_Bsi z%)nmN+sV`kEr+!y{Ky4+F}jFVDE`2*|5C|5b5!FYMemW&B34MzTR1(Y@d(>(P^mUa z8&VW>?ta1r$)sp3s2ypIE-rk66DyTIE$z?|otT|8^?DveYTd=@6Z4w{K5&Qrb#d9$ z=&JN-*DAg4$UZYr&MXw)EY`UyFX*cOp5sRkOn2yyc*=eQTtqm;9P@Bl!f(LyLt~lb zPo^?CP{|*8hPksN<>9+E7S5sFuOjSYUBtRh9BOK6dX}0do@;V!#*Xex1;L35dL3ti zuBN}b<rbR0>Xk>R?9AD-Z|~u$b-cjgqIA~#xJ0tg;-f{^rZN0y+81*5cGA@IaW!?{ z?}N)0^Nl$Zdl>bY_Ngk(udGi$W?+APE2|mn4T<DO8flm7Lrd)xHhS&%v(txEX^+%) zp3Av^S83zS=wlMX`X@y_YT}q7C5rh;Q4dH&>+NJZ`OXkh%T#!-b9nT9*EUGnm>ko1 z1QLU);gG5f9K4XQnI6-)B(3KNsGL6HTf{0fzZ4YLdsM>}KHg5)4Xy}TC(T;@|CVY{ zkD*%LBps-ebaz6_>K)$epk?(tP&|T_fmxssJ`!8RDg>?{LCPL&HU`D_y-C_oLqMqp zoG0(7hAZ5x?VM7ObULxeFxLa*5P1P`jcMVv&VgxNXi_Z5@8&1PJ!%}mC6A11q5>zl z2I*Y<gj?lb133BhP12hXvTA<sZ1bRqw1Y<^k{^K@bS`oN6W1zjQVFZPvTf;#rvFpq zJiq^$Uis+!<sa|t?>*hRboS$^dkv3m@!Xg*(S~J?;NdUd3;*w4y+hArZfU#U!>$9| ze@dR8{ZsVKeT|kzXF8}i>)RQr5O}q`L3X3p{%x_Tp=W+&$fonX^jzQlt}*|AW3bbE z!{h&>-_8DNv9LfT4%A6CQ_Vc)Ay-w;n;M$9PUg0}OTw9}AO6-CdsLa4zyBqw{eG{2 z*EY3XGmc42E)kORa7o$Kp(8S}m6es%*K6?-qa)4l*FL=MUi!2n?`CzFOd;D#`{*Ot zvic7$=&ld=ccI+jtHRVf63IMU8XOj_G7c?Wva0XQ*|WJpQvNkt`VM`{S|@co|Nd0X znLWGyl>HN$;rDBs>Xh2A_tU1`kVy8~(!xIJ*(#pao$v34%G_Tse7LG~Me*!!lA3d> z{$0(v`fW|!yEG-i?5PsTXATOTe!1VDL7u_A!((4Zj97O~$U}Ga@5#qjwwv#``{MBK z&D;LB^612$nEby|RSfKL&n>LIl07n(LE?Hb5}Utl&0!C%mp#zEF!@Ez#pXFR6_<Bi z>M>llRA8d(Dl4OjsTp5mquHH|tR6`h8czQ6{&Rce`pqfMiHo{ZdJNab&E`^JIA~~p zQ2*4@#_%0a8d+<S)wQKS!vs4WoZ9c5SWrAuY5k?iXJbnKyXV{po%bS0GTCSK)o)Ck z2e#MupPzqd&AR^Jn835H|9^GFriOOvO*K5W#Vgl%!jqEr{QEA~j(x9u_v7l5_ZsQH z7I&}Uxw-dVui-O?t!EvW3~IE#$Q@od|K6Fo>CZPNeC1nL{fj&5l8#w&PbTlJJcW-x zAH1<%xU0!{-%sP~^KQ-FIX~~gwd?yfB_#D2vM+ecCe(25@53$jhq}UdCLJxQGqN~j z|E%_KD!+b8cA)Db@AMwSwNA6G6gS4j?`Jz7*BCbav*-HEJwHk<B^x=G_sAUT_;^_$ z{&wH?V>70$R-H3J!XxFG?y-l<4~o85JpX5c;Qc?%f^`m!{fXzo=No=GH2dX!RqcyQ zO^(eFJIUnPJI7|n6IP9zOpnxC=9_M=JN3l3|HEo)<Ba+{sxhY9>}8FDg<^w}dolyp zoL8I0ky75gCWa|e_GSIe=8&&e6Qh~FZ+x>?+~TAD=N(_KuAfzY&hw(%iftdolYKsI zaJV$VflJeVM(h656K!S{TGzk*V)K9A_6dgD_niECzUJWa*JbZ!K3vMR`hMf8O}{SR z{vr9Nmc{0mEJypJAlBrbPE+Ze{GLU<A3m*rcv`&kN0ZKppJw*=?I!kKy(x3ibhhU4 zFAvynzgPNtnSH@&hZ&zFN^DB*o4ori7Bb!WsGh|~af5f|oGbeb)hf5NfLi({Zhqw! z{|$e<RH{+dODp;K`po%%y8N>Hd%rYH`g)2d$iB9r)pB{zR_*yG_9j1k9sYgKzEvV} z_VQZYiMPBB{s>ik|DW(wnsfCe!(%c!*OW55bWcB+`EtWk?i02`T+=?MZ9lyu?Q`aq z)pw5UJ-FZS!uDxzSK4x>m#Ic;dEEY}`swe@f*&u}g%;hn(74GH9AC6{`T<9&Bk{)a z&;IkO-FvDgAdx&N$~$9XghJ-30M#?UjcW>~zg{F&%zO1ANB8IQj}OD8PyBrpx2b#I z!o}|v2)o)mn|<Kg;bjG%9`2O6zuwsP@au^)mphcM^wu|J=aXbjUf({?_m5A`FBv%- z?p0lhKaLuFe9yjqA0*m!K_e|3p-u{0&xKCx*p%lkIsf_lM}Mc@uKfL)$*em4O!;Zg z<fQLPem;L^<uwLbZSMZII?m<P_QQ$G4|m$P&s%(FX^d3zZ}SfaUOw<|y?6ZZB+G)Q zzb~X7IJoMioc#UwuWIk~^Vi)vHiJ2-amlnWNe{k;RiD026S9liJC}8J`G=3QWOFoE z-Pvn5xu|Z&C#&hd;#As&x`K;tmY&#tQo^Q@&wXBx{@QtymCDyOx~n<53da1>N-1lz zZgX0HvEblj_U%IPdzt*_yqBv_SCgszchL9#jOG_VpU+RfxhXZK{BEh?X=QEg?n#q` z%<}G>xEdaRc8+E7x0`8iZfv|$^?GfOOyvKM|GwSMPyhAhWlBm4L&39|>7RZ)?!UaR z_BY$-`|%2b6Qvu4LicVB6wPAdR^bebh&#LMZR(nPai^BWKF!fxx1`{C*{+;f#~(~8 zw~Vw?ch*`NWPh63eS=Z9inev%(lvhtOU`{LJk_Tz`Qhu`2cLug{Y~fiCgplT|3r29 z0crCclXZU2yRzfZn%@F(`x%X_4xR8`cz?&<Xcz12hxV#F{&rT_Dw`9*GJP*wrE}8e zVxQL={z~8Yp~+))eQx*FV^>%vwV9|*`10~{dn>p2rJcpknNRIkWf8L8Y<uw5Qg+EZ zn`N7;x2@j#%;nVTLpsshTVqe(SF1f-U2=b8Lot{9(eNJ}KT8%GJz73LUwC~>|HEak zx^J2kTYoUpWR(AVi~oUPz1~&-e{=riJ$@1TM^d(H|FTuzPcG^CX?XD7@i!+|E#mlB zJ^A&fQ!hEK_cgAMYx=hL!Hf5YCkiWk=cvfi%3wKH%@VZf!M({3?~5P$vOVU*O8=XD zH#SOr>SL?t{(mA=WT#l%_Jg^f7E~PY+IHx$@IsCIZ?{jblboJ&eNE(H$@Dn~Io0PJ zXqT@$anW7=?3T>SJ07-4-`G{Ey*ce{(v=l~HeW6{>%{Dsu>0Mv?v=sICrzGw_)shN z%{`UI^*>L?&#<Zd6!$W&`t8;)@9xfCy>1s*gLM9$iErNI)O}ejZ<u*WrR?1u&(c!U z`ah55XPRVQvP+$1kjUgcO=sbrJ##WIFWZ=N(};~n!lANq=WjWY+()Of>(3vTulK2} zw4AK&|7_XpyhrD(-={o2);p)@lxE4hJ2NXkKYJ@0k+=J;nOwyKMh3n8e~Qx1%s4p9 zG+V;H&c-2MFp?{WL2YH$-t9G_6Biz^bzu9zTd;D~JCTX28?_q*Hu!`t?>KStfb2bQ zQ47z|?$=)1TkBWf-u6YrUinvf`@j3_``(L9%V}L7x9s_+{{ou#4jp^AeZr(-8T)&o zj;^IMx?UL^6;-^Jr~kOoSNzlJP5UpVUiF%mt#5Zh`RBFp^#XsY^t_)MI33g}y6L(6 zLRgT}Q=QkPjHlUSe4m#^@@UjdKNoM?_kQmFL%09)U%KV!syOHSi+RN<=c-xcWcd5% zvkU)w#<$N@i!1SGeZooO4Owz7P7`KwyU%5IKG*Ktw=(wbjT=8CMe^I~?%%3Ti@B&K zZm{{Y!gBU0Vh7y6A5iaiNEPI<kXF0HICHL)-~MMVSKc|_wX=#4yTh*ipZoYf4nEo0 zGZu((9{wb*IDxHw?zVhMr>O?NnKW*{ySD#lyY1SW77;s(RQ+wgiWsM#dom-r@8QSe z^6CHn{IvQ1=kuSR=j)%{OrL-Ex#?`P+@ybhe(J>Uo6{+*{!Z9qna|8aJ(9*{?32|0 z+s+Qp+dpf|D%mr0t*6hKBeN~{_OTZi7tgdPR0=x(yXgDf^2rk?9(;7PJ91Bj;o)}v zcFXC9ZcqJ_dB?Tn&;IKi%eN)p*-@wyw`a!c_4{Vs&fDD!iu21#ky|nZ`R#rv$k%=m zTy<*Wak<kc)#v-P^T|eROkzC{7AmWu<j?e+so!+NZ8^reRjcy5PrPrGZjd}s>JT5g zR%GJ0d)xN2)U8?dzSBc2;JvD)&V(&yk+BI!R1F>p)i{*DU+-rnbJw78(wciqLY7XB z4mtRmm9^x@FU?>1RgGN*mfFg9D>nZsn8!8u!1MU;?d$h{jGNPZzg)F_S^S~QMt=*< zPlnRgJda+NwqIUvGr#PmqnGyX%b6eKCAYruUvj5dX*b_*y-WW?jKcT2Bs|Ub*dcW5 zYtzMW$Lo$CuGT-e?Edia?-=tFKlbnVIOp!uP>uU9n^J%By{I|zkN?Tnl^QMPc}=bS z3|uc|6F+>9*?wob{-Iy}cRt-^Il|7opLy=D-Jff&$+J)X$N1NO?Qe&;NT&1uMW)#? z-@JQQXXjzR($`&P2PZ9Gm>h3W^Jku(Q>giFz8LPc>q_qL7LNNLU(WFVSL*h=GbHtP z{A~8UEzj<Bm35<eUW2apolVN>2O_sSmR+~Ky{CZpiGIU-+b7q~?_-Gjvy*#8^SRzi z!{6WDo_=uf-SN{08kr@{^JJ6`Jvi7LxjD_W<=fsV7cJB0H058l={t2Q>GU(-4L`ZR zCnrBv514U&!(spQ*VBA+?rdmm`ksDqVU6xyyB+gh@#jA=pa13I+|Z>z{y3WD+&D1J zRsZta4#Dbl0nUT!{h!Wx7w`CWYc_+#rHx&Rv9<5^N}DvQ|1UK+Uca+DAdB7X?W%;E z>hcCD9)Is1{`~y>bL;y*`DV_X$x!os_x-1L%kQT?I@0;&?d|DPwZpG%aS&syedX=$ za*Oe8=-1r*i-!*c-+O%YfR13LSjDyIZ*m2*JI*l83%vU0*QIR^lg_wIn5TS_vFJeT z!5#JK7VpX%tXKatxTDf=av?`*Xrh<4bB^AsgtOa%uI1?`S7(Z5Yx6ywFZz5#VYp@X zy;#>$i(d>i9F})Zg*J-M`1bYll64icm~xMIKis(I45!Y$i}ID%-J>oXU$`^e;KPU2 zGXlQxC{O#>ed=kx!T#e<w_H}L60i4qzDSkjQ1$;8D_>NwOug&=`1C6$FRz9L_6_Sx zx?gME-g#^86UlXD@ejUy)8i<4!F)Qt>C)PQH=^&v|30ceyr^9vhBKD^u;%_oIpvrO zT4%~*%be>UF!3Ikn7*^PHO;rJtli;%VZjT{b*9tqp8d;J|4Hb^KBi+akNq6xmacov zwMMJ(=j!s;&+aJ4Dy-0JZROwjxu3!6OKIcl4VM?Z4t&R8^S`W|LH<YVj1uu0L-u>S znV<PIuUVHD^*wR<;cH7b)HO=aKVd8Lscn~7qSv)~ku9#$vE`T7mFE5b@#g{ej>y`* z{sjkhh01<Ed;9-+RNldo53G0hy}rPH?ytB=ZiD%Mmj5=_uCC8%_b&h2p114Qf%iN9 z?E5ZY^DXxK>EC;;V+<_+@Jvr%ap~>jHF^^+?tFK%W9jXL*GA#X5_WMf+3D_Nkb6J3 z+ia4QUfb@z#z|{`?9);;t=0@VduV%>>cZap2hQ3i=E~)qZ{h#PseNBz>l@98_k7h+ zp={shJh<e2wz0==!y{9*^3`eQdLDzSzhJlTP4EBDjjZ3_+LV7U{bJ=@j$aGU$7`>w zcvF+{zW8~o?RVjbeG=Q&HaxFq`k8uS&dPvFIi0#oZ<{y2Pbt0ccxTraRl9wKDzaw# zj$YaMG{nZ5x$FJv@7Z@QSd?YGiZgaQ>`=8=+Wd{q1C<1&5Brsj0z&fzC;n$hXOiza zv2xX}J?q4y6%0E#G9B$R9qna}gDsXMvmO7kvii(oE1AT*eMYCW4yP<-J>m0JxKAUx z%kTN$v)L=}?VGhVlUZY(SX*ejWY=${DIsk?mn~=!pC<m%<K{^jwZA{I3)Ggc{cC?n zOXu>vJu;RvzuszP%5^uClu^x=i2b0dyzRVN@V7I0+80aAe(c(KbiVt{{qnE47yMIr zySnSe#QlwWtL>Abv-F?I{bK**-G5-ai-+e=R?Fsk7wdXe&AC;VHMLv&COI9?(=2&2 z-D&q11<gA7-M85*o$uT@|ET_O*YyY8%VQO~rp@FQw|}l?-1C=rPi?n#!?LaA!He7D znP%HHm*+R9uP<2t((K0HP2brQU&d_z`{(wZU2kkO?mgi<aDV2@W0T!tm=5c;h_2s# z?W*<mL)P`Bx6@0?8jEj!Ugy2;U-=DI!QLJA1-eHYCnp@04*0N?+l5)pX~m&f{dK<s z!vD>Bci`~x-Pf)+{f<#Md#-r;Ps^9rt2cR`Y~Y^P<jTMM+Kt!yi|e=kY|_(MwzYYS z%!lPWm<v80tKIH<w(zOcmsoM0>$M!O?HZ20clOjw=_~mC|7rT&s?ZmPLPp$)SDtS8 zq<Le5Ok6D2LJ^BBp_rnjza2kL-yFN(jJ1^2x8k*j&vwte^wzKL$92mb?$QTuZ+>3j z?$5>lyG!rsT~5B!srNSJuF<WzGxy8vD30xaWcJm_ImO;df7E4evGP$_nr=mRuwCU8 z)v1*__qMPWebUg<QZio7{8n%F;c2|tl|R=B_SnAmv3OOmY4iL=J9bpeU$=I$pH=6| z;N?YkORq0n1*)#y<!iSze&3z9DoR7i+VzP`Xs!4Tj*4iPngfcfto&V`G21h2a#=EY zRUKoEqSA3jcP23ppU<p+?S4IdXU%K5KGsU+lAJ}={>&-it(?DF8)Eoo+o|7Kr(c;; zP*iD}8k%@&_2DU@tt<IlHF(`CY(*BX*)(fYm)9vRt(&1wm+vrgDRk{P6)+>fWhIa6 ziZ5~DUL64*6Td3tC@=B~wQvg6aH=eoxVrS~G~J``l~o@oKM-fKQ+)8c^M1Lc<9}6| zncHUB+;m*`Mk)GKrE&$A^fRr{g_SISozh;dEIDaA?aUj#l2vCG-ZoM^YTtBWf&0r{ z$&3pf#9U?B1bcpPDi}Nv3HtqZN%ln{t7+?&)PCeTR9n3%^T&D494*BM#i^dWKTf<T z<a*0*EnEN4>N@Y`+>UJ7&K=Fq*KOTUY8f*9ZRWzKCFQZ%mbTx0idN{ACx_2J+w}c? zli%M5)%?4ebDSR=>})@rx_;Llsatxc(tZCsf8XB7b*=6}T`zl3%=N^RVb>37-g|Ux zkydxi%-?e!G?ia>T<0pfs^IQq?YMIGm*@B7)yE%@{n5XdDXx}p+27;3^;y<Evl%9< zAD(4eaGk~Cum6UZ1|IYIum90svy+j{w_%@pRp!sc5BHK)p2(g(p#9JFqrKRL#l`8L zs=ly10MBIJ+${O?=XK~zrVyX4<gYJ{2l5~6D%HDxQ+UB`g>`!#z6Z~2`qv)3u(;hI zE5wY!UB1@ja2s#(g9D8+RWBCySQf5%%_nO<_2p%2gStNzpFVw>VV-~Qof5CS-JF%d z%Z;+GXdK|(#xHHwW14;K%742n?}Z-737%vKW4z2@|6#`Uuc`;`hm=n5_~Yo}cW`UT zG)DdF(^vTZH_i33SoB6`byBsb=xuN9o1tN6`z~p5onF0?XJ<mNXqP~j3y15J01GFJ zM^T{*JA&S_E?HI3BC@~#%7T88{r#^t1VxE1+G2EM+axVB@vwk6S-Taf-#JUp_$-ax zb=~x_u0QV&Pwrg}!krEpLW*l9JQ5FLt_xzeyVO({)NB{TTz6`<lgPC2;Ls?KEH^P* ztF+6Tovkt*?XNyO@ot^>{D%ALEPw4T1^-D|^276c)VfSZd&m6(eHwzHs}6fbhIU*! zW$>`$lAf~1@g5PYlqC~pzEU?fb;vpp{{BHp^D6CxtI-oCz1*c7Z1nA>ib!98V3&e} zTi5=~pId@-AGWw;Pn=<P^u4fE`qE35+M*}=BJI{$>$_;I`BBq!Uwy@^cM2kX8m9Xn zt~w-mYIRKZszp{l5mP(Fw`e)PTffEVNZ%!`ZBs*nBI0@#))_K|gt@QaX<fOd@4<J@ zl?NG=oHS$>uF*Qu7qorfq1$@4NBwtyQLxOsnWMQf?c%Rqk!j(_bK<Xj_?_~7AEU=d zrkJk#?l-bS!&;S>{Hk42*|>UH>kO$AYRak(X|Ifof|;j;wcXgUy2-cosmQeO_ojKz zg-`f!PM9pWBsh#~u2Jv_PyR>Z-|blb=vgfLQOm+?7vdPmqG)`Sb?=r1^G{uv_kGDT zcehdtr{!xxs<!wmuaC8=n;#&_6)f5XG9&#r&#tZBhu;f(X*r98hfJ3Ga9Pusb$<B& z0vAn<bxW*d6wR%tZdqXe?6=*uBq<M<Cp>p-QtS)%uev96`cF@$rc2A4Ef!}sSb215 zty;<F%E4B{QfudOhf#lx*H&}E#e1xLc9tjTuICfx(yp8T;4`P={0S4K6pWAdpI3jQ zwK^?4Qq=nND$TV#fkBds)||TA?7nB>id7q4_pRaC$uL8xfc^Wbf+J4@w?1cxlPq%F zxM0VmNv8xPHS2b5_fHS#m${X`q(WC!Ua&Q2{q4;g_RM;_G*o0t$fm65mD#qgQ(mo@ zmRf4@=#;YFfw#63j|et~tj}TG-#<4s)a1&<;LEoqbRYa}V7w6(<EWBV>lf9qZ?19W zJ9TxF_r5+0X0Qqgeq{d7u#fi%vwZi7&#QLngjGr<&r(abcU<2&c|-KvR~xebP7QDO z<o@C5|MC50)o|Iq4Ldh9oplvmu}eYt3)7jlxleO$g!VmRaw&^yI2F*c)^+Oc^_!<( z*XvzpnaT3^(6&ihTwU6)HGN+To)$Z)k+5{tIwpaMHxH=XS<q{EY>S2C{{C;0np^Il zH)}6B^I$^X@4l;BLO1T&7|Need*yRY{!GJTGgO35I|N<d(pg(2=870aH`M7fJT@bu zBURxfJ6~tjJ>eVAdz3@x!Y4a<x|4eh)x?q{J?z-{geUG(n#AP8IIlmk?wCZfkV0DX z+f`CR6X!Fmf3)ns-2&dZK{-8!%R;+eR;sM}CG;Uk=d-~viOCTg-`p}fCUKc9Lc#Eu z#AO}bSBrX;f*981K00m9e48(+FsgZ5M0&>TuX)|2ZQCN>Gp{Yq5A}U9<+_-t$1G<T zF|}V@Gd^Aud(D%(`CjhEa~I5B-<5iu1Dg7P?_%&==3r!ek=3IC#h|e8=Sw7&4Ub7o zmN<Du2}CnMS01e9S5Ycz>!?vx(sq5a%VoNHn9CCZ!I|nx@m(i^1a}^bz8B~cCq7a1 z-haMMz1IiTl<EY3hPcFinYX>wYP<MEOQlVBs?Ya(f2-;~aemMFZ$g5VPA-=wZ9J#+ zsi7lBbfRkD=~ru)cf`Dxy}wUr;$`9BS8ZEgIS7?n-~V_Z@W6N1Co7Ij(@JwXpdV7o zU?BBlWBB#g4gXiYN<2`%_xZ_ZQV&kAc%HlPTsgz~6|W{9xVYn&dhTA=CF}*J20@|h z5B0uSwLV$%+4+Fv)@fHG{oh;Lu}Zwy`)vNb!u771R~uVa-2S;LOEjR^`u>u|t7eCM z6@Fi6`0l_Z=J5ONd(X<To%8fyOm=apVoGQH?yl?i&FVRWI^%z)fU8=ecU>o4mo68) zSt7{EAi3kWxN7X&(66!y?rV>Jy;>|}5FM%=T57sMsQgZLU{tk2=H%_4MJL)FFnFN6 zVD+jzCh?pGJx-k{ojZJgq&i%5y}wz>bBQqUSH)I+@AgphjL8qZ%W#Kl4YL_z>#AQ; zo-xm(Uad}FZE<YtH-}3rZvRvh7Cgx`k1cIQR^X!3!rn?oj5k)T>K2NfX2H#HxN&!A zsYHNRQOV0Ir=^8wuzX?N#XM7~C^5<Vs?wIO<d|%JmEK)*^EU~=W+3+*jdoEvA3dKv z$2a6>QUZ@bpv$!fyL9)fD)mpiQ_A*z=eh8!{d=Al7c{EQd|j)xAu5zRWUEvKo5j2* z>x#GhdUaE)uW+sHge@~~|Lp2`@axR}kgK;Bh1v4QJhI)#QlWP*wOcfFZ(L~gsx0|C z)xVdmit`Y<F6j_z&ivZ-2}k}#iv-D&vF}R{WC))8VE6iQ!Q+OLG0!u;Uj1B|(ABY| z%On1QL4qUGsp|{E>eF_2%;|jXzJBN2_w$9K7u^t;DBMuqsDHya?t}Cli<6Tb^zTgn zSiLH$T4DWF;fWg$=!cdzb(AQbe66G8Tqw*F)DU{W<PQJ-C2O~L++ms1KYQU1%>v5_ zu9L1ty3AuZ_DD~BKkE+0ifL7^G?o4{$8_D+HxBvw^vCpFiEHgZ+krgST)PKaz@l~# z`|cpv#-U<?juSU#trnKPd<~k7#XNjwD=CS0ftG9dxV-!Nt~5wV>A$+t{Eid#t}54W zm#yfi(NOAkP02fJtK_m|f5#q0rTNwCUp`lzFIvh!G4h_|tz#;-+$zh?3QT0&VZ8kK zidO*&JTVL@O!HT~DtM54XXY`6eunF-UJ2Y0WzCv)p6TDhRql`1v2Q&YZO1dCaku%o zg*&oaB`1Gj0&R9GG~ttAta)Q9cBxSOcsIlUZ`&$)D%@a$2|o`X2v(ZJ`z7G&PKH%c zj1QJ>cL@Ew_xXIr+J>Ko>!%uWrZpbfqRM2mX4UogTLYfdXXjqOP}(f@YTc@yDw$*Z z;+OSqSf_h=+8^;5I!dt#-)lEjKi<bad2enV!<q1_P6^99=Dg6|&rxxEH@nZijyaE) zPSjG8{J5sYP`CGQl2LBkDm~$e_nFprcJQxYtLxcac*Q|5l11dvvA_ed=YGrS2V9A1 z6psnm8SYZ|e(A@(7GZ~Hh#g<|FZ-5_pl0CJH7?T+&$xC9v~J~?NjGRh7eS#c35Lf@ gkKr+s)BoAGuv<TS&ck_-fq{X+)78&qol`;+06t?G!2kdN literal 0 HcmV?d00001 diff --git a/loss_train.txt b/loss_train.txt new file mode 100644 index 0000000..fbbf848 --- /dev/null +++ b/loss_train.txt @@ -0,0 +1 @@ +0.914432241905508,1.0890498682110008,1.0662257934540371,0.9452635404780139,0.8404942769644336,0.7515576027219265,0.6553787542587929,0.5984709460211143,0.5494870943830422,0.507801607659282,0.475695323052212,0.4427371546775401,0.4208838353275695,0.4047454656782991,0.3814310352134462,0.36165558965099043,0.3499462316397505,0.3417469370132219,0.32446076793741724,0.3128658552220466,0.30718623231860026,0.29598417520863995,0.29296387868150126,0.28096779631407226,0.27288863636458727,0.26251778235931494,0.2528367002196635,0.2493721120098062,0.23771963591246295,0.23299069632589445,0.21981321552266916,0.2242309237099654,0.2155117008803349,0.21132812228112288,0.21102125828578053,0.19736276233756048,0.20021629007828703,0.19472804411209288,0.19126591536402454,0.1892140577309289,0.1849187507919977,0.18017891168973235,0.17833757304114276,0.17453937580822684,0.17488584187559586,0.1726669366043758,0.16568992694280854,0.15917962465835606,0.15688422384408085,0.15529663549882652,0.15443131572264573,0.152165321827323,0.15489908727430274,0.15120611710011345,0.14257824354656987,0.14376684254857805,0.1416665404072979,0.14132470331956062,0.13774039280139228,0.1365385185085144,0.1339924920826395,0.12671960176213046,0.1272511701059914,0.12427176386052612,0.1256792281649759,0.12305945707299219,0.12008903637128238,0.1256913678270252,0.1153034656942771,0.11705282526459351,0.11615417962122407,0.11272501567678504,0.10964956702529571,0.11056176645729632,0.11442205218720572,0.10801927556841974,0.10369276028072548,0.10404491375993895,0.10127940310245813,0.10357804772454646,0.10030484552251853,0.09790428215490048,0.09364842431968232,0.10315570906621563,0.10619501250726575,0.10173944924043836,0.09475720067962554,0.0937476508884171,0.09153650025377333,0.09177952346612209,0.08767617185204449,0.09118074719615739,0.0934940773506567,0.08378215233652878,0.08626696844556661,0.07630516203438335,0.08121319106953721,0.07288453491202773,0.08167959343807132,0.07379477550745815, \ No newline at end of file diff --git a/loss_valid.txt b/loss_valid.txt new file mode 100644 index 0000000..47406c8 --- /dev/null +++ b/loss_valid.txt @@ -0,0 +1 @@ +5.409840382896103,1.095459109836525,1.0233849641326425,0.9735279810595345,0.7909036162016275,0.6617921316227713,0.600804440729268,0.6025271806996185,0.5079557338169405,0.470249051397497,0.4123567695618718,0.4919014720676037,0.4265763459245225,0.4179441516215985,0.5162362984896123,0.40533430202883647,0.39853324747230806,0.35603674894550463,0.3297091824608249,0.3081557689677481,0.2822078019266596,0.3331428560529269,0.42421120914493826,0.27224766077486784,0.2927218007519711,0.2565011253248301,0.2649005456987143,0.31809036474401403,0.2842411591990532,0.25794894697300935,0.3671372201606319,0.2617451622382041,0.2166683126104201,0.2458611200286818,0.2739809727706536,0.24537122051452998,0.19146192192191167,0.21164633981863987,0.21948707287307256,0.19899258399919534,0.19786197571792163,0.20933886382963274,0.21087480854801507,0.198691404610221,0.2510351604974171,0.21986821062302778,0.24698349234560127,0.2374941237699045,0.2746820056499992,0.2164135592748652,0.19292548215309796,0.18469755996468026,0.24901559958364683,0.19339173547459532,0.2274237628619128,0.1880218390535345,0.2215084930811846,0.19347836490284157,0.17894948498179836,0.26113796456500404,0.22216347089302693,0.1883458425563604,0.20709543079186649,0.1905532755385889,0.18847293753854252,0.19960758069015622,0.1988617337125246,0.16786505198684176,0.21208965312119676,0.20881903899379295,0.2535806185243508,0.1982893103600758,0.20687334963822268,0.30711406602449326,0.2169607431286705,0.1882967368903744,0.19063742153016425,0.18182275275548374,0.1773022400500506,0.19315277243751897,0.19040795559876833,0.161329732964408,0.1806079926772346,0.21166090780284608,0.2039699403058666,0.2143698412387907,0.19312768667411032,0.22016905881529608,0.21557865292363038,0.23296234081051528,0.20201801803570332,0.2518969925864961,0.20770283206752696,0.2195557528395473,0.19878985075316907,0.22536614060933519,0.19445914231837888,0.27327212523161215,0.22818992230595478,0.21039123502321838, diff --git a/resnet18.ipynb b/resnet18.ipynb new file mode 100644 index 0000000..4db9669 --- /dev/null +++ b/resnet18.ipynb @@ -0,0 +1,2187 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "17767f9b", + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "import torchvision\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import torch.optim as optim\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d01df462", + "metadata": {}, + "outputs": [], + "source": [ + "import torchvision.models as models\n", + "net = models.resnet18()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "754cb9a3", + "metadata": {}, + "outputs": [], + "source": [ + "net.conv1 = nn.Conv2d(1, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0d2b4c59", + "metadata": {}, + "outputs": [], + "source": [ + "net.conv1 = nn.Conv2d(1, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", + "net.fc = nn.Linear(in_features=512, out_features=3, bias=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "fd36529f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ResNet(\n", + " (conv1): Conv2d(1, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", + " (layer1): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer2): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(64, 128, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer3): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(128, 256, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer4): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (avgpool): AdaptiveAvgPool2d(output_size=(1, 1))\n", + " (fc): Linear(in_features=512, out_features=3, bias=True)\n", + ")" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "net" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "35ed82d4", + "metadata": {}, + "outputs": [], + "source": [ + "if torch.cuda.is_available():\n", + " net = net.cuda()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9039d0ba", + "metadata": {}, + "outputs": [], + "source": [ + "criterion = nn.CrossEntropyLoss()\n", + "optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "82f5a0c9", + "metadata": {}, + "outputs": [], + "source": [ + "from torchvision import datasets, transforms\n", + "from torch.utils.data import DataLoader, random_split" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "25136ecd", + "metadata": {}, + "outputs": [], + "source": [ + "def UploadData(path, train):\n", + " #set up transforms for train and test datasets\n", + " train_transforms = transforms.Compose([transforms.Grayscale(num_output_channels=1), transforms.Resize(512), transforms.CenterCrop(511), transforms.RandomRotation(30),transforms.RandomHorizontalFlip(), transforms.transforms.ToTensor()]) \n", + " valid_transforms = transforms.Compose([transforms.Grayscale(num_output_channels=1), transforms.Resize(512), transforms.CenterCrop(511), transforms.transforms.ToTensor()]) \n", + " #test_transforms = transforms.Compose([transforms.Grayscale(num_output_channels=1), transforms.Resize(512), transforms.CenterCrop(511), transforms.ToTensor()])\n", + " \n", + " #set up datasets from Image Folders\n", + " train_dataset = datasets.ImageFolder(path + '/train', transform=train_transforms)\n", + " valid_dataset = datasets.ImageFolder(path + '/validation', transform=valid_transforms)\n", + " #test_dataset = datasets.ImageFolder(path + '/test', transform=test_transforms)\n", + "\n", + " #set up dataloaders with batch size of 32\n", + " trainloader = torch.utils.data.DataLoader(train_dataset, batch_size=12, shuffle=True)\n", + " validloader = torch.utils.data.DataLoader(valid_dataset, batch_size=12, shuffle=True)\n", + " #testloader = torch.utils.data.DataLoader(test_dataset, batch_size=32, shuffle=True)\n", + " \n", + " return trainloader, validloader #, testloader" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "36c1e09d", + "metadata": {}, + "outputs": [], + "source": [ + "trainloader, validloader = UploadData(\"/home/user/research/CXR_Covid-19_Challenge\", True) #, testloader" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "291f8643", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'covid': 0, 'normal': 1, 'pneumonia': 2}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trainloader.dataset.class_to_idx" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "b1234549", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "playsound is relying on another python subprocess. Please use `pip install pygobject` if you want playsound to run more efficiently.\n" + ] + } + ], + "source": [ + "import time\n", + "from tqdm import tqdm\n", + "from playsound import playsound\n", + "def convert(seconds):\n", + " return time.strftime(\"%H:%M:%S\", time.gmtime(seconds))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "dbc639ac", + "metadata": {}, + "outputs": [], + "source": [ + "min_valid_loss = np.inf" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "4de4f21c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 0%| | 0/1497 [00:00<?, ?it/s]/home/user/anaconda3/lib/python3.8/site-packages/torch/nn/functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at /pytorch/c10/core/TensorImpl.h:1156.)\n", + " return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)\n", + "100%|██████████| 1497/1497 [13:52<00:00, 1.80it/s]\n", + "100%|██████████| 286/286 [01:23<00:00, 3.42it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1 \tTraining Loss: 0.914432241905508 \tValidation Loss: 5.409840382896103 \t time: 00:15:15\n", + "Train Accuracy : 58.35839080810547 \tValidation Accuracy : 41.695804595947266\n", + "Validation Loss Decreased( inf ---> 1547.2143495082855 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:32<00:00, 2.92it/s]\n", + "100%|██████████| 286/286 [00:56<00:00, 5.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 2 \tTraining Loss: 1.0890498682110008 \tValidation Loss: 1.095459109836525 \t time: 00:09:29\n", + "Train Accuracy : 38.974273681640625 \tValidation Accuracy : 42.07459259033203\n", + "Validation Loss Decreased( 1547.2143495082855 ---> 313.30130541324615 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:54<00:00, 2.80it/s]\n", + "100%|██████████| 286/286 [01:00<00:00, 4.70it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 3 \tTraining Loss: 1.0662257934540371 \tValidation Loss: 1.0233849641326425 \t time: 00:09:55\n", + "Train Accuracy : 41.86991882324219 \tValidation Accuracy : 50.786712646484375\n", + "Validation Loss Decreased( 313.30130541324615 ---> 292.68809974193573 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [09:51<00:00, 2.53it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 4 \tTraining Loss: 0.9452635404780139 \tValidation Loss: 0.9735279810595345 \t time: 00:10:57\n", + "Train Accuracy : 53.82002258300781 \tValidation Accuracy : 53.93356704711914\n", + "Validation Loss Decreased( 292.68809974193573 ---> 278.4290025830269 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [09:51<00:00, 2.53it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.58it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 5 \tTraining Loss: 0.8404942769644336 \tValidation Loss: 0.7909036162016275 \t time: 00:10:54\n", + "Train Accuracy : 62.150569915771484 \tValidation Accuracy : 67.04545593261719\n", + "Validation Loss Decreased( 278.4290025830269 ---> 226.19843423366547 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [09:58<00:00, 2.50it/s]\n", + "100%|██████████| 286/286 [00:59<00:00, 4.78it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 6 \tTraining Loss: 0.7515576027219265 \tValidation Loss: 0.6617921316227713 \t time: 00:10:57\n", + "Train Accuracy : 67.65229797363281 \tValidation Accuracy : 72.29021453857422\n", + "Validation Loss Decreased( 226.19843423366547 ---> 189.2725496441126 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:04<00:00, 2.48it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.53it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 7 \tTraining Loss: 0.6553787542587929 \tValidation Loss: 0.600804440729268 \t time: 00:11:07\n", + "Train Accuracy : 72.93128204345703 \tValidation Accuracy : 75.96154022216797\n", + "Validation Loss Decreased( 189.2725496441126 ---> 171.83007004857063 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:06<00:00, 2.47it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.39it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 8 \tTraining Loss: 0.5984709460211143 \tValidation Loss: 0.6025271806996185 \t time: 00:11:12\n", + "Train Accuracy : 75.7545394897461 \tValidation Accuracy : 76.34032440185547\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:05<00:00, 2.47it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.46it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 9 \tTraining Loss: 0.5494870943830422 \tValidation Loss: 0.5079557338169405 \t time: 00:11:09\n", + "Train Accuracy : 78.23253631591797 \tValidation Accuracy : 80.97319793701172\n", + "Validation Loss Decreased( 171.83007004857063 ---> 145.27533987164497 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:05<00:00, 2.47it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 10 \tTraining Loss: 0.507801607659282 \tValidation Loss: 0.470249051397497 \t time: 00:11:11\n", + "Train Accuracy : 79.93094635009766 \tValidation Accuracy : 82.54662322998047\n", + "Validation Loss Decreased( 145.27533987164497 ---> 134.49122869968414 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:15<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.34it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 11 \tTraining Loss: 0.475695323052212 \tValidation Loss: 0.4123567695618718 \t time: 00:11:21\n", + "Train Accuracy : 81.49014282226562 \tValidation Accuracy : 84.76107788085938\n", + "Validation Loss Decreased( 134.49122869968414 ---> 117.93403609469533 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:16<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.30it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 12 \tTraining Loss: 0.4427371546775401 \tValidation Loss: 0.4919014720676037 \t time: 00:11:23\n", + "Train Accuracy : 83.03820037841797 \tValidation Accuracy : 82.28438568115234\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:16<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.54it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 13 \tTraining Loss: 0.4208838353275695 \tValidation Loss: 0.4265763459245225 \t time: 00:11:19\n", + "Train Accuracy : 84.1463394165039 \tValidation Accuracy : 84.00350189208984\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:56<00:00, 2.79it/s]\n", + "100%|██████████| 286/286 [00:57<00:00, 4.95it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 14 \tTraining Loss: 0.4047454656782991 \tValidation Loss: 0.4179441516215985 \t time: 00:09:54\n", + "Train Accuracy : 84.70319366455078 \tValidation Accuracy : 84.09091186523438\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:35<00:00, 2.90it/s]\n", + "100%|██████████| 286/286 [00:53<00:00, 5.33it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 15 \tTraining Loss: 0.3814310352134462 \tValidation Loss: 0.5162362984896123 \t time: 00:09:29\n", + "Train Accuracy : 85.55518341064453 \tValidation Accuracy : 80.50699615478516\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:42<00:00, 2.87it/s]\n", + "100%|██████████| 286/286 [00:55<00:00, 5.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 16 \tTraining Loss: 0.36165558965099043 \tValidation Loss: 0.40533430202883647 \t time: 00:09:37\n", + "Train Accuracy : 86.44615173339844 \tValidation Accuracy : 85.05245208740234\n", + "Validation Loss Decreased( 117.93403609469533 ---> 115.92561038024724 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:39<00:00, 2.88it/s]\n", + "100%|██████████| 286/286 [00:57<00:00, 5.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 17 \tTraining Loss: 0.3499462316397505 \tValidation Loss: 0.39853324747230806 \t time: 00:09:37\n", + "Train Accuracy : 86.72457885742188 \tValidation Accuracy : 85.81002807617188\n", + "Validation Loss Decreased( 115.92561038024724 ---> 113.9805087770801 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [09:11<00:00, 2.72it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.57it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 18 \tTraining Loss: 0.3417469370132219 \tValidation Loss: 0.35603674894550463 \t time: 00:10:13\n", + "Train Accuracy : 87.13665008544922 \tValidation Accuracy : 86.74242401123047\n", + "Validation Loss Decreased( 113.9805087770801 ---> 101.82651019841433 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:14<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:08<00:00, 4.17it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 19 \tTraining Loss: 0.32446076793741724 \tValidation Loss: 0.3297091824608249 \t time: 00:11:22\n", + "Train Accuracy : 87.7658920288086 \tValidation Accuracy : 87.6748275756836\n", + "Validation Loss Decreased( 101.82651019841433 ---> 94.29682618379593 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:45<00:00, 2.32it/s]\n", + "100%|██████████| 286/286 [01:10<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 20 \tTraining Loss: 0.3128658552220466 \tValidation Loss: 0.3081557689677481 \t time: 00:11:55\n", + "Train Accuracy : 88.30047607421875 \tValidation Accuracy : 88.37413024902344\n", + "Validation Loss Decreased( 94.29682618379593 ---> 88.13254992477596 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:05<00:00, 2.25it/s]\n", + "100%|██████████| 286/286 [01:11<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 21 \tTraining Loss: 0.30718623231860026 \tValidation Loss: 0.2822078019266596 \t time: 00:12:16\n", + "Train Accuracy : 88.75152587890625 \tValidation Accuracy : 89.53962707519531\n", + "Validation Loss Decreased( 88.13254992477596 ---> 80.71143135102466 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:17<00:00, 2.21it/s]\n", + "100%|██████████| 286/286 [01:08<00:00, 4.15it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 22 \tTraining Loss: 0.29598417520863995 \tValidation Loss: 0.3331428560529269 \t time: 00:12:26\n", + "Train Accuracy : 89.07450103759766 \tValidation Accuracy : 87.47086334228516\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:44<00:00, 2.12it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.24it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 23 \tTraining Loss: 0.29296387868150126 \tValidation Loss: 0.42421120914493826 \t time: 00:12:52\n", + "Train Accuracy : 89.0967788696289 \tValidation Accuracy : 85.13986206054688\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:45<00:00, 2.12it/s]\n", + "100%|██████████| 286/286 [01:11<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 24 \tTraining Loss: 0.28096779631407226 \tValidation Loss: 0.27224766077486784 \t time: 00:12:56\n", + "Train Accuracy : 89.78170776367188 \tValidation Accuracy : 89.7144546508789\n", + "Validation Loss Decreased( 80.71143135102466 ---> 77.8628309816122 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:28<00:00, 2.18it/s]\n", + "100%|██████████| 286/286 [00:59<00:00, 4.83it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 25 \tTraining Loss: 0.27288863636458727 \tValidation Loss: 0.2927218007519711 \t time: 00:12:27\n", + "Train Accuracy : 89.88751220703125 \tValidation Accuracy : 89.07342529296875\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:59<00:00, 2.77it/s]\n", + "100%|██████████| 286/286 [00:57<00:00, 4.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 26 \tTraining Loss: 0.26251778235931494 \tValidation Loss: 0.2565011253248301 \t time: 00:09:57\n", + "Train Accuracy : 90.31072235107422 \tValidation Accuracy : 89.8892822265625\n", + "Validation Loss Decreased( 77.8628309816122 ---> 73.35932184290141 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:36<00:00, 2.90it/s]\n", + "100%|██████████| 286/286 [00:53<00:00, 5.33it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 27 \tTraining Loss: 0.2528367002196635 \tValidation Loss: 0.2649005456987143 \t time: 00:09:30\n", + "Train Accuracy : 90.65597534179688 \tValidation Accuracy : 90.3846206665039\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:36<00:00, 2.90it/s]\n", + "100%|██████████| 286/286 [00:53<00:00, 5.33it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 28 \tTraining Loss: 0.2493721120098062 \tValidation Loss: 0.31809036474401403 \t time: 00:09:30\n", + "Train Accuracy : 90.85643768310547 \tValidation Accuracy : 88.60723114013672\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [09:27<00:00, 2.64it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.34it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 29 \tTraining Loss: 0.23771963591246295 \tValidation Loss: 0.2842411591990532 \t time: 00:10:33\n", + "Train Accuracy : 91.14600372314453 \tValidation Accuracy : 89.18997955322266\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:15<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.44it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 30 \tTraining Loss: 0.23299069632589445 \tValidation Loss: 0.25794894697300935 \t time: 00:11:19\n", + "Train Accuracy : 91.496826171875 \tValidation Accuracy : 90.3846206665039\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:48<00:00, 2.31it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.36it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 31 \tTraining Loss: 0.21981321552266916 \tValidation Loss: 0.3671372201606319 \t time: 00:11:53\n", + "Train Accuracy : 92.03140258789062 \tValidation Accuracy : 87.41259002685547\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:12<00:00, 2.23it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.30it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 32 \tTraining Loss: 0.2242309237099654 \tValidation Loss: 0.2617451622382041 \t time: 00:12:18\n", + "Train Accuracy : 91.70842742919922 \tValidation Accuracy : 90.06410217285156\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:27<00:00, 2.18it/s]\n", + "100%|██████████| 286/286 [01:09<00:00, 4.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 33 \tTraining Loss: 0.2155117008803349 \tValidation Loss: 0.2166683126104201 \t time: 00:12:37\n", + "Train Accuracy : 92.05924987792969 \tValidation Accuracy : 91.84149169921875\n", + "Validation Loss Decreased( 73.35932184290141 ---> 61.96713740658015 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:19<00:00, 2.20it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.27it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 34 \tTraining Loss: 0.21132812228112288 \tValidation Loss: 0.2458611200286818 \t time: 00:12:26\n", + "Train Accuracy : 92.39892578125 \tValidation Accuracy : 90.26806640625\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:08<00:00, 2.46it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.57it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 35 \tTraining Loss: 0.21102125828578053 \tValidation Loss: 0.2739809727706536 \t time: 00:11:10\n", + "Train Accuracy : 92.2708511352539 \tValidation Accuracy : 90.00582885742188\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:23<00:00, 2.40it/s]\n", + "100%|██████████| 286/286 [01:01<00:00, 4.64it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 36 \tTraining Loss: 0.19736276233756048 \tValidation Loss: 0.24537122051452998 \t time: 00:11:25\n", + "Train Accuracy : 92.84441375732422 \tValidation Accuracy : 90.96736907958984\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:28<00:00, 2.38it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.38it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 37 \tTraining Loss: 0.20021629007828703 \tValidation Loss: 0.19146192192191167 \t time: 00:11:33\n", + "Train Accuracy : 92.6495132446289 \tValidation Accuracy : 92.80303192138672\n", + "Validation Loss Decreased( 61.96713740658015 ---> 54.75810966966674 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:32<00:00, 2.37it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.27it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 38 \tTraining Loss: 0.19472804411209288 \tValidation Loss: 0.21164633981863987 \t time: 00:11:39\n", + "Train Accuracy : 92.68849182128906 \tValidation Accuracy : 92.4825210571289\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:27<00:00, 2.39it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.27it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 39 \tTraining Loss: 0.19126591536402454 \tValidation Loss: 0.21948707287307256 \t time: 00:11:33\n", + "Train Accuracy : 92.93907928466797 \tValidation Accuracy : 91.92890930175781\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:32<00:00, 2.37it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.31it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 40 \tTraining Loss: 0.1892140577309289 \tValidation Loss: 0.19899258399919534 \t time: 00:11:38\n", + "Train Accuracy : 93.03931427001953 \tValidation Accuracy : 92.51165771484375\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:29<00:00, 2.38it/s]\n", + "100%|██████████| 286/286 [01:08<00:00, 4.18it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 41 \tTraining Loss: 0.1849187507919977 \tValidation Loss: 0.19786197571792163 \t time: 00:11:38\n", + "Train Accuracy : 93.4625244140625 \tValidation Accuracy : 92.51165771484375\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:28<00:00, 2.38it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.38it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 42 \tTraining Loss: 0.18017891168973235 \tValidation Loss: 0.20933886382963274 \t time: 00:11:33\n", + "Train Accuracy : 93.39012908935547 \tValidation Accuracy : 91.8123550415039\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:34<00:00, 2.36it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.22it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 43 \tTraining Loss: 0.17833757304114276 \tValidation Loss: 0.21087480854801507 \t time: 00:11:42\n", + "Train Accuracy : 93.22864532470703 \tValidation Accuracy : 91.9871826171875\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:32<00:00, 2.37it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.27it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 44 \tTraining Loss: 0.17453937580822684 \tValidation Loss: 0.198691404610221 \t time: 00:11:39\n", + "Train Accuracy : 93.70196533203125 \tValidation Accuracy : 92.68648529052734\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:34<00:00, 2.36it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.44it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 45 \tTraining Loss: 0.17488584187559586 \tValidation Loss: 0.2510351604974171 \t time: 00:11:38\n", + "Train Accuracy : 93.60173797607422 \tValidation Accuracy : 90.73426818847656\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:32<00:00, 2.37it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.28it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 46 \tTraining Loss: 0.1726669366043758 \tValidation Loss: 0.21986821062302778 \t time: 00:11:39\n", + "Train Accuracy : 93.77436065673828 \tValidation Accuracy : 91.84149169921875\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:30<00:00, 2.38it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.25it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 47 \tTraining Loss: 0.16568992694280854 \tValidation Loss: 0.24698349234560127 \t time: 00:11:37\n", + "Train Accuracy : 93.90800476074219 \tValidation Accuracy : 91.60839080810547\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:30<00:00, 2.37it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.24it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 48 \tTraining Loss: 0.15917962465835606 \tValidation Loss: 0.2374941237699045 \t time: 00:11:38\n", + "Train Accuracy : 94.21427154541016 \tValidation Accuracy : 91.08391571044922\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:20<00:00, 2.41it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.44it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 49 \tTraining Loss: 0.15688422384408085 \tValidation Loss: 0.2746820056499992 \t time: 00:11:24\n", + "Train Accuracy : 94.21427154541016 \tValidation Accuracy : 90.15151977539062\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:35<00:00, 2.35it/s]\n", + "100%|██████████| 286/286 [01:09<00:00, 4.11it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 50 \tTraining Loss: 0.15529663549882652 \tValidation Loss: 0.2164135592748652 \t time: 00:11:45\n", + "Train Accuracy : 94.44815063476562 \tValidation Accuracy : 92.33683013916016\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:24<00:00, 2.19it/s]\n", + "100%|██████████| 286/286 [01:11<00:00, 4.01it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 51 \tTraining Loss: 0.15443131572264573 \tValidation Loss: 0.19292548215309796 \t time: 00:12:35\n", + "Train Accuracy : 94.32564544677734 \tValidation Accuracy : 93.0361328125\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:26<00:00, 2.18it/s]\n", + "100%|██████████| 286/286 [01:08<00:00, 4.16it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 52 \tTraining Loss: 0.152165321827323 \tValidation Loss: 0.18469755996468026 \t time: 00:12:35\n", + "Train Accuracy : 94.4815673828125 \tValidation Accuracy : 92.8613052368164\n", + "Validation Loss Decreased( 54.75810966966674 ---> 52.82350214989856 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:33<00:00, 2.16it/s]\n", + "100%|██████████| 286/286 [01:08<00:00, 4.17it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 53 \tTraining Loss: 0.15489908727430274 \tValidation Loss: 0.24901559958364683 \t time: 00:12:41\n", + "Train Accuracy : 94.50383758544922 \tValidation Accuracy : 91.14219665527344\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:03<00:00, 2.26it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.52it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 54 \tTraining Loss: 0.15120611710011345 \tValidation Loss: 0.19339173547459532 \t time: 00:12:07\n", + "Train Accuracy : 94.45928955078125 \tValidation Accuracy : 93.0361328125\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:20<00:00, 2.41it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.54it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 55 \tTraining Loss: 0.14257824354656987 \tValidation Loss: 0.2274237628619128 \t time: 00:11:23\n", + "Train Accuracy : 94.96045684814453 \tValidation Accuracy : 92.22028350830078\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:12<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.56it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 56 \tTraining Loss: 0.14376684254857805 \tValidation Loss: 0.1880218390535345 \t time: 00:11:15\n", + "Train Accuracy : 94.78783416748047 \tValidation Accuracy : 93.50233459472656\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:12<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.40it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 57 \tTraining Loss: 0.1416665404072979 \tValidation Loss: 0.2215084930811846 \t time: 00:11:17\n", + "Train Accuracy : 94.85466003417969 \tValidation Accuracy : 91.84149169921875\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:08<00:00, 2.46it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.50it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 58 \tTraining Loss: 0.14132470331956062 \tValidation Loss: 0.19347836490284157 \t time: 00:11:12\n", + "Train Accuracy : 95.01614379882812 \tValidation Accuracy : 92.42424774169922\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:06<00:00, 2.47it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 59 \tTraining Loss: 0.13774039280139228 \tValidation Loss: 0.17894948498179836 \t time: 00:11:10\n", + "Train Accuracy : 94.98273468017578 \tValidation Accuracy : 93.12354278564453\n", + "Validation Loss Decreased( 52.82350214989856 ---> 51.17955270479433 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:14<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.49it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 60 \tTraining Loss: 0.1365385185085144 \tValidation Loss: 0.26113796456500404 \t time: 00:11:18\n", + "Train Accuracy : 95.07183074951172 \tValidation Accuracy : 91.8123550415039\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:11<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.30it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 61 \tTraining Loss: 0.1339924920826395 \tValidation Loss: 0.22216347089302693 \t time: 00:11:17\n", + "Train Accuracy : 95.07740020751953 \tValidation Accuracy : 91.89977264404297\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:18<00:00, 2.42it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.34it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 62 \tTraining Loss: 0.12671960176213046 \tValidation Loss: 0.1883458425563604 \t time: 00:11:24\n", + "Train Accuracy : 95.45049285888672 \tValidation Accuracy : 93.38578033447266\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:12<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:01<00:00, 4.66it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 63 \tTraining Loss: 0.1272511701059914 \tValidation Loss: 0.20709543079186649 \t time: 00:11:13\n", + "Train Accuracy : 95.47833251953125 \tValidation Accuracy : 92.91958618164062\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:11<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.61it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 64 \tTraining Loss: 0.12427176386052612 \tValidation Loss: 0.1905532755385889 \t time: 00:11:13\n", + "Train Accuracy : 95.59527587890625 \tValidation Accuracy : 92.97785949707031\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:14<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.46it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 65 \tTraining Loss: 0.1256792281649759 \tValidation Loss: 0.18847293753854252 \t time: 00:11:18\n", + "Train Accuracy : 95.45049285888672 \tValidation Accuracy : 92.97785949707031\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:15<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.36it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 66 \tTraining Loss: 0.12305945707299219 \tValidation Loss: 0.19960758069015622 \t time: 00:11:20\n", + "Train Accuracy : 95.46720123291016 \tValidation Accuracy : 92.89044189453125\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:22<00:00, 2.40it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.49it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 67 \tTraining Loss: 0.12008903637128238 \tValidation Loss: 0.1988617337125246 \t time: 00:11:26\n", + "Train Accuracy : 95.79574584960938 \tValidation Accuracy : 92.77389526367188\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:18<00:00, 2.42it/s]\n", + "100%|██████████| 286/286 [01:01<00:00, 4.62it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 68 \tTraining Loss: 0.1256913678270252 \tValidation Loss: 0.16786505198684176 \t time: 00:11:20\n", + "Train Accuracy : 95.46720123291016 \tValidation Accuracy : 93.26923370361328\n", + "Validation Loss Decreased( 51.17955270479433 ---> 48.00940486823674 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:13<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.57it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 69 \tTraining Loss: 0.1153034656942771 \tValidation Loss: 0.21208965312119676 \t time: 00:11:15\n", + "Train Accuracy : 95.90154266357422 \tValidation Accuracy : 92.27855682373047\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:22<00:00, 2.41it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.46it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 70 \tTraining Loss: 0.11705282526459351 \tValidation Loss: 0.20881903899379295 \t time: 00:11:26\n", + "Train Accuracy : 95.77346801757812 \tValidation Accuracy : 93.67715454101562\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:14<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.40it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 71 \tTraining Loss: 0.11615417962122407 \tValidation Loss: 0.2535806185243508 \t time: 00:11:19\n", + "Train Accuracy : 95.94609069824219 \tValidation Accuracy : 90.64685821533203\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:16<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.21it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 72 \tTraining Loss: 0.11272501567678504 \tValidation Loss: 0.1982893103600758 \t time: 00:11:24\n", + "Train Accuracy : 95.97950744628906 \tValidation Accuracy : 93.35664367675781\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:16<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.43it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 73 \tTraining Loss: 0.10964956702529571 \tValidation Loss: 0.20687334963822268 \t time: 00:11:20\n", + "Train Accuracy : 96.0853042602539 \tValidation Accuracy : 92.83216857910156\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:17<00:00, 2.42it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.59it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 74 \tTraining Loss: 0.11056176645729632 \tValidation Loss: 0.30711406602449326 \t time: 00:11:20\n", + "Train Accuracy : 96.01848602294922 \tValidation Accuracy : 90.55944061279297\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:16<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:00<00:00, 4.69it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 75 \tTraining Loss: 0.11442205218720572 \tValidation Loss: 0.2169607431286705 \t time: 00:11:17\n", + "Train Accuracy : 95.83472442626953 \tValidation Accuracy : 93.09440612792969\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:17<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.60it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 76 \tTraining Loss: 0.10801927556841974 \tValidation Loss: 0.1882967368903744 \t time: 00:11:19\n", + "Train Accuracy : 96.20781707763672 \tValidation Accuracy : 93.76457214355469\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:16<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.24it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 77 \tTraining Loss: 0.10369276028072548 \tValidation Loss: 0.19063742153016425 \t time: 00:11:24\n", + "Train Accuracy : 96.30248260498047 \tValidation Accuracy : 93.2109603881836\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:05<00:00, 2.47it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.31it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 78 \tTraining Loss: 0.10404491375993895 \tValidation Loss: 0.18182275275548374 \t time: 00:11:11\n", + "Train Accuracy : 96.25236511230469 \tValidation Accuracy : 93.82284545898438\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:09<00:00, 2.46it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.39it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 79 \tTraining Loss: 0.10127940310245813 \tValidation Loss: 0.1773022400500506 \t time: 00:11:14\n", + "Train Accuracy : 96.43612670898438 \tValidation Accuracy : 94.2016372680664\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:06<00:00, 2.47it/s]\n", + "100%|██████████| 286/286 [01:00<00:00, 4.75it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 80 \tTraining Loss: 0.10357804772454646 \tValidation Loss: 0.19315277243751897 \t time: 00:11:06\n", + "Train Accuracy : 96.21895599365234 \tValidation Accuracy : 94.2599105834961\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:11<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.31it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 81 \tTraining Loss: 0.10030484552251853 \tValidation Loss: 0.19040795559876833 \t time: 00:11:17\n", + "Train Accuracy : 96.32475280761719 \tValidation Accuracy : 93.15267944335938\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:07<00:00, 2.46it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.37it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 82 \tTraining Loss: 0.09790428215490048 \tValidation Loss: 0.161329732964408 \t time: 00:11:12\n", + "Train Accuracy : 96.54749298095703 \tValidation Accuracy : 94.05594635009766\n", + "Validation Loss Decreased( 48.00940486823674 ---> 46.140303627820686 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:08<00:00, 2.46it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.26it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 83 \tTraining Loss: 0.09364842431968232 \tValidation Loss: 0.1806079926772346 \t time: 00:11:15\n", + "Train Accuracy : 96.60874938964844 \tValidation Accuracy : 93.12354278564453\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:10<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.58it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 84 \tTraining Loss: 0.10315570906621563 \tValidation Loss: 0.21166090780284608 \t time: 00:11:13\n", + "Train Accuracy : 96.23565673828125 \tValidation Accuracy : 92.71562194824219\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:18<00:00, 2.42it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.43it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 85 \tTraining Loss: 0.10619501250726575 \tValidation Loss: 0.2039699403058666 \t time: 00:11:22\n", + "Train Accuracy : 96.30248260498047 \tValidation Accuracy : 93.24009704589844\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:15<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.53it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 86 \tTraining Loss: 0.10173944924043836 \tValidation Loss: 0.2143698412387907 \t time: 00:11:18\n", + "Train Accuracy : 96.2579345703125 \tValidation Accuracy : 93.09440612792969\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:14<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:08<00:00, 4.17it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 87 \tTraining Loss: 0.09475720067962554 \tValidation Loss: 0.19312768667411032 \t time: 00:11:23\n", + "Train Accuracy : 96.52522277832031 \tValidation Accuracy : 93.706298828125\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:13<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.36it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 88 \tTraining Loss: 0.0937476508884171 \tValidation Loss: 0.22016905881529608 \t time: 00:11:19\n", + "Train Accuracy : 96.50851440429688 \tValidation Accuracy : 93.09440612792969\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:13<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [00:59<00:00, 4.78it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 89 \tTraining Loss: 0.09153650025377333 \tValidation Loss: 0.21557865292363038 \t time: 00:11:13\n", + "Train Accuracy : 96.72012329101562 \tValidation Accuracy : 93.5314712524414\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:11<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.60it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 90 \tTraining Loss: 0.09177952346612209 \tValidation Loss: 0.23296234081051528 \t time: 00:11:13\n", + "Train Accuracy : 96.78694152832031 \tValidation Accuracy : 93.0361328125\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:10<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.37it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 91 \tTraining Loss: 0.08767617185204449 \tValidation Loss: 0.20201801803570332 \t time: 00:11:15\n", + "Train Accuracy : 96.87603759765625 \tValidation Accuracy : 93.0361328125\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:10<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.36it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 92 \tTraining Loss: 0.09118074719615739 \tValidation Loss: 0.2518969925864961 \t time: 00:11:15\n", + "Train Accuracy : 96.66443634033203 \tValidation Accuracy : 91.84149169921875\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:10<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.49it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 93 \tTraining Loss: 0.0934940773506567 \tValidation Loss: 0.20770283206752696 \t time: 00:11:14\n", + "Train Accuracy : 96.56977081298828 \tValidation Accuracy : 93.26923370361328\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:07<00:00, 2.46it/s]\n", + "100%|██████████| 286/286 [01:01<00:00, 4.62it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 94 \tTraining Loss: 0.08378215233652878 \tValidation Loss: 0.2195557528395473 \t time: 00:11:09\n", + "Train Accuracy : 97.10435485839844 \tValidation Accuracy : 93.64801788330078\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:10<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:08<00:00, 4.15it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 95 \tTraining Loss: 0.08626696844556661 \tValidation Loss: 0.19878985075316907 \t time: 00:11:19\n", + "Train Accuracy : 96.98741149902344 \tValidation Accuracy : 93.5897445678711\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:12<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.23it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 96 \tTraining Loss: 0.07630516203438335 \tValidation Loss: 0.22536614060933519 \t time: 00:11:20\n", + "Train Accuracy : 97.2212905883789 \tValidation Accuracy : 93.24009704589844\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:10<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:01<00:00, 4.66it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 97 \tTraining Loss: 0.08121319106953721 \tValidation Loss: 0.19445914231837888 \t time: 00:11:11\n", + "Train Accuracy : 97.09321594238281 \tValidation Accuracy : 93.4149169921875\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:13<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:00<00:00, 4.71it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 98 \tTraining Loss: 0.07288453491202773 \tValidation Loss: 0.27327212523161215 \t time: 00:11:14\n", + "Train Accuracy : 97.43846130371094 \tValidation Accuracy : 92.365966796875\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:03<00:00, 2.48it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.33it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 99 \tTraining Loss: 0.08167959343807132 \tValidation Loss: 0.22818992230595478 \t time: 00:11:10\n", + "Train Accuracy : 96.93172454833984 \tValidation Accuracy : 93.32750701904297\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:02<00:00, 2.48it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 100 \tTraining Loss: 0.07379477550745815 \tValidation Loss: 0.21039123502321838 \t time: 00:11:05\n", + "Train Accuracy : 97.3382339477539 \tValidation Accuracy : 93.26923370361328\n", + "total time : 18:56:01\n" + ] + } + ], + "source": [ + "loss_train_list = []\n", + "loss_valid_list = []\n", + "acc_train_list = []\n", + "acc_valid_list = []\n", + "epochs = 100\n", + "total_time = time.time()\n", + "for e in range(epochs):\n", + " start_time=time.time()\n", + " train_loss = 0.0\n", + " right_train = 0\n", + " total_train = 0\n", + " for data, labels in tqdm(trainloader):\n", + " # Transfer Data to GPU if available\n", + " if torch.cuda.is_available():\n", + " data, labels = data.cuda(), labels.cuda()\n", + " \n", + " # Clear the gradients\n", + " optimizer.zero_grad()\n", + " # Forward Pass\n", + " target = net(data)\n", + " _, predicted = torch.max(target, 1)\n", + " # Find the Loss\n", + " loss = criterion(target,labels)\n", + " # Calculate gradients\n", + " loss.backward()\n", + " # Update Weights\n", + " optimizer.step()\n", + " # Calculate Loss\n", + " train_loss += loss.item()\n", + " correct = (predicted == labels).float().sum()\n", + " right_train+=correct.float()\n", + " total_train+=len(predicted)\n", + " \n", + " valid_loss = 0.0\n", + " right_valid = 0\n", + " total_valid = 0\n", + " net.eval() # Optional when not using Model Specific layer\n", + " for data, labels in tqdm(validloader):\n", + " # Transfer Data to GPU if available\n", + " if torch.cuda.is_available():\n", + " data, labels = data.cuda(), labels.cuda()\n", + " \n", + " # Forward Pass\n", + " target = net(data)\n", + " _, predicted = torch.max(target, 1)\n", + " # Find the Loss\n", + " loss = criterion(target,labels)\n", + " # Calculate Loss\n", + " valid_loss += loss.item()\n", + " correct = (predicted == labels).float().sum()\n", + " right_valid+=correct.float()\n", + " total_valid+=len(predicted)\n", + " ftloss = train_loss / len(trainloader)\n", + " fvloss = valid_loss / len(validloader)\n", + " ftacc = float(right_train*100/total_train)\n", + " fvacc = float(right_valid*100/total_valid)\n", + " loss_train_list.append(ftloss)\n", + " loss_valid_list.append(fvloss)\n", + " acc_train_list.append(ftacc)\n", + " acc_valid_list.append(fvacc)\n", + " print('Epoch',e+1, '\\tTraining Loss:',ftloss,'\\tValidation Loss:',fvloss,\"\\t time:\",convert(time.time()-start_time))\n", + " print(\"Train Accuracy :\",ftacc,\"\\tValidation Accuracy :\",fvacc)\n", + " if min_valid_loss > valid_loss:\n", + " print(\"Validation Loss Decreased(\",min_valid_loss,\"--->\",valid_loss,\") \\t Saving The Model\")\n", + " min_valid_loss = valid_loss\n", + " \n", + " # Saving State Dict\n", + " torch.save(net.state_dict(), '/home/user/research/resnet18/resent_model.pth')\n", + "print(\"total time : \",convert(time.time()-total_time))\n", + "playsound('/home/user/research/audio')" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "16de198f", + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(net.state_dict(), '/home/user/research/resnet18/resent_model_100_e.pth')" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "166cc6e2", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "y_v = min(loss_valid_list)\n", + "x_v = loss_valid_list.index(y_v)+1\n", + "plt.plot(loss_train_list)\n", + "plt.plot(loss_valid_list)\n", + "plt.annotate(\"min validation loss\",(x_v,y_v))\n", + "plt.title('Training and Validation Loss during Model Training')\n", + "plt.ylabel('loss')\n", + "plt.xlabel('epoch')\n", + "plt.legend(['train', 'valid','minimum'], loc='upper left')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "76657782", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "y_a = max(acc_valid_list)\n", + "x_a = acc_valid_list.index(y_a)+1\n", + "plt.plot(acc_train_list)\n", + "plt.plot(acc_valid_list)\n", + "plt.annotate(\"max validation accuracy\",(x_a,y_a))\n", + "plt.title('Training and Validation Loss during Model Training')\n", + "plt.ylabel('loss')\n", + "plt.xlabel('epoch')\n", + "plt.legend(['train', 'valid'], loc='upper left')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "4c24a522", + "metadata": {}, + "outputs": [], + "source": [ + "f1 = open(\"/home/user/research/resnet18/loss_train.txt\",\"w\")\n", + "f2 = open(\"/home/user/research/resnet18/loss_valid.txt\",\"w\")\n", + "f3 = open(\"/home/user/research/resnet18/acc_train.txt\",\"w\")\n", + "f4 = open(\"/home/user/research/resnet18/acc_valid.txt\",\"w\")\n", + "for i in range(len(loss_train_list)):\n", + " f1.write(str(loss_train_list[i]))\n", + " f1.write(\",\")\n", + " f2.write(str(loss_valid_list[i]))\n", + " f2.write(\",\")\n", + " f3.write(str(acc_train_list[i]))\n", + " f3.write(\",\")\n", + " f4.write(str(acc_valid_list[i]))\n", + " f4.write(\",\")\n", + "f1.close()\n", + "f2.close()\n", + "f3.close()\n", + "f4.close()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} -- GitLab