From af4101440f83a7edc9dcf73d3c6f3323297086ef Mon Sep 17 00:00:00 2001 From: woodRock Date: Mon, 30 Sep 2024 19:55:28 +1300 Subject: [PATCH] Random sampling and optimization for GP --- code/gp/checkpoints/embedded-gp.pth | Bin 150612 -> 137023 bytes code/gp/data.py | 4 +- code/gp/figures/tree-0.pdf | Bin 14669 -> 11234 bytes code/gp/figures/tree-1.pdf | Bin 11103 -> 14938 bytes code/gp/figures/tsne.png | Bin 32842 -> 93143 bytes code/gp/grid.sh | 2 +- .../logs/instance-recognition/tmp/run_1.log | 132 +-- .../logs/instance-recognition/tmp/run_2.log | 131 +-- .../logs/instance-recognition/tmp/run_3.log | 122 +- .../logs/instance-recognition/tmp/run_4.log | 115 -- code/gp/logs/results_0.log | 120 +- code/gp/util.py | 150 +-- code/transformer/figures/model_accuracy.png | Bin 30224 -> 50189 bytes .../figures/train_confusion_matrix.png | Bin 15490 -> 16772 bytes .../logs/instance-recognition/tmp/run_1.log | 758 +++++++++++- .../logs/instance-recognition/tmp/run_10.log | 158 ++- .../logs/instance-recognition/tmp/run_11.log | 102 -- .../logs/instance-recognition/tmp/run_12.log | 95 -- .../logs/instance-recognition/tmp/run_13.log | 104 -- .../logs/instance-recognition/tmp/run_14.log | 107 -- .../logs/instance-recognition/tmp/run_15.log | 96 -- .../logs/instance-recognition/tmp/run_16.log | 103 -- .../logs/instance-recognition/tmp/run_17.log | 101 -- .../logs/instance-recognition/tmp/run_18.log | 92 -- .../logs/instance-recognition/tmp/run_19.log | 1039 ++++++++++++++++- .../logs/instance-recognition/tmp/run_2.log | 262 ++++- .../logs/instance-recognition/tmp/run_20.log | 42 - .../logs/instance-recognition/tmp/run_3.log | 227 +++- .../logs/instance-recognition/tmp/run_4.log | 254 +++- .../logs/instance-recognition/tmp/run_5.log | 245 +++- .../logs/instance-recognition/tmp/run_6.log | 299 ++++- .../logs/instance-recognition/tmp/run_7.log | 284 ++++- .../logs/instance-recognition/tmp/run_8.log | 244 +++- .../logs/instance-recognition/tmp/run_9.log | 238 +++- code/transformer/logs/results_0.log | 1 - code/transformer/run.sh | 6 +- code/transformer/util.py | 4 +- 37 files changed, 3700 insertions(+), 1937 deletions(-) diff --git a/code/gp/checkpoints/embedded-gp.pth b/code/gp/checkpoints/embedded-gp.pth index 2c7ee3e994a6fdb03c6f5a493eff534e4869321c..7d47965e74abf65512ad690e86a23f658c43d1ed 100644 GIT binary patch literal 137023 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

nqfpn9=~i!O-M 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 Kzl+pc>;C{`z)wv8 literal 150612 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 Mk(ydUNfPn@0Dq|ZlmGw# diff --git a/code/gp/figures/tree-1.pdf b/code/gp/figures/tree-1.pdf index 69288454d82b4129e50425bc509eaea9b0b4bead..a03067ac73e47fcf375344351ccab6e41859be5b 100644 GIT binary patch delta 13609 zcmZ{JV{9&5&~0toIPIzN)HY9T+qU)8wr#sTwQbw&scrMV-_7^yCO0#a?7fmbldQ?g zB(rzbHeBLmfGKJ6Q92w5eK+42{4)wG4TnFY7*Zs2B8%-I1QWp!VA7UO76N|1*Hig2 zY@X>2SyI2qFTQf=qz(AKyg}X>hpp=3j)@OUueb3(&Kd0mfGh?-CGD+`FT-6w2Hg+O zMWFV;*7&{@ESt(_#Sk5xC<9Vfb)Wj*+I>{CtX*2S!0F`$4GU9cfHJx9Dp&0C+mZ^U zSF_k))ph@a@k_0t+iLCe?46vxz@|PURN=#parD8qDg*>}LDQBElF3LK-1EJKp0C#} za#KjR4|CbiOd8{H>trDWs4i`YAD^;9g)0IIL6b?q=?V?Q-K~|gOF;k(Q^#eJVh%%8 ze-+#*5OP=rT*aBStJW7}+R2FOih-z9hzAh|WdWUaCr>YrDQ_o-DR<|#Ji8!w0e7Mz zS3qZHCou5xSGV3Dq##iQkFJ|w+%&Ro$|-;<;CyVCz4`mXqiLmWE)jB{if-hq^Kn_& z2TZX&5S(3QRY|d)sZ*yYFeI2^SSgX+tL*O}jt<*9NFp5D$Bqd{Q- zq=>2ka#Bq1aRskia(NVtI>bofH9%`n)+~@r_Yw>WcO1pAs>BN>r)+s4TtJ_r2Q4I1 zyj9Tnht0?O*_exF_sBGFFCH+_1^m!`T;ML8*&lyi<+8LRw`NPb&=2nGG)O!i%CrO6 zKbcO@+-KOfoXl#*+yBjEs3$)tD9`)`+GQs=9nIh>>xnDxaQ!XsLHM6^*=J-&bZ@xQ z-Zbi;PHD7iGVOZ->oXZ3a`y+x)OQKfS7KDCEnZ1sB2(H#NRLCgVIr}a%${BM_0?0n z)mCH=jq@pCB4Zq$oO@E&ygT>xbh7%T8^>qx_YN8E`uSTfZD@N`hig`VgH+%FMn6=? z2Du$q>=`R06`viozfaWVTjXZqQRB6ZDqeiN&VhF>>@VGmDEfDrl7RZ(^2NmpExtyL zISc;9l@JOsaGMRf=2idEFugcv<5_3EzH@XumhsEM4$1ut%s0`cp`HvAE1QABEtuxa z$Vj5Yk5l(@t=T`gJ3Yojdm1=WKcPuf=apKb*NnHEsY-YGyXL2-bUSKevvQ@5TWy)0 zLtkNSznbNBMta(^G`%D@N-^qLlR`fgF&y>K7cg6z9KZ9I#Pw*LG%nCSsu=fxJK*Bj$}l zq_@m2-C@7V77szFoBU$_^$7Df^HXe}d*z)Vqh_>1{ z`EZqq(bAyykHP}$L3XR^2|_Y2*Xjfu*Dp&iU&0KWc$Lb(F&C8s?l^>pA8z8JPp0Kp z|H;E~!@BqkJO9V>gQFuk=G{U$`TbOx;%U9?a_tB31AYxEjFRLBN(jNk%*^&T7gPom z$i~hIfaB+fb9QkuHME8E$UgG+Hc%N}ex2I#e(7HC%rf~~ce%6O8Aslkh3MHolCl*a ztlk&wE*wGr@2mb06b6RkRTxaF@^vUtLrkT~2CW~msTAv?bFQvN%oG%c%0pdAB-xDw-kayPS;V;{^UME+!LYjEEhcX zDR!|6mnRRjrxmW1M^Pfu-{`muZMb-rK!M{8LRoFFc^WCH+R=b=f^Z$pIFio9?satZ zKod3u^(dJPNXV`7hC6>!cwy)@yb2x1ZbL1%5A|9;XN$^2U11D;M_HoWo$D$9sy3vC zwcM*JU~6rrHGQux>_L{FkeJky2t!ZyLl&tPo_#?OlL-jH6_Ya}lEli!=kbn`#3W)N z8Jeh4x1|Znp#(W6;MEPRl1az^FuPH^5dulszmyPCL^66|EMx*UPubr=42KG%z*t-q z_vbhy4bH{@jUs8pES>Y5W)aCiR#od;hOgQt-4WYw+u<9F-El9*TfKyh_?y+&COzFw zvz+H5;gTY{T|jU0G~>y{o6`X&&{M9dE#D@xCAE%C&PDD{ezJl(b>dj-uF$j*2hs;?=F0);+9sGBguzAG1b{=9m^PR>deF zpoQ^G$HAeX0*%~O0+HsBy>>DNJJNC|l_RW9?YtvctCXHnecK zHe)ykZ)0N=wte;`wf6jPm<5ViWQ)QL(fg{C<$1b(OPa8I${<0O04b}m1|7!rHz)Wb z;SeQiKH8e>B$*AMQwgL3HGN8dGA}YK$Ect-4{#0T2{yExB7v99Ae;t$oJ9~WfM6v^ zkkOeui259x3Mat4_$3E#Zozv7Azf*R3Vpmb?*8^u+@Ee7;!{pqOox{h)t%TiDD($|djfoWZIb!`XOZ8BbpkS;eg1-jgg+unE znyC>+IvkjlbW_dj&p%<4Yp$B98DlMeU@w}sbJu9ZwBwHGL6d@lKaVoSn@T$qw2P#F zRkq1u8J7C1R6dlQ}HowB80HhI)QxM|+(}4Kn++JM--h+eu%r z+Z?oJwD8=xTrpk#BWAvKBw`}?r{6^A*kkDt1f>5!Jh?$Ad+o*H|0m$+XZsrY!~J1x zE@@ldfS!hKoR*YtQ?^(jx45=!CXu>b{Y$EoW-;Axc59FI7VO4_lUJO7a1Bl`grm6R z_t*t6F@ci>#<8REg>)&h6VMOqBe_uF0iI;ZUZrA{LKg5tU4iI;yq-pZi(YI{kHxDP z=tENitE8p7@y1GF+go3m#eFPZb)|GrKRkl`kk-n+y^f7{R$7{szBxd=yFztiWH))2 z4|zA3PWR@Y_rfZVjol8joJyUYsA$FR)$iQy80uXUdG_t)8{NZIhM_} zQh4|J@{1qSHrw@VE81e_Mc^Id=QC%+pSJMv4IwqqdmVC@*W(0X=EV46yC6hEzAJ5~ ztc5htmhPmqfIuZ$KM`${cg>~q2lFlkz%tw^AVXJM{aK}{#J{#de zb}ZU(VzAMl>U>Q+}NGB3V|dRARl1T*?Fp98t{f6NpC$;aXou0-Hqi(=|=JYUDRfyWT)M z9P}$J(YD}i4SM!|8@RrVuGoa0GEs~($UGpnwpvS3(5WqDYIJsoT zwR?5T2n%~NyzRe2RfyH>hcR(Sq>YtT#BcNSG!5GH(0F5lOr3~HB;y^S?(hK`GARX* za)KUt3yVoUV!?!n;XuBnU#hg&4PV*Dzz9Ci^E(80P?ZufkY$SaT8Jm#s%h~8!{f00 zDMhKxg98!U=C4NJ<`0l@`Y|yv19C7FXN~EQUd0^#gqS&-g$n zxF)8iMthXo`Io2Wbfz({qhAUn19ZduJS}Z@67l%c%WhjU=w)3i^nOa+)R;z%Q3T$N zy)&qfo#3BnO;(qd+?TD`{&|(K>nPHba66#1Kf9C-Gxl=27rC~)f{wY z!mS(^fg{sQ5h&ADv6#%-K%pGy^ZPDSBZnCOlR@B4o?3H@9$(P-<55~)9B*^uOq@Sz zB5cyIgpBEX5x&0EAs-qTWDI8@6cv)6sQ%^z)*jFWQZ)D0&HrDY5V3T+6mge=6Z9a4 z;4N24Tm?}_wDh%bN@kF(L=+~9CbubwCt}(Nu?Wke{4{6-?7Yx*3mQg@dVMncxT%?A z;6kV%K7SAI!AV8IO=~v7c_U%DKab=^>ujvJ{ha8s@zCmEvP1xPymZ~fM>DR-IC`Gu zwo1TXy185rG9Ay(+(Nb4m^1M%jc@Pr zYSPWer!k@qHJr5W>HZ>r24V4eLo|%D1f4zK5%9?bDb!a2Mh`0}N&f5>-z@e9=u?*6 zQag#)HIr5kOELn_a0eP}z;p8?|au%C1P_~}=)T(=bO zVU5N{6OkHtX&YQ^h$kBuSb4CjDObR%0pzFtMU?IE((s;5WtbS zz%s2_iNI%=4&f##-k(DXsNQQ?CyZVgaO%4v#DH*rSNvpa1e~EkbiN{ofA(L6QgcR* zlJVraluHBMEMY%GiW5ZXB4klOv(R5J26@k%jX7*ZmEh5KM}vrO35H+(IX7-{Z*t}k zi84iQoMI@dL-JSpq~qNH*u{_5lv21;4+WL^ZBblV6WuU7N1E2wCz{QiWA-HL7ivuY zmUsFCpm?SJ++liym!aN51ODE1Bpe}Xbe}wXwoU_2*V-&)do18ZtxD@Ib~_J3u>q5^ z-tP_uH#rfiVVz*c=9t`pU7c;c52d@wAt^(GEQQm6lkF`h6EQ!S9F9K{_y9HR_Q-oM z>qvIbjwam>2JN&jEd8|J&Qt11{!PE#{A;ewhi~Hmb=EoyU=;^#0u=4zP$^RSlO}uK zP8v`x$bDb?skMwR#9%h%AD&83*&*G~E<7ETR)pFQfr-+ENi3{; zdHJ?PsRK3{S1<-J09=T7d~E-PaX-UPd=j*Z%Y!ab_V3P^2UiL;v21+QoYBxQNuV>~ z>i|z^igf7$Q}3&MB1NV{q_4_HxI_Jh!@Y$I*QLq-%t#JJges&+SFUmi4gltSAS>kk z%2-%HNNgzXo3lJ+dc@TTV!NQa+y7fsg&W-u#W%S~*TW0Ng?}meID9Mi3CSmCp|z5J zP0MUnyx(~z%HMo;=R+j#S~iLm9bf8b7PDafAZwuS`2-@y5beKBD3jZ#ve%jILJ* zQH9m<)VK}$jbos7gV#h7i}#c-6!-6r{Ct;W@oxbyb)2N9tf#N1`TZKN^@Mo;(Wz!yfq-%P#v z&jlr9zU<{=$q3%b zJ{8Mw-KB1b8}9gf^I4!}V)G%0(4Kztb0zjTZz~8jqFV2k~X2o<6`e@vIAs46+Ud0}}2}KQ#?sio_VQ5>I}&?Yo1q_hw1U z$Y0y5r2@zx2hQgH6$@(tYcN_I4m$!OO5#7PIDvcKLSN3|t)f?tCBk0G2cCGa$cVR! z0TdTLE=vV$d+Z1a31P_?MalR@P=espam+`5N%V|L-{pYY?_-oW0uq|K z?5?K!U&n*T>bDo?2kSSLn5A)S9*rFvyo?WSUCQ0tx3#)wiEz>y*v-Lu*x#PV7wo^< zZ!s`$L?(cAc~aI!73~nR8~0jR(scZP90@mvS{nImvQ_Kz&QCir|E$8pE1XqV|B*FB zDMcxz)j*%kP(`oHV(QgD$zHfIDx1pI|M|7>JB&maA50o2u-&G-8VI_cE)2uKoIc?E z$@Sr0iGs^IW**t~Cgs>No_0*hAEtkx{2CLA0GbP2qA>W2Cx!JpdEu$c{|X^r#x~Wz znjpVwC%CU5aFg^M4r-Icue>@f`eKZGm}0uLNwyU6*frG^N!57JqOHK~cBGt;1UK18t9d9^2t z-T4f>@_0V3v#+Mw?R;xaKz{dgGc-rvE{aMrAGbHy9syWUs}nYchL0yRS{4-$*e)f` z=V#sQ4&FRF;gwKGByFlJX)UQ112BHqlh_7@cq{*yZ8+XI?%EH#cin{Y8wsEZ+~>ku z${rPr%)Jb13wPc!G)A3G6gx_#8GC!E_YeWuG3EhQIRgc--N&A~DqJ|uq2q=#Eyo)o z$Q8s3m#Ej6H&0fwLcVeqR^=@ghV!9Yhy^?gxfsY;z5_mob4QgUobypb5xShedJABX z^06P#*C=ow=;SV<+{&g+2fJkJQSmXg^jVb)MosP`z38oB#)6&q)fN57?GeaddU$~) zS7ueq!h|BBT>Fn1O^5X8BcQTP7AENl{GX4iyldnQXg|lp^IE z{#jr(0kt4x5O84R4jAy|DDYp@Q4q%2{9AsY%q1f&(lIGd;D0#mY{JD2QlJxYB3+8| zAi2`p8ZkKzG`6Dg!X zE|;(^PvJ*N$15X_!D-2ZxGN8GO7B_UrPyLhub<0hsuk^jy^RZcsmP!bqTE`ON_$n( zD_7Ek4?!iub^ydg0wZ>u^_X!4r%_Bj_#TVO5VO-{yiO&Mxk0ds5Pse>?|1dI*!}I< zBEMB+B=ptwo>TW|#EcU>AB%yHP)ekRH2vg!c0V!j6f>AQ@Hd_h!>)hTJ6Zld+O-4H7{Gx{FdU}av?g|iI65@W0buVZ10{UwW2vdOar z0h;+$y?SyKn+&WYB-8f6dv|occ|-@K=cT~38TN?)&7#>;21op;XcQ&9KP!@W-_=O^ zIP=>f0(lWX{6^_qg=Ii<2nfh2)bMUr$v8jSqx2_~J@t#<;AFTCxk%$KY(id5e|R*RJJQgDX&eH>n*tkZ9O{`+54ZT$lVgIxNku57Bmt=n z?gD8NKH)sUUu*h&R&hOjT zlaj}@g+Cq5;o>cMIx}-KrHQsyqW&}YPX71=c8tV!$&1%ZXPLx~?`%+N{~V+2>NZcz zFbT3-{18pdQP~kZGeM>7Z1W+lm)_vUc68n^u`s$m7scBEU&ud+<60I)HJ1qBUS5d$0s;1jWC(~LVLFbR* zc7Qnwn>?P@i@8UaOII&7)j7T1H|c{M!>#<9m}5v4ZB8L>H|HCfj_X{Qa??+(%M2Gj zUBh!|DH@c@zXCx?zqwXG*ZQk$Xr3pa-=Kqq&Zj@luH9LKXf%! zQPtBwhl30nR}ob3&Znf03|jsh^LZrg<3enw;5LD7m83^ZMHcr2dw4G9_b?Wg3cuf( zOoprO=r98AP0$8}PCc<9b~LFd-`wsomi)qj-@)DEeyq4s#H3_!eYvlo%mpc@F^6I} z71+)BUmh&{VO#MUR|Zk**M~GNh}^+`LDu=Kgtmur703n44y(qT@W{XADFws@44JgR z=(hu}gHe(5NfT#PoP6u^K2Nn=2(6&bWKVUoV@Cl>%<g=CTjV>?Hou6UiJZWO<$PBQ^z*<30niuzpx8Yo4}|ewngDH0 zD(q>{b%rM7cVbaWM?||mk=L>*{#t`#-i(AP89xMXPUPi581H%cf;jj#5SM)Dk-=)y zoJ+0R+XXd`f#FkB7ql<5kvq_-5A0JQZ8r33*rC}%Ms}JH^Bbk8dkuVy2+N#L6I6`^ zM4WlwZ$QSX6$I3BBfeVs#A+rzlGf!&t{Sadg5ley3)k3kBQ0$8p49(9a{e;H0# z9eD3wgqwjE5tAEcPDrd^>nC%$bhR56AH!f>{%^5m*nrxT& z&9sri6Th%W81w)xAB9HTxZe+$8pu`?c-K6z9Lru*Q;xrl`0RvyE&{#Rt}k3yw41+M zByR|b;x?GBE_lP?zr2k^+Q0ou`ibyO9ZHS`4DT(*zUxa7k@~|`L5@Do?8KwfNowR3 z<}<*VE+#{{2)U|v40vFO(nytc3UQDwpXdZGIh+NdvKryP z?Tmeq2@t+pF@b6`8b>LRF>+X}JoZ{6R#)qUlE^FqnBCH8|O4!!X7!KmHc zTYM$^H2=f}C8I#l_!|d=kPH_6_lI_zTuIt&pgFoapem&)>8W1$W1NIbc*k%7ml)kF zGlTt@^mue?a;h$)PIDl14F=!%q;Yahdma6fab5Y6BRi_{w7FWJ90eoIOIK3R)l$y zGiTTrs9$ciAx(tvb5*Yq%er>E{9gJ8Jq?-mEsAGIdrCXo+b^1f=l#Vky?bf$dUHu` zZp2P6`~pUKppY6cp0GTZ{o=N8uS@>mOFpOVxcSby`No>I{l!ZNV_4h%WBf(L8WoI7Cc^M^w(WN2YT@s z1#gJ$BF-V;7u@nb9SlWqLbt)uP0_`_sW-Amdl4p_U7trP{6Izcy^PJhSP5|oGT2(4 zxvcbjdcg5r{p`is_@3vDd~GnL4ygGOD<`_X1Z^U6zLZ91#<+G8&)mRa(Kw_9uIRRW z;E!$|fnbRR{;J@ylTZte&*jA{XSPJ|AWxsYy!Z_;K;YgG{+&ffAQUy`B(}irxpj|c zGKnXtS11EOOq5=L#VIyhh(D)qxI@7rQf_g`y^xnZ)-(X?iZ?BJE#FZOMK50qHTwa! zQFhq(;zCN)ou&2K3Y^Tis^6?mrE?bV zi1-G|iPSAxEzy(&8si2kmTP6Nkq>>zI<7FvV}-nKsusrgJ(w?vyw%b)2!$h09-TS0OE6p%T)GV+ z3OAd2rl5?<3cLF3zaMQc%c{=l^r|USt1$rQgGI{qi$V&qr0(b%nu*P0Mx6poRMVc& zix&p-_t_gNx$Q8kPGR<=>pDCgyX?e$T~oHN>|nz7+nf^C&?NSQ+eoRZ@}=6d+6tL# zlRHt>=E{V4g1_e!US=TTv@!!bhWGc6A)g#e+XJ2r5rlhH@2X|Z>37u%9F7r|RV$JMakk@P$5)N@qs<1lDSEH^y+I4L#YMma< z^RF}Tp=%Niy0y@do*qV)nx4yW#o>Y6U+(bIwPS~g)pF8oEOk?~rDSMj{#-*LVqnq5 zdco#+67z|U<=*q03PJMVp`H6thJ0#6%PF$kKDf7@Ucl^!yTZ9I$iOG;FoEvOMcxU; z*H=aqdL`O+BMXvVoml9gyDnZUk_jmdMVteVc0Dwt8u|FPwF!7ZgLehODO;ekh$aNZ z?p5hzCmCr0R{2n;*;3g#m{kKZ2{oEccoGE-ZU^0Xw#aYYwBPD>_GtaFc}ag0r`jff zN3(rdi&bf9!wqjh6vjW})@BiGEXS+x%iFR=&e|*=m0D8#*O4|&!OCFix11M28JWKV z&!)5W<#BIE-zXxNX)`GX)q;RbBa5^bxIC7UDd9N@SzsT!4ke~q6|3_t8hOGkKf|yk za0nX528Kr2_Ls8t z<|M|C)~TiPa3g5)A-8MQA!p|V7#HTHGSDUv8w&X%O~G04B^LLB2*Iiho2K+`%(r|x zkSRP{Yw+w)_g}>xyeYs~>sXPAPx9hnq+kR{5FS!7`w)g*2`a+I_bGPV=AA7 zw|HLg{w8>wGUzEc&HMhoVA!IN1;>g31HHCemypmmkS|1k05K3y_Rk>s25)MdkypO} z8p_O094cH{r#$YBFA^MuoaqM9>no(2k;y*b^S`xAIP9ry9r9^R$lPAl)I+>w8%ZiZ zD-9QGx*44)CLzER2N9GX)&Xjd7bI#0@S#ZA$KW3XLdOi^1}X|-MIFY~N8s;x9rS_d zPX=QBA6Rd}4t!v}Raczi9j^`^+#bFRKIBF}MLO2Y;73}5dX(r3!wC1pI8T0#U3md1 zxet?gLl)XbcL2z#J`mrg zku8{qboio;nQDSD$AAQS{Aj6=qfrv9(Yeb7A#1mPwf5Flh-{+ymPJc~u4!Wnzk{p@ zj~H-)O{Qg37B!WU##jYeATSdkmylFY3!Cfw_CvGnBw zrD^HHD$rTGAu=*J!-Ax%&4AER_6qG~U8_)a_;ax4;#y^AYm%DHVE_ZgKr&17lyGQ~ zzBtun`2Awwe)N7cA14z6HNyOUnGA>hs1ml zx$K6TZCdKT=D-#~TFZ;3Z0U#(8as2X(^AMO@FuWFkb1x^!dw%^w6P zx#*t-!}5n4#&o~^r)~HwDQLZReTH_3*;OGC&L{Iq#EkhRI|Ul3s#VHa(0qC z%@nOWO(!`MT%?^dH|oR5QJx{y=m;|;5juX{M2m{yk$y_EEl!uL_O51J^KV=YrnPS~ zSM$f3Q^S^eu5wRYOgO4OIb~y4hE8tnM zK3}1fh`1ySs=8&MAvDr@T*xCk#NQiK4jeEBvIdC)N(HR}-j@)>{Gz$X55HxuNZ%(6 zf^_Yb+JVzotB8B_GQq4>=;V}=9S{aI%dakPF~V!x4gu)~L1_9y7|Tm&RxSYsF$*BQ zMo-ldF5e`*sZ2sTyz!qyoJ?NZ@!Jf(l@l0{3etjv$pIebEI}*?>*4b;_eek{r^2j> zSmJo$S6L2mDag-8O*-P&5h$a^%lBzL3c3L=q+gZWjXX z7eCi4KXWzq&KGsAiys8_VNc{DBU+K9^Q9h@(O-!xB|q)b0<$H=7YpjAcX|ljMX=0n z6Kirz-DWDZ`|7I01n}VT@+G`<%nES^AG$7*>0@lb$(x8mI13rPyByM#Vke_U+ zaqOQ*{x8*4ztHvjlr^+|e3HKjjkcV27zDD=H!wSC14iy!@ zBuFz#ny}>)-UJA`ZxR9&;2%58Nt#f-d~re!^@wp`av-m}!3(YguW?~&pc<|FB%s@z zNK#KK0sE$7(&g8`4#|KnaXyvYhc$$Q!Xf%(8<}p0{3y2^Cg?TW~d0xeqz6Uu164{G9J#_)yOs->+c2 zyE^6Hpz^q!d+$f6+`8bk=mikZgl=ELyvJU{S$)pXIwA$Za1cPo5Htv4r>8;kQK7WG z!P=k#(^_*e%?^18YC2bYy2}l+8F#+Jpm%?3>r+T>1Q&4LI~^2`;E~SKVWc*ScQl+K zB?Rsy)>`I;{QHuuA)`N|Nnr>xJ1> z*#%wVn#BmTkfy+vg@P%C43#b#*%D<-6`B;`;mUBh3g$z7@I@SEk^ad#YRyQ^_9^tp zKQu$+8e#@FLyH-BN-Wl3u~}9M)0eP!4gHzH%v>z|3>xU_%f59z#0Q=D`B;?h6o5=! zWGE@k)=kSmF9<_|_AdsWk}Uh)sshl}p)jn1Of1sxBRZf55+cM#HfMj})WszIQR&^t z=}_g5f2R1Idk;yg&Xa5VZyrD3boKk|;yU7;u$H75$I=kx{L(XwC7E?)RcySP6yAB< zo@{ZA7sb(mtSX}VQhZobAYP=R@G?|FSS2YkQSx%>xRpU^?s=tO9A(KPbFOeopO0Q@ zN@~f*y)Y1aPL1$)zIgT+ZR^o*xk{+#c&n+~?GYCk{KF9hZgP&}e5o&f;__f0l@eez zGRC{FvFTla{cs^8TQ<~T(#PFDsCMG$-sSN>Xa1Pc=O~z`pK-myue*M!GOzkn2mQw{ z*o=jYIGID|zd>a02rtsK_jTz5=Xzhi<~fkROH+Yjlhn3)Xh3}(B}{!fHQ2A|sP7;T zR7{R2)h`Rhr_1+mv4zCS0JDmAEt^^^9G}9!jmMQeE&69wjSm8>D}V5-ihcPMABcz8 zR6ZfDszRStMLxWQy@ao;%#I;+l+}0Zgwapy6iv7#oAB0BdAy{^~^>zqW+vqtq z;~If5vGnvNFWip8I>>@z{~{eAG5fEJ3t8XcELBX}-|$+$sQjE%hQK$e5i|Fzmjw;aHa8m&A~QdSN69DeGUmpAPm>c!weC9^il zY0z!hS?kAXwbKQ!mu2*n^B5DJ#gi{HPb&kiI?om52SPrDm1xwR*b|u%YM|@E=bh8E z&$%pkkmQm{hgH{BQ<*2iKLmm|0z!fye}^2P31+30o>sq6Yx(L%j?lo-3ql)A zM6qH*!Spe4!@VN}qr|*p137Hz^<+vYrX~ z^^5CZyR#XplJK)o+69&yC-0f*5Hu*ry7nASb=Kak>lxRwe)ms55O*7@-9mfLV(i-V zwr(&w{`XzOqKkd&mt8KbJ2!m=iSM{;l>NvBl7EPIi zed^I*-JvJq&B-K>j>$^CnosN)53ZqKo3dfKE$IVcnGFI@UrQ%bJ3HOgW4A{CKhfP_ zPyIJ!{$r5{oCUy?#7w~nrKzAQttR}}fr1$Hf6qw{6gWvWl(^tb%z&gZN-YEc2^%{L z0~b3hCo5|bB^41a8{j|a{|Uf&K7QjsKiP|?u+-`oEn{~u#zWntiCcTZA{;J)(wLD(4s^V!7x9oTEcsefK=7L%$|R^Hj&vXl8Hr&dk|;q)`T)$YbX@vwf1}h0 c1O$-B9oW1i4q8HZR(4Jm46n`Maa-pk#OAI&jyrf9 zZ$XJu>Z73aoP($=%}EF=nGf+=9As!V6Xi*nWE1aa6&Y!k&lss zrZDgP3_oc(g6s-qZe(+Ga%Ev{3T19&Z(?c+H6Sn`Z(?c+ARr(!FgUX`1xx{dGBGqX z3O+sxb98cLVQmU{ob7shd{ou7@Y?&FGmj*bIhnjBnPkqHIho00W|EL62_u<2O-LZ& zAtcn82d{w81Of;MCa4GoEYu>RR*1Dc6fBd8=zvyItG2!hwrbT{!7H|EjiriKE6Loo z&jghF_1@q2{eJh)@9eC#_Fij$?dMv1?Y)x#0e}eT2M*)~D>{1Kx%l910LF^|bpC?1 ztK~1Izq1*@)C8b?ZgJ0&6~$`~0Z`)wkfX5dUeU3Cu1B*%#J1$g zSeAQME$aFGVi%4@ZpQY_K-pjgOgLICOdq1;Df$d(Kub>rK;VP)na4SZ(6Y>N0!ccJ za0=xVIFbo^awE9`%r5aO@0fRnc+oq3%nN0h7cU{2lxvHz#W)ZV;Ng2x@GZzZ z8##g5q@Om^MC`ZBCsUz+KXqYIpFjwT3xZWc-w3$jD1TJ?*+B(3pgE(&;uu;W}Eh^lk*!9VH^x*#VoKo4(M#k@mupfkw33yr zv5x$hxP*kncw6CAS{PH1?sO`4?FBN;7VEu!oVHI+h|oHc9Tog<9{P6cs>xRBaM09A z8|b^cvt+Bp=J;cO+Qjt;KZ05CiSMrXIa`cBC^`{+DtWl($yuk9e_iul^6NFaVqr@3 zWMgUa6lY;^QBD3VU0kYY7rk-iaTRfuZi~D68p}1+Gb}Tz+bnI>>&?9>y_M^0x0&xq z*;09D?OyYqlzS@o);?-Jm~x=58o6nQDa0O>_} ze1waa%Ca}wy+QJ%PcaoVZqx$oHM|jDAia^kx9E+sGPxnQ;dH~92EJj->}4C6DbbQ+ zV`CS`MxpHD#WC-B5@Sj%!38UspqH}~tL7rkbZ22fQGQ-Re4IvGR9tj9tI;MTCa|1h zN0oFesCiX?yQrASnFI^PEHRadb`r>EyxBe}P0B9R6uYY`>^4uu?bGuM>ettMtk$}z znb*+xv|NkB8lN2{OmWval2h!tnVFXMsZ)yTZ%*}ithQ-ClJF9MztE6(RE2B6yK09}7eqMTi?yLkcJ0+>u6cuMkvKW)&Z8;WC zRv(545OF{Hg&QFSBy!Ye(M21L1~I~_mzr#vcw?-X9FuIZq?l7RwqR%^;3#BdIJdb# zrLJt11~S8J*%@XhTf^)`l^uvziSJ%9w!mPF#KudE(~LD@owd={Vw@*l7uRfEW?Uk6 zS=Wkx{ruMG0pnJ2tLaYbHt7N51LA!#4_HqaPl&%vK4E>?_>%bB)R(M(GQK7L&G?b{ zk@Xwn*Wx#+-&oyxW4(n+Rzf5zg;c9GMIRku(I=!NS`u_rYthBW#989kS&gDBT2oT& zF=AXyPYj6>jnUCT`l2s}TH`3SN~s3`dPqNip%?;=`=WHBk&91A(CPHLlpy(+PjAFJ z^gy&PCP;IK8?D3|q@VhtWnXkt^o3|H`jC9%fa+&S$z!df=45eHY(-zg$RXm+#GQ)% z=iM5e?GiSL&uwju&NjQY3Y(sDnL!*S;>iDrw~Cvd^J=~LgP{i<^72PkwGx|F6CbC4 zZfWLYB%g%$cTrJcL3$+R9vS=Mdi#{l@$0Tj%AZR9tdO@#T4#@aJhLR@hkyB$yzpjY zx|E}JIE?1ppYYdzyLa16!QtSuZSFQ=plM_8GT*@XByz&nwS+ zxVp4M9%_~nvlpjvdZKqY9oIrL>89O(X*ZLbX|L2PueGmp43MqzUe6J7#POu_X-_CE zUL)U5cBI{&et+5l@^gAH?U?73=dIkodqN(A31eU~HDx5{CQmBOF3nw>wlpUqOGi^u zNW5e*+U(%Suz*goMB9`E$&zAIeAMkoOS4mgmLq9LsZ6z5nFq9@wn^Kr<#uU*2eniS zmZK>JLGojtF)t%EHHD(NG3M(`s$VvT{nFN02)1K3+GrcJQQL8`i1>86LBR}Ok&v!$HkId(O3d%Jr}rINUP08 z)L<18mza>BkA9M$S6rl?1d38<%Tt4ymbnngOUTbdA7TfD&^5kiyf9yXHdw_JXG7uG zQ~7fp@hR!k^T}s#y}I+^BgEW3(0%Ee*cAP<&+osjbOGH!2^nA8FS#9#$@AP(Q02)-tpCZ#85P|++VQMt%h)Lyhs z*JJKUT9>uUyer9X_9sPudUDoAZjI#3McK(sXrUeaWBj=yK8m{|a-@i>)mbHr`3t*A zvLxD+0t*C*Fib6koFv0|JlFeNlkRsXn$31ihMSAdu4^3K z+t%nD=rfqhV&=vTkLOS;S%pR?u?ij{ip(~>iCL&PrT`D|LR&oANfRHV(I_%IWY~d& z=S-ri!hej$owNRbnenl$EBAcSU%#VVDxXCSNi$O8de7ZCe$y-W&0QS0=jCbZyC=uS zS~%gx@i~Jt*Sz}J-=7^HxyR`s+ZLDEoX!Hrit&!ArI&vB&*7i{dg(lKX1tOgzEg!h z;^yMLCyz9ofC$we^=wCZqe{y4)e$w3^>+TWo@8cD&h!<3v=^K%I9Kq`2rZhtT;Hc` z$bK~KMB2&h7qibQXB~ga{>1*VBdSi986-P~GcrU7((}V-a!GEGD>%*xVggABlKsb1 zeXg8>)F7!G77dvhPmwN&13mq~7uh8D%XF7KC{sDe3ydNn#}*P28)dpBGzKe$_hKy7D4J z=P>}F$z7wX%0^q6-A7ep7iH&Ioe@S}W49@`G@HZ5YXnEM(-|Rmk{sUCNvuZ9*&@?B zNrXOIliNuoLux0uF7InJ_GbLl8^4UyHBuv zi+4G7pLUfF-Tv^rij$lAd+r|p+noz?Y)Q#6>k=JVi|<%ByZQ<78{}0?aZW8bV9n>mTnd}tAhuv zaFQ$lGx0s1-lQd3w3<(!jw5x+KBsX z0PTN6ZJ34>^XT9#4MK`BeJz z5zj~d(U72p2%<62WPN&qAu-uua75RClO5zX!0S9Zla1+X-5c|F@;iloZNKi;m|IOd<8~(O<@e}z$LujZkZ{oXSo&l6LH-Hd z$B~~zeH{I9`p0>hT7y2l6iUeCJfTVlQOW7Nio`^jSzRM|7>PBcmg|WTUqwED6>>2z zlEpp|3VnstSJ+-SSa`0GFI1jJ0f*j^MU1|P+(cjEu0$>|so*5}jC_2>@)t*$=||6B z995&TYVE|Zt@B(t80iyuUA)64D4if_Q#*+}E~^u=O}HEFJZ?{`4v{Ot(+N2-p0Ld) zjL!BZGdeqZiSv8UfvYb4j-v2?k*QwEVl|9R>{N2+L#?ko^7G#=KjJTGcxUKW%jd2q zlh*mxE?(SUIH_oM(_Jf;-|D=U9=UyR?(L@ns~Yy*xNXMbl{;Tv-_bjN=*{Ju8kgR* zwy~fqXZ)`<2iiA3uwh8+BVUWzir|vqkX+j>0@{%j^|NbM`$GhZy@>8-8)8IsU0n=~EZ~vP* z+(garM-jAFWO~s37j6D~dCk9VPxv24`2WBEg%98OfOmcgA%)uw7J$(E23{PMYwsb3O!x0By zgl2Pbb&tXcGKoy0i8K*cD-kl`I+X2%1K9sC zoFVn3g^ZA2aR-Fl@v=}{C_eO8+{0PWj3e9+zrsE)l3dim9ymL!;W*yIb^j8+CRv!?r?=3)(7e#$(1$n{9Y`=4X2N`b=!Ug$6Z{OV`Yb#L{~+H| zJ!+ojpBFX=7eaUA+B%^E$KHtAv$5^%Xr%xIF};bij3F}4VltV5ac2qHN%r8G|2BD> zYN(B_q@Qqp?q%*>zDN*4rPxveMi~jcWFB;(1#ZFBz8mLz7@mh0Njz~956Y1(I=G<# ziqU@-qc`1%O`}_Hj>eZ}Y(O zd`QT{R4Z&34ryN2W@u}*ow`>pjgDoFwT!(t4&%w=Kft%!ug3oxnj2b=<9C1uvT>wa zag_Iep${Iw^eB4b6Yv7O0)JG;`Z=LQK#w;Q1--$IRx2adk~&P&$xKYwVVXzgW9lHC zqzh9Y=_j|6+sN(YE^?2W_TtEur0*dgv;;7A(R*-~hp-b2&Jgc#23N+VgmTC5Cj%hy9T+(W^P1;WFM(yj`kj{b8 z>Nhy=<5z{e9L;IcE5z~Z=vmwsX0AurO0L5d)6hBGa_&dm?}f$W0wilMMdHG zOoBkjVeSxVpiyWoKQ)kIJeXhQY~*z=0$SJ@iIc{YCVGKh$33k%!xa*OQR4Tofp8=j zedqEw4nM>lu$!i1OsmFd@&}R!X1EvQ{l)R8S;Q9J61JnCJ;b?T7UV)JeHluBac_Kx zsTuBoJUEFyxD9gYUcB4(lZ6=fr(^u2_!3(NIV2LJWg?EP56_DPYR6dEhP{4`@&6@^ z`t{^9xQWQPvqm6;XObO!HAbd(jKAA4EreDq{S@xj92foojU*8-7V`K$^zwJ%20U{< z!2XlLi{qOQ5AkjswTzK@CD!3A*pFx>$!6AGJf%u{inH}SO?dG~~t;S87J8P$Mi z;)}2}bT3q*?Pi5;3vGwC&_ki?VF|v74`cjY8wx-XY!zDQT*1W`V2pi{JcsAepU8HM z+qLix#v=zY!zY-2fg_qKJOu;%A2D{8g?5DAfOuRFJFZYCo}%Yr1$>5o>sHH+K>qj) zIuxqmdhmogi?6doA&EplS70WP4_4uT&*v+fdX0BVY02bbyoBcGP0G#5 z_PAYHnHlL$N19@{$&xiS#gd$4PE3f4HL>4=8locc4X4!zJVyz*tCgB|+3#%k^G>C< z*2Bt52QoUo$7uJ<$f~)2TE{Q9t7`Jqnm*KA{9iPEVNKr^O(M!(@Os>GwIcgpty1v0 zFn?w<=I^RfT4evInxC%bcd2;;=502tAXl5as$@TDm#h6XYr6)j+pDm-p~#3zrE*b( z#|=Xfk(iCdoIg?N86t^OiJGB_)ulrebOs!hKUt}&_9rP-Yy^IP&Qaa5(BCw(xw^_? zv$c5Kep0zW>GXqA;WxTe6{u9Z@oOsmTD2Q_DVq&!mxtUV13Q8ubhf*q7Agxnu5b2p z9WAVn7#H?ih2%UrEYI$Hzvtsj?S(KKJs+6HP7?`zwILRj`T`lprhs2ohvJOQXCo)ln?`IZW zk*PUVo#pChU0GMcMx@lCJNV@VGLEEK!8uK4XwhUCSTGrX)$nT}Sj)c zOOY?K`hLM7D)PXWfc95LKfRjMF~QL|#4mwmnU`E~G?ZV?`&}-7Ru*#*Z6#V1$2e6j z7kb=lgVe9|h%ypfK4`+V?Pw{@!Ns@Pn0dDceb9*ofB($pa9M^aJ2hN%$Yci^B5y*-HJ)`OR|mK>Nhn z*3Y@B6qZlEBAdvOumBg_&pU9X>J)UnS@WA21AhcZjZ(d|y%x6`j?o`m+00pJOE^a@ zoZ1xn@AX$&W`*V`))w#3sQ$k&sMVnZs~jTN_{H{r+Awa3u-X1ED+NOrSS^)&S8ZZW z{!-V~Z6uD-geV`*4>hDx!Q5iVFHFM1a zJ=N`(%^wV%+-~vL>}bJBbdgd|_?1gv`*cd}r_F6f@0Yry@bmU(AEZ9Z=<#cY;oH?? zJH%3dT{N)QFPV53Bi7o+t6`pq^6^<>>6Q2LkwYYhJ*M3--S1iqj;Ie!RTKBh{U|1fc>o>!v8n$Ii7^w_^xJu3CzK> z5QJBaW_-8P6QL3A{o(5BJYNv0D_f<3jLbZLRS-x{$@?YuK0S(;VhI^%0|^#Y@?M~# zVj@#CIh+~J^5mT@kKo>ezavoYJ?<o2P0w$AqSz6akwMg5gg|MtZzh|gV2qz6M=_0+@r|9kzwvI zw+s(yiQ9pXD~!?FY+x& z_o$C=iMwZ_yp~&|)>}P62f5yWRT9g8ttgifauGPp?Z(`0T)N%tmoJD3UNV=fJq;nv zL%JeNak(}HY>H~5O~Z*vd4ss5n{eqj;mU2omD>b7iZ))>*%;RGa2ru)BkF8KosGCE zxm+*y*UNsrgIGk65jb4;UR?KH^~yATFhiMt8cF%w61C$}trkRhRy zEg3HH<&`~!cWQ#oE*?%w&D;51Ngu%+5oz=UH8R~rs&vt?K8kS{4JW6DDQewV9?dO) zn-M6)Ax=XmK&V3Cxdnl=9O)!C16Jt37cKSCKCX}N6ZqUJVmig;K@;v92~3;^yr_^V zwRuT#yS_)?ujfR)tk2c^^i6typ&OrPJ2_6`a=0?Ck!#}w_V-0?X+HaF$hDf%{9TcQ zk^ab$$TN|GUo)aPqdBL!pb=zEuEwWn(zI)OH2s=gnn8_zmu8oiwnz3v_D6DJq#T(W z>5FWN6eKMfEZ@R)vQ3LvMCd`-g}~z)w;^BVZa`>5Yqa4~+`xXBh8VDaBqE%_{5hlo zmW-%pL_H&NjmR~s|Bqu-B~1wJ2t5;0%@xVzI!ylplOUv{G#a_lxVGmIUtl?eX;?B~ z$$%vTYMr5%aD*aa8KDV*Q+ekQ&}$H1mgP>!+YvOX{DP`;S>|JP=_OxB`bZ}6XOh88 zvMZDLyk+HiK06|l$<(HQv^m-`+79sDO1Gmsqx%5gs5CknGa3)@WlEW&ETilIpQGeB zax!ub@RA}qqzvf*zq8?3!>NYT4SZWecSBzTSIqvAA>hi*Q>op-=QofG3M7 zMkkhwGzxveKn|;ac(01@RB@S#(|pm>3|~z%JTuL3$23DaW@rYUK?bs0#Wr7Lx#970 zLu0uiv)q8KC4vnMG+xCThRNSlJVV89U!2YGjm_|d&F~MK;X#{WrOj}SjnzxRJ#3(H zDvo3rAIuC-Q?b(*DH&dn4D%#Iv1BMWkbMMuhYA&2Rcv8@n0)@YvC0Vgr^x3}g)NbQ zH&Y5yPzebIyyZy71Kw+qj0L>=ko+s){fYE6`G%-R8~G}bc3vuvCl^T_&&pp+(0`CR ze7Z^akgvl>q(lyampG9AJmB5T^dH9h_hb2IVAnDIhwxF#=zdbC@*kY2_tSv86MKCi z;9ift-Vbhnwby$C?(@j~Nx*$4lDh-$MPRk03&q%xpPLXyr#`7}|WN$pMwDC#6rK~bAX0Yx3O1sp1kCPsDe z2C%DC7f?21E1Jh0=cRvopJEe-FNra*Px|0#oZno3EdB?n3mlPNJHeJKAf0vxiQ@_B zcgj=J^JzgcHz19;gE|zPatA3nE)C%#`%#yYC!}NUCDLPxDm|c}6ivO~>yaK%=1ccE zupE#!yPsymfE767xhQUNPn8fcj8yV?I} zYKuRQWkRVf_5N$w6ZHgLNxQ47PS74kTAELg4RmGoEXF4rs#>n7ft~iC8h9CDYQtcE zXKG+4!>U??s)lZAudW)h+rvuFk~*e@?(?jwv?SbC8g_wgH8Fx})Cy^8TWQqF)X*Qo zjTyh+SQHSW+L$p4)W%Yn(vZV}DsBf;87g+5!jPj_6(9LdtT@8MX#t1YkAt+R{Sfk< zPDWSQKk^zxgey_+4|szY*6n@j=#CJ?pEU^>xs9Q0=RJRt2eVY97*mK}8F` zG*voGBO`D>v|DT~6$xU`RCRMqv6*kNoa6zItw?;OM=2G40|FCy%01;wgu9c8qS>#4 zCPe02rr0be$>9l+i0l}p0$gCOURrhKr?e%F{`}QxM^*(>-{zC;p+8! ztNp(AsuuO{&ub>W%4VN<%6r;>OS`>&-ksk4-eX>2&6*Zun@-tJ+i9D<+ump2Y2R-@ zX4f#m_03QCy!-8cw{vUIo5*VXs;ksK*C53oR$RTNmwkX8^df}2bFFbzHkaFB0p5BE z-q1Y|i=ZInBg{q+;Ma)%fbapr7YIDuhWIB44pT;6bQ zVcz5*(vHPpI(vSYR?i4iZ+V^>X`n1WqTGlVZ~`Y0zl87(!Y2s-LJ+t-E>CTIP1tK& zdZE`vaQN&m_p2G|b*&~Y%n-KRt9xB8V89$4Ex`V^PplWOHa{2l%yr?u`z>-@TOs2AH%_9#^}0i7?`<4J#{9 zT83MecDV@0IEjaS4Y>4XvaD@^e^7A^euu-8vLik)0N`(4q1R@H!`F4l)UY}CgA1Af ze+BD0P&m#VIKZZd8nzGQq! zv)pctQ^n`I+m)O5K2LT2_P)krwRFfb!F#AT=;BAT=

^4u6oi~Yp&1%Ci5QOi3in)|J6k@HMA2*mB;y@^+5R%?X4?-4>pjbwdOY`=X>^P<9 zv>&sY8J55jT4Bi&4q8$|Yvk)iQkKZxubo166peBTfb3P*4j3+i*U$AH5 zv}SqEo`^p(Hk(ZTV&NfJ$Ni(QD&~mE2Joh8Eq3N7#AV^pssI(mJ#_1X++lIoAFSy+ zlw};^JbDatLgzrOXk8b*c1{vv#~d4=ea0T4mZKEmCT1raO`Be7-B7~r&XRg4J2sgRGBQCmT8fyydNkiROe@Ab?CAzRtV>a zRd|d|bdB(#q%HdWdyhuq9lU+My>8(%_l+0e-f?Tts||_Yh<7tfBwY}gTs-zvi>8;Q zrv3K`C1RmK5&rvd-n;ehKUFR=E=m0RTxz_S6!iBagBF)c{O`isC}PL|d_RVPpW?qO zGf)cOg8yB5)fY$b-<44pIR5LVsQ-J@|GTEJ0{=e?sm@kB3c;5Q^6yepQ^of=qv;KI z7J5l|o)Vm#oJ_5*hLu~58vV>x)+jX#pU`+Khw)Y}U`XGmZg95sR}Po|cZf@EVD2gnZgR)(gRmqWH@JJ3aJ@zrp zqo;z)$+DvGUqNt$8wsmol&QeU;Y(&SOO0cPa!4wi+zxFVJ&#*1zTJLp>$6lLFSW*pqK|z-B z{+a01v?We~cog>)6mTiM4-H-2+`0tK`qLy`XT$k9ECyMGcY3(tjvaq?7K>dr^gPc` z58?zI%nFS4d`_K&_lJ!)_xIm9QQ6tqZSL;oJGqIAizm%$mpu=FbueBTEU0u|yQx)f zscF%((3_yFqT)x&ZHCG|+AdK27_nA1q}Kw=8tJi7_he&xqRxX(RFu-t(2%k2{Nr8s zU8d_S8ou$|=0-=mzin-8eQRnw{5$e>Yp#Fz@WDM60~0gNX=N}dGE%xDg5n{meG(=f zc~HfK`(>2v@9zw?dxP3>qF#a_At4+t>tkkBk?pk&^Gn}8po^ZLIH1Ipl?l1HxIQ_p zs0+hVA%ReCGpV+T|N;mgO1=GyeFZzC}gs$m+-k-j~S0M)Kp;j~N*k znbq?fKR^4ixz$0nqI#?!1 zl_ggo>$di*%yqY4dTZD?a=M$nfoJ5Dm@vxpQ)^OC=gW62nttZVZkQ+nA|e&t@?VeK z9AHVleEG7R)OG#kFRF3f8s|0`@n*yMDgI(#ip{&>6|Uz$nLb;MUbh%3EN~j{in+A~ zQ#Abb`I)V4w&1z;6VgAqYI)z%rSU&M?Z2?TzK(t6O50`j+DBeqy7NnolbJs&-c9-Z znU5tAu&2Lp;lk9+jGy&*_4J>`6lrDUsHP4T?(#q?@5%|4HQ1*pl$^Z$*3ZXEAI$rb zA-G;vRPY}iY(#D}oa=3rtKGQ`|{|w@h4sk>!amX56;g{VGmw%ad8PF;k>Z5 zwdHQ?*w-6Oe2c?v+r-t~9SIm@MU*u(o^EoYtKCv|-(5m8H#c|n@R+SXUT=Xp?Ip(s zQo3WKY&$4i#4}ZRpE;Kn5*;u$hRAeh*5>B}3UzDL8>GF@PhAw=^WZc!HQCzP-LtjjU{p%hSrN(b zSUZJ%j*O>2SB)9I-3T_`mHLK*_3=>19?cycSnw{NPS%SsDkcWa%*;r&;iDpjx3SaG z(l+;o^jF&cATP%s3;$J03f0)y*f$tX?Vp8&Z1_-eL&`XTpuFpIRy(nxeT$J1(`C#K ztG2FgdV2Z=Y_{1LCD9l3vhJLnZaVYx^BUETx9>lAkar$VX$v(iC>?lSmYtvfvqm9P=eGToL!(?0Uu6&tgYQ>3ft7ZaZc@3He|y`0b)t@pm{FneSD6K;)h`~DxTmM^t1D!$d`@PmG-_QreRJb?jx2wD z#yLM4YT&S+lkwbYyTQcF+yWUk7~YjpU$RK$&R3zmcBRC-gy$!VVw}e9xa4BqM!6+vwc~F;Kfep~w{Fp~vn$!?C@SKe?G^b<=VT?{ zcXZ@|C>CPT`i%YJ#fyQyGR`}9?%1B4{8{dZiH{G4cr^N+Aqy#6%GsF@VmP4Q>loIt zKs}%I&1HJNHvWy&mc4=qw%!K^cPl)RcP9fAe=%N^^JjHZL6q8;Dx&@=XJw2_fBc=WIULGj%`}Z#-yUyU~)O(V$H=Nk-kvxc$zbZNA z&?j=&b_$j3wXcaw!hwQxBn?wVs_dlCIR$Kz!}XdCTc}MfKYoa(aC7XNQ5Ey$I7r|Azj<>JF939j1^pRb^$G)9r3{ zBH!i3)cVnUQtgNOUVCpdRB|$I=(&EF;DiWOk(3PJfgs9xQl#fTR8>_a`y)%K$f>7K z?3@MdwfET{b6FT$-hdpuX%$Er3V-O*E1Zf6dwa}l>Lhbc}zM9ewUA0=N%kT z`J5(o06PdG)e|G6TFj(ac6D+jR&-}9xX&Jw6vEAB?)0=2gI}r z%8#lc_GcjQfd((Sbn4s( zrcQb1#;P3RxJ)mdoSuGA&->8-lmjM?`o=uUHwdBbm-9Gl=0hN5bBSs9ZsGCKN)aan z5>iL;@bJDp#I;k2w;H-DK`>vLmkFmcrD*N^h(wT2k z%*^cU?JYR)o|&Bmz@?I>QwOD-gwK*>e|6+X_My{Yk-q-Qp6Vp7yNL>FCHhs^frc`?O3eQPfLoaBY3O=0-~(eqdIX`JPqn$#!>VcXyt*RhOHN zkn^f55%M4T;5lJju66`61D_WpHNt*Is~D$C7E#mExJ^G7eXUVo`Y#SpE9k z1QR2qqCzTxFqAwdR#vN@r@y~cuPh4?kdR<2U$tBN#aq|y<>|TWJ@giXe>d*RxKi)7 zy)odKg29y>QK--iAC*!fcr6A~ea_Dy!?y!6eH{~%&R@7NdohJvJQoH4D^atriNUaDw49uTaOKm1T(zVFWqtjiYRA=K!Wx$i z1ZYtDoY)~>LUwHZ@|M|jQp(Hm7SjcEbTrfrHl0Q&6t;i1P4jiCh_LX;#Z^>@&JG&R z(Ow_u$tWnac1F>mq4J&-wKw@=MZJ0R@`k>r@&@0WaG}`w2{CLM7|qY)updu(I=i}_ zZ3hd`(rUN!0^GR14MoFnb+~w-flSNe_w1}cCzcOIxBk*wO~;_3ZMx(#-- zQphF&ko|K7=aIVl;L`C=h7ThnBV~o%U%vQJV>?+t8yY(>wv;~qxVg6nRE+tPQQIY* zN?SC*tt~r!Vv%EGI<0MOyrZXpQwKfLQa^nnfT$OTI+yHo_Gh`<$qRGYC>vkmAre8b z$f*O*w~jX&{^GCZfXn^WP8NVNyRt{C2Y}0_s^oCEZW^E(2Me^7RaIZwG@O>ZKNNga zrkkvjz;E+PDjivn-Rd7hYHG$yc7KkJ0B&YY_{cxd-X|m+;r3V#LQI@3Yr(>m7`lb296u&4K$9tR?~kb9!qNG(Sd z80j|)B2A#QSIGE&lF55TT0nS0#`0IsD^OGGhkW9=_G`dESVCeyfEa+}&ZoavCw=jKla4pGY;@;DzOqjSN2Agr3rDjcSZ5ZfScoO2` zD0_SRPo9755&8pBjPlLSW&*kcn2ywS{_PV$^}coIf;-nOa1A-HiFR)CVj-%^lF2i z=zCp5Lqogkun;z}=Cm!JB*+@A%NQF zY=;VJ{1gP0&Cl7KF2I`zghwj$vmYM~x97TGi64Mmk(iW3NI@~qa$qcDXh?Im73pK} z<;`uNoB=g8LJ*b&H*T13I*lg^3kxGV0U-JL3*hlkueM;DP9fwcHa2#3G-u=V6eelB zF;PdtZH9|%>+j#cFIz7|CE|CjVPIg8k&($hI|s052-z0a0t=9xAHLYhC->DLLOMhN z0@^qWU_tWPv)h2G)hwR9WSf8;cRf$Npn0ug67L=XQeJ>fV{X*$;33$!gVF;Rs*LMO zLB;c=#zWv~S40azNScOJAg!u;HQ94pRzgbZetQ2DvB-gYHONgXhvhBxGcfNI=l&|+sw={2xa;W`1l=ydj$jp z5G<%tVLhHV`=H>v)=c-W!0us zf{rrFlMM}X%gcAlo)5^q7jXFaCNWVb&!RGsZT;T8dwZg{`uqC_W)VH<_T9T05UtVh zFvbGCy6Uf^Vn75DMBOzopmyPrmp*Sz<%;EawOaLTgb+RO_O9OEht(^EH5ovHm&5zV z`=A2svhn|%K2x_C%#Q+fn;r(+_2b9mYQQTQ#J3cGx_Pua+7;PY_Oh)5RQe9wFe4}k zyQ`(;fxVqw6aeHqlG4)h0BHw028OykL3=8xevO5JAqzX^nQaf?p9~Nb`#}L&&kPAdGzSD9+vlm$l}5S7f;VxM<6${Fg-{$F>|xCbXQ2ZBz~1!B{U5?QLH+N zAqxevTLvU>{UZQ-d)22amXr0m%l+wrbE~T?WzT*{xi7?<=hoCs9%*&=^~J6?oO{D& zkXOl3buSu)9ILwgt1NGBZjRn*>DxW6de5reu3ITfb>(xSg@BuX7gS8-M&w9_URQbg zG@Hj`-|}})JomsX7dLli6rHpja33O+=6N~Lc?Aa9z0VgI|KkLdPT&0hW(rIh{6=-w zN+?UHt6zr&`k<1-LV@?!M$inRm#ws$#RRB8gPmBTc7bupnUR_KGRRb=jwF9Y^$Y^Y zED}%>St&4I;8c&>xj^07V+6$Z$(HBu6(+Zbiu9#HhRJofSRxE}ka{w>K0V#^AAh5A zSM6TqH{btPuVd;zGvo?k3SnYruW%$W@s&z{0i*!_^}jt6dTlp10Z<63L((!I(2&;F z)=q6~^hw#O`~Alh>7tb-Dk&`mEZ<+KD};UFNza|P^s-EBY*Nc(cmDDwZ9 zDKhWAe383);|3iE2SH(B;XAxQT+o8hP;(0l&3%25^XuxqS+)QCnd=4WpkO*Wezv8j zk6o9L13DH!MdSl614X=&QCXdqLPxr)1@Pufk01mvpfT#bZMkCYa$q< z#QHyT=*<6|_Odn1b8dnuAf<+z_Cf83>nt_u)gV;3H)LgH&F+udNCV6#tL@Q%+7F~9 zTr}B|On&UIoz!VLqf%%=2o@lUq|?`S)qrctXGGRxm1rnLY(mO_!TguEAnwDj&Ym8g z-wrY#JN^?$Juomb2YyDnnop`5+lkF8J>zkf-|0`|&6Asef`@I?ALD_3OAIwF5Guux z0N?G~IIw{2Abka`u37^AE&19_FWVf)X$&~rAIKEBs3!@CQtg090$}XRqe340EcHjr z%$6f17}AlH7%0t-%&aU#Hb<%qLRbLTV-z)<38IjJE=@Lwnf1O8fV-QRo2LV-WAr%d z6xNveXWcPoU1MmqRPtBta3Vro^Nm}3MnbqSxjMhjZ!^&fl*12n4&&A!LXAfw?b4WLO8Z3pq2QtnmVf39mzv`P>%vr0QUc+p8FDte)c*;eIU??Di{8XZxeKp# zH9{beb~l!OhGVsE#G;}{Tkqbyp%xLTJ30Vy zsg8HuKJqdiUZLVwG}vP(80W)~_&4GI*_81*>)}T+JMCfIujmJOZ6+Plm}ucD03Ufy z;{~Ii#(z;v#LYhEi+P-*N+4N$n9Bv_A&toN#fad0A#_^AGnfF20)AQVtL}+QH{XC*xZ~~eF*P?nPGVeDi zg6&{S5MICjDmt3T#KeT>nN%{15<~p+dziPsBbM0j-@(nz_g!6GH3Z3NX}MyC-&oe} zdfnL${bHfJxG^2Z$C?!7S&t$@q0!O?Jl=eOWgb+}GKL1}Q-7%Za#wX~J?c5}(aPE~xozv?Qo4gvUMn@yPp}C2T|Y;2pd_`*1w` z#vl%#y1v`$%LHnMh%at}4w>(PdC^Q=ow@C*3eA^0;rfAhc9lhr> z*sa=Hy(L}X|11Bnr9zg9Iqe!l{+Jgg+=gG<9uHNu$>pA?VN4ab3K?%CE^PQszFBB! zP*7*GEhcmjbjr16n$aB{tDd-}@2fw1_?GDvt^D>Yv2BZjdsw;ATjYn-%DB9)+L1nX z7tj4KDHA5jf+odMX5_oZquYBS(@kt$Hm}pq4JTA(|g;fQQi!!#Dg!`VJKQw|LLEi?M`td4j}Tu89wv zwVVnbinC^?USps)n>!x}ucJEgyFM$HlHb<06W5X@^oOCH36tHkz ztw@28X)34czHhml5-#ek^HNM*VOh8CbfocXeOWua_yYQ)_>s~_Dur#UR~lNTbtu1- zg(u)ZME=U2g@LUS{;i2u??4c2E;ivGBSFkIpQf~`+Du~zQ_>QQoi4_&yyZu=b$<} z*&;Oi6K1e4=F!yu!R@SP#cX)v_Xy^lw{~4;SyAU&^u;l{7p zMei903&B>24$_)Bp~=Wfk^B~(cSyWF=p!V6eRq4i(@g%$3h~_9^Ph*!(Q@<|ivyZk zN)paYR%Dw4JSbkpG2Onx>XW8D@!>QS1o=6(Sk*b_T$FTf2fKDTF5nDd zQ1$Ro$l~jH?WqYLua<&VWxd}aQ~m2%Y1$Cnky+DOQQ$jx!>Kf8j*U}1s9t3n09+ha= z6FoN!D0A6o@w^t-0U0an=!~sKMp>f&O=Jw;dhh7=eXkj&`lFGl*>4anO51}!>wfXQ z;C+;Dy1y?ex_`KEuARkHaA$j>nCc3*V#-CG1|8nQ_?&^~tG~)Fi=7?PK~?(OFag8t z?CflW3K|C3%NXReyN*i)5DS;6sHon=#;%Nmz?F06Gj5+!%|bia2y^JU_+0@Pi|lY$%mk22|6} zzZ&G-RUSX)1o)1$C=A4gQ;OU~toO5VV9fcPM1)Z|Bynm)s^Zk!1h*6K`;n-7{qczL zh__m({b;p=MPuf1XOL2Oa;oxO;mzF@qyr4~`RRD=Y}h93X+uCEhz}1y6!~%*l-#Ak z0y06T<(Gh$QzwzVyax5-_vslB+H{C?5-t;&JyQ_wHV+Q?U7kW6mE$rGJ$Zymy<_O(V{aoN zc`=TIsRb}ex{JpKW`&=&=m(GV3O71hGGZRoCU*XF>?ezYj%ovY_t4*;7K#W9fATr^ z&etfufKb3kj|e8bkFCbM4#wgB9mbI&uk`BNKR|npD>RmDg0s&5M^rleW&r5aQ*WQ> zHGx%&6E5Ws*`g;=pp=x7aO4i-(j_%Ly$EoHXU@+y&Uec{kAU)q@CtD6Azd1bl$dVr z?35a0KqRPY@rz}fhII$rK#9NceP{h8JN4!e9l_1AOY-HJG>h)f_U6%&zXnm>c-24s zP9#`d;u3B4i+-Dvfi_)?Q~J}Qjhb}*qMJiKNWO(N6)ajA$h!eT)h=7j`PuQFcP#xW z@g+c&Wo%@Ej!z4^rNVEjjn5~^;K3-%pic!+#ij$P3hP%v%xQ;rfS9cSxeT^u+7NpO z_8{)9TUmlOS^4?6rlzI?4J*}h5G3{|TE9q>7;FydsGJ`1g%Z6+r=kz}Fc3RG!Bimf z?Y>kXmVrc^7=ZIAkMyhF>tBO#w_d5g+3b4Za5qIijN0aj!Wxz3JH;J|3Xy-?oYyey<9I~S+So}n-F|EJvx~IW;8>uab8x0o#p1_d&y!VE8mb`!P2W~%)ZUdg^w`{fSZ#VUJG+1`#E)w1j z1zS|mWjzd7FLab)g2DPVQJeH{TkUm6^F?)yy>0=`+58t;j|@E{#Vuv)Ep06)4d&P9 z6(z0^Uqk~i_72a#bHTPB8+qE^$`m^L(5vnt?ds>>iu@zvX`ffm6VsZ6U*4RG^`NCq z)BekFOQ_3In^%ad`R|(jdAY7Wur}6zuQC4~4Q2=H@fQ7O+KO`;c=iA2&OHcHDgpkf zWsQRrlLw_Ma=a{`%bGYx0y1TKI{6D)m-J zMDC~f=ShjXk}0`X38vY6;{S+`{VE;(GG%bkD#l;X!@c8RGj=w~s!Nd|K=dQ$Jr3q) zuH2!}?y|TVPSQNeWvj=s)oiyXlivAnMCeI*M@@U9w_T$p;x0l%dCMIW7qum~#s#7B z6Mu$suYkt?w;wwyUh2EYerlKgnW!)VFK)Po71MFM?8{;Zkfp!6S7*;p zzf1kI%^c>&CCVLcHJTl`)rC08ob)H-*hN0lR6j17(H7qxakX2q(~0SiYA6n2mavrl zntSH8($8`?S50H9FF7a#8yXFv?zsJnJ72mRg`{2z#`3eh1;r0HecOxr_$&Tt6kBUi z@^_=0TDUl$GW3i(UMyw52Dv>>(ukTiZJ`a}S)Dy!m?iT?UmKphP*>?4dqY2ZQ}I3v zWaMRZ(nnv)cd6F;#35HkRbWtawI-NChE)&y_hPMr`YcuLV?EOI|M+vhXr~{!gF1ui zjJsuh=KDSv>f786=})t+<(Ut1OxHf_Xm~6M*N*dOxGUZ5o(K-gzk09+z4ctBJAc~3 z1=n-m(l1pry0(W<-uT!#qF=ydIKR$~9U1Z1#NIpaB<&J1_-^Cy6*P#=FMnI@uRdUw z3sUN9Ign~eNh+Y~U-(1_q~Ef&sLu0L!|IxJPLAntERA5A9t znO{s8`lpXA9WgtLY+&XO#98H63& z+G`z7wt7EbzMOttm1KD22D;FbJ({NqROl#~Do+Y+?}nGbUcdNUf&dRo4F14-2W{jk z=Mkb(;paP2q{y1<yL80sd)F?& z)V+5^JnbkideSoq zJKfRix3p)Brz|^^POwH2)}PwQwX5p)+%ysCs`^@f3)66YD#ATBoQSAcuJpp$w~g_s zNY9t+DOed++~yEFs#plx$skE@LEmh8Gf~oh7I$=uu}HBo$!4`|wPS2) zdfgWIOoUULssx7&1hUN=`||e-74?LgJ?T z`v4|oLbO8zIrfoRE2ryKwJNP0SX{UfF^v)X;UBK60#zHFQrR8xe_*S`zO!L7p##-# z=d2$Gh0y8LI}Pggg>>1d*l6;n-1zS~@6*!e{zZ7V6;&muktoh5Rn$(B)N^4XjwZwp zq*x2*7ZgV2ExRVU)jWfF>1kXwP2ygx(6W7EUMZM69e6==_D5f40v}YC=LCoi7e$Mx z&7ZyvE>(EqgCtHy?y@-jN$7azML(WO-c0&=X~7j7eL5HsFT!kM0(^7 z3BUd6@_1nR7v`ET2OBZ9YA;yQtMclS6E5_9!KJ0;p8Xr!?-~N_ z7*?pLIsrjEO?%p7bM{Gb(|(|nvf)Ua5#(JiLkW{LV8>Hp=d~0#MkM9I=&z|?{f77( ztBwrng}^jH1lJ}(oAXho%MG2iPLp2k1;b!FCO-$bsOz4_MGt%E`OQ`;E!wWR`fQLAOFSrVjGMq?_e%K^ zBO)PT_E)UFYNM=5BK7JIsgr`@2P?;P>(xO!3w$%K;xs|hAEPu4*?t!N!9hJi2yoI2 z_>Df-mxivEl>H*t`sZL`w$xv=c}QQE`ZD<104rB3nRUeTky*0GZTBF@wO9=X1u2LF zK)xFrc(^Mp6Md2W$raD>q-pSWItezG3qm3HzuXlj7j(I%IV4B0H1CH-;niQ1j$gr_ z`#~Rz%C+kGqenV4$0RsDF6rx&{T+@?@vpTW(SWamcm+oqjOwa4AkM>t9&D~pl$Nyf zmxuTV1%)A5IhzoHheB^&fSdT{jRj%<;AM27<21PIs$6%|&Lm|Ke-th_al4hdb=4`8 z_T(50N3&-Y>=dktN_Bjq#6{qUdN1S$2@dq7par znL$D*yPGOg;tx+C70!|FvjzD z-{G`*%+*eQ&`}fP;lOvwj^w+IXb|TuM-VS8=grqETJW<4cwG)s&X$?*dGqZ ziI3y0OvgzFK1NXp$1b^Gbv24tc-&i8TjvIF%A$9)N#(wV@3m}^OR$VQ+YA5t{>O=7 zl0oaXCSa@)iL~cET8`Iz!P^rqez3>2kfElsz)LK3UqYf{1_FPCbv(=!F~cTV{A2Uz zE`@YYuPtco&8uOo3jDdncj}Cm`8KU>hULzX(bskpq&SA*nRnFy8P$p88;d zw=yRV&b4Me8Vm1wnmwOnjf0`j{PT4ufz8vOcT}HV;eW*Q@dG)?0#|?rmB`!Wj0BA& zzgoS&qM1NmDsly2hZXIJWiCQfZ!HauHPwCWpGMQzd$gfdqXQ(ME}iJ9$KWR5_Pd~bP9v`ty+Oz_R;(f;N|7f@0-!9j!h(oivu zs#&_oIIsQq^f;{b8(V?vc3@Cv*f4!W(5jq~RK42UvLTbpWS$NJrUg{8%g{AT|%PNNLIXapu^oFsNne=>A(dVW&+)EFQzqPZxZt17wt{EcjE_;$KCz%|^veMJJb?bRCCreRyQ0>%V0$Jw z3Rx>YKQT9wh#@vCOZ_fCSN1oJwWicuO3fvVWBWZ6LiEm3$Z(Ty(Mr(Ig_$92WBj9R zv1TZ20`TH#8?wiyhTA5yj8yMdJQwC(?7$xj}v zsCuAE4%gI)pquulEna);kSADT0o(0xzUSK0wnrwi6PwcB1-wfrYPm+thIn2*1zOwF|Id3$A|IF1+AugC!1+U6<9rfwGMSquK zTc(-udiz{MdHhv^$DCKd_NJCQ3ZHR2Wjt^>5gWVpDO89sN}w429LbNiXZ`54O$IsK zTGhT#1&vDKcfhScmvUEoJf6a)aUk%OnsTEQ9$uy^y>82ABR;+n2@@AL&Zk9asfN5?aGf1eH|(rvQ7EvQY8R z_bnsT%?{`zC=uWu;$;=E`JLMoh<}?|0Q~K546|ev?>&=R-= zlt=TbS6ol()Z_UqA@$!>R_gnWptrd?migPWWoJn5Y zU<72e1iF)z`BW={njt_Ivo-yo&dRxHH{M^+s4s^Z0J0-(0=xn1PF>m`-v`jTZ%GWV znqMT0`i_V!37ihP(fwTlDBR_-FS$g#<7dCm$M>*6${JsqO__}LBQz}6oS-0`x#D7u zHTJrA-P`NLt(Iq>FTs;C=y?e4mXvQ6Hz2*e!4H#PI(iAWLf8F3$6^T%VhKoTlrSN_ z8IzcYx(Lk{T&<&18kx$M?+ARsPz;ujX#?Ez_(HhQZY|4{v zf^PQTHIU-^pRW}jvSt&A6h4;@e4mw}>T}9c!=BhBKo}LU^*Amlf1-R&KKwn93MgLc zBL3CxTEHo;8tvL`{VtDBMQ_X=or_(l|Fl<$Lsx85d|Pv=boZ8mUXt%EeyTPojU0Z&-KwLXh2?NLuD_$q*+rs9WSVa) zV7HCakc42yUwZJI?Kp0inO}h<$`pZi_fU5vTa4Lnyi2Q9naeli)}~B&6}fNzvs!r3 zJ-+wg-XkIiSWY^sDt@`?MLjjv3~k!SJN6c$%CZtB@_-Pd26EYPIOg`L**$qZd>?wz zP>?TU-NHgMwJ%XYiG4f^hSZgy5DmlwUGT{0JU*|a-3BzquzM5=R0XQbep16mHBtvL+xLAyyb}L zWJF7di1}W$1FDmar41^)jv3TU10-K9gZ$EGEz5aS>B8vT@&32hLxLzS08vK!27gxi zyO|k;H>YWcrA!3aBAz=wTVu3XWzQ<2nFjcH;*7%@v@5wp2*x7+rJ^!R9G13n{;dAZTpdL^RzfgMAeg1A{{^Po2z;xj^^^%U# z-HI)El@A+qU-J%jtND9V#HI2F4!>bRI(Yn43Z|PXHXU5}gu%Vu}_U1wc3c0^ZwBOStXZ8l~CU)89-5Z&HNo#By%5 z@8j|qntT~3^2bl)y&y-X5$evYo%}FCAe(MKF?tAF@ySv5i0&*%^RsM&MQ%eEoGT;+F|zRBfyqM%qJFEbNLQB)&GhJlHM zhV*LbRlAS1>`sXCs%~09%^&tsnTQU5|H@^jWu~}-7j~q? z&qUZUanKfojDg$yt7?&ak$`qGbPijnpQpN&J}b6$C?QSb6#HA^->+_g)uFzA*7A~Ygt093exGx4NqcfvT~iD- z7o?djpj2l|rmb0vA2M`8c^k}lmdnkqTq^E<6%SeB)x(*q`CxP3Qc7-xvrzCe44{G4 z2Wb_j$o%QS*-{ImW>!w zbAMC$*KtO~NBUOjG{3R_P&&KeRvN8qNe4+J{@TmdzG&+ICuOKLRZPveZ^A8#4&g^w zD)MlnY$c75ns=tQz52Hor^JFioIEaJfr#3MCIsWLN;~8TKQz@Kr`vTJyeZ%uZ=hUe zGaTC5`ejk{0S=Zdja6~$d93jwKLY>`vAn}e${smQel~V<;Q08nvArI?@gQcyrq!hh z_fJ{B{fd3t`MeS;Zj(}7%J1Z8|5BI5`CmPaHsi4jZgd}wZaRlV4a63c>YpNs*2S3X z`N9kXmy2oT+pJLZ_0>B*dH0Y(j=pCswvT1gZHDtj{bd$Ukj5)GZv`h_#KE>lO~Ij- zHW(+T&4e&G&RB5ryB&@mT!a%mm!%bd)!zS! zh1srN=|_cc#gZRR-~0&L-lcupi zH|CD}k004ck8kw9zd}IW+|e6#Y&(?BDbKY$Ge6UqOb(6`B8=RYvy|h5Cd_Wi^QNob zXm4lBa0p8}erf$KE*{OtA?R0pw4rx!Qu-><18+pmnbSej<_w%nP{9Q^WQ29QLfvD#@T=tv zLkx6B*%6)%Cr2CG=Ci(|{Ex#k^t@W_vDZqL&&je|SQ5`D`3J4c#Ffm=2QTuA(NFLE zsV`_Lq5A&mNPJfCGrI4k#-4jLAfKMZC`05IDT-cR!|}COp!agq955pq>M~o zUd3+pM}Y@|!@Dd+If&Y8^AJ&|KhPk%^apPknjhywIFB*Ct;o-!0pxcWFC$?>R|&j=g$=CrKAR~1 z&^ee|ldi4;d6X6N?IELsu2*^2fX}66=v=-Lf1IUVdTV_-Y$VW=#(eg-j;rDRtI1;T zc8ZVqJ#ufJgbW{aOcrG&8PPkx-MjbSWs;Y^fg+YgXoin@oH|}YdY6d2Y+T_Coz{rQ z!Gbihg6-ek6^=sfymFpVP$p(Qo_@J%C%+NXAd*m~a{11f*fg4n*ACl>vP*molUnbE zTOl6^`gA10sf$T#00~cX<&^opxL@|wyive#^IiXR^e2qbqOd!M#Oya$lC5l6>ipgnj85z0E4&K*UwplFR8?!# zH@Xo8MM6M8xE1zxNw=jC=oZ93A5* zYp=ETGw1x(tjKCzg?*uhrweLz6h8|w;lMNpo`j$FPCcZ*lfb%XLx35gc(OE&!$!hj z5w@d`6Ww?&+ghNnH|8Arvt-Z4>>~1ETwv=8N_+;C)ISVq|DNKybj3fRPV~D6_i+ci&<7TZ01TAX6GhR5+o{Fi;!QPBCr{Yv9Ogk6aBrX27ghB z+as!i@>O$e&#P;4dS{Jr()<>I3Y$loeeniG510v@mk&F9f8QW4D8Z8sEcbY?QYOMQ zMpRd0A!gc2jPl}n(XT5nT~#*PM*4{Np^Q+K! zRX$z0kL3rOD@Aq$LTYiNkC)X0eU@xPxC3p;r#ApKR^0RCGs{@eg;xM7H63g z$_A<7@y|$y@;iZGI=3uJFCJpkC$8Fk=K@}b%Ts_Pq3*1i%^18i?(@I2Kb(%w$X_)f z&4nmMDc0ZN*7}9PJ!b!ZgOWP>@=n2WJ-=F7c>IHUrGa{v2x4(Qkn0`_ce&9R9`*ar z`1%1D0-~%xARHR~J8pCT>{#Z}{#w04`m@-+ayp0x=v^&1 zSJrT1@d-9JzKgen377_SpU}Q*>GCks_tR4KazT0fq&8+vDA}#_niceFfT60*F~dJQ z>~{L8G7HKKv+XE)jA{_flc1>TqAZiK!;YQX+xDZRCAXO#jK|!Q_{BPyB!+dSC@Mm! z)CrIbN*lvD;-OXP-`E6Pj#&5@j2W|i_Rbaj)RB2GNF(?k7*1r(FZU|&?%2t;)+ZuN zEsAZ(MjLx>{D~gp$)rqr!@H2g-M!P`4{C1%3+*p2Z7hkO<>ZQuxHy&E6v%C-!a+Y zVZbCyrxnZDO2Vux`1wjb^!gFJgK;o+Cw*!@*T^}&aE5bX!HVBOYNA$pL_q%R_Sor7 zW2O3T>UiO6^%K?)e8%{O%H=>s`4JGf%z9jYp2B#=LV8#+j(sgqy&%dfg&7jV?r2eUymuwz?7`X~4VwzW?o0c&MYk%!;fhm48YjZ;ehk4M7IvA5OFt*-=`U|+$;;fda5_!SHkp#g@i+t zx(YwKK8_^Z&w?XoUzi!EJ0d=2xLPbfCx=|E;x*b~(yCCd*8IL}9`|Zq@Z18|0l+vL zZ(OE|w?E_=8!dEA|6S#OwV`xh!`auUmyXih((@*R%5q(A{H^|EQO!ks%WeKXRNkg$ zck>~zp=uVz%OQ(2 zk3EX=3HMNXR89fY-c}V?)C>t{ZkW#IR0c|pz{)~gjoDw53GvD`>rtcYwKE z+w2)1gNJ|n8TZ!Wv}bj9eJmj4_XE*2j>cJhjr0RpZ8mzYdt?~dEwF%;i`|}nBMXbN zX@8iuii{x00S?y#N9@^EO)cb7Hqm!v8ATl}(gT1Z_Im~dj|fk92?4upJJ-H;f`zkpU#hck`)p zPCZcB4wV3>{`2WYGg75f7*T;uo|9F`vMSjOaByTtfncFGx9dzV+_>W1UTl3z$IViX zJ8qga9QcO(U8i2}FaZ=O=Sk{sKwH-MaH{FM3dr3aQ`4Z;zmrwbL|}*K=lH@^K@6hy z+2E|@t)Gv?EvEdhWGkbl^O~@V$vMsG7n1D1?oGx4e#(GaAGy%}WG}FRhkRMb_EY*+ zIO*nscwaAFRoH+(nj!5E!yFChpG1C7Yz%f76>H4m&`^s%x}UlR5KY;=6-WvPUo}>7 zq5#R4Sq`rkro}S94x;O-it*7mz5>y|771{Hn5+=96pnGZLzT%sy$f!rqY>NNU_?k@U0U~`GLFc zB6i@dB0Q-t1Ts(N9e;QSb^97$fzTkovGmC^aNg_x+)`fU3Vhi?pL{1*W4wkSo?nwo zh3RO{SWcpTf7+BOa3t7k(CWVwFOPw;=B~~8&%u{4P*@Q+%4GBp@&|>wq~;?9qCoe- zC96#fv_7wm0w3Ua;rQ9H-XWNR3SD+5EkW$VM?H0F8c;hzDado`PzeX!{O1 zjE;7aY*|OI$jM>sBNhg-=bzxbgrFBU)+_R?KuGbmp#lNm3lNI4!zIw7c~}{4=uqdB ze!qTr0z@|Qt!Pic{GwNP2z22Mz1J%G`k<4$p%(a==*ZezT$!@-V7t{m zM<+v1d;$C60f6Q9t=Qx_-j*GfTQ<$BZe{YSrxHSo?Y(g!yTOc4(zU#}O>T=XGj81P zPlNwCp1cmpuci!vF^4;cm(pN}0ncL`r9$+nm)7%JLF+p!`zs%q8XxxUA?NX*n659l#Qpxvwg(1=(0u_kDx$a6 z9o}Qr@u&#%0far;U1bl$-TMV=>y@%-x1M>mv*tAGt821yr4%AkvS9Pk-(nXU`Yu#k zKZYxc)GNX&%=(N*k48N2fbIo!vI!L|xB!gZK#}Ux z{Vj#(~Tkqt^0 z?GZrSQ-%2fegsx-+P%Y0CQbCZ=~&-WT=XryaDs)h>$7{G>%x=NEDRdK2_zzbK0YG zG2>lWn=N*>yEM8KAEE70DL79Rh1U^z6LXShI}DD)ZVxw8SosjqE6*`EH1VZe6jJTs zY?o$3oVZ<>`Ge@NOlfJw*qHGMj0GXCXqhA3Y3WIp?>)(zg$bUl^~$g71iUj@y^QG!o^-X+7ZK6(zZGbGo2;b&ZZ0;NDy+R3K#BSkddysdi*13HgeVC! zf>XK2lRHzwJu|nj-8pu-vg@mOfZyXE*LZg+g8Hdc=*AW~nK{~|Ym6fPWc^$_k~b`% z5VJ;;oGjR4pVXG)SoT29Tr5!EJ6Y;4DT@yRR|%%mhU(zLP#=A6)U^|65uLcgsUhmh zwcB0rEF3ODD=%+a4zKT<6U(EuXE@t6x?f6C8rTW=H)`iq70vlA>=#}yM#n7YR0^7e zLo;llm=YoYB!Ll;xeNR2v9<9k0rb0;;x)y-*#DO{kVL4knQ{G{&y&mw0YUm#^w2^E zE5Qlg+}PHrLoo4f5svltN3xdym9S;1_X|>zx5#ZA_7IGAW=UGO61jj#?`2=916N5JfA`Bltay zez{?a8@a>jF`~qM8Yn)yQ`^*Wxx1%AorI<3b4`#&#`!cKDsKr3W8qN z_v@J|4z!GZwwVCajJ>T%BMsDWr+Sd zC8{di2_P*USQE*zN!noavU5`D!?O&%`35SrOm%7mdv&gCFyO;j>_vZk<3Hx_T|k1L z2z^rB519!4vT^sc|46EX?$XbwGXs_0GRHIrtE#-yL~p&AO0+t}OE;i<1tze_kBlGF zVJb2PKNbjA|6+vo_7e%RT0r0l?igx$XYc%1J*oWqhxi_%hwWD60^V=V#+y93&1nd7 zN?{A@zt8C<_2uAyS8LL+mOF9wSx|2|u^-Fwcn$07uuxkRuKOja#Y8ky zBEaQ;%Ei;TUVaw^Z@uyM6hXrIo9)qJdWCQ&e@{2NTQW79m8#`xE%i(!)Q{RJkd3^t|AW1A7yyMZn_9ag&^O~=Y z3&NSzucarZDz+z_48Ih%ox!z2@_T1c*pK%djB)9>1FT+xoA@pSr^^r6IMQ3~F}wlM z%q(U5y}4BYVqizS>zm{WG*Up01x6U}{BAkv;NB{r+A&)(PYMTuxiS5F&%=8nc{L@E zZ$*Wo>B_dfL|$h}(LhNCUEd;EBG&aVVL!IgOze|JCBvt*J$(u%p~P8^vkPLFn@ zzBcZkSw(_J0Gc{L*8*~~bN?+vWK3c>OhOp3v|QL)wc@b$GUgF&hMWuz^48xrt#GBv z;6pgdfgjUgx20%;CnKRQ4>AV`-7tnl)JWO`VzPbx7Y6;qv5N011q5h(3?`PsHlFp1 zbMZWNwNiX4Fq00qbm&oN%MP`B8huKo_?))#(zzo~5XJUu<&7~Tz~R_?`p)1;HLz!o zpvpPf$xi)m;@9+J*yX?EXA_U|;1-{iiGhAXqnrVSd-CCcE<IYJmIAuz zVX+}WYgCRG7gO208g(~sHqdsh*x4eaVdT0(C~^mACQ^oO3xeq5k!MERIv;I0Jg zQkQh&;ispWshS+HAv(3EDXW9Q{=XCrm!!d{Ms%PC;_Z+u`0xVf#jx5$t*;>$5&q0b zv4CaVU4%bi?}RLV==p==3>K{cP!yPKlRv>n_k-7?2+G zZ3AuJ7M882Gk)*_BI7=u>iipofbM)4FeH{V+`!PxOKa(Z+Gfr494LA5C7ip~AX!BO)P;+?W3zKs{M5xEoTaK--g+H=?l z*Sl^_e!3aT3ghL`rkzq={sNDA>Hu!ae$GzHc4OR-O?2$jSiN-y?al&%bc{Dp=jR^t zLDnx>ud)l-4&oZoz3VT9;web*1!^}O8wRLBgpH=__KnIKj%vc5zyyJ0SDNyK+K#dG~3HVB_NoMBx)aKhy4TFg^ZXuH=nA5DW6zu9F7@EGo#t#^6 zOyG_^I*MpfMUA8c);=SkrOOICb{Jnek|DRcmwBU!2wJ+cY>jU7jj&Of!|Jr(3nB17 z>&yJRQ_Z(PF$SwEIfMv)2%|K4MqFxqL-75Y5mt1BbDrc!N zBz4GWv4x_3Vg|njpt@_Te=>D*`8;1wT|@M3P>|E{CM=ignsGLC>gBF013Tycg>r7H zIf**^P#%bWH{WlXhv=~HBwRVFvy@hxznNo=txw`*2<8ve^qtC{Pti$TyUPn5>XrbK za;%Ci`%O69(@oV?_avUAACC4aMxqJC&OgKq)isGlk#h27f-pN2170wb^$(fW5T(>H zK5J0eNLp`pM|4|_A3aH;-T{~_5Uv^bH@6Ql5)Kw(PBX%)kvS#nWX9r-Z1Hkaj`e)u zxztpw+RgJCns4j zp!Nec=3LeO39SauiXQKvoz&M+n`~%`eLh%O^ZSQGfFM{!;3QaHSu;+A;BU8myRo4WH@}v_+SQ zPQZMFuhqc!{k~Dj^vr%zh7JZf0P+z?+seTN{=Avb!Y+jd4rD9UbtK_}lCm|{i(*#t z5|=<*(W-uMdfIs_$ zGpdEPqiIOB9;2(V0W&yiId(+T!2#BV@b%4gGbQAdgK`!AOjt$KAj_sr3;c9&+wu77 z%C3bFAU(x3dF18Ju##5>>>zkV#-ELfrs0W+^3z)1tbJ;Bvfc+`(5`v^ymTr&0vD=F ze^nJPWN-qhORzh~O}3cM_Phmx=ZTT$na!F#|B}r@R5_|WjI5;9vM`Oo%pbQn+azVO zQNPYE$NiT1A(-5in6@EFN}<1dlGo=uxzHFC&C@|hw8VMA`F!rhG{yu6Mx^1NI$q9e zjYaGURjpY9&{GHljn?#Ps3yLg99u>-Q;JDHs~%l({=Fg(XuyGM1p*0p0Sp!Iler+k zUD4jstOXc^sn|H99%hpd=4$U;G=V|bd_C>YJ1zk0EVAZXS>R2KM`}TaoZ~@92i&X{5z<1-a_54mQCA;mXG^FS)JPbcgyRuy;k3FoMb%Fpoz0_4A zSe-aYAK3&mItO8aN)5=&Hx`T|gU#_^QVgypis#q+l3z7qOauVt9+%2^c8<+@ClxOk zY834gjjG_`A$u$(>`@WLgW(M_k_vz}rwfpCS+bUMEj=*x^ESE5n;Q;&&@e9iF;hr! zKezeBQa}s@+h9{m|7=W1hqiJ)G<>Q&iMmMQS>Rtq#8wN(U1WIdFWxJo!_5uk@PH(c zsX+FQ9-KkIx$sWXs0Blhfz@-ro*fEI9&F^R{7EKt)kO9+T6w=zHRDPIWF+4o|kmS#-bf=e2wo)bmp(HDFLB>1)Oss=H1jn zqJpF-Ujp?F*QwJDk9Heg#9K75?ZBi#HOm58wqi4p)Ev6PO;7naT2lYm&1H?H38_j8`O+ zy5ib!lAThrjrC$DgIlo$lmYmy1jLN;R$b4(4l79ddeXLIpN;-A2G^$$arlH$9|VubqN2T8Y);h;vkx(CCH`!yM} zr=xV%RyfiDyFW4@s_^tR69$-WMAiHcHOb16>M^>(Nwl;@GB$gs{sfF0338q+1+T$* z3{DDsr~V_GBIfEGCmXq!$x&b8n-#=7M;7&GU>}&Dv7eU5N&>)1npwghzAQVH_jz*p zWM7IUkmh&NO>*cg*z9pR0%9o6N+vqCl#yt3fJ#7FxMaVr76D@xC=UvVPm?jB8hb3e z^1aOso5&0Ej^ZWR0pEVxC_PHUo?P*Q68-#){%zy=jO;CcJ}oy4Yq}jP86+p8E2?)C zKz~gPoMhcQ|G7OUX>n1HK33Q5N9+Kmf}WX&`?4)*JJKJKb{O~yfsj%Zcnb5ATn0ee zA{J$l#aqe-+3TrnVN8k9k45wA`!OUgDRlt%0dZz`=N!{o*_u8|!s8RJX~idT)HF%C zV)5iMaH@Bfalr0CBGe874zL$9Wx#86h^~9o^7^{Zel5lsG5;jOVM`*}3J(Wh>%amE zMw;%Z#@%@}kWwZ&&7C2ytCM5;+ygEZ)Fy)>uGcMVzhJ!M@Bu;1>u>ekb*+aOLi8J7zHK?+DZEMMkW)>Pq{(&d9e_FL} zwV&bAJ+hTbyWWpofPbieBoVy2in>Gjm%-_bWueAX>WP;`)Ka9sYf_Zb6I z+=RQ{>AHm*tsMyUyL~*p{0OeL7}UX5yhk8kQNE z?CY?LHI~G80HS4*S6d?D-t^F_Sz@Pj z9rWz{$LvbTUsgx@66~Pbr-)Vv;FCVvbT`^@@g3foiF8jU*s&6HepZ3tQYus_YK#nC z7pfNkFUo1=@y|R-x(Sb4mbF1|7L3bw$ty0Clan!0Fw~e-OW@AUQgtez8qKvpGSlh0 zz?Mf%5G<@%_Cdk`f0-LUR9hcSql-hsfwvAPP7MUm5#RA%CvatUCeH}I>N8ZBXh6Wu zy|w~>nzCZ)i3QCH8zln-_t|a}D&q0S1-Vf~6Je%LP#rZx?Y%iXhR+BIf0DRO~ zKVG!X*yR)TC~x4YF#zU-qf5KapYj4U^o$~d=MJDRGC$l83T&D&6f)CKzI!CB3b>?) z8<^g{iJRqDz8-%4;7q5($Wyg46gA@jK$5;Ww;^_-%T|93{w|oVzPH{(K*|qIITFpK z_-hcsrxQE3Tu?uqoIbcnW#?XD>JGdIecF`!o4z9pf653~f4oxns_DqbkKADOcwPKyJy$(B}0fz|4@2 za9M&F{zl5Yw6BCnch2L z*-*~a3Q-FEMw>Af;8pnrl)Z@{p5en@{C2CZ7P}+G4>m6i>QC-R1V}Qp_ym{7J|Fvu zC!~(4iC_}*yvT1;FVX`62k`X7S@qKcuyxu3h|TCSR3PD5+cS5@#zKyf0^Cb^mh!=N zwa?y{FKY?DF#-obNa)j_VKG(|0Vodx75>>wav&DKb+eU7T=np7QN4?qmQUz7ok{dU zvd)V?urMOK*I)##|tKNlF?tzXeXK;(j2*;zI>%*xghI#rZa`K~f)2!{-6#Gl?S zswVVIe`&*3AP9W3d++3}VbLS(h&%d=+VQaudmpN9QsGtElJ8l0Q+JWKe*-7Zb4bL^ zh0eK5z3SefO(;wNbnX2@6Drlvz@=rK35w6W0oij1@Y8~bmp)l^cC`6Id)<$Yzks%H z&%)moNEFSt^CS5^2TC@t{s?~;nm7;b>|_Ajqd>|TEao1BP1zkbU9NxxxncZM5F!s2 zCv4xH?M@B}qbtjWN-@g5mpL){=(a6Ef7AMAce#fT+gi$pML(75!onBoUd5uxw~>LZ zqQSaQYl3&jtEIm}(L1N!Q20(%*gY*Ut4yEV_Ia*e{QR)q?{L&TgQ~y<%d!s$lT$cGu>fPVyWJZgQFuSyv|Qe`NIz=0Y`W^wPeL{dl&w#| z<~RMLtJUxxm!uaJ6vFXyi>f=e}qM zYSr`f5aD|r&>}cru)lwEK?iKhAWCA7z8I=oUA(MeCddh2^IcY^CjBQhA{$B=K6ZX% z)6n|weZ;i?14&lzT1#bt<8s55!;>qG-17D!hTyS#c9~bG?0Rgb>iI0mZaYX1Tv<88 zABSxv^z`)P`gFyNfJUU_Q5PMJ3A`l(ghV~xWf*rB5Swhy_k9-#K<tg^SRODdN(x_pU&Znf|_Az03`ZEip`TD*3#&Yt39XtzI z7#SWe5Vn50utb0%Y?W{@v-J4%dwn`-=fv6;-a1a_^bnE6{;D^?*$#tpt#@n#UW3S- zf-0kq-^B8Uoj(m4-wa+Sl}9;%#J*Ax&I|Fbsqvhi2m6qgHa8JLoE6AAehd~E`hrDL zl)~TLw+6R}d7xN}1kHYxg^ymwTQ2Xcd6z;IWVglrwN?Pa*-cB+ zIubl-Cs6WAf)RU3{6m{=+IqcSen(1Z&($!h%za@f(Cz)c%o8VE%~e~T?`e{I8EHb1 z(kGJLAFbx$TU63MpODS$;j5LzjByhOp2laxHt27F#Z}~6PxR7t?A#TvPbJ1#k3VzQ z{U^Xjnf~I%X^ZmL=gpk_z?+M$a&_p-57VS+u2MdO@kx#61`4AHrX8TA8+TjLc~rV# zK!q{1X*7HLb^|TM3IjygMNvF^xb%AX3fq#iyzEs%T@RMy9D^;IBs4Tn!R|2F8aUWW zI1o75){}P;A`5&dU|nLqSBvL-ZBbJ0F+ibw>nneeB+d$MH($v$HZef%*d7{29ZLDd z^y;)kfVrOl$f)-X5n8o?v_`~JsZOb@k+&{>;4ZlnzwE%hJ|t{Q8m9ID7U(FXHa49c zM_WTl8iij;pILZq*IvdYFh^|wLUc4YztB-VNDe3D2@InHhDtRU*wnN*dVKGU4!0?k$#wc~+YKGYA-(ud|$LL;lS~*iLTQ?ug zv^J}D@|~h{ukrm}Ae&5YKOL*ZZB-Of^7J2AbkcO%#1eJ4>?I{{ zTVvN{ps7y7JxkjUIn*|g#mF>vYN~l0utoj-eWTseJHIziU)W!Lf`bL}JVH;32luKB z{X~Av)15hb5oPDa+CD9G51fV#xq~F5<;%7%6PsWMY8Qy>E&DJ^Rol=&PECynHjU7{ z&eOVdKHZSx1B)(Ui&{-hsbG2e_N$$(lan|gFEag07PSmWS@Vve%(8<<#E*0d)N}|) z-^SPgljfd)TSu-DU`gJph-LsIvcDg)o8|C&m@=M`bOB+Zv7EV79dqupCoH+pV?k96I|7Z2cZ zas1UQCHHSdU8+~J%^c(O^f0em0RDfIgc&IxQ(SbRpU!wY1XA4v1}-F4#~5kk!G{ zIQ>{d*)K1ZbYmXW7sDi@R5piTLG=)@uA+4?l^3KX27}zf6hSW{u$dSazXcs)U^T?S zh0ca&BYz^ZpuWf5=D_jX-Rn?ujy_tj?`lM(hFsb-FOwZW3}L#o5$qhp1@aApP!1PB>Wj&TXzOt z0uinP0rvpq3FKj+UqEo|4FG(t`T-{b93#{ylB#$ecniWXJ!*oo}hDEGG=SOqKy!zGy~;h2__ld*dn3ohvG&^b;G5AU|gX zQ-R)TVjE_iM&B^A(>WMG>YwhWNW}{WL76D-E5(fELox6_(OyqGkI+cGRs->NDZ3`+ zT`(BZp5LnBb&7x+HJSgHYt27W&sR;`V{40*4&M2}n}t~VncM6)rWnVH;9$Q#T>Sas zf7uu?`UICk(7^Lq(z1U7GLo<~6GsSaS{PI&YIR(fdziwf_D<~zw&6dUgv&K+m~&Dy zhLiyxd81$+wN|%={FPUs;&*YN6EgM%XCa8LV1zb4Hkkh=8{Hw|m0ZV&et5u72fYP= zTB)hKKBoA0J{LdNK0Hp!@}@v?mZE#YH7B%5mLI1Lb=~tKd<7YzBl;@DAEFrw2xh1S zr!5prL3ZiiL`)DL*LEYAvwD|4w4!h6DRQXpRX&i|oB>B;Zxed0=loYICHYcB>09hx zCQB0RjGbS%rh5trZc$J@yP0^`d12-IAh%;}r(<6?VR5Y%Q4XM;a;1NnS$gGN)F!kg zpC%?$_FWjgsO(z>dEO74NrDTOP4?^qjCJJ+Q`jBPb@#$`H?RatCQ>u@e^4}Y0S z(v*wpQ_smP^w$ChVfn7hKeL4RTYIshT`&P!R}iQxuKpq%fhf{RP2LeHvtX_0>wghk zuq6&1QIkJlfbMoSW;%$q*fMN47{#A^mXy@3(eZ|84~jpAUE&8Nbe}D{3QNnN{&%Vt zDf?X^vxhLRx!X0RR5jEVS{Z!8p@Nyzz8&bE_(~$J(3t+dTt+N?{5*Aeig! zMA_PV4qWe4O zHga~{4Tk3*)8+z)24bQBDI-jljoDFgEO(#X_L}h4-j>6nH zF4<#>fcH~Ws6rr1Tz5h*x@k|p2wNp#t|qmxEa!p#-7O<>95W!-9|x2t$s7p0pC8vV z_Jo~FDWKMQ_ZQ_B$E(eV1*UU%{4h3xN{8(oGvdLWhSCUDQg#mN$q|#-DrjW~0R+8K zPJ#rNi&_m(6*thK1Zo=ced)fpQf^|YmQ0rQ?#lOrPvT0mGGTii-e{nvM!eU(5y2nT zDa|eX?H8%h3F3On&4NScG+OgR8|Ch$mJ~b(3=*ADKm`-8;-V|4Gp<1@7NK74wrr6G zfe&_@YFF!(jlad9uaDUPgAGoJ&{-qTi40U{^_gNLSuz$&MP>rR!b^e*n5j(nzHm(9 zX6QY5>_P6Q zs)RhAY|o#jYTil{3ImwU5V54`P|VV^5%ReUfhPOCv@!IPJM-w$6o1Zr`_IA7{bB=H z&0k*6eET+VIiFJL5l6e3VJC?jKighMJ7bu4NcgclBS<##w+cGBw}9lVqg2 z+-x-f4{a_=$J2r4NpNps@2q9!B~>u1pcdhqF@S?nq`rH%+Ux2Ud$P{P8!}lv%%2Kq zrZak+H|{|5K!i)vg48pUM4r?Zv2apdaYqW8=1DAeG=O|M{{)hT1iM6NI_<4YWfe@8 z4*XH#gr^4}jwOkdy@qpDexeR#tjH79C!SWKYrF$DrVzA`KZuvP%M}+s6J%VxsfgT#yzV?=b0tvro8S&e;+kY4@XWgMt zX8^04#v7`BS@gs>mi1d6-cbki_8W2JY{Ls9r=_d3@&JS0 zAxVqXEOyN}K#WDh3+|?sCKtwm4mBuWjfE1NLfV+*#-Vpqe^||YEHTE8YA>yGRh&5E zRp72NPlzKR#yD{^YduV?D6m_$vV-DQp{|XpzoNNdYA3Xjxpt%52=?2P< zrP^N@vmXp;YEoK$039OMF=bu3&_Y~@Ck;gLT0LlT!1Y7`;t?nIE1ghSZUQx8afyY{Hh7X9%X!eVTW}ePNMD{PC67SY} zwFW4ksE(r&D12zn^VHp!k6vVs+e<#bizUqzuT!IEdTT~~`2!YO`^ECa^xF)80zn5z z6(%{oun5KG>|0~cDbJ?z58V$c^m`|TsNhB&F7Ui#s1fWn@IhfVLCs5ZZ?)b)b;dmm< zXgz6PTd}9xsLO($sRHHDy{zw*yX{;_pEm}%7nsw}-cmm7+sH^o)B)ans3!qs!p-_~ zBNbbc$B9`siCPKi1>{(e#*ALX4NjbVw#QM8<#t&l0^Z1u&3oegfR=>h`+ z94$LeLJD;%20ylv20;#5avbB7$BBZKWUY5jvs5dH#Mx@F!ZB1{i@l_S6#*T>b;|eE zGi41xK!)sm+h*|K2T>*Zjj_^?pYo;Wj^Lhul!Nz<^9wkmf*wpXJ-AVcuY87xaY2k= zVHB{K9qp+$R-K}OUoTP9>Uz=m;I9#&_(YFMKy?S-*3PJAu;yrwIWuq)EUekDw}cvD zs8aS5ajJswv%;pY_=elj=AcXdb}10#hV|UCsHy+&>Yl=K*l9Eq?$F=8o_?%zn4xf^FgM^Y~j#qSJ z9s55D?e%6XCArLq<(}pp7h19@kg0gsyT9*K`uJMr%U}88rz1xiKAlup9<1~Hvj$SB z#FMBbuZs_6lTt=T;Ee&{Cht6mm-$?gs6}~wck2&e{l1HpPW7MC}F$_X`u8> zuPuJY7O;lkCdckI(J#Hn_dwlY{ZFpOe&Oq}?dsr))8J;a_7rL7X?O1Z&=(xw8UT#U zZ7Npxy+)V5OlHgfRHUz5C2E`FywYffgW@J1xzsX6w!!imwSekrg6=UGo2{?HXjusI z9zc^}yb=&oQWlt>Z5E!KUv|9Pj3g2MT)7`-6?`C9V>^let@~zRITQMRV?VwQIpA3* zlekOzDzx7f7CZETgT3}?Tg6tjV&1#-YJUH|o%9#_(^y{%zuO8s0{9)^0%Vp}*)-GR zj^q*=EhF7=^YLx<0-W8q2^rDjVCMC_-C0H8EeQj$upr60;O4h6YP^XvRy=Rm83SA9 z+WCkN;mc?P&3E9fvE`Hy122vkcxfN;g?jCQ>~5I$wL?`8`GDRw_{Uqd-?ncL0<)4$ zV%6&OFOHbqOb#aWz;$`1-j&Mo5_&J+KLayZA~#Q;d#--OUfJTzw4+hLOeY38HnG5=wXh8$H?iiIb+$ ze9Bk~|AUMX#(4InpY~l33Tz(bTCLtqnknJ;^sq@-iE_-yKaTsxKmRX_|5iLU&bU92 zye?Ksn(Xq}1c*57DdIr#EY~{wV@H!S1uh%0P?TgK1tu-;!e)2CLDI%PU$UZ)xgT2E z%`X+zt0J6c0uhh}KplVUNrJ7AzpK#r1nWfrA5f1)fK@5DSrw?9(rb4tvAkjT9LK&Q z4HB5JyQ72vi1p9sq3C~kjMOA zSL-k#SOGT43tJ8l6x#9wlv%DkRhm(};`aI&TMsM=*hGG5Cq8)YZ`R!++35YJjYoT+ zC7I>dtn126LFAO`1lZ>8@`MQDtyUWbysm(^OBtf8p02ubvj6zPPC`=VHqL%vNyCNu z#|w6l6ehm-@akZ0tf6)2ET=`PHTMY8;HDdS3-HRf z4r3Z)($1u+hX;31UzMv1+GTXk_3;_b>ohQ7jNE?|{V6kXWk^k2pr17}2gdgPPj%}- zd|7nyYB4}%b!~=XiHA*VTU1;Gs;iA%b(O$-I3lWmPFCsOD#eE~c#yXTB&@r6Fg;^$ zLr80|Q3&1Fni%jE1_O9F%)$*@%?VYlakEUJj56LJ+^!Q-<8GVLGi57H5#B9$5n&`m zt#AGqi&pemmR~!<;@8>eTc1J40pjmp0QU-Zs~H@v``DqgGSs7eQNA(h zs9_gxt(L1e`uZlO5m!}31(pjV238imz{L#&jLnYj13+Dci`2Afcy2E47uaY(lc|Ip zJMQN6s|oE0zQiAh?|sxv9WT(|%aX0*9S=6U>xVnJk@oUnFu;bbw1*4Vtgr#5>QpCa zpBGmc49`Ki95dhipvzARx=}!UFQuhf54U86k9%T6x%!e@hNVvmqGQ%}23R#$J*!6K z=RsXreqTf?^yW(7R${{oZlpQRGxVt?gJnt)2Zj}%Te=&}$#J_!a%%ATJ|3(9dk?an zV2iHB!w3Ss9&Q#B_@UJcucQuMJ6Ujm<``@&gHr)XsDHQAx$_tk?VP>IbgyJH^6LeQ zHg69%E6TeBSxbGNWt9=mMlr3}T34^zz+nu+h_?gb?&tCj<&I-MEjGf+5>pG3WprCow~VmeQD7bA-6UAG1jtB1*h+J-c>8TZRmlYv zDYK~wlCudGJM_1(#L(ERse7n4_A4y);@{}US$z|+ZQsg>} z=jKyBD5mmLh*lOgTle(d;owou^)LVNfs1lSNq=>w2>U45U*Lnc%iyT?Z|71)6S*uj z*4Zdk%%%5r3%fNCjEtTMp3X#8eUf=XOEKkcOz+!rPC|@z%UIcB{2Sk8)Qt4%QM}^-i1o2=2Q`q9~rm8cOQosJz9?6I%s+ z5#jz1A7WX4rhMb4-wNfD9HjmEyQxUIXn%>UYman(c8Yv<dE2`&V* z@?xVHckGb8@k}a2c#`)Y6KD>TuW8fuNCt31ed(KoW}d2jS#c<72Fs1=YL>g%g$ zR(1~h5!O~OvW6>$hQn=&_N**JVns~3YgzhPBGO@Qz##U8I8Vap@A@-h4>31yTbW9N z@OHxKB6mi3`~6`m|JYW?xp&MV@8wYZ;rO~dkV;i*e#R9h@IegC+n5A9sl>qPw%$2J?^WFmtsfWLC>wLqcI^r+8=8yzKzU8KJ!a&z(nfRD*i6<(YY-_ zGU-ZjJzuU_%^$d6gnw-@k089IdWH{gdW&$>(gYW?xd@$WVoRt+^C@MiKHV1>c4(wf zE851L?;<{Ky8Ae3{{c&0r|AjN&vR|n;W7Kn@%=5;coeTrS14;6B(2sr4QEoQkDq?0 z<$bVUC>)z7f5a_<-Oa+yQCJolfy4uvLu51BA2vV- zt)Hez7N&;GrD}*(LAxuTu*SUwAFO{a0nW(DH(=0a>i%7!>Kz8{M#$qvzCzwd zjk=WRQ&pm|;=yQ9<&o;YpZUC9GOW$R%u_agX0t*T=tmLVSf&tV znTEiB|M1K1>_I~|bO3vO@zRqNJ#ds>oTN_F%Rg4aDBpAv6hiMp{y>yoZRF zq5N3F4W*7`5z&a8ek-tcy8QTgqiXZ_>DBA$Ux`(xJHBUScjgF_IxD~KN-YeHD-7Dj z23OizB!+w4;2U*&XjvS;I(N;z|D8UWevyg<9a<=S;Cb@%n*8Tcsf`AkoA*9JgF;jV z5;9d0QeQrcqmh5E_OEyflhr=o0iY5gIu8$K2vBytg8TDhpNH8cV}KX=<3q!GYB{sb0psX@oT>Fbbl#N-8r(<`0T-jBD`BZ#A0fL)zm~fYpIbG zS{}^oai>HF9pl(?LO^zk*#aWaNQPcbRXM`1?5`QZ^@^l=u;%N(7kl_GV=snvSCfCI zGtSOiwOcAIZu0Bzyal_&8Y>IEmx4l^*uT~g|Al+d=*8B$tgP@A8uqMU4D??? zZIXwhYghf)bu(we*_PDgFeZ9zwnSnb+$q{&t!(lAQ>2!ssQ-ZlRphH0oFq8W7Pezz z^nt|)nJd=c%RC7qPbjX6>slK`qW);Ny;-rUU&Pug-ibyB|G_Ux73?LyggL=}Z#{|9 zH%4(3fvQ7H6;^6Oxm2dat6m56#SdGg44kAjczhmRpN2};*K$lVp$G>uU~zks+bKzfe)G%$ zWj~jd0EL6?FkQpH-;};qKW310<77)(5{BGVExk~4w8IL-ADe~bTl#(bJFbgq zg;)2#s_QPMH-xKO8pR{IzuKU}>!PX0#qme|)BAVXdehirjS`A(UOA}f^^&qJC(ePk zve`mlYbdxHRBu|Ayr8ztGar?TPjF>D#)ATj}>qqdZ~r6qi`0 zuQ}em7G;}Rh@V075_AAl3JI}DNl`5=EkT$ zrC<)!v-+92&Cu1GKjB&FN7^EWxHeYt;dx7qUV7{nC0U3tfP`n3WUm`HX!$hUq6Or$a4V7jL z+L0_Tn-(1Ac7Osi$ncYE2Hk=|8pidB0?#T<@lG#YuSh)@U53sm>UAkf2%}j~P^A@B z@$X&<->o`3Iy!cNTI<&SzU=;|a;YQwwb)2_#2=BFYtZXv-9_ym)D2@vsmi1TJybd0 zyj!_m0+0O_k;XLbAJ@p8PDLJp-qnOgDSo%leKAW{4|;DdhwnR5oC{;E&*j|I1wXnV z>c$ajG}q zLnZnB{_;ymO4^-988~sP#A27DAfsz$K!v%xDR?T^vtC%A!{HM~`K;smsq#H>z`IZu zl4yzYyG2)b1mnr)?|PJT=j)=$c^jC3}ST#OLoF(`5`( z?C}D8XBKyRe0fVsFte7OqrFzK%c*0fUNCI5%Y@_S;@r&NM&?Zd7X}^_8SrrqEO-l5 zF6qZaZacRjwP>QuP~s+pwGXeJT>5$z=Sb z-mE3_?$`S6zqgc0wDz(MC}>1#>x|aFPy&d=dO!@-%T!on`zm5$VzwM;(?{7r*HCoa?AHmZeVye!Cp7%gg5fCysHxz&nszJL?Ipp z=#I$E`P~@T=S_a%c9+H&SDcS@nW|4MaUUaZ zUkJdn(SmS$nm$* zx}N@n&oRvI=vf&$@Do$^#QoiAgdF&m$=@|2+BrG&R2la|L4k$Tb~pT!*G5DLx~%OF zbvz5oXT4$r_u&+yP%n()btmj?+%C!ZBDm~MTYlO+oH&s}863qY>-xr-WthOw6yCIM zV0%g<9aQjjFN+qnrLJf4a++3R?5}arl-@f1`^x|Z9r(<-I1|b#sCHyT46>?vR5w}aVIG=RY6Jdh&2P5i z`c0H!;SUmD%Vger()lbO&udRFB$zPGe2$6?p@7cG%!kbj>U&eRqH9Qm7t#y&Ya26* zPVEZ;*CqA~k!K53t8%*iHNgr?CCF-|GuXqHivR3EERn{|Nh+<)e$Dc&F5uT;nYol3 z;=~$WCYF(&DjFtD>zl?*tAO>8R3ir;Why*ET$VU*gnmKDHO31|^s|;nrtDl=LPz^! zyT~wmN2@F?&JStJs0T^oInB2J#w7dvcc@^B7V59Neux3tXGD=jY!t+X{$D02hy=kD z$ubwU+u!BL?rr#(d04g5I_2>{(tlBJJuhwPsfnwjE;u^*py`At#xhnseU*m`V~bjv z>9agHkrjb*6%-y#_Ty{4jGbW9&?$|v5_R}Q4rxwZ9bUH26>_0cdf4G?5oFmg<7?W{ ziVtI^yDzA6)4~xx>$3+WG;xS19_%5~{W=Q*D4`O{w{9^4{|e=EWub_Et*FeMuI_;( zS)Mx8D4mXv`}ppa4tQNYf*tYlt?icog(@C%Zg?9d)@nl3Q?XS)Q@{ykgdGmfm%u)2 z?fm$N7Q^SMJi6aLWogvrN{$N+&V0D3-dTb!S3{%OTUbUrSoEoM$CE`)I7CFqHL8~V zVq{|*D9ZMW+T1h(OL`ZVMdWjLJ$yVl5XrPb?n5w=av~FZcTtugFcpT0BAwuYEMu_R){nbRecXjmKuwk&mjptgN@rdX~ds zU6@SRV`_lnT{uXlf9w)k1?Vm2CuUE@9aIBfhY;e}Fl;pk;@a-M3YFjt zq~>6&LG=^)?l4nPnu0r?adq=YRu65W)l#Z4Ky_Iuw z!8>(Rq`ThUkk9}j9^K*-JIcpQQYj13XD2dU)8HdKlu#l_K8Hw6b0un*z!0{1^s5Yl z5_uigW2|Qjx4v6uRo8oe5&v4o+pMBF*;i~2n7c5G{D{oKN~iH0m4exQ-Ot2*SCs>k${42az$wA*B%$Okw~%__hgCjA^0=?vq;*h_**sF z%d-_y;wk1}1upqU`Y@Nb*F%6S zo(Qei=<4@yaakEG)X?r{u=pDn;%SX-Pr~pC=Bih?AwAX2NKxkb89|8Sr)9HZNs|^X>_E(X|B%U9$QvX~M+I zHpifovelynXC*~*p62;OB;$O=IK>RP&4C#9>?b36QF<97FA>3%WG-^b zX08>rCt1@nO|v32k_q;--xi9$7mr)8Mkr}gbrJMKuNEn&=KUg3jb9hE4i_pB2&T^O zfC2RUo>z3r8T`=oy0JeLzV(1*@bhQ#Fsy^P=8P4?T&FsBL_^Xb zm(zOxh_UyC+Uzvs!+z^rn?;#YTFtS$k`3_#cz5K|SY#1~ry{SaJf{@g(?;orAl)vHzU=fs< z5QDYryZ4L@0SE_B199Zh4xP^g;DaR+a|DrV$>f&Z2@vp+|f!Zn}_Rv$x zt#lO!C_QK=CqXsIAB(j z$LqIf6DVnmIjh0op1=n0?p1t5CwKS8YQCB9o2s`gV{dD23xSr@r0CcMuiB}VB~gu6 zLKyYlZU9slT9fFO#s5V8+54yfgqk`?WefxDa^Ogm zjY_xzo_!?dn9RcVViipHTovG8+F4&3h9=LuVC$v6=4B!Fj)dH<|;~v@(e> z6xwb&*e)%a@W+PD*0~hRNm88Yudhf6eCUXyggyCGzVY75=(7+J%aG-K)0{^!)JBH_l$4|If#$F0 z&YMvd*t&()07!Nd5B_ahPp8IdOcOMx{OR7Es`Xpq@)E65@O9Y9Fk25u z5Y`FG&|syKvi7fpF@l}Y~cJ(N#xl0kXM?Wk^O zk_|IaH<06*bdHpy31V!JP5j)zy3kH#&$=6t_;tImS;*9r4@CjbadhT$5T-C9qhrH5 zDES{G$perij?@iFn=D8QhR>Jk(O@-|&!sIL(5P4rzPbXv@x7|Wi!OZ%^ebt^x^_vL z9v$l5s;sw*-VM9HD_(__qG2k7ci1F`uqFu!I}h4=RHNeR>n^xrHPF$R75!MIwZA@GMaSXnGJGP zt$cL})12}&cqX6yJvxOkRd2p3ElMd^>z1WF$I^;qs#&;c(Ofv)-5Y2=wN^yF?jwvB z+~Qt$Y$PI32K9!|f?MsiLuB>yUu;V1SlH*Z>bQZ!k_uIzr}9VLqRs1o)J+ zOkVTojxDAJ{=yB-Tx~uTbE_2b9F=#3iBxhm(#2_+MfImY8ydLa_$a@DI4I-R%??Lu zF(Bhs9mLloIlzTU(+S4|eBMNs_o+TwD-=0_y%@ zKYQ!=IC}IOyD2C^X;+(s#9G- zV+j@R0rFjAC8i9JgDyf%VxIr1)^29NFKqiTLeUNJ%~eW{w7In|<>trjI5kv}sdWfM zO@($+GbP#bgf z{2f&Dsrd8od_v^cR8ToilPeYwtct+CM+*A^0?8{OM>`tOP}MA zVj#&%el^y=Lde8%?b{a-M1Pqz7XF1^t^iRr7<%uCDskLT0u;5pVEj`1{7>t1KjSKH z=D{?<3Z1L)5NlZ2Dz~T^7>Yt_%+hETa-L%)RKd zdENsu-<~vfB4x2uEIpMTINQwa%)i{r}9 zZGejw+r8bNS3Tdq$6j4swFUQ5QeHtVh^4N%QiP7EKP9=kZD0{6Z(xmW78)zUK&wk&m^TNyE7@?n`Mh)CAi`#3$L;L!49S>IcJseg zrS4aKpaO=Og*FJpDRG|H9OAWD&fK+};E&)>DGP}E0URs6;h_&{nM2(8ZBgViW(Cdi z3MH!AGMfC<^|gFK?JM;qPf{BwSzbp>`puu=2jj>k!9Jnq9Uv+6gL)~T0o+Ds z2}}rq+09CR5FEhR%Is- z!A7pMlLy~4BL87^dh8RQh}f*JK12t@RvQ)6ZG_teo_W!zJdQnYg&5(Qkn6jiqdprR z{0GBVc~#Gb;iYKkthA?WjjNb(#nkaA3mf3sePZCj&;$7Ij+pLQ1w{5S?34rBYxHjv0Jo)8|^>HIN zAhda$zbiF`A$zh2Ab`%TPdM1OPQLxsP*0<_q}QybIdDYM7{=}N?6 z;(l;q3`X1)2Jm{$*NIEr(rkx3S%7oIshI^%SC8(+cF2VmQP3P8(1JrVQa0Q&DhCNo zXW|Y$fbL#^0=vmff&9hwb&`+5Hy-(MrV3H4@-OVLgM0*0vy@2dmFY3~A_o*MA`n6@ z!ij^tQsbEaH><_6=oW?UEjHVMLHAv-U;D!Ig;0@H&J|PJ<0dPapc4sU>9VnkClwxw zz$;hV@W$=l&GH0l@C=;!vZc_)u{KK+j7RuNWe}I|zD$@b=ZFng{GvgZ5;oWc;$j*v z9%HFKkNtN6%csZ?T(cCj+XO5h&kGu69<#u^{{TvS%`bm*?a3qTY>xQL7u_k?F$o7W zU0i>h)k62 zIwcWQTP>wivt;<6x4YH2;n!PX(8}SsDW=y-BXH$#XmO!Pj$|)#ky?NW^Al1c>h1M` zM3>?=lDDUs0G}n_9M7fwG4u)&YS}z|!Q5;PyqotGA>ks5hw#W`N6s znipyG)_|_2v%I3NN_NkAP7#!kp4jq=veT(5z6a^uo&EeT%?}5uf-*S|i9*#WceATU ze!^sF))#)OmR`P9s=`|m+&DeAE7?2+SNrFy{A%pH7qlw6iO)5C7?4N;5y!{{T>^@V zJYI`Q3~cNe9@{7&2KggSEo@+Mr6m4E%b|cIW$A0F7O1XY@55AHri(PfFV4UyTZfTumbd(o{6LfqF)OeC;$9&xlV=fZ!_OKH-b`Cz&#S! zQv{?44|fL7K^dQ>%7T}PhRq+jA{YIX-*TqYD)im1U8;j*_YzY~U-Uh<<809|uj_rW zW`F-PWOrFe#y0Nwf;j=56ZfX0p_ZBp;mf=aC&Dm>3lw9Mo#-RW9?o1fImSn>%sJE} zIgM2&7ld}=XhQY@(EA!Z@@~ugxL;Y(aR-yfbfgiagWKSgoob(Rc;Pw^Oic<72gJ`l z9t>u$Vw%o-3u-08(ADxC&)NqspKlmhvZn|)RN{L&O<*D|wmv>RB z$3&+8m`%?Oigg^OrU*{nt@*IglUcEKRa!H$KngeW`IzMP-)du%=$@%x0&DVDn@o|R zI+_+2tjfX=fn=?D>?LVL@1?iRCa@rjx)LP-l;zpUB`B*^q|pE;juycO3rtt5Pg;*+h=B;O^yHr?%wKlPSgBLy1{T9 z!aQqqa4zIl6W6RLRwmbwk@I`$X1$6ljnWi^WD$WX3%53Gt0mMnPjFBUT2}^#5+)Dpoe_P|&^f`;WC{bf1b;R(A|SSj^K-%AdM3}<7IkeI z!VFZ`Py_XZ!-87svG@Lsc-+S8L|Q#hLM54V2fOESc5uvh?SI#PZpM1(yzztrtl<-f z93{mbtvovEyW^@!Ath8gI=aPWc$6Pmfb)&5F8YjX8|&~`*pGFUMkeNA5`aAR&7a?T z-dR}xx5wL8She9H+N`;6{wuJl*oyieTN{t1HGFAb3f&VC59urfd|D&QdW#l{i0CBr zj~XSx>4w??3(*p4W&A-Ty0vFhd4&|83L&UiW0~#hW6IAoGx?n<2Q9jY;qJu}FT|g` z*vG>-K}Epp3AHS}eV}uhSELB|U*z}?sW~H_NYC@{T57OhOuN;Mb#F2ovtF0)bxLAl zAQ+OkviOGlqt7Kg3@q%{@82Qe6kbS7OiT@Kk&r6y_)pfxv55^YU9RiayJ)}h)Lbpe zf7;;dobEJq<~0Y9!e{XEL{`$#XUlPne15God=LVczhkqkmX`Me+Rt*3xC=4pwDfvf zh!ovp=tLJMK4#Vb_>@oamL3+qAsk5Yzc$nUYvy2^ z`p7{bx|EKvpKO8jZ+3FT%)%lM_>1lj^5ZW+V{bknYfu-X?43q0e;*oLF}eU84Dh_( zGwu$8=XctMGch&21Wu}*k*}{C+{Wn+1?XStK|5&7(};ve#XuD<#9U&Vd(OY^c72}A=Y(d zN9L*K5BR7tPr^Aa3gms2}l+&oWJ8B+o#KqNev&cDAJ zWltAbZ+5oCBS;fSS{kt8CLt5`BXj6@u*e^z^giJ%C@fqadj0uIp$t^)juN8mBj0Bz zfGW84HF9k>L&)va!=>@T>3Q5z$jC-Ec~ih5qLA)<32y-pG9~q21KnV*DO~V*y~4$r zg)618XD6E7E}pWg_Sum3d9cI)2ycPeB$1U<^etNDTLR`%0WXo;DyBXn5WckQL|Wfd zEq6=DRX+=wYNu8jv=fA>;>NMNQtPkD=Bg@6!rr{%7ZBJ2YWO(CKftS|s`KqImw;F> z^{M^kgZA zG}sZk_9sz_f;dYZEPY%V3BNClC@yEUXrizVM(+h!+Lt|E!@|N{yK@3w2=TjhZ>mgQ za8R-kF)89ZdFRlxVu<{5C9|*_>55*kt-PvV*h?qkv(Jca zpY7&|6=m_ra=1;+0t*hi*4ElzJ}y)k{M^bD{~UE*2RU{4Ya>k`qL|Si1X=X*OLh{H zU3<&-eR#WXe^nR8#9c7dl$GpA|Gj z)Scsy6NXF`GqXObk*VPKf$6N;J>Lp7M!X#eI->Od%W1#fhD=FG2}G`~L|F=PIXR@| zMu+&j4gZb84o`1y$yZ4{WhsRC_&jB$$KOT$--78GNB<1ky?&8Ykc6n0tdL1NFqtaT zU$+}rvK+{-T%{n>|0@K}uCC&aOxE8@$KP>q#oBai8o1lc^($1;SfQpme^H8DDLrRL;q4o&}DAr{5VBA!VMu$Kty`x2G?9^H%{kXQd$ zT>Y*CZRDueja9#F*Tal3!PSr;CDI`YF_cCf1PVAlK0Y!*7bLv~+itLRHDamOl9q`H z+5hE%LEpf@?kHU%w@VUJBt*pfmfOn*M2m>XNX~mQSy|bp=4PHp%hy3|!-k^Y6YZhA zC5aD^XQunrw3HfkQK4A}O%b$^4AR^1w!H{=@Pm$r`zasLkqBCZ=6J*7m%;e)km&ZrvpEY^p5W)&=j9+_3I^MUP)mjx4JA-FxaAX9wq2pTQc4SXd48f56eRiR z`v)HweS&}_x46uc)P_$Ph7R}h!@fgu^e2mj55QjVLNU>lml9`X2x{P;NaawB`{sao% zoys!(m1eg!Y-nW$D-cUWa!@-I-eh`=bZQ`r-7nM?#!0T{Qi4ywH^0~B?RjM1^6=s~ zQ#TZ(_OK!#51sR*7x|uZl?(_Mhruw_wj0vh`+qkQM?LDoF+u)a@y%yt*>6@7|@lfM5jLz;;v71Ja&c(v*Z#mkfpFYA1cMx!U(^VZMM+Q6jYjAY(ksejHm)HlDv8DLsPF8qL|GWbs>z zq)AN$R_mAXH1pKZ?5^v8>SfeHSia5Bs$%|QK?W=UeEVB#l$Mp^(Xsk{`!s=vJc3bl z@$+^ondpowaf)s;VB!YF)xj4Ml5P)|7|4J~3B)DlP4ODM? zFeN4Q79^hbQWTj7%mPYvubTas=*N?k4WxZuP@o2aonOv&KQrEI43VAGrbxGJJIWO| zY1!$f`M3%s5*c?a`^hpfj^~2vyrJKNxzEePeuJB24G1;JtaWVHP(4De$SosQc46PE zEg!A2susGzKT*b=uH}t~n|endor^N1`K&ERJrlyW7d6*}C>n1d{z%0mH`1{@!SWUB z*j?06G<1jCLTlRUM?~tdkBgs(`Vg1k|#ynd;z8Ure!Xi%P%VK(XdUgX?GA%mt4A4gvUu&^+dL_mlO3nBT0eD61 zeF!*9XZ!|KQNLvXBf;ntz=KEufFDDY0Wv@5;)5V(kxI04;}l=Oh`^kKZfk6vwx1pK zvsl8Fxb>db{U!6)qZm`K|H>p&_EGj5)E}KmBB{fuNKGmg5nl> zTjdE`x%L#VPDgC`hfgHfS;{1^g(Gag-}>bp?R|2V6U~FWegBI49;K!$9b(5?+&5A} zE&td_0ZHvciL}6+X!gLyv+(;lqtk}Zx9YjHh}Z0_3K0U2=2GQ!FN80^PmaQHl?QC5 z#I5*JOpIj&SKwZdtOJ~Au=*F2i2l-}f-n*iqnC1>>Yp2fN?Z3p)ez44!oK)I zAur1TbXX)Fh_idm~SYq0GOU9p|0ICM~>+JZZ?p zsc;Ju@Mv&`LnHvc0BG)yNhSXTtKD!A;5_w~gtl_PnfgbjBdzrgCde)}WyeWf>GrY7 z%?CJFRQuq7y{gJ;ng$38IW=D@uxjx5?32v(*WBHKow7VLT!K4`lRZSsw{awysODH9s;zk!FEO($sQy^M zR}Dn```Q-7D^HdD9n+R+PIk2Tr&ia@|3(qx{wVx=&}stFv2M=RND~tiV_)8%QOZg< zmApgue9CLbB0LMPPBgPwfHG)(Vkcf;Ie703k_t5?rPv-%@5t=;1$zZHxlRK~qSbY2 zt1`Gwh4C_nCvG={eUHsJQ-&P97}rc2c=_)S_g6WG2Acu)t44+B`{lpzN$zu!hZ^XG z_!tls$?>K>Ve_c{CeSijc5nC|$~OQE_<)}#c(nMu%+G#7;#&EV_qj%@NoG`D0=YAH zYV-fEUITG~-Ykl>;`hvb7Iw>^X{CH@5kNJ$kuJvjs|<-3_~VbnU<>#VsgP zEeym+WR9Wi0z7U^L$5M(SRAJT)Ot(nyuUc~12WXd!n z=T(hh(@ahc{Y~cQ$GBLy2e12`bvb?Nwghb<TaMDW);!2 znvjaSrR)UGq4r1kCZJeyn|*MBT2~RYshhEmfLz}yVff`v3{f;ZmHc=3)Ox1i#g|=5 zWux(AXoAcB<Wjmak*0k8MD6wRlE9JqAc{=zWv)sH7x~B;jzZIOhz_y z8o#f1NoUz-q1vIl*H6c)8lE>=Sf^0YU!4ufh%bq-Vu3^Fb7AHXb9C$=d2Tzoej;JA zGU)ZFJB52$`){@V*N^{O%0B?xpo-%Jqd0P)1^bWsT<*eRpzGim`dAq%rU5MlV%e-I zY^0vYAF|F5Q5})P_Zy;*4W0q1VAaslMmEQ>fR?>ReF2V4bP`*V>IUs&{4xTAV_Z&)60PZH&r-O~CQk-4eMlD!R3x zpG~{^vnA}~%Z~}95nxBMxDH7Y@WSXc$EN`di~l*3L7=@#;zF^j98U zUU^MTL{L+?l8E4El4sdwe-QKyU(9S6(2#}SyVzyYdZ%YMvsG>_`&3>|BrR~-%p%t^ zKSEuIA@1{n3C{;fuUNtRK~%ZHRkm@ItoX)@q4*~};(r{6?xM_QHZln+iue>BdW*3b1BLvNk;jqIn=j<;{ zR>lr2;VCpADVo_P+IQi!OQfAUy4i(rSd_HX1D6H;Vd*jmJkVa2Q2 zt>DSKK#g{~!`BXynxiQ_zIVFznHW!Zt zgYxCNe+{37-KX{b-XNP>FM?zZh#NUos5~6K4W9z@v1LoH;?TP*aa9k}l7~715emUB zlO_#M_KTCbb?iu$o4iasB}Nw7V_Vca2lmBD?%V`D2{&Gv`us&gZZSj-^AS8S{HvNQ z6DicXVk7VPEC%9O7VfC*mMmdPn^^gD#BVD%+H3Ag-{RTAo#tRilt4MEwli1HH8;1m z@pdnQ&Hf8^gv}5nVn1pZPcM9kfP^oGMU_dh1&r4&;F#QHA@P-krU#yeK9L}dg*MXW zcBsLsXu6_jriFSeSH#K~sR zk=t~Vc#;r}fJ5O##C!H+f7!&Zlj(Y=caz1vs|HkqKpW3jADuU(|5cEH-C}E;6@&NZ zUsQPKy{Y)UuMw}r7<3x%kK&6CcpM2qNc4WSv>#|G^!bm!_itra^2=he&Wf37x12ii zZGJnQ$XHUoJm4fG67>^)xz7H#`DfwdV3X6%6zI783uZbuxT$;q%$}oI(>4MeAT>1FL-jR(Lpn`J^tw>wb zpnm#!xthlce?Cky|0hmyxP1xZQ#^VvcV1CyyXXgB$u{mfp|%X2|ENl}lf?f~m6{BG zB=*^#KS^(O(G=vrPW%}yLFP&hDjoIND&OnMrmPa*Y4fBAg32}3TbqX#sNla6C%jOXV81SHODl|=Z!*4 zm#6E+Z^+Of&Z+DZLiyswPLYV|fwlD1ER^e@g;_4o*?F~20%}E&V!OY8L_IB*{%PpUPLHcXXOVOZ!h52tyw0{* z2*;ibip>mZXSGd;rxw1LU^x{?{Oq#K_6-AdJDd%_C%gPXT3Xs_zh^IXO-+-BtKIv@ z<4U`o9Jue4lwrxy{X-M%eAeDNN|w_~;LEnncFmy0S5> zSyGb2(h8FV2{~a-;dghW_KS~@iXlTSBNK5p-BVJ?p&Cj2k6I-F>l6BtJ}a6q+1 zIR@f3pTB^T*^|MiEb~lkPLQnGxepy@CS9H+)()IL7IPl0l8W8B*|aRubc=UOxk+D$ z*a$3A;$UO~DPJ;5*fL6uL!8GhbWzt#~<8O#|=G{7xHnw^uqNU#1m~2AQ zPUG_U<4Y@RhTvsMagKMZ;rRPAJ9L02I7=%z?)(~gKoPiYoOtoO4id$krjYroZxTzb z3@-vN!~yi9#d=BGLckNvg%DAb>p{!}OdDr&M3qpyzpb)#xlObhi~vGZZ*Fwl{=}s1 z$U5Nym|pviD}Q(#UY{!)Dp3TpverG{8Wor6W191x}Mm(4w|)pFm&w==vvTp97{417kq8 zGu?jYyI?BIce!d&s{p@mBO~wl1&9gT9bH_cT zcO0s8r>+t}a3We*k%-i5nT#-$EtRY8b(+nT(XX=FbVdyG(8l5O>Bo&slZ*u!;Ryc<5#Zdbc(3QJ zrj6iO!5nfFPp*pLIpc*v68yE>^X6aIKYnDg4gQiG%47NROm+WQ_SKY7>@B~%rU6!^ zURQtV-Cv-Q(5#xrKSgZxQoHUsX4pF|E3w^Ix;C@t1IT;D74*lqUXhxUk*fSv9!`!% z(Ry%(WMo!%3l#nQ++q%0XKSrnXJ_^o-k|6^?>Z2NM5o`}!1>IDKDB}cuuKUoZ1t_< z3Q|9CH4>3;g<}rLERKgOLwYXk$BI=x6X~7KRTLuqjZf;1`N&>OJ*RFG&>QAvaIM|KZB(_z1$FJGZ>s!dOh>s|FeJU1OjLCd(WgiO z%19>YoaBJvcag)XAvtr<2?fPxET!~JB5i&_w9--fzNmb3r_V;%)BWVIFv8fl+iS(X z>lA>A0lKvCvAu9P!1F@vDm_4KIRLtg&p&?HU>aa_ugCA5ZleTbt%|(v%$CG`M29TZ z@E}iDv+d$MzG;ct@bmy#oUw2KVdVyk!IT(qN+j#2;l0P}Ps_BRcVfDN+$P`GksE>h zhNiUOY?uwtP8D;?b zr=XtM$QW!n8JKX%f5(1BWW!zpGy`JZeWacav&|-t?iZSbc;NDRvnoC_!U}KEeao#4 zuQfpUtpw`E?^WF@e=Mt$a==10R>FQ$3lv*94_cW2CH}DB4^5Q)S~z&PP^0{w7Y%eUNbokD^w0^JKr`fnoU^NQOp+iLC2ldPMrB*e=n`N4n%uiU2UB{J@p;X6*@%?tsaZSTPa<0+$q*HLdE@_oYtsm8DzLNTu%Toa1~?{QkN8Pe-pU z!_7H!#2t622|LnOhFrBXi0znzx33z2j#rbzcN-1v@}^t-{?io{i~lPec43^D&b#B7 z1EZ&kWYXT&Ow;^Ih|jdGb~i<1lHo_qZ<0g%X^1D0P2;ypZ~9KY}u1hYR4uQ%P@91%;v}gbpKR`rXwJq9K5ql z_lop!=au%z5cG~4nn3*F;b)Yy=3f!3=bE~h;zp{dOU5&yhD`*@0grI7x;3RF@ z?})(yy7i74QQ( zvpR~fEy8R#KWYZF_HnW(;xs=9E_tp%^#l$wT_d;>RPRh*<`q%BByv*+RL$-AifpUV z?^Ca-y47iX)(j$XP&&?fQkT2kC9OYoKIF4GCfbT^2-StX4>) z2PYvt>!nnAY+>yhJ*rS~C^N`jN5tKwkkUHu>-Aog{&%*TZQ+t}&JdCTG`65-S(P{x zsv1%vMS>x<5ZS$Yy*@!ItA*jb4x~)Y+P<6Xg=yPxE$$|GxuV{!TDquh8XU>D7{TI=`cfA(&id0?F}Wg7w@c z8#HPbKi4iO@JJb;EhvOm?^WdH?1M2u8dv5Q(mTXn?T>9Wj~p}3A=Cs#8+ayBHO$6s z6L{Ap6}w=BrS3Zq{MvOfzAc9zRd@hZQSJ}-V{P~c>31zu46kGO>F{5yF&d4kZ??W~ zsjO{WS$-2Ghdm+RKfwJnl{8H{|JpibpZ-mVo|_rLjE+l`67a<{)THxq_Z7C5$6^Dm zR0EfGYv*i+F?Vz4EC~F9O~{r3UJRh8wAX2u1Pg#J2R)JAd-JE0MT5HT);V>?{4s!7 zeSdCbg4)dgJit956l8T8o1deBo*18tf_2crh!4^Lk@wn8DXEWd1deLxG}e62Tnsg9{F})-(SDSUU?}`&`Yt318@3|3zMjP!P}2X&PZ5& z6EIzwIYEZG)7$?sI5s(MRO0o{t%^mRVZYO#f78+}d{Ui3mt{cXtUAQqnCb(p}P_bSVxZ*s2*DSVV9BXqH3EmNtg26{VCpaii{jbm0 zG9uW;xmUZYwN+#)QSW3j&Bje3cu>XkN#$PnP*mr2jCsW~Ifm(|5g;ZfC;L8sR)BdG zzB#=Bd|GRh_E?TBo2{W%+GE1U5jLXx6^6l&)lIZI-E}rYUD60SDrTdmB&fKN->&2w zx(3$EJvbe&-ILvgx8|hU6W_jLlwfo}-Qf+5%6_`-vk?|%PF~G|@h1Dm!coAutonFg zcIM635953=3{XM%_VZNp^K{@9{!*Ff8yFs|V$TU7lLt*prj)Az2FpY_F+XG!UrB9l zV&|S0R+zTwu|PaDjhE!WXxjhY#?p=BZm1qac%G|6N*>FFN^w{6oLpA?a_Zk1V?xC% za5hWZciMN_T^{xk6r<1XcXQUW|KIX$lFdy6c$f#u^&Ja|5#5^y zf5JiC@z%4f40ozx*G~)f3eZFh-PlQX+;lT7*|Q9Xdg(4Cc7*1F`M)Zq?$$}h5I%V| z-Cw4NL9PsPQ9?vlu2dQWELp{=FIH-10M<~O9rK9#I25B91~QgLx$=$)C;^> zq%rk*ud{wP(os#_(GGbfrwB$jSIvN1mQ(eShlma3y!6n@+uR~7qR#_2u684v$uT`) zmOV;$Q@s~42uOZ0TYK$JTir@6aed&LgQ2ahhpSs|MAA0;u8;3^|0yYGf--}&D!8O; zyy8ZgSY{8%j-8) z&(Kk4?bBM?ZWqxE>JYo&9VO;ov2|DG4p1hP5Wdy+DV1A4^88L|FT8f0vy-05%6G?b zk+m0qg>j6ukA~;558_A|GdE?T%k=m*-S~ufq=9LpKU%tOfNd|H<6Cd?S_l0*`u>wx z2hM&a^SjZmZHLgR+U{3R5<2lBpp(opP zH|ovp?!>Me5VgGK9BSUuzNkx7)C})=PuncV1SW z-(>Mvo*RAW$_O^1KZJX`n|iEfj(97=?TKW9(>qolxAL}bq`>PUi%ZZmvWI@G@A~0*k&v~wyl3TCzR+INe>2Ffj z{|Yz9HK$rnJ5{?54+=BXu)424SLXtt#@O%HE3qtf>rM`CeFE$ZyNB-edF*AyW0M#x z*WHV}(^$kfD8y{0%CFH;P}v8~qV3b}F3*v>e)WOnfMirdK=x_%3v;3va1uP>sx7YS2)S@ zqIE*?xKbU_h*=YIKI=74X6}=N@ikB)&}VkMF`n`knE-+A?Q9J*X63)y8c~>)Z{33b zq7*e2j4iJ(gaubf816)W9WWb;$&?;$5Gn|5v3GYxr~fS($Br$7YGE{Z1(8EfVXt|} zLG%QD6&(pDdWugUf2UB1k&6q9oZqagKrzN1ZC1%ssPKl%_%AuGJo)_e;5}NVr#{a> z0;XsAQZ+vZlJEt}#lRmK#EE6c^63(uy3gIl+cuk%+8aI66#UbNvsvebe9O;oR)c~#FpN;t-ZydBOmyxm zbK)WFJCfg9e|>5j zjOV3zll8FOfZN|LtWwY&n>K1Ht5eK#N%*1D6e_-gwO_0Y*NT7imn>O~zPG)1+4kiG zlZLDUJ_w3)Rn!w4Lws7kX1tdiG3`mHM&~sTL>Sx+~xR-r=-TC0`ri_MxBpO*XH?%`2Tx z6mQxcA^chNf%k@8kjVx_AwMzZhID80MuO=KxACt;`pJ-|FV_C9y51*`{(U&H!}sf0 z>&(j=-?j~3+_t#!X`*cBAdPr@?cxQRov>iT&#oI?(j2EQB!@9jh1Ew7*?kJg#O{)W z@R9m;JprFx%&!lEvGSpd19b_PO&a_ei)Mo3?Q822s!2F-&a2DGg_N1*)dmBGFF-{= zdfLsOYx19rX!R*_{e2auO_bRT3-QYB#xZ4;8F7Y=EiO zwT{z0@Olt0v)NnBOq5LcMw&NeW+;4(^3PWgjV$i)|N1X4o)(j-ek-aB29?zvBm5Ts zO*vH0MIpC|(4(bxR(s6b{BAB^x_ZB#7|pO_z2pS;+37LW$ZQAPp$gE}ke(q|HMC(C zkbA3exaZaRmm2bSadCkVlK0Vg2Ori@rSg7KRxWfPU_E$sW5?8unAx1~#)vAJ^C8vUI3BI{dFkqS0d-iw7nnF|F)MKmzr z4(Epo=+91ILq6v0<97O>b)slvkaAp*r!;xC{``(J5-CVjpWP9+6Ht?%Jte{PC(10O zk!&`r&-Dzx?lMT2s{$;EYOiK`!`JoMeaKoJVCi1D@JtdxK>8!x{x4b|#rH*)P6XaU zaEUU4s-QsyX)e)>Re-)ONlFs?Gw*D^u#0jb1A*%2Xf4EaQb8tyYOQp^i(dLP6~;bZ zAMIY@HrLPru)s;j$koLyQvAgOj>bVqmC8i}W)hb_K9D9^S&pxM@|@(2Y(VhVPTR#< z#U0Y@6~C_T?!{qc`tH|v3WsX!w6erKdY;nVMKIJ${H2-9`ofO(CQu`Z4HR$bRf2_g z-0={i{Z2^1CD_TFe;9h)Hsf~Dfsg}|GZDs-qU;hmwsf^xs5pGDDq-88p)~-zO(zyz zMgnYQ#(TGI0)#HEx6l(Kbu{vBI30(hg#stT1WPNxrIf$>%6(H%Z_$WqxRKjLy{6n; zZ@G+@9Vl^eg3eq86Tgqork`3^oZqJjPy)5rM4Ij1iT{`XPN?c z{A7!e%v;M~6}+T99ibRW&z^-WEm`et&C^FkMTzVsURjkkP}vHC^@=!ebTEwIAX$~} z0^P)9!50%0)>zjWHl4?8b;MUXKitfixuI8 z-$9EtRm+G(tpeE6jBXB8oMut(=A<3K-3I8gzCZJ=-Q1H}mj5SXAXWAx ziSW_A++G}{Rg8n3e*f5lXM?Dq7I)9o|M|>}iGqT{*T>l@DPb_Y&vK#t$@bn}7pRew z(%3e5N-3bMjwEb4UyM~0^RD8C7knT3`{K1=l~6OhvH80nR48=EpGC2mw&~hhYE8w1 zxR`Cl+wXjC&eK@_CN}*7?{Ao6#~lLYrw;}ueSdCAZ=sQrbG`oiSP)szkr4=loWZdL}|Ox*XjpomAmJQibm9($af28}Y9_FMs9e9fzvg5t{9Q=!V|<^h?fd9{># zYK`hHF1$3fwCioR)z#%SG&Ih}&(F^}_(Y^mG^!+#ZQa>;4bx+P!y8ZyFa~T=i_lhY zvVu2|dwABbF}6qq5KNlh(T{$`q|6n_Lh^(KpS`-D<4tziJF~YP2aOb=v)HGz>g*t7 z6RQl#ydcM}iSSgG5IXR^c+~S~YNq1-KBF3*smHptX>aMRonKDd>gHG5w@;<=UbMMQ zY@WM4@%er&4qQPzr{8=70(6i-i9DcDBKHp_CT0ih8We;Hm@lVeuyfxMMgxTJ{AW;L0)i@(@74FuK=9+Djs#?=~ zG3F}0;-NWVl@%(Mh#8ZtvfmlD;DmfMcT7Bd+5)cHTN6fPatalkIwu_oth@D)8^a*WVm*=p-pX zE$Xlb@Z-SKb@K~g@20#09UukWvb-~YO1)lmEmDTf6Odmj`>YD*&y)G-Z^N}o2!`Qe zf)Pfp_L$OVTJZFI#UHAwhipjs^&Zf9JoRoUcO$X}(-(XyLw)W^C+2W$acx>BxjJHX z%oO*n;SpT)qu=NhQ=QI{n+ICjx^cV${4j#Rt6PI@6u4)W|rr5921msnl+Y_KAL?mYjdEMLR~gjhk~tiAV-S)6_{Bb_|wQ2^13ZfF7PVufGX@Yy$jXz z_ve3f2r0(fO3nX2e)DJ zf?pp`CSFLfNN+VM3^c=u7bgHN z>e-*J<1Mk@ZU6fS8=?2k6k!EWopds%xw@ox%*OY&EboF(`l|0U&f596ByPd2>k<4_ zA*PP*^MBzW`{TONb$|B|B{WAVFsv<3l8hZ9g(KdWK&PG)t*6+V9@$K^;OV+D+vpW) z!uOlDmW1}Weyl(URxKz=+tk{>t=DHPX}-tAER zDK$d%q^4G}N)i_#7`}^imNFREv3u^HN=-I~mU5DAc+j5T4_aXv$jYD9bmg&Eku|(A z!k=m|z({@lt(F~AQ*MH3O(lEUVrX{p@WqTWB6dsSvGVz2z!6LgbT6dv&~WE&Xbno= zhhinq)NSc=;kQ2QnTUJ?5~QsFthEb%v-!N-+}Nf~YhCnEl}zP+g%-q7f2nP9CYTFi zq5)g5y|KhgO?YF7e9}eRB*nUnD=}E1M4z8e8|55M$0HKvX^q;8+WGw4($Fq*JC(8^ z1SkzWs~^vRe|0*Qhnmky>cV(IXQc>Be`X(PIG9n#2}s0|QE(qV;%+SLsNIT3qMd)X z&`$PgXo@(^`}IsGU|whB@zmRFyH%=#gjf6(!Z$?Tqw>t@Y**3Im!K-}g-*ZZ+cg}P zd3m*b?V@n-iiKR?z4DEp9otye&&XLI$uuW&dFadJM50Fx(e!O2<*WRlKgT$CJfF0> z2C`7uL6NnaC{)-iYr3@!9)c<>AKIUU7jtJ1*OGWd><1T8s;*YQy@WT>78kKnkwY-+ z9dGkcEntu=Kib`Ueyq7|9cPRV7+Th@SoA4Y_uOP;W7M!xk@xOwz>|q{(2>|XNpvqE zy^NBBp_Z9#e>P{{qq4IbVdiQ7CiN)k>-5JmenLHjdHZi;Mr%b-MI%!trJjeV$meXmfE!8p|5W=`z~R$AvLpuL2) z7xWL`J&Fk|lvf}ZEzM>!L35RYUXM^eMy2Q0U$PA>xADmP36;=mEyVX`Dc93?tOb)U zwp+rQZB~<(7=qqycZ{~blho^FUc=S&PH4dgYF1LyA)s2RWZ@hRUu!4fP(elYF#E#e z^lB!K6I$*@Q}Bq|byEVcuz#krnzP3YA2C99v!E7+7}6cm%9X|qm%DQz1x!TgpyLHF z-PEK8kYIK9v)Ga??B{9`RtQ}|ptp|{A1|m1aowz6Mv)`^@!|TP(yTyBcYz1NcnIo| z3JdFFQmC4BgIr>IFRuwmJ}kDg4E2W(b+0w@NHVBe3Itp1iNdUIAippw1|9;D z^Z48kX?6qbpvXa_T>eBf82VnAe6x)l%#9<-zNIy4Xk}e`{GA9|&hhej+insveKEK zJ|GmL!|Z{B_6wc`+Xb2CRA8w|=y6nkLo zdOmd3ACJ24*-e5}uDLk!U9XrGaTJo&NN;2~zVkLW-u%W?Rox36E9knz*nn+W&gg|F zk?CU1r1R7LbJ6rr@Oi1(OYm)>?jCStV*4Jxmyj45^N#+Ok8(3yt||Z?2ein6%_saw zc-?99WCFUig^DuFV^A~>XM%APyK@6VzK@;5KpiWwxBH$y=<$_0qg}-X5cKlQ`=CJ9 zvHj~vnwQNSkn2$T25D1Yiyy}PtL1{)e#ts}b_~7kk^sHmO~FR-5%|VxHZn^npN{1n zKDRH#!#1R;$zgs)8vSZQT7qn}RU#Vb#+gBGzUc`JcAManh`e!i?*$Qp0csv@aRnWI zPDk@23ERb|>V;F3nt#XJZw)_c)#<{<9pWU3Hm%vUkv5xt*v~`AFEuMsM;^4VO1Ww{ zpXMC>HH+wz#Mh_LnOK~$GUu7yC2zf%j;hIhWnV3h4A5CfMPR6`KU}3`E`v(L8~w*? zdK{8@A%CJ{837BRKNNAx^rVdMh*>wy+nwB1G?*j`>mZ~Mb=v;vB*|R44Xv=1AGa~V> z54O6GQ=>{g0z3imn^*&x1VYR&CA>vPwd5CTij<%7LThMPud3C<$|qCQBRN7Y3LIv1 z=M3sIcHg14l{}aHcqz|R#Ri?o9_a4LVs~Q<s|0rLq9%B z=;PZYJLq}{{Vh0|(O#w6@t(aEmxANi*!cDm>!e<38hn`r4x@P!K`~%Hy!N+ShcHH5HLAPBId6CQzl${G$W6OX3$xGEoVkv|2fRvUYdNp+ z?^ic4?=A48H{JZ>cSZ*pTAz!J{ZUPYTN5aq zGM~@S!|u3Xq6b$rCEGLxhs8n(#n@QOTK~TE+s{K7L%RokIll2&sk7v8ICM=>DsH#8 zp`+hgy!9fMvmVL@R~Ba8dn}0InLql=3RJ?x)YNbwrxya54Im8vaI%DguV*auUu+C`JP9^x(6 zOdLrG`LD9az~=f)hOy`6@fA%di|o|REqLX{pdgjJc@m0eAz`Chx|ms;ZNQ-XsGRn& zw&8Ji$CJn{`A`o=0{X>-R0{zoon5uY^J+~BTBT5FY>zh8rGwje!eVZyfm0G0V*?9b zO+Vdy_qvydKWsS{AmMV@!SCL^QB?{gt8wia&hd;(yIL(`|tJU)^3!} zPO|9ZI^b~8Cnz5=N)=zt{Vg34TVl&Q#ZNV=et5F{Dui=T)G5u>{C$R~@Kt`?4aUrI zO%R%%^}^5#lvzmu8M7l=lmi72t?Sh!0h=i~ah8s^Tf&oTLf9DRQZph0cR6tLP#SM>a&w0k z+wG3kAgd`;wGJ@Xqzg&m{(#LNY#Z0G`1R}8yjROP*FM85%DcoLZl$@$8#=9J>h^7o z$HRVQHTWVvhCs7>_faJFp?rXNOuObN3Wa`SQ0fVK?p6Sn$J4{wC(m6XpfD=XMU5(t z&IpnB#pJUni5qc;gaPmR{wz++9fo8`yt3QhU**2e#YY0EQCIUKe*Mc6G9=p1QT1R8 zWtE}I%k=L5Nr3Zm*$`f>p#h_z!L~Y?t8T_z>@X1s2n60%)Hc?Y0<~PW=Eql8im?HX zF!FM#Q@s1VGIpq1oG{o2VH#}G=!uydbU-Qn_eZi)0>4=^cs}sLYifi53lpJl9z+T} z7=w52`NO$&HXn&t*w~DwY_Yl>k+l&gorjtO7jyi0JfY8@hFKgWZhCvA|12*OaddKv zepG&Z)L}Y=hnxD@i5OfUgo~{zgPgKcFNqM6FwBII^!K+TALsF?)sl!`k8QY5^)}B3$VIlcw(cGt%%_?hB$n=N0iRSY5dR5zS&0KPJD=oA z_ZHgCU3U;w7NYKu&*_ASuWTVTc%gRT`P0z0?D-`ee}G+B=et?_80C*XxOwb*Xl~#a z>|A{C_mHl*K#gQL`I4WO)6@Aa;)R2I3U^?o%z|##VWeWjGi&#f7EHf7st7D!lX3qs zjNrpgog~xk4!G)CJn7-Y=I8e(ce_3>GN!$F=_3MFnQtRkrMr#RQKQ6YJkhEZs*jHk z74@}iMzReIHFkqNVVJ~5wV2ngy}sCjLY(CBYGGu2d=G2|+np6?d59qTll7N6dWT{BnMAP}qoY=^1xQv!vX0sOb&LM~Y;T z_TX7kHRQJ(Ad0pCtO?qmgM+6H4WdaK`|IO>0KB!7A3^s)bUtu&$>elKVs6+ z(H;Kc3}ZZ7wios8}TJNPg38g(Hm<#GZ7s40C;jC{ zP>gG<{!>STSyp757oN;F4lnX>w1n{!O;$|`r+EIrM=!khT)>Q#B=@jZdo=6~;wq)-^S8 z*#M@H{$op8J(xKW)Q_iP?_iBmaj6~91WxrD3`<~jOCkdcR+$%iii&Ny< zBSLxjo(74HGxPgN>P{1pm&ee2ve|TW*mmK9{hX7eWP~hZ(=~^0^)MKtXMa5;eREFu zwLl0|;~Us7!ZTh7qo=wOJF(w*i?<=;Lk#ZS0utFKHv`HajG=$*`z$0Koy>WcWGBCt* z+}nuS6hlEICG2qj*{AP@YRFmgfrQK^^HPr2S{{vAxyh`siF>`C@Re8JK+HGtVQO<(_WOY#2MzJK?P zD_fF;jIUWjw1+XoSV;ccHyPeiO?Nz)&g5JBWl)HSBYu6HQoTn}<<%!84kW`gyrJYy zmp{QI1_nCz+PPxBFbpaq!BX6YylQb}^Q(RC8%`2Do*spx#n7rffv;3c%%_5^TV$=O zH_oPJ-@NGrwBCl+uql(h_}mYFamI?v=i+~%_uUSR)uQ%pU&eiz9*o*7Oi~J~h(0Or zesOx<=n2Hj)oHWq6(u111uTd5ES{pYn@MOWiTsoE7~wn4gwQa8IeqV;c0Il`uT_zM zeLwf2w)#0qwBL{pcQ`;Opc@B+57Te*LqplO`8oc%+ghjCi7SmX-TZU(mBS9}mcS^N zHt7^pUgZYwXk-^if$yC5!X)4-H@-<1U>CLry_C0ymZZRzQCSzj1~2EM`D(I%2&`QyDj&8y>_!g77VDL6tQ0F4kaTW9Sw;ifq6=gHshveO@HvPDa!=I z^@Il1tH{1qbzK*S&;#ZFRlAwCWq_#(?Yd zDt%G0ImZX5nQ;V8i3n=D(~PJ}o5g$5xVw2btQAE2Z=~cdD`KksjVkXIA3urZ#?TIuI0Uk&oWnjSO_@ydO*W2i*RhI&N5zRa@) zk)?C9zkf)$Hk{e{e$tgW1Z7v>4&O45tqvAVIZ=d_nvs1qR%SQZihXULIEP{4q^bJB zF;%Do)@c1~Bbp&-`wHFuKU^a^fcnm|JPwCov5s6C4;S(N3_{l(1L* zM&aL*;H11<=`XhMhx0?i^e_x2@)3J^{(?yY z{BbWVgyRbm>z-ZsxpbxIXWA|6Wt3biT4;LL)HALUPMw^dnc7vdu{N01O{P2fe_O8P zXnd6t2C11%8+Ak<#>|&To28oUS1Sx}5sI2u7{-%Uzf?kFRIYq`f6(vZqx((QTZFX2 zw~Dnnz6@=2Ny*!Q69-q3_r&&Tkc8|K*cwBh)GVRbYcmgXT2^wNA@Q-{L_^U7M&(5^!H@hkx5H zcB|Nqvi(w=iGgtUN`Wz;kM#BuKyu;Ric^RIzIW?}SC&}Xtl z{{Uk$rLdEc1Gy)O5G?Yt?--w*j;#{b-ndjS*L|UzztnR*X8v{`nt+0|jT7zazXVSltw0-#@RDWV%e}&qet{9vx^aV3+0TaHJ?fP-(1X zBD5}^vq8iA16Pq_6|E?6DrrLzBlsCsoW)eZM)p`_=Z&sWT|C>oVh4Hb(YvJP6;sXG zF|s$w(eZdrrLthA$KDX@$}!9a0Tztq7R&cD)3UZXpu$2HvwAT{_q$1n%o%#FU<8G# zCWv(r@V*Me5VxMP{+l&9-`DS-^iy^3Ky{39qiiu!gjrjCz%i&hZN$4)kLLDZfYvp6 z`;RkR=ThHX)SQq6fAYc1ajws(fESB-GcQ8EQJ}42_$(z3BwY)7w!BFUHqu++X7~y1 zAxV~FUMX@8fCs*vuT5pSDd~qnZh3EvV@$T^`h=Ji*6pySM{Vj&A-~oWj3&6FImcd^ zIPQCx)9_?De&rSFaiF24fSDbJL)0gX(jVxdXY6pWdyw4}^*Bf#jhS;fImIxTAAfo5 zu_n{CzfQ%Ezi+TJmHuQ3w-WsKfe((XstgZ2!=ujfb5+@GVYY{hPaPxD*SD4Rcgg)f zcgu1wb|KZvpT5lpyPQ@h83|WM19Yg7UVHwWxU1I7>Wvo_M3P$Ezet3@MrbCwZRVy* z@X)D`=yT@&+d7jXZ5}Mrs6uUyefTM-zi7|p&`~p_!+JLUXMk-S7Y%Qf2rGF-!nN>_ z%AMN|)JQx=QQ}z~1p-FxDqAS)AJzH*TuVnAWz+72FYj(4YqghG3erBo^P5l{hF(dl z^edUEvR-L6+13k8=TQ6#(ZaU)vE|q+;`>rt?eAZtAD3aR=ja&q2}P#>%j61IZ1eaF zEV<(&nc$1&ZGOp@4CByQ3ByCyN!6sFTY=D|%`n<}J@*Kyi-Pf&*D`>d3h0L;w*6{V zW4d-QG^9&UoMx}3jMXsm4z7N_uOt1qKG%X6Ib?KA=Hv99%wJ{t4i@r%rAozp^I{W( zNRc^IAn8jpoad;7E~_TrctXb?ONZ|`R)=BcIr%&Wwa4*$S%)OJ1fX`DuSng(z=HU^ zNr!_5txTfOwCfxsScq8^-;I14Cgbqfjvc$zM|ZHc4fth{Q@QUA&rX@>=@U&#jdU7U zc8DX84eLw+zaw8?_O9?`^XF+r4(@Y_aBmcRvxC|}=vvvLfGAqE2y22Erbd+vBq8E2 zwBR*aW#GE1nnZVb>LEP227Mg+-ZIJucoS)OMOz_fNp*!h;A3+BMJh2XX&U((-Dk_* zQfo5-L_l5j#PoQT>GaFmFNdjc2ljzBAxCOC-8$s1*C)U$GE};22!Bg^0BQAfi*qryTARZK6ZyMiAr`v687p{WQL5{c-=Pw8Gr(v1)4q;_56MFSxwhTj=^CTkvtvCg$BdMTHXXcOh@W&^;mXEBpf+b#(G&sxXFGUO5I#V zUSD1_SaM3}ID^ow(n`*p$=E9#y+*{=LY2t0={_eknFJTkqnnxZ z9I~vYtFu%j>+;vJMpDG(<*o+J7ie#izg>bO3W4|*=8>4NM{rQe)h&WFGC*U11?0|g z593r%;HW9kBF8sEaj>47_d<8NyOSwZZmxB3&xZV+SpU#JYxGr9aSYEXikG@|3iTT_ zwjpbqemteb2id#|$YfNQ`i2E%@b@Qh75*;!g`5lzdK~VltE-}eoPzttz|(JX_^NdI ze0gOho$r~O?s%==6tU3@Rb&wRkeLr{g!i3cHF8N%1ijq8a3nn%6JgFS!Q ztqc$&hskv}9AqFO5lend4P*3RTqTi<1rrIh(_93^-1-*PyT$f;2!@--kTu!*3tDo< z*Yls|JJBFD1gz;awgEbHqR=Z>63xhv)U@F%8ToFwaKYO%(?IVM-a=Fd+|{x2yI`wSepmsatA`kJ$U-+iSze>li@Xtmx?w# zs9Oi|3eeS{%e{DjiTsO>?_r==eS^iAbyOToY6gwf4F`Q~J>ItrL&Yt`NwWZ%Ui7jS z2*y{7(%AQ2W?>2I4@qj-K90-*9#6!lHML<+CvBd=sM+~^tu>lia$GCtvv<8tya>7zKctiCfjD`t6Uk$d&`KF#a0QT!U)R|hFRpuE&WF~Rh{`? zF=zu2SH_1OMxjuD`v_GCYh)y`9}`xvLq*aN`uU*T)M-va4%E3;jy#jz7|}uS>xDix zVhT>{m4cCtqM(}#^b}>0By`2q=OlR{Kbk=joozi3TYL{Mf#g#G5;SYQ?w!NF+4rhs z;`0yW@Lf~&RtW=*Eo-E3x3-*j%0Op5!a4xE`loJCF*?*V|2DJ7nvNjzBr}j?YKQ?h&|R*hi)tRl0l`k$RjT-|QO?#2@mXCkFht zUjNSt9bVt=GhXnuZVn)V!M_S98%7w}c8;r82E`%>sMqXV$7u&TfkqDtA_u8#2OHf~ zCR{gAQUGLE%VA4P3;IE@N5p`Fw`Q-L8I4Bj1?K^v1vp70idXA@r5Yd>Sc)64vBaU9 z%>MnvqNfK32GhPGb2hHN)Y1#{;uPE6+q(UM_^wb02o-X4LICxS@KwO@W9FJr7hduX zcKzBp{skJ^PL=eDk8g+m4#DizI4H)2k|M_uP=nIjuwPPz8>oiDSC6GJqCWa0@W_yyFt%>E%_de zL6L_|2ReS_BmPEC*zRy1DRo~UEFiErx`MOB-1SGam_m7ZA^3Fls;5Ra>ZJ%E*Z!zw zT~gyWg$k^lH-5_wa_!`F#$S1pbWW_t{#2K5d|`V5J)dW|DpSBK|Gv+gabIfX~MOk9qi17!FpsVx~{ zh$K8ZQuQCA`)j!_BcQ|KzbML8_9v8gbkp{CcVWt)pvUNg8Nu&v?6y+q9*-Iz!dUv< zwDk9dPVA^#7m0nuIk8>*ZzXsU+&70P^YIgcD^PJ&;dc|3Qp}$a=fkSTSA^%Z-XraJ z3L(u5M+KqjjmjI)FomfA>dqHm7A2d0@!8|TdrAH{v7{cgeP}4Y;I$I+QpVS(M;2#~ z3LgBNAa?|JK_~c^k+|p*o=*noczC6T9pVfw$j1_eR;T=mo6!(;^o=BOvAps2q*a+U zv^^>@qU*3~9B~Ba>>_XT~9a2QTCK z%?hy-5MnKLek5+wchg)S%9=RDR!^O?Ca}3AQMAo?wlOVJrYKuDp-ssrLW= ze6%*Z4ig!Y^De3{E&pJ6D>X#}Z4^3%dc|#mpJ#pJUrzmYV4w)uwt^V=jU;8ZQEGBU zA9J_JXmgPKf{G`c28^U@N!12PKN)0hxvG4s$)dgj3D&h=6Y+iZZ_|Zj1>Kp?B9KGsr3r75un{&sn)ei0sd=(|@MjGZ-RX9FoaHttxw8V02fp z?NMyXBU7mb=ch+$1RN!A(f(mn^9&QqFEOf;CNzqI`twjXKn^f4oc-JIcI`LQo&A+{ zdC>4e{K_-!lT_abz<$+#-x7(jqnjKpnhh~`P|tsV)h}5$2IWrt*ZOFXT12|UYz-9= zCKX&N~CEM${F5ol&-?lQ0h4AeU5DS1|KIur|9mnz-?mw^nM>Jv-i-fM} znf+5?A@o+)UoPjPe~1fTpUQcJgafGk$5}h7h7;qg*xh4gxqIbw!d!;f1rQkfk|^nhSSaNOBKVF@P@po4J{M|7Qonp5)DVQX1&hQ zdguFEBTICkPyK26ICkyK8KdTvzmiho7o};{fe^&bx)q2s3QGC#ukAUfd|qm2%Es>W z=0pEwLh%m0msD``mRo;H`mMtCA2^o$1@>^_9xY9()XbeEx7|TbI{uke06U8tT=6jN z@!;I|D^7X8PTup?Nx?k-DFAJy4I8=J-(;r|62l@f^KVNP{qg+R!_%V@wmVk__n7NfP++F`bM#-ZwAU|}wtZAr)>%Eg>2u+` zkU-k6FanLmcG-A{+LD0uHyS>j(qt8jD& z@`R?EP!6;u9OU2*empk(5t+F&F#8aa0RXU3t&wu@?~X;eX=zE3HpfT=vJ8*by7`0K z700!m4Qe~Uy*e6iM=(u~ zyfwNR;ffB2S{piA#(owrfOmhyRU-3*jtd-FiQY6~iUX#^Zv=4Fz36;z(ZLw~rH4X< z6ow`n2;&c2Y5sWcPdE;&u=uRB)f1Z^@&H-^ZyF3P`@jT!l!QYzty{cD-RGO+@YzO} zpN&8O#SBmX!)!DC#GMzm#^A%dHk19aWR>)W7ulYY0nHbk@9|Od<2hHW_W*R|`)*m_ z|7&W;Tc!HD1e!oF&1}ASce9^G=tM=-*7)i;!^uc~Qdg)=$+ zORrb)qDHMhaSS>s|TFJa8soPA1$lT~3dz{TMk07G~+b;v=a4ph!G+z40 zXQQYe!#Y6pH~^f7O3A|X9`xT&pJ?hG40%JOpx%3U1N7e)?s7YaIItQZ7J_7UP0)_j z07fB5ou;cE-rk7(Z4-NhT3-Ju{yS?~5VEkDK`n#?3$O;@oyRsBx|c`TA|AiGDxbw~ zbwKc^T+d0xOjQxQOG!_gh7H}}Y9BvqNMg}kVU9xB$z*F39v@p9490gI=+;S|SKa&; z0#Y1=>CUv{*3D&Lg+jp!CwCJr)V!2=XJ|_RB0eANj5O7Ga zUeZA?XXdj3X1!?BP{^DLK2hC$eB`;?Qu-rl!%*OQ?8I18wy@o+kIGE9b*H` zv3r_FFFM8VMfT!oyt#qe4vE;buI^Wu((wb8&ZdVb`?dWPC0w9MU>btb_2o$TdqVQtty}tB8jO<8FA9?w*fPD*FPmnDhx3|qM#mL{ zdpY=(Hco`y?eepIT;Gelt=PEwunqBAG}s(={P<5-3?z`}>bNWl(mClJ|6|t7LA)U` zMK$>&Y+IVkZ7cj?NKN1^+e|(3PTGDU|G$pNTNI6$vUSHxbfQdd&H(@)!-@fCB6BZJQYO=SK0BxCR?)bzq#trhxlEdjBILGP?m6`ENr+K z3TMD?s&H8zP!rnIHB-hIE6Nl=&0Aj--B8nf#|!Zr=vKBB<_7>BQ(aPj@akU&H7v~x zB@M+@*S>T)`G(*aB{J92{(_}3#M4Fd#TofWUgl4+9|WvXvn#lh50{LPGvA@jlDI@L zYxV5DXmROd=gsA0Z}Pw%oi^o7R*yD9ZoK{@k2nD0Yc=F*)zo#hj0Jou)zjNgeqMM{Q zY-+y3F9A|ZfcPa2vuJk0xa>>i?8)=E<~mvsMJkqCqU1r8{BQud52$64*RE9x4BxZ5 zVY&6&Ew8L5p;PGP2D0wHGI$`Ad2M8O^TJbTGG z%#(To0JqLgMOOh;>qtP!O`4L@A|7QDqKYp%9BeE8N>G81`g6JCtWsVx@ZY=nY~#mf zu*Agix)#|%B$MsUcQ>g>yB+&L)X$^(Y{1p}8QvAC+|$B@A8%I>?Zj$(FgzROSs6a= zqVED2xOi5R1RyvA;u>@H8E;8DUo!F}G`ZYT6yVJ8b^I;k9^tTzl9$( z?xizsk5!T99ABT$J@_U~Eag7rMQ_ie(o4)UYk8NXK&pqXS2Kdk!jV?^E=%&(imwIW z3xVEeIK;e81g{nhWkC+9^KGJ9len?%soOq2O9|Jqs@}l9g6BayW5|KEe)t)!aawF# zds^(eLcNb;E&L0Fw7+dFE5eYVExLh+DSF>BYtNS5>EOcS`*lbRr-mr-%U~GT&UOmE zJNAZ!^Qlf-vVM2?6$H#uaCxpv(|>ly$l=(1HW3O{*nUwr^)*(VMg|lI3ViH*K1s0L@+|ok66FkmY{U7tN<|Fx?9jvY(XOB+Fgx5uo(l|G7VSwXsVbnS7o z*t?%1oBc+3$Vmyu$Ax-3Y6i#@3g7N}c8KUN4l-DKjy+HLeC+oF$dkP|#eMCJ$;Mv(P*F>rGeNS@W>DQY zR6R-xde+V{!=Y1x446UqWmG$zY-;mdw$ZR=HMLHqP2sQrBEH3cuP`$DOqZyYs0z}1 zB!0dh*AEwD(TA-`QN(J-iahgPL>#LFp6f+VId?A5&cu$63)wafY{>J~3hP23E^D7ooj4fk zwnF0Rv^mN^Ukitsvl-P?wm~cg;^4xIcx$VAusu}nwk|IQ84cKBP*#^eQx{y^lx@v# zoi&Z6M*WXW1RagM4eWjpjRKTAHhSnyYC}rV-@JpicSkF1#_u>Nq}8O=Z4RH%nyD|x z-pXnGBpNzUH)_U51xSNKS$(aPZd^Qi}d)nqGB3_|qz&;3}B$ zn(j?@3Je&QV`SE8_IZ}fo{7x6{{^A7(XhK2*d?!`G_EbcjNwn>EQH8TRn8WRwfr$@ zkqJi+h~`)S-mW(NoZL!EkB-dfMQYWFhiQJDmSqU&Zms-}=H4w^dwvky)R%Mq@O5SQ^?W#_*caeVzOxMc z+5MBnuA~AA8-c&{R*^uAiFb9~3GGeJt`C;C_8O(GvMvVOqM?Hi+P7TxNre*^M=Ou& zHAhZe7%qLyItBs9h%5gIpmQ7i!+$-cn6|K%H#cH2m^paB)V83R;c=o);t_k6(Rll8 z@uuxVIH~@q@$G=n75ZORH&&KIp$_%mOIkb<(~q8lY@t7_x;UIrW0d&y7UKAu>5|B3 zl$UaeNWk`MZxWnIaJJR?!Kb-akfHz;2;V@)HrivIw1I1Hdp6bvQ&ed`a~3LNlc}nz z!ijK$jyT>fQ!dO}lt_2sVY=Fz{c@XbUt&K~4DIBCzypUDS4*6nRMuo4z7OD))YB^(9%<@3ZT=vE^_PF}7|mhfE;jnd4#{CzU9}qUoyp-r1(@fbG>) z|Kp^=1QYoK9SR6^#7EX%#<<=vTsp3n9sR0zA5B;!e68B$ajQ756Q#~iQO#>~XaLQh z$f67Nj9%Jteaf@aZbI(i8oMcddgAA9v}pN?YN_WyR(hbOPoRATptJhGu?2KkJlsap^$bl+45pic=LfOS0gu)f z&84*%$omQ@)mHP|P|kob7YPLpPG@}8YZ=N(3-LI!m)7wWiYb&9grB?#r@IezwdDip zGuMF3kkhn8KiW=aEPnGp!Dv8JeEL64>mh>-ty>QI8RHxQ*+kQQ{R;n#wpcTyNb;$@ z0@y%jNAoVabp6@8CVgEn%xtW`myG^o2D|Y3zaH-_DYR?M^laX|h1$rry_ciMPTlhn z@OxEco^?9h1hkDl8J*=4GQ+^=xpCnNyG{^v>7HUd-XYQPK6C;hf(UD9(EQubFuCH5 zP2tl2b{dk#fA0LAezDOlVKsw!tI!F_1ur}w-^QfPOxoM=8pp?wt@^T1(NXNA*9X#j ziQcPXAO4XY;mRUN3Pttv+AWHqHe#ehOVjQGk+8zTzJF#^wGM zEJPW^rLH_7KYd=Jtu7s~ry$)ZEhlE+|2$j;ZhQ@)aRfabWFkEdG#nT^?_Lx< zkqLd$zIly~ZlVbPx2^8MN9A{p1vBmqQ26%z!k`Wp?y{An486LKtobcsNHU7UIuc*b zu-Y8`+hZiWeI3+W0Cy7W@)bkK?rwiG5p%>3Rq>IZGoN&u(8TU{?@mj{V#sn;u}xJ@ zgl7u&Hr7FUF%oT;AtsXDoT-73-j*fp1@-C+M2%oNaWKJ{bEBM z{z!Sx6_cVov*`2;>HLF885wSFHUshKUW`?$Q9-&&K$L!fN=%B8$j#gDTmP9mI-C^# zXVg=zqmp87w}P!eYI(h`(=~CFf@FN#8;9T(+t(8=vy<7|q}yyHUUw%JBk_e(Dk)oo#o!W!X^h2QmVft z_m-;__iMx@Bvc7^gzSI4gUr61&Ai0ruOy60AdqGTp)GOO;}!BO&1a)qnMvp%g33YsgdDl_cuy6l~t!Nry=3y>sUb2ntd%G;Hu?Ha0eX z8m6x=OExSeDG7IQMuvwgx>`aLr?aO|KdbjTH1|w^(sRUry;#vHv`u8VO4={Sa^3Oc z2i0j20rKg-S8|yvCIZLBmcv$SBa_S7+Se%;S5ggbZu5DYw4ET!G1~M{YfjlX%$N$} z^EH3WzCxR!9ovHGI9%4K-~N2cZFpf@{wB7&$x}kvt>>Ee#K#GC#X@4-+ABjDwrYvq zgDcEiC2yZPP$p9w@u;wInf75Q&LLxIGu{gBK4i3*`C*g9{(*eW$oTmD@(C|ZD9N+J zZTy4EX`xRtjLWd){0%0i`6gN$C1c|Z6|7Fa(9!SE7%sCgI9oJ!K<=~P;Q?g?jbhUF z+&N@#krlL^>@PU|M=yy*?r`H%czPI}*kxC%D(aN2xg(@z--ifG?3m2Rg@ z9wQHlh^vU9!TWrE`FPKbPg*H&-uxx7)^Z&k)%c6);8rTAjphlW?JOy2AM{Uj!Z{7% zb8-uMpo-d3(~p-`oAi8-qKOi)F1cx(!ERphEIq|(dj9vS_`Z*AAoxBqvH(ZI(~0oR zi{U(R3LP23LfZBo6&fTvQ6WMq=GHWiq{8SJ3lK&J?^df3m$c~O!VtKdW^}u+fQNiI za`{P@zC=zB{h5C2vx!$lZ;>Dtdhe=7V&Ncs3p zt6+cJt9T$ktfPc5XRv2Wcoe*FNz+1FYU|sOj@zKW*!paK+rXiy+l$6kWw~On&`PJ1 zCq1laetymE;~`a4(hPHI0c7O9h zOWenw`v=n*Q*qHZ5u`x)CHa>d40IoouFZ)@hp@9b-1fw7=eKI<*@`SxbM_fFh9t(^ zxx}SZ+0YddC!$z5*IaHjYx(d~V(2dIRWm|y?Q&BB_WK7;<7tgo_I}AF>*V68k)ksqh&x*5_T=w(6W7bpg@n@r4U2pfLO{^rx@_}rS)`{o5m*){J zW8qJy-=2!m-P0eGdpq*^Rwu#jTbge9+55R;9FENdO*M`V5tT&_mj)(^G6MsF>FQ3oF+s_N2)N%&-<`7#@fAYjt2qpeq3H&RUL_y ztpqnexe4YL>h%F53w+t$RdJDZW{{&G0Tc_byEk(dDv<^m_5P}NdOB;oZ*dY`u7dCJt`!EL9#n%zVri&+W&m}}PwG#{x_mwNs9N^{)5 zONzcu)b90=tQ3Zg^%Zd4TNz*!u#XY7{(7djFz+Aj>RySkK4l%1hZw7p?aL`W*|d*% zi8m?mHnfW?uPn!~V|u2zf<&1{@`WpSWh-Kzxg=P)E7#o`&6mj}1Dx$CMs^dI)>|i+ z*>w`r2CXGAo*mecE2qa?B3bM?={3~a>E+4#cle3G;-}Y-XGQV zvSDUx3Dv3DBb5s3j-w5`tlb<#+MWC|#z8d9_Xc0NKyoI(LtU*lIoaoxKB|2;_!FT` zF4@x>U%C9GbEaoIig8@9KsVF4;}k;EbYL!nbba%^(PU~XQgXj&ebY`QCtn;gcnr?A7PqGmI?Ul!;r7UYi7}0(npUSl;4{;=3#o;a9D?qYq~)i5p{T zOamn@>w%&g`MmuuTP@awd-4?jVe!;6`NDr*6ETfuM}AKoiK7`+nXzmVK zJ;h&4o|L_;T^|v*(JIj6xrh<)GD=aLlXm6oHMkPY;zAWuXlPP8r4<%*?AfkX)VtPz zJKjs!{b%xpS>>SBxq)YtiIl2aX4sdwf4Dzeq!ldo>fF)(N5gSaJ+>#D+_U8HmSkqY zInc{u>{4 zi`S&xg;@Y^+7y&$_83b=_F%N~TDMDGLN-OYM*R~W&O}UR(ooM^aUd=ITba*ajFvq& zrNLSa-NN^M-ZJw#CwI6Xw11g$LT=q%#_w!sB?tdtHlayJo6oPfkp{6y5hi(lrellT z`$#*%P5N+%W&2R)MH{hfBQ0Nlxb>!mk#mS^hy41v&y^Z`2@f-E=nDHU(fq@|qVzT1 z@>smE?7+OymAG0apmZji@Oz2vM~Bl7wg{IDTE(dtL2AVGBnXbX1~Bg6MKiCg>V^lU zE9L#?Ix}WhEC%zhHt~Co*EkJptVMFW_q5UbjvuX&C>BNwMa51mk?StrD}Pn;D}MA< zGTtN6#r&OfL`Y14P`OMST@UX4h1*0^4KpikiC>UBf4N)8$F{2aE`B zzDK%i24tsR?8_B>*E@%^>gL6Rz~hrQE|?o`j-1(mU!e;aesZ1)c*Yt6Q8=XQ_ zw!@-TO6NHP{lc_Ft<)M>+k;-^Rgz~ zf5JntxY)<*dky#7E#s(eN>hrptgO}FDrxHatJr(tzAOUxE*GKL*g0CdpVJpudfcmk zAXs-Su?)L5AFp_nl{e;TegNTh^A!GOIX5uiCE}EEX}C zbi0#(>46-8=e!LU4dTYH*OrWR(PK5e6Py%dF?{muAq2vP>+#Mn{&@aP1F5mT+wjBn zoIjRmt;3z>LR9XK7&U2sa!h|&`Tmpji0fsyxWqqWtDQ`;MPSM|DpmzOrxa?s}??+WHBfTdPhkCy{5guv>}}@tNK>2XzCJ zvD}q}VCmhVv5<7Wjd^DmSN+?7(!(m&3BA-{!P|^k%Djh8 zgf=e?Td4qAPOGT&QTvUBJt4< zss)D|sjE5+7>%RZI!4RZ4BAN$22}CQ2t4@bQK~y{{mI|2SFFnWL`(}-f4=*xmZJ`f z7bz66ix%CkD^;GJ%gmiHVA(v#!O3_nJ(c5goY2%n;X<4sPhMo=j9BB74}XkCBE(@`ll&4h3HeLsB#vW-5!rN;5A9Mi2F{A))U zl5o4XIM+G5xi55cf3U9aYBdEv~{2fs;FEsjxC8Q@M)&C}tK zZEv>8DzX=Cb2&(x;rCLo^$9H?3_hYCDN}gyxjseobp#!w4uP?5hFtVmtyYTN^JBh2 z@K~xKENF(-K&gD^hW&-6co=TRK<02u3&XRQwgK>y7#kJCaF@u37jwMqqo$FbK(RwK&V zTB<;?#^T*RUVJ;Ge}FN>^y}O{&7oHF)7Hqcx`p>W!a~(mL z@?QI0I*^Eh)mE@K_yqa5vZ#v-eV==;Yc{DnX^JCR!KGg3P6!M5ZU;H#2+Q$~?z?r$ z@i_IljwHHB=hhuneow5f_>qhyzdWByM7+1%#K;uCumqsjtnBC zh2VEF>J!4f$pHN1nP)*q5f*fGemCb(Q-sQPEfT^nGc2wwD=qZrdcGU4UKcr9>9Rdz zkVd%D%5ag;XZFZylt)pdV;796O;^XaO`URsfr-oaoMc(NtCy>4G&xO-$pD8Z07u2& zW7nDZ)Oj9Z_-;()yDi(bAp-uRvt(q-j~=~5&D?nMuIFt<_8VW^M=cf$$Gz){YelPdzGhYBx{L2Br*K>cnK! z(XM<@a`N5?p#Q7>>7n1Ks-3r`-N!3=JmvK+Z$GPex!GIFVOgKZ)#F?AgM8Mr$nyM7 z;@Vb4Pydt#ZrHA=6q72OsX8bnI$Ye_FZJX~`Q&ots%`#{87#AN18J$E&P<_}*zH?J zF`9wvpxJRdJ*TY3T>6v_Z1%q8c#i&^9@kDLi3E#UJr}qEUF% zv}XltGb|(HpoHpHVUvd|k`O%d#cjx#4EbA<2K1WfC4&gS6NGKLflvwA`N!&&m?i$H zKEWSheXSFjBZBk!L>`-c{k8L~eww>GdzfJr^A2)sLDi{mcI}$wnIoP4)WC?e;TYu0 zzW_v$NRLGf*&TTv&ipAH-<3SJB!A@7hV}6&>=OHqGPqB4QdD%*z;X`E98V)R+0@V z$;uRwgUG(ZeErcf{g*diymh(SuF|?(e`nyM?({TCuPipo+*g_7nLW8^inECEq) z0IBfKC0#(ljalXO;SG!W2L)L1O*`xT2S^s#|4U{k5Yviw#`=^xy!U%0C+?kIAO7f6J32Ll4#6{2zu}M5kzNUgSY!bJ`s~BpGV%C zr5tm4ueG$1%+B{p?shuAqZ;04?AB)V-;e|q_qoYIHdIr+M>mAew|XLGL|w6&39~1F zAbG(j=@Epz1UP~7G)x29j^Y<+V4Ndm$Z{``P?ME+S?x?s{eK!%y7oC&~ zl`8X2b(9bZzE`e8m6@H|Veza3K{}_#TA2{!%QP$4KflB@%~?Bc+{sK*D`y``NgpMz z;^4Fxt@jS?opUUrzfXBJJ(Zi`_)zTkR}`ljHW%`*woH7gyNs;f^jIK*+d--m7I}rj8{RL!@C^KD zG{a?}l8`K#*yhxA8ml#y&qglFXZqMwZ}&Z4XZE``+l^-|LX6tseLB?)j0HSii6VC7 zh|W7XF9fM+N&aWOaTjlVcR1UgGt%rFCdncqp={zGNvA7#%Fy=P)$+Gya$!&VUxYNg zx5VJT5QolBge#PKHa!#Y)Mh;EfUN2toPuQte0++8YrZD#mA;W-tmfbO>1&0fT)!4Z zxnOf=m}>?qw8WH#`K&6hS2j7=QzmO)?NnKN=MU!L*PLAhnN5OuDbvUkVM?}ZZ%}`v zx~}bAU9h_%?8LVfnc}D<#PWFZk=H_ZhMF$jnxb#2L@8@8c<)M!((1#OCT>5KaC)M* zm+WMdU;W~9?D!evO90AXtN);Wm(@z(x>$}&o!o$?0cb>iz{&Xq1h8xee@Y_`#YRlO zP!FEtHN=iRZNF*O5tXnJLxkjjBLL>aRnk&6n&uThim}5av^85RKK=C0yg89>R1s|H zY==mXttb+t&-V{Sq29WvF5yfS`%kj0re&_jA7}y<4$M)X$k_WdYAI)x%BBlnkE)8~ z@=o1)%)%=em*9X12V45;z1R-R)5-Y!`B`#uGV|@*&z?MaSKWI8srXuy_XmXb&XEc7 zJjJDs-kw=}LiSv~m@kr_)W~p7mHK4o=E>*WeWwOQUoIQ%T>A@o(vvFXJU_#}#l3Uz zUn1DojL3&174w;)Oq~e%at;KFb>FT;=qLP^m?m&RrvLqu2m;0=@*+8)az2>eQNZ&z zc_cp-1fGQz|185fu;XJedxNa?G|c6n9|K~L3BL^781iS{%7s%e98IUUcsf}hbU&s( zf&9e%S$loJG#k6RY`yh1wZdPI1j*b&4h+&|;wTYh-2cy=a|Y#R&&!_(IB2h&if0_> zOY(<;ieLD_Bt#I&Ot)UY_`weRdWt9w&tnDzi4%DVWeS;b5B~1R-hqX_(d@?~cOQmL z4VDt}%nbFRm9BA8T7+|1Ill5(494Y=A;=SSW1+!RL#kb_3LjJ!vqi;92oG_`=p}I zyr}Po3I9WEl%+0lc01;1Z&}5+iU{fYLpMn}die(t|Ci4K9~XAFcIUfGfy{Zt=ZX)y z-+hGVj|x*9`;;srLYS>QF}1KW5B^X>UpAPr^_mo5!bvwWDnx}auq%o?dmVm7kfe*m zdSAM4gaBbghzMM3-Y58PYkNP8{*=02SOQ}&1#9#$>j=Vn;y;g6iv7~+jhc}5!vd|!FCwF~#7yC>#`2Sb zhgSgg716;?oq;wwKp&sWe(l&czB$EQo}}h0ONnQZ+G80$3I@sKcR7PpBD6JO{cPsd zEf|5Yt^{S2}9jRO9;e%e*BUov4f-$h;=K}twBk~F(s5uf97oPXxDI8@mByP3gV`jf6# z<*Qe(O58Thao)#=d>%WW8N7BTH4+K_w-UO7s5xW!jS!!!yh=)z%+~8iseJMp1%G=d z8h4yVd_H~!cs;qyq>%#!=>|3FY+wyrAFe}@(=3O%4!8ZKa;MFH)j`)~&d!Ia5{#Zo z#Kgp6Ko~hDq{W3c^a8xYhA)ilcE?5}; z0b-6O*p~P0-{sGY`(r0>l$zFT- zTTn%-pegE4pzg1z4r=6Q960ZT7Cq>hnN=VJ2tuu`dAx`Rkqe>tR39pnKC?M7J@Lt9 zj2M2g>pmK_Y-xESCN3Tm!b2)*W@c7}&xrjsH>Yaj0fDoVL`0NVt_-{bp+HvpzoEWp zUFsj%^9sDj759o~XF%?L8NQ%VzHeJwXm=rB>-`1b3aA>Z-U5BaQx+F3ac+eCeg@4V zL;u;%L~LH(-KF7T3HI8JFb22zYlq7&^{IYzh*lnO?XGgQ<9-UOa)5&*$jyPJz%o;O zS)4|PHT5iRsQ&10NpJcOT|c4`q|3hRwe_`gSMEMDH_z!1*d8+v-QC?a+gcp1f_h@V zY#%so4Vw_4IY)oI%Q)Uw`otIa{yqzxaDJVMl;MS3a4%^`L|g3cj~JCphVY43?vGfl zZKtyXZx*XDb+mmx{};kFhRR!=60wehsW^90g+RLHqs3NjH?PfQx9KBK0x``{`+*}n z;zM{wt42{?dII4{1{Y;hSiCIdTo@{6m335kib)_M5>xFQnmt73PDsoIF)Rz#A@b!7 zY}3r;sL|tnM^K-4Jmqva4SxyZ-Pe`ud-U#C8DUK+Kx3j(^UE7iv5u>AlscmoSp3C8 zA2Qi7+b8&o-9hL&6rnoexd=#~Q;F4Eqlub*9NYE{S}U$eSZyK*1H$chQH>`3B!ois z#b@u=9Rl*R&-TVYa{j2De;l1%@oT4St&sB@NYr9f(QaCmIXX>t;j3934MBq6RbzkRilXMQa8Rx6k5hqCW~85ZX@Dt*(;j@#Gfcjtk7nVALEZQ^8lg74V1Cr|**_+zUtfh_0^ zny1W7_P+-@QPo)+Jbo*Jg(m-J^}bd z;=bC*A_&cwKfvnrVTO%+?eA)(_BugHu%x8ptGQTI4Rj9jqB$+yP{Vlb>b`X2I3`PK z{U#A2eC{z!O8630H;eeX^}G$A*XTz2w<#DczXOaD_xQqusaD5HZ%-v&4pc`WPFKh~ay=)Q=#h2)YR|@4%a6 zmU=0UZ!R-M0rdz9j=6n~E;5fp9h$ZSx7?Q4^irEI8IpO3nTM5GXHkV@BuipcDHDqIL<@Mly@X!At4Bq^mlsyMnkabMf%G z-t(|IV4^ry{ao%UQ!f4mI-3W@V@dwN1x{^mf0OaK^bZOV3MpJLcH$jvEgdd7b2b0k z?C}Y?p^J-dx-e%HAM>MHzBgR+W5kIj7I@4y8(q1+M1#)6U`OH=1mU_|F9vGvW?&|1 z&yBgqaGBq6>`WQ!&_`?jELF^+O;@E~Xe5^%27ngDpNVy^urCiJt)trbI)A-?akeH{ zj_bM3gpff_Bd*nPVI|u2QP5RBIsZ|etm+VN(H9}2w5Orlh802oPhx`l?`|W9F>)$NXM`MYT+o>vIzTg*^fBm3uSaB%MOdQZ2&y7GAMk zh$)`sSHxNkq~kh!R@fF&08zMgocKZ{55kDJ>eHm(d1MS*^h~!}qPdMunZaVTRZcEw zN!`Xy&_>(YAyfT&Y+9k@(k2A!H@60ez>o#!#O&-AdVU}E~5L!tc7M+cruG{d>O0miX1dtd>(P40P-n!#flsixo} zKUXg;-Tb4yTk#JJ0?T~YwhQrNQ5c&3+}fLIO@*E`2x9$5eEGp>Hx_O7QN%2rXb|qW zH?{KhgkV+HsCt#2@SIz@GeGJB@J}N?BxsBn_U6AxqKG+^cz2lc(v{mnvD!F;k@=Cd zkg6o9H<%Tn6j8Cp0P{;(uonUL2y(Xxumi2L;@j%WSFSK~aiQ4Y?3pumE_{fOIH(0Q zU4zV>LaOLay3}6+Qvl&nuNDIciic4kDE`DKH31);K#<^X%z*RYrG}sk4zDYJAU%Tk z5TjxiUe8aUm=#|CBQAkLvPgjul`m8F=g(d3ps5hVHZve5DMj38Up~n_Iwj>FNrmPR zdR!c8Fd;0^c22?6G^@JThbi{!(nahPsPNUFk4nvY#WAt@!#bJ3KhQ|94-%%5-oJlu z>`rgf?Bq;eP)e}P*M3b{G z^XHSydNc0){r4AKc8RH$3Hp=dgCpGk_rpBZm_X6P>s%7b8h_pZsl)5bNmR?i>+>It z0B`PsITL)}VOBalBO?duH=_Xe-t7KL{os6eDkU9V9zZml=QfU+l{NojvFE~Ae?LeP(cYK%>TXzUO|5#MvTn>IavE8^A5ZN7n4DK0WAio!#A}uXTY_A_=_c3!bKyEI}q0g-=qN1YOVFps`u+-)~X_Ao><<_{W zwF%=9-i57po{5%8Ths9x*M*VN+@hi)F0&pcAX8~Mp+m<=wGqeZ+RXvYs<{MrF83`< zGP(!P)@R#$S0@`v9p+>qS?xOx@0tc6exZYZrEhmG5gUF>ZUL&O_PoC)S^}34laQ!3 zLB5+bVDrd{{r&yw>)N3%Np-VPj`H)MEAL z*S)P#oBj+LT9-6JA<#t{)DCZ5DTXnk%i+FM8rf{x+X2a&QEuDI`LQ;2>QIx`skFJh zWYT@PQbOwE-ER0Y8}d0(qlt#wJOX1gt~E1vf}sV8f!y4f3p6wuOFKR3Qe@RQ>jU`F z$Y#i7BfAdVar^dd4$=k=grrf@FPrk6QFtXW~oIWQk?4s3pP38UBsX%rWVPWCO zsMjPE<`Z?E1+v4}QQOy#f^h(9wdV?8j9M=PaW5RKcMd`_@Qm#Pt;FZ&I4lP4iamau z1${zdcpZ!*lLvvo;#8kKOIlrBHE%ZS4OZ09$Z3z|v1oaJO*w>u`u=0WAl5}ug;fp$ zK1|9M4UqdSucQ>w!8=DM6T>A5t70$V#$dC(j0*@3R`&3y0edpD)_wbFSW$6tWNfTv zx+e+bBf@wyJb4s=tFEwWq-k1Lih;acdtg;%2I~;ZW22(3t{xc$%zWeK&7KZT#J3_< zeP(txN4wftIi%ETR0TTIwYInC2l)pE=3Z2^leM-kn3|r}4$Hlz`T6-vbZvnBRd|nv z3_|g1ZR{|m_h?Ec?6)quCXiLQm?16D%XqX(a^uF0Y^%|-)|Qs8*A#+TU^>=r^hkyM zD0O&X(wQLOHu?7I#t+U;C0<$BDex5J*3{H!#99p&&@YwxQ~4%Cd0M%vIxmthUb@5* zO2H_oHK^mB&*!q72TziT=TrWq?Hv7wh;MQ)IDaL+YC8Gv+dmuwNtSph@T&^Or1RpC z{IIWu`NaPAii<=QYZD2hM-r56}d$?ynpT0P+5QH431kCs`LQVBK-FcS0SL<@RW z8UKiqH~9hLG^gFEpdIg`&O+rYKeH2kuj%;8yIlO($GmHUN08a6QRh)P?zO*UUYL26 z6?zbVa5QJ*ZVYl5+#7da$$vPItICcp>!6l{j1jiVupr(&)wcwXQq$09y{fGd3#U=5 za%KN?8J_qUL6_RvT1+IQ9-G2&_JE{v>5i9dyft@MzI}VVxiX;}&+jq-ES6Si&|JkQ z6Uyzev)byty*R9R=gu8e{Ofpb_O}wZnoh{rfHb8M^mq~3tzUwl?R}4t=C`4~-6h{1 zaYvEMdaQ!apkwiOfsCVL3C4O%ZDt5M_9&^SsJNPNfQx4YR~IlTZ!#`miKnq&`u}oQ zV5`ea%%%CUJ4CD1D|L#GAHT_VUe1rJ?SLj@ed(Wcav~xwA3~?Pob6q+-j2Yapoq{= zx!}ZVt%jy*LP2#2bUw(}ESII{bIjtz+`K7{PHq`jtsSA=b{Q09f`Gd@kUOfPAa<-5 zOT@+yVEiQ?N zrwU7OfB5hLa-}W9=AQoV^yuAd#rlnBA&ECjx85uAo;QqCSwlmka&0bvlI1c;wmorS zsmaCC|K62ifxFll%asvt0-4teMzNUQj@n4h!CjCoe`fA=xOWE}Y|ie7ZE0N@@pCIH zSoq3prZsY}-NsAN)dSvDfq=(FMVoMvin`#OK8<@Hd*-VbH}!4g)zmyZTy3CGK058U z{`Be7jm<$_i>{PA6-3v@7(Brh*7q^$RV5S}R;>wY{|%15u^3*JE5=;&x@Gr<`IIoRlX zac~!b@G+$F)r))R+VezOnv1Rez}}$kBWn|A)F3$RKn2dfY>yD&BpMh4XHzJnjpalg z?!`*&cF_Cx=cnJSu@IGmXYZey$d z@xb<{&j-kK-&KBz!8wk5tjjcXc6O?PoGJuuJDuRZeDBrk*TK--xssndl-qU9@H#j< z)ryT}BDdTRcI+BBNK>=2S}Kl@_JaW=(GCv}H)SSznWv?tQNg(z9snD-xLT7+^#9xz z161gcdU|_V37Whf_LfsQRe^V*E3$-_y;s_wL=(nmfhJ&d$Ta2GPVjJ}w>1jguj>*aT;Ku?T3xj@XpOj|T&BcH+AvgR6?@OL>u*$J zLoIU*ptg=H7B_ReD)*R$&!99{F{wbl2mM!2Sj3JsK}ev~-$u>ojp>I~~$x!#)*J0NttE0+q; z)VIFA{zF8Bk`X`018mt=?8lE_DCyA&d5uxsH+*LYNRHae%S${{Ha_UgrJGa}-p94> zm$rq`TI|75QB>%jy$cTJZVI8d04Hzinw?*R9vnJpM<;ReJ_1SEfmGQIWQ4q z7cuc2X676{o4&UqfTa~UK7IVSFk*r2|MfjQ_OKM3W2lGHM>XbwUCKa#b}lp?t}8OB zO8K-eje=08LG4UUn_6Xd?qjqp|F`D_u^o!y9)~I-F7DZ2%d)kRK>vj*j-y+ z&s~rE{Fwtjv9Phpiu#gv^RLvT9`Dy5_ku2S{MB+nvfr-)kd`*6-|jZ{`aC$^knKbm zhBAR=pU^Tp2htr2>qOZVDKK3!^sm`Rg(5QTIeaSYX|@7S&C_MWTWl{;N-+!*-2= zf&v&EX{`*40I>$BXzA(mH#QuXChF_Q=RDWG-`Yff>keCNFQ~p;Fo^TDDvJi91l+gg zr$dDXij3Me;Ec>X?Cbz)K>hr3B44{&rP#Q=2SAw?@3(Od(qKAXh04lGjVi}%08V*n zX-wK)yECnwo!GS+Mvv8(f(NUjp0NHJ)z0||9&3`43bL{xAltDhkks`)EFH*GPX+AJ z$`M54aIl_uoaZv(sfwPpEVCR=ffIk`^IgfxI&yzP0RrnkIQIY|&JYN>aDRH?r}GHX zhVs~pbdWH+`}?^-c98-@f`WqFO|r2V89hC{fWSaSQ2HoW)gEq*LY$~yKRhhV5j{Wi zl7t~^eNz$09FC$f>(0!~$kv19;PylzzxFr`q68c8Yb@8UJp!#XfZ`9E`a_jYf$g{| zmz4t4BEnU>41&63l1%j4%PzB-C^$Zt6Iy`vh392};MafwxXs18Rr{RubP)GKor$Fd0{BH({tFxkVe1|I*rH4iQ1pAC zg;v7fQF54Q66=H|?& z8G0UW4l3)rZ!Rd$Y%<}yl0~8IvSR)UBZA1Gezz}XAKA2XAaW>~c}0s~8&nU#dM8-y z1+el5lODY;abD6u`Coae$`PL;8GiH6eh(1+;Wx0yEmGI>Z$F=&p0)_)b+E2(H_rX7 z*7y$bYeq2@Jr3i>J5Kpm>m-q%uA2>gtM`arSrb z-j#m&@@46)`^LOHYUrhZx&E-+*I_sL3Q#Wi*V6H9+gAB17>c$}p&jg6~O3 z;Wz3+aZ5x`Cu`KYmHLuWr(|W_h82|;IzDg+CU&v4{frJz=nyXl!&L=EzX38A52t&p zz+XbUsZ)1+ES{Zl<-l=q{Pk;O}tmR`ViQY%*-QC?) z^C^LSu!f4AfJjqd;qlONL=ghBsKIHH;3^JmjlFmD{Z?W`!(>-5&v+I{VALc7M1r;J zsN!UB{dJ)h)JWvS_R^?oPxjkYw#r{&;sQJnz-c$`E1US^8AWWV|D<>PPjm48PjWW@ e|2LM^;}fP=mCSb&-k76sPf|?wae>J5SN{tc1P7J? literal 32842 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 bool: +def pairwise_distances(X): """ - Return True if a and b are in the same class. - - Args: - a (Tuple[Iterable, int]): first point - b (Tuple[Iterable, int]): second point - - Returns: - True if a and b are in the same class. + Compute pairwise distances for all points in X. """ - return a[1] == b[1] + return squareform(pdist(X)) -def euclidian_distance( - a: Tuple[Iterable, int], - b: Tuple[Iterable, int] - ) -> Iterable: +def class_distances(X, y): """ - Return the euclidian distance between two points. - - Args: - a (Tuple[Iterable, int]): first point - b (Tuple[Iterable, int]): second point - - Returns: - distance (float): Euclidian distance between a and b. + Compute intraclass and interclass distances efficiently. """ - a,b = a[0], b[0] - distance = np.linalg.norm(a-b) - return distance - -def intraclass_distance( - X: Iterable, - y: Iterable - ) -> float: + distances = pairwise_distances(X) + n = len(y) + + # Create a mask for same-class pairs + same_class_mask = np.equal.outer(y, y) + + # Intraclass distances (upper triangle only to avoid duplicates) + intra_distances = distances[np.triu(same_class_mask, k=1)] + + # Interclass distances (upper triangle only to avoid duplicates) + inter_distances = distances[np.triu(~same_class_mask, k=1)] + + return intra_distances, inter_distances + +def normalized_distances(X, y): """ - Return the intra-class distance for a dataset. - The average distance between all pairs of instances that are from the same class. - - Args: - X (Iterable): numpy array of features. - y (Iterable): numpy array of labels. - - Returns: - distance (float): Intra-class distance for a dataset. + Compute normalized intraclass and interclass distances. """ - data = list(zip(X, y)) - pair_length = sum([1 if is_same_class(a,b) else 0 for idx, a in enumerate(data) for b in data[idx + 1:]]) - pair_length = max(1, pair_length) - distance = sum([euclidian_distance(a,b) if is_same_class(a,b) else 0 for idx, a in enumerate(data) for b in data[idx + 1:]]) / (pair_length * X.shape[1]) - return distance - -def interclass_distance( - X: Iterable, - y: Iterable - ) -> float: - """ - Return the inter-class distance for a dataset. - The average distance between all pairs of instances that are from different classes. - - Args: - X (Iterable): numpy array of features. - y (Iterable): numpy array of labels. - - Returns: - distance (float): Inter-class distance for a dataset. - """ - data = list(zip(X, y)) - pair_length = sum([1 if not is_same_class(a,b) else 0 for idx, a in enumerate(data) for b in data[idx + 1:]]) - pair_length = max(1, pair_length) - distance = sum([euclidian_distance(a,b) if not is_same_class(a,b) else 0 for idx, a in enumerate(data) for b in data[idx + 1:]]) / (pair_length * X.shape[1]) - return distance + intra_distances, inter_distances = class_distances(X, y) + + if len(intra_distances) > 0: + intra_normalized = minmax_scale(intra_distances) + intra_mean = np.mean(intra_normalized) + else: + intra_mean = 0.0 + + if len(inter_distances) > 0: + inter_normalized = minmax_scale(inter_distances) + inter_mean = np.mean(inter_normalized) + else: + inter_mean = 0.0 + + return intra_mean, inter_mean def wrapper_classification_accuracy( X: Iterable = None, @@ -218,20 +187,30 @@ def wrapper_classification_accuracy( # Reserve a test set that is not touched by the training algorithm. X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.2, random_state=42) + assert len(X_train) == len(y_train) + assert len(X_test) == len(y_test) + + # Shuffle the datasets randomly then take 1,000 samples for evaluation. + p = np.random.permutation(len(X_train)) + X_train, y_train = X_train[p], y_train[p] + X_train, y_train = X_train[0:1000], y_train[0:1000] + p = np.random.permutation(len(X_test)) + X_test, y_test = X_test[p], y_test[p] + X_test, y_test = X_test[0:1000], y_test[0:1000] # Stratified k-fold validation. skf = StratifiedKFold(n_splits=k, shuffle=True, random_state=42) - for train_idx, val_idx in skf.split(X_train,y_train): - X_train, X_val = X[train_idx], X[val_idx] - y_train, y_val = y[train_idx], y[val_idx] + for train_idx, val_idx in skf.split(X_train, y_train): + X_train_fold, X_val = X_train[train_idx], X_train[val_idx] + y_train_fold, y_val = y_train[train_idx], y_train[val_idx] # Normalize features to interclass/intraclass distance sum to 1. if is_normalize: - X_train = normalize(X_train) + X_train_fold = normalize(X_train_fold) # Class-dependent multi-tree embedded GP (Tran 2019). - y_predict = [np.argmax(x) for x in X_train] - train_acc = balanced_accuracy_score(y_train, y_predict) + y_predict = [np.argmax(x) for x in X_train_fold] + train_acc = balanced_accuracy_score(y_train_fold, y_predict) train_accs.append(train_acc) # 2x speedup: only evaluate test set in verbose mode. @@ -250,9 +229,9 @@ def wrapper_classification_accuracy( # Mean and standard deviation for training accuracy. train_accuracy = np.mean(train_accs) train_std = np.std(train_accs) - # Distance-based regularization method, intra/inter class distance. - train_intraclass_distance = intraclass_distance(X_train, y_train) - train_interclass_distance = interclass_distance(X_train, y_train) + + # Compute distances once for the entire dataset + train_intraclass_distance, train_interclass_distance = normalized_distances(X_train, y_train) # 2x speedup: only evaluate test set in verbose mode. if verbose: @@ -263,11 +242,9 @@ def wrapper_classification_accuracy( test_accuracy = np.mean(test_accs) test_std = np.std(test_accs) # Distance-based regularization method, intra/inter class distance. - val_intraclass_distance = intraclass_distance(X_val, y_val) - val_interclass_distance = interclass_distance(X_val, y_val) + val_intraclass_distance, val_interclass_distance = normalized_distances(X_val, y_val) # Distance-based regularization method, intra/inter class distance. - test_intrarclass_distance = intraclass_distance(X_test, y_test) - test_interclass_distance = interclass_distance(X_test, y_test) + test_intrarclass_distance, test_interclass_distance = normalized_distances(X_test, y_test) # When verbose, give a full evaluation for an individual. logger.info(f"Train accuracy: {train_accuracy} +- {train_std}") logger.info(f"Val accuracy: {val_accuracy} +- {val_std}") @@ -277,19 +254,16 @@ def wrapper_classification_accuracy( logger.info(f"Val intra-class: {val_intraclass_distance}, Val Inter-class: {val_interclass_distance}") logger.info(f"Test intra-class: {test_intrarclass_distance}, Test inter-class: {test_interclass_distance}") - # Alpha balances the inter-class/intra-class distance. + # Alpha balances the inter-class/intra-class distance. alpha = 0.5 - # Beta balances the accuracy and distance regularization term. + # Beta balances the accuracy and distance regularization term. beta = 0.8 - train_distance = alpha * (1 - train_intraclass_distance) + alpha * train_interclass_distance + train_distance = alpha * (1 - train_intraclass_distance) + (1 - alpha) * train_interclass_distance fitness = beta * train_accuracy + (1 - beta) * train_distance # Fitness value must be a tuple. - assert fitness <= 1, f"fitness {fitness} should be normalized, and cannot exceed 1" - if fitness > 1: - logger.info(f"Train intra-class: {train_intraclass_distance}") - logger.info(f"Train inter-class: {train_interclass_distance}") + assert 0 <= fitness <= 1, f"fitness {fitness} should be normalized between 0 and 1" return fitness diff --git a/code/transformer/figures/model_accuracy.png b/code/transformer/figures/model_accuracy.png index 044fd4d17d003bc824d4d5dfddf85df2fba88f0e..7792094871dea016ad0d11fadba35031d76f537f 100644 GIT binary patch literal 50189 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 literal 30224 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 literal 15490 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 H8{Ye0R{Tu* diff --git a/code/transformer/logs/instance-recognition/tmp/run_1.log b/code/transformer/logs/instance-recognition/tmp/run_1.log index fbd33037..74b682d1 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_1.log +++ b/code/transformer/logs/instance-recognition/tmp/run_1.log @@ -53,57 +53,709 @@ INFO:__main__:model: Transformer( (fc): Linear(in_features=2046, out_features=2, bias=True) ) INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.7043, Train Acc: 0.5714 Val Loss: 4.9133, Val Acc: 0.5333 -INFO:train:Epoch 2/1000 Train Loss: 2.4025, Train Acc: 0.7321 Val Loss: 3.4063, Val Acc: 0.5333 -INFO:train:Epoch 3/1000 Train Loss: 1.9501, Train Acc: 0.6071 Val Loss: 2.0011, Val Acc: 0.6000 -INFO:train:Epoch 4/1000 Train Loss: 1.9728, Train Acc: 0.7679 Val Loss: 2.6544, Val Acc: 0.3333 -INFO:train:Epoch 5/1000 Train Loss: 0.8311, Train Acc: 0.7679 Val Loss: 2.1285, Val Acc: 0.2667 -INFO:train:Epoch 6/1000 Train Loss: 0.4211, Train Acc: 0.9107 Val Loss: 2.1174, Val Acc: 0.5333 -INFO:train:Epoch 7/1000 Train Loss: 0.5940, Train Acc: 0.8571 Val Loss: 1.5863, Val Acc: 0.5333 -INFO:train:Epoch 8/1000 Train Loss: 0.3944, Train Acc: 0.9107 Val Loss: 1.0281, Val Acc: 0.8000 -INFO:train:Epoch 9/1000 Train Loss: 0.3936, Train Acc: 0.9286 Val Loss: 1.0989, Val Acc: 0.6000 -INFO:train:Epoch 10/1000 Train Loss: 0.3464, Train Acc: 0.9821 Val Loss: 1.2533, Val Acc: 0.6000 -INFO:train:Epoch 11/1000 Train Loss: 0.2841, Train Acc: 1.0000 Val Loss: 1.3735, Val Acc: 0.6000 -INFO:train:Epoch 12/1000 Train Loss: 0.2975, Train Acc: 1.0000 Val Loss: 1.2715, Val Acc: 0.6000 -INFO:train:Epoch 13/1000 Train Loss: 0.3117, Train Acc: 0.9821 Val Loss: 1.0710, Val Acc: 0.6000 -INFO:train:Epoch 14/1000 Train Loss: 0.3066, Train Acc: 0.9821 Val Loss: 0.8747, Val Acc: 0.5333 -INFO:train:Epoch 15/1000 Train Loss: 0.3266, Train Acc: 0.9464 Val Loss: 0.8788, Val Acc: 0.6000 -INFO:train:Epoch 16/1000 Train Loss: 0.2846, Train Acc: 0.9821 Val Loss: 1.0802, Val Acc: 0.6667 -INFO:train:Epoch 17/1000 Train Loss: 0.2625, Train Acc: 1.0000 Val Loss: 1.0798, Val Acc: 0.6667 -INFO:train:Epoch 18/1000 Train Loss: 0.2528, Train Acc: 1.0000 Val Loss: 0.9514, Val Acc: 0.5333 -INFO:train:Epoch 19/1000 Train Loss: 0.2277, Train Acc: 1.0000 Val Loss: 0.9547, Val Acc: 0.5333 -INFO:train:Epoch 20/1000 Train Loss: 0.2547, Train Acc: 1.0000 Val Loss: 0.9586, Val Acc: 0.5333 -INFO:train:Epoch 21/1000 Train Loss: 0.2499, Train Acc: 1.0000 Val Loss: 0.9632, Val Acc: 0.5333 -INFO:train:Epoch 22/1000 Train Loss: 0.2506, Train Acc: 1.0000 Val Loss: 0.9897, Val Acc: 0.4667 -INFO:train:Epoch 23/1000 Train Loss: 0.2487, Train Acc: 0.9821 Val Loss: 1.0911, Val Acc: 0.3333 -INFO:train:Epoch 24/1000 Train Loss: 0.2390, Train Acc: 1.0000 Val Loss: 1.0391, Val Acc: 0.4000 -INFO:train:Epoch 25/1000 Train Loss: 0.2482, Train Acc: 1.0000 Val Loss: 0.7794, Val Acc: 0.6667 -INFO:train:Epoch 26/1000 Train Loss: 0.2275, Train Acc: 1.0000 Val Loss: 0.6998, Val Acc: 0.6000 -INFO:train:Epoch 27/1000 Train Loss: 0.2408, Train Acc: 1.0000 Val Loss: 0.7133, Val Acc: 0.6000 -INFO:train:Epoch 28/1000 Train Loss: 0.2307, Train Acc: 1.0000 Val Loss: 0.7633, Val Acc: 0.6000 -INFO:train:Epoch 29/1000 Train Loss: 0.2277, Train Acc: 1.0000 Val Loss: 0.8446, Val Acc: 0.5333 -INFO:train:Epoch 30/1000 Train Loss: 0.2253, Train Acc: 1.0000 Val Loss: 0.8771, Val Acc: 0.5333 -INFO:train:Epoch 31/1000 Train Loss: 0.2264, Train Acc: 1.0000 Val Loss: 0.8130, Val Acc: 0.4667 -INFO:train:Epoch 32/1000 Train Loss: 0.2294, Train Acc: 1.0000 Val Loss: 0.6838, Val Acc: 0.6667 -INFO:train:Epoch 33/1000 Train Loss: 0.2307, Train Acc: 1.0000 Val Loss: 0.5731, Val Acc: 0.7333 -INFO:train:Epoch 34/1000 Train Loss: 0.2204, Train Acc: 1.0000 Val Loss: 0.5871, Val Acc: 0.6000 -INFO:train:Epoch 35/1000 Train Loss: 0.2151, Train Acc: 1.0000 Val Loss: 0.6856, Val Acc: 0.6000 -INFO:train:Epoch 36/1000 Train Loss: 0.2167, Train Acc: 1.0000 Val Loss: 0.8603, Val Acc: 0.5333 -INFO:train:Epoch 37/1000 Train Loss: 0.2216, Train Acc: 1.0000 Val Loss: 0.8959, Val Acc: 0.6000 -INFO:train:Epoch 38/1000 Train Loss: 0.2303, Train Acc: 1.0000 Val Loss: 0.7795, Val Acc: 0.5333 -INFO:train:Epoch 39/1000 Train Loss: 0.2239, Train Acc: 1.0000 Val Loss: 0.6762, Val Acc: 0.6000 -INFO:train:Epoch 40/1000 Train Loss: 0.2167, Train Acc: 1.0000 Val Loss: 0.6438, Val Acc: 0.7333 -INFO:train:Epoch 41/1000 Train Loss: 0.2265, Train Acc: 1.0000 Val Loss: 0.6701, Val Acc: 0.6000 -INFO:train:Epoch 42/1000 Train Loss: 0.2118, Train Acc: 1.0000 Val Loss: 0.7443, Val Acc: 0.6000 -INFO:train:Epoch 43/1000 Train Loss: 0.2115, Train Acc: 1.0000 Val Loss: 0.8809, Val Acc: 0.5333 +INFO:train:Epoch 1/100 Train Loss: 0.7283, Train Acc: 0.8894 Val Loss: 0.4801, Val Acc: 0.9570 +INFO:train:Epoch 2/100 Train Loss: 0.3564, Train Acc: 0.9501 Val Loss: 0.3807, Val Acc: 0.9570 +INFO:train:Epoch 3/100 Train Loss: 0.3695, Train Acc: 0.9423 Val Loss: 0.3766, Val Acc: 0.9570 +INFO:train:Epoch 4/100 Train Loss: 0.3217, Train Acc: 0.9516 Val Loss: 0.3307, Val Acc: 0.9570 +INFO:train:Epoch 5/100 Train Loss: 0.3476, Train Acc: 0.9423 Val Loss: 0.3347, Val Acc: 0.9570 +INFO:train:Epoch 6/100 Train Loss: 0.3310, Train Acc: 0.9525 Val Loss: 0.4156, Val Acc: 0.9453 +INFO:train:Epoch 7/100 Train Loss: 0.3237, Train Acc: 0.9545 Val Loss: 0.3262, Val Acc: 0.9570 +INFO:train:Epoch 8/100 Train Loss: 0.3196, Train Acc: 0.9525 Val Loss: 0.3149, Val Acc: 0.9570 +INFO:train:Epoch 9/100 Train Loss: 0.3239, Train Acc: 0.9486 Val Loss: 0.3801, Val Acc: 0.9570 +INFO:train:Epoch 10/100 Train Loss: 0.3301, Train Acc: 0.9496 Val Loss: 0.3678, Val Acc: 0.9297 +INFO:train:Epoch 11/100 Train Loss: 0.3160, Train Acc: 0.9540 Val Loss: 0.3174, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 11 epochs +INFO:train:Epoch 12/100 Train Loss: 0.3117, Train Acc: 0.9521 Val Loss: 0.3261, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 12 epochs +INFO:train:Epoch 13/100 Train Loss: 0.3127, Train Acc: 0.9550 Val Loss: 0.3517, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 13 epochs +INFO:train:Epoch 14/100 Train Loss: 0.3157, Train Acc: 0.9506 Val Loss: 0.3371, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 14 eposs: 0.2896, Train Acc: 0.9589 Val Loss: 0.3564, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 15 epochs +INFO:train:Epoch 16/1000 Train Loss: 0.2949, Train Acc: 0.9589 Val Loss: 0.3456, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 16 epochs +INFO:train:Epoch 17/1000 Train Loss: 0.2880, Train Acc: 0.9594 Val Loss: 0.3291, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 17 epochs +INFO:train:Epoch 18/1000 Train Loss: 0.2906, Train Acc: 0.9604 Val Loss: 0.3536, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 18 epochs +INFO:train:Epoch 19/1000 Train Loss: 0.2760, Train Acc: 0.9682 Val Loss: 0.3729, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 19 epochs +INFO:train:Epoch 20/1000 Train Loss: 0.2793, Train Acc: 0.9682 Val Loss: 0.3525, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 20 epochs +INFO:train:Epoch 21/1000 Train Loss: 0.2757, Train Acc: 0.9648 Val Loss: 0.3818, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 21 epochs +INFO:train:Epoch 22/1000 Train Loss: 0.2853, Train Acc: 0.9672 Val Loss: 0.3500, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 22 epochs +INFO:train:Epoch 23/1000 Train Loss: 0.2709, Train Acc: 0.9667 Val Loss: 0.3595, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 23 epochs +INFO:train:Epoch 24/1000 Train Loss: 0.2590, Train Acc: 0.9770 Val Loss: 0.3609, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 24 epochs +INFO:train:Epoch 25/1000 Train Loss: 0.2619, Train Acc: 0.9736 Val Loss: 0.3065, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 25 epochs +INFO:train:Epoch 26/1000 Train Loss: 0.2519, Train Acc: 0.9760 Val Loss: 0.3479, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 26 epochs +INFO:train:Epoch 27/1000 Train Loss: 0.2477, Train Acc: 0.9814 Val Loss: 0.3396, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 27 epochs +INFO:train:Epoch 28/1000 Train Loss: 0.2455, Train Acc: 0.9785 Val Loss: 0.3343, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 28 epochs +INFO:train:Epoch 29/1000INFO:train:Epoch 29/100 Train Loss: 0.2548, Train Acc: 0.9741 Val Loss: 0.3585, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 29 epochs +INFO:train:Epoch 30/100 Train Loss: 0.2464, Train Acc: 0.9785 Val Loss: 0.3493, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 30 epochs +INFO:train:Epoch 31/100 Train Loss: 0.2527, Train Acc: 0.9775 Val Loss: 0.3316, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 31 epochs +INFO:train:Epoch 32/100 Train Loss: 0.2431, Train Acc: 0.9824 Val Loss: 0.3292, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 32 epochs +INFO:train:Epoch 33/100 Train Loss: 0.2493, Train Acc: 0.9780 Val Loss: 0.3461, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 33 epochs +INFO:train:Epoch 34/100 Train Loss: 0.2453, Train Acc: 0.9799 Val Loss: 0.3500, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 34 epochs +INFO:train:Epoch 35/100 Train Loss: 0.2557, Train Acc: 0.9750 Val Loss: 0.3676, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 35 epochs +INFO:train:Epoch 36/100 Train Loss: 0.2385, Train Acc: 0.9843 Val Loss: 0.3297, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 36 epochs +INFO:train:Epoch 37/100 Train Loss: 0.2303, Train Acc: 0.9883 Val Loss: 0.3126, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 37 epochs +INFO:train:Epoch 38/100 Train Loss: 0.2388, Train Acc: 0.9848 Val Loss: 0.3696, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 38 epochs +INFO:train:Epoch 39/100 Train Loss: 0.2360, Train Acc: 0.9848 Val Loss: 0.3273, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 39 epochs +INFO:train:Epoch 40/100 Train Loss: 0.2401, Train Acc: 0.9819 Val Loss: 0.3360, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 40 epochs +INFO:train:Epoch 41/100 Train Loss: 0.2358, Train Acc: 0.9829 Val Loss: 0.3263, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 41 epochs +INFO:train:Epoch 42/100 Train Loss: 0.22Acc: 0.9887 Val Loss: 0.3267, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 42 epochs +INFO:train:Epoch 43/1000 Train Loss: 0.2210, Train Acc: 0.9932 Val Loss: 0.3522, Val Acc: 0.9355 INFO:train:Early stopping triggered after 43 epochs -INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 18.34s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 9 / 15 correct, accuracy: 0.6 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png +INFO:train:Epoch 44/1000 Train Loss: 0.2240, Train Acc: 0.9887 Val Loss: 0.3361, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 44 epochs +INFO:train:Epoch 45/1000 Train Loss: 0.2292, Train Acc: 0.9873 Val Loss: 0.3326, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 45 epochs +INFO:train:Epoch 46/1000 Train Loss: 0.2138, Train Acc: 0.9941 Val Loss: 0.3801, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 46 epochs +INFO:train:Epoch 47/1000 Train Loss: 0.2236, Train Acc: 0.9892 Val Loss: 0.3416, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 47 epochs +INFO:train:Epoch 48/1000 Train Loss: 0.2284, Train Acc: 0.9878 Val Loss: 0.3617, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 48 epochs +INFO:train:Epoch 49/1000 Train Loss: 0.2229, Train Acc: 0.9902 Val Loss: 0.3458, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 49 epochs +INFO:train:Epoch 50/1000 Train Loss: 0.2191, Train Acc: 0.9887 Val Loss: 0.3381, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 50 epochs +INFO:train:Epoch 51/1000 Train Loss: 0.2259, Train Acc: 0.9897 Val Loss: 0.3307, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 51 epochs +INFO:train:Epoch 52/1000 Train Loss: 0.2264, Train Acc: 0.9887 Val Loss: 0.3546, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 52 epochs +INFO:train:Epoch 53/1000 Train Loss: 0.2241, Train Acc: 0.9897 Val Loss: 0.3435, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 53 epochs +INFO:train:Epoch 54/1000 Train Loss: 0.2110, Train Acc: 0.9966 Val Loss: 0.3357, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 54 epochs +INFO:train:Epoch 55/1000 Train Loss: 0.2131, Train Acc: 0.9961 Val Loss: 0.3359, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 55 epochs +INFO:train:Epoch 56/1000 Train Loss: 0.2062, Train Acc: 0.9980 Val Loss: 0.3388, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 56 epoINFO:train:Epoch 57/100 Train Loss: 0.2056, Train Acc: 0.9990 Val Loss: 0.3403, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 57 epochs +INFO:train:Epoch 58/100 Train Loss: 0.2024, Train Acc: 0.9995 Val Loss: 0.3382, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 58 epochs +INFO:train:Epoch 59/100 Train Loss: 0.2093, Train Acc: 0.9941 Val Loss: 0.3474, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 59 epochs +INFO:train:Epoch 60/100 Train Loss: 0.2385, Train Acc: 0.9843 Val Loss: 0.3361, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 60 epochs +INFO:train:Epoch 61/100 Train Loss: 0.2172, Train Acc: 0.9941 Val Loss: 0.3750, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 61 epochs +INFO:train:Epoch 62/100 Train Loss: 0.2195, Train Acc: 0.9912 Val Loss: 0.3484, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 62 epochs +INFO:train:Epoch 63/100 Train Loss: 0.2105, Train Acc: 0.9966 Val Loss: 0.3544, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 63 epochs +INFO:train:Epoch 64/100 Train Loss: 0.2223, Train Acc: 0.9932 Val Loss: 0.3748, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 64 epochs +INFO:train:Epoch 65/100 Train Loss: 0.2141, Train Acc: 0.9946 Val Loss: 0.3675, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 65 epochs +INFO:train:Epoch 66/100 Train Loss: 0.2131, Train Acc: 0.9932 Val Loss: 0.3323, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 66 epochs +INFO:train:Epoch 67/100 Train Loss: 0.2082, Train Acc: 0.9961 Val Loss: 0.3424, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 67 epochs +INFO:train:Epoch 68/100 Train Loss: 0.2250, Train Acc: 0.9863 Val Loss: 0.3373, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 68 epochs +INFO:train:Epoch 69/100 Train Loss: 0.2217, Train Acc: 0.9927 Val Loss: 0.3446, Val Ass: 0.3381, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 69 epochs +INFO:train:Epoch 70/1000 Train Loss: 0.2002, Train Acc: 1.0000 Val Loss: 0.3216, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 70 epochs +INFO:train:Epoch 71/1000 Train Loss: 0.2219, Train Acc: 0.9883 Val Loss: 0.3126, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 71 epochs +INFO:train:Epoch 72/1000 Train Loss: 0.2334, Train Acc: 0.9839 Val Loss: 0.3307, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 72 epochs +INFO:train:Epoch 73/1000 Train Loss: 0.2360, Train Acc: 0.9829 Val Loss: 0.3722, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 73 epochs +INFO:train:Epoch 74/1000 Train Loss: 0.2182, Train Acc: 0.9946 Val Loss: 0.3325, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 74 epochs +INFO:train:Epoch 75/1000 Train Loss: 0.2101, Train Acc: 0.9971 Val Loss: 0.3362, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 75 epochs +INFO:train:Epoch 76/1000 Train Loss: 0.2092, Train Acc: 0.9966 Val Loss: 0.3182, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 76 epochs +INFO:train:Epoch 77/1000 Train Loss: 0.2190, Train Acc: 0.9912 Val Loss: 0.3058, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 77 epochs +INFO:train:Epoch 78/1000 Train Loss: 0.2145, Train Acc: 0.9956 Val Loss: 0.3416, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 78 epochs +INFO:train:Epoch 79/1000 Train Loss: 0.2121, Train Acc: 0.9936 Val Loss: 0.3525, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 79 epochs +INFO:train:Epoch 80/1000 Train Loss: 0.2150, Train Acc: 0.9936 Val Loss: 0.3525, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 80 epochs +INFO:train:Epoch 81/1000 Train Loss: 0.2119, Train Acc: 0.9961 Val Loss: 0.3360, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 81 epochs +INFO:train:Epoch 82/1000 Train Loss: 0.2112, Train Acc: 0.9961 Val Loss: 0.3539, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 82 epochs +INFO:train:Epoch 83/1000 Train Loss: 0.2046, Train Acc: 0.9995 Val Loss: 0.3585, Val Acc: 0.9453 +INFO:train:Early stopINFO:train:Epoch 84/100 Train Loss: 0.2136, Train Acc: 0.9936 Val Loss: 0.3722, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 84 epochs +INFO:train:Epoch 85/100 Train Loss: 0.2158, Train Acc: 0.9922 Val Loss: 0.3346, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 85 epochs +INFO:train:Epoch 86/100 Train Loss: 0.2111, Train Acc: 0.9956 Val Loss: 0.3462, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 86 epochs +INFO:train:Epoch 87/100 Train Loss: 0.2069, Train Acc: 0.9971 Val Loss: 0.3644, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 87 epochs +INFO:train:Epoch 88/100 Train Loss: 0.2153, Train Acc: 0.9927 Val Loss: 0.3300, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 88 epochs +INFO:train:Epoch 89/100 Train Loss: 0.2197, Train Acc: 0.9907 Val Loss: 0.3532, Val Acc: 0.9238 +INFO:train:Early stopping triggered after 89 epochs +INFO:train:Epoch 90/100 Train Loss: 0.2137, Train Acc: 0.9956 Val Loss: 0.3407, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 90 epochs +INFO:train:Epoch 91/100 Train Loss: 0.2057, Train Acc: 0.9980 Val Loss: 0.3769, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 91 epochs +INFO:train:Epoch 92/100 Train Loss: 0.2021, Train Acc: 0.9985 Val Loss: 0.3606, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 92 epochs +INFO:train:Epoch 93/100 Train Loss: 0.2087, Train Acc: 0.9956 Val Loss: 0.3476, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 93 epochs +INFO:train:Epoch 94/100 Train Loss: 0.2113, Train Acc: 0.9956 Val Loss: 0.3613, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 94 epochs +INFO:train:Epoch 95/100 Train Loss: 0.2066, Train Acc: 0.9971 Val Loss: 0.3786, Val Acc: 0.9258 +INFO:train:Early stopping triggered after 95 epochs +INFO:train:Epoch 96/100 Train Loss: 0.2092, Train Acc: 0.9951 Val Loss: 0.3374, Val Acc: 0.9434 +INFO:train:Early stopping triggered: 0.9375 +INFO:train:Early stopping triggered after 96 epochs +INFO:train:Epoch 97/1000 Train Loss: 0.2093, Train Acc: 0.9961 Val Loss: 0.3467, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 97 epochs +INFO:train:Epoch 98/1000 Train Loss: 0.2136, Train Acc: 0.9932 Val Loss: 0.3525, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 98 epochs +INFO:train:Epoch 99/1000 Train Loss: 0.2087, Train Acc: 0.9961 Val Loss: 0.3226, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 99 epochs +INFO:train:Epoch 100/1000 Train Loss: 0.2127, Train Acc: 0.9941 Val Loss: 0.3543, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 100 epochs +INFO:train:Epoch 101/1000 Train Loss: 0.2165, Train Acc: 0.9927 Val Loss: 0.3467, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 101 epochs +INFO:train:Epoch 102/1000 Train Loss: 0.2071, Train Acc: 0.9966 Val Loss: 0.3538, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 102 epochs +INFO:train:Epoch 103/1000 Train Loss: 0.2012, Train Acc: 0.9995 Val Loss: 0.3457, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 103 epochs +INFO:train:Epoch 104/1000 Train Loss: 0.2028, Train Acc: 0.9985 Val Loss: 0.3386, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 104 epochs +INFO:train:Epoch 105/1000 Train Loss: 0.2038, Train Acc: 0.9976 Val Loss: 0.3345, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 105 epochs +INFO:train:Epoch 106/1000 Train Loss: 0.2072, Train Acc: 0.9976 Val Loss: 0.3256, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 106 epochs +INFO:train:Epoch 107/1000 Train Loss: 0.2159, Train Acc: 0.9927 Val Loss: 0.3102, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 107 epochs +INFO:train:Epoch 108/1000 Train Loss: 0.2081, Train Acc: 0.9976 Val Loss: 0.3384, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 108 epochs +INFO:train:Epoch 109/1000 Train Loss: 0.2122, Train Acc: 0.9946 Val Loss: 0.3369, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 109 epochs +INFO:train:Epoch 110/1000 Train Loss: 0.2083, Train Acc: 0.9961 Val Loss: 0.3298, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 110 epochs +INFO:train:Epoch 111/1000 Train Loss: 0.2128, Train Acc: 0.9941 Val Loss: 0.3527, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 111 epochs +INFO:train:Epoch 112/1000 Train Loss: 0.2186, Train Acc: 0.9917 Val Loss: 0.3344, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 112 epochs +INFO:train:Epoch 113/1000 Train Loss: 0.2211, Train Acc: 0.9912 Val Loss: 0.3455, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 113 epochs +INFO:train:Epoch 114/1000 Train Loss: 0.2077, Train Acc: 0.9971 Val Loss: 0.3516, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 114 epochs +INFO:train:Epoch 115/1000 Train Loss: 0.2062, Train Acc: 0.9971 Val Loss: 0.3294, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 115 epochs +INFO:train:Epoch 116/1000 Train Loss: 0.2055, Train Acc: 0.9980 Val Loss: 0.3343, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 116 epochs +INFO:train:Epoch 117/1000 Train Loss: 0.2086, Train Acc: 0.9971 Val Loss: 0.3904, Val Acc: 0.9258 +INFO:train:Early stopping triggered after 117 epochs +INFO:train:Epoch 118/1000 Train Loss: 0.2121, Train Acc: 0.9961 Val Loss: 0.3641, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 118 epochs +INFO:train:Epoch 119/1000 Train Loss: 0.2129, Train Acc: 0.9941 Val Loss: 0.3189, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 119 epochs +INFO:train:Epoch 120/1000 Train Loss: 0.2186, Train Acc: 0.9907 Val Loss: 0.3499, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 120 epochs +INFO:train:Epoch 121/1000 Train Loss: 0.2087, Train Acc: 0.9966 Val Loss: 0.3411, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 121 epochs +INFO:train:Epoch 122/1000 Train Loss: 0.2234, Train Acc: 0.9887 Val Loss: 0.3679, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 122 epochs +INFO:train:Epoch 123/1000 Train Loss: 0.2141, Train Acc: 0.9966 Val Loss: 0.3350, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 123 epochs +INFO:train:Epoch 124/1000 Train Loss: 0.2033, Train Acc: 0.9990 Val Loss: 0.3601, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 124 epochs +INFO:train:Epoch 125/1000 Train Loss: 0.2096, Train Acc: 0.9941 Val Loss: 0.3488, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 125 epochs +INFO:train:Epoch 126/1000 Train Loss: 0.2102, Train Acc: 0.9961 Val Loss: 0.3408, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 126 epochs +INFO:train:Epoch 127/1000 Train Loss: 0.2066, Train Acc: 0.9971 Val Loss: 0.3147, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 127 epochs +INFO:train:Epoch 128/1000 Train Loss: 0.2032, Train Acc: 0.9985 Val Loss: 0.3492, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 128 epochs +INFO:train:Epoch 129/1000 Train Loss: 0.2047, Train Acc: 0.9971 Val Loss: 0.3426, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 129 epochs +INFO:train:Epoch 130/1000 Train Loss: 0.2151, Train Acc: 0.9936 Val Loss: 0.3298, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 130 epochs +INFO:train:Epoch 131/1000 Train Loss: 0.2037, Train Acc: 0.9980 Val Loss: 0.3384, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 131 epochs +INFO:train:Epoch 132/1000 Train Loss: 0.1997, Train Acc: 1.0000 Val Loss: 0.3555, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 132 epochs +INFO:train:Epoch 133/1000 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3489, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 133 epochs +INFO:train:Epoch 134/1000 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3479, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 134 epochs +INFO:train:Epoch 135/1000 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3523, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 135 epochs +INFO:train:Epoch 136/1000 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3478, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 136 epochs +INFO:train:Epoch 137/1000 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3509, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 137 epochs +INFO:train:Epoch 138/1000 Train Loss: 0.1989, Train Acc: 1.0000 Val Loss: 0.3499, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 138 epochs +INFO:train:Epoch 139/1000 Train Loss: 0.1989, Train Acc: 1.0000 Val Loss: 0.3458, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 139 epochs +INFO:train:Epoch 140/1000 Train Loss: 0.1989, Train Acc: 1.0000 Val Loss: 0.3466, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 140 epochs +INFO:train:Epoch 141/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3492, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 141 epochs +INFO:train:Epoch 142/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3464, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 142 epochs +INFO:train:Epoch 143/1000 Train Loss: 0.1989, Train Acc: 1.0000 Val Loss: 0.3511, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 143 epochs +INFO:train:Epoch 144/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3479, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 144 epochs +INFO:train:Epoch 145/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3477, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 145 epochs +INFO:train:Epoch 146/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3500, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 146 epochs +INFO:train:Epoch 147/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3448, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 147 epochs +INFO:train:Epoch 148/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3496, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 148 epochs +INFO:train:Epoch 149/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3479, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 149 epochs +INFO:train:Epoch 150/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3482, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 150 epochs +INFO:train:Epoch 151/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3472, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 151 epochs +INFO:train:Epoch 152/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3460, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 152 epochs +INFO:train:Epoch 153/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3475, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 153 epochs +INFO:train:Epoch 154/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3455, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 154 epochs +INFO:train:Epoch 155/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3478, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 155 epochs +INFO:train:Epoch 156/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3476, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 156 epochs +INFO:train:Epoch 157/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3471, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 157 epochs +INFO:train:Epoch 158/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3454, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 158 epochs +INFO:train:Epoch 159/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3452, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 159 epochs +INFO:train:Epoch 160/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3450, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 160 epochs +INFO:train:Epoch 161/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3432, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 161 epochs +INFO:train:Epoch 162/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3433, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 162 epochs +INFO:train:Epoch 163/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3451, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 163 epochs +INFO:train:Epoch 164/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3441, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 164 epochs +INFO:train:Epoch 165/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3466, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 165 epochs +INFO:train:Epoch 166/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3445, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 166 epochs +INFO:train:Epoch 167/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3436, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 167 epochs +INFO:train:Epoch 168/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3452, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 168 epochs +INFO:train:Epoch 169/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3447, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 169 epochs +INFO:train:Epoch 170/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3449, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 170 epochs +INFO:train:Epoch 171/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3434, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 171 epochs +INFO:train:Epoch 172/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3471, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 172 epochs +INFO:train:Epoch 173/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3462, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 173 epochs +INFO:train:Epoch 174/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3449, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 174 epochs +INFO:train:Epoch 175/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3450, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 175 epochs +INFO:train:Epoch 176/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3482, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 176 epochs +INFO:train:Epoch 177/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3434, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 177 epochs +INFO:train:Epoch 178/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3448, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 178 epochs +INFO:train:Epoch 179/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3448, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 179 epochs +INFO:train:Epoch 180/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3444, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 180 epochs +INFO:train:Epoch 181/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3469, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 181 epochs +INFO:train:Epoch 182/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3440, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 182 epochs +INFO:train:Epoch 183/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3446, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 183 epochs +INFO:train:Epoch 184/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3468, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 184 epochs +INFO:train:Epoch 185/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3449, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 185 epochs +INFO:train:Epoch 186/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3499, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 186 epochs +INFO:train:Epoch 187/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3478, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 187 epochs +INFO:train:Epoch 188/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3469, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 188 epochs +INFO:train:Epoch 189/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3491, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 189 epochs +INFO:train:Epoch 190/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3444, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 190 epochs +INFO:train:Epoch 191/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3466, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 191 epochs +INFO:train:Epoch 192/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3441, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 192 epochs +INFO:train:Epoch 193/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3470, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 193 epochs +INFO:train:Epoch 194/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3438, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 194 epochs +INFO:train:Epoch 195/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3432, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 195 epochs +INFO:train:Epoch 196/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3423, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 196 epochs +INFO:train:Epoch 197/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3460, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 197 epochs +INFO:train:Epoch 198/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3417, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 198 epochs +INFO:train:Epoch 199/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3474, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 199 epochs +INFO:train:Epoch 200/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3469, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 200 epochs +INFO:train:Epoch 201/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3450, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 201 epochs +INFO:train:Epoch 202/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3451, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 202 epochs +INFO:train:Epoch 203/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3466, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 203 epochs +INFO:train:Epoch 204/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3433, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 204 epochs +INFO:train:Epoch 205/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3439, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 205 epochs +INFO:train:Epoch 206/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3459, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 206 epochs +INFO:train:Epoch 207/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3466, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 207 epochs +INFO:train:Epoch 208/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3425, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 208 epochs +INFO:train:Epoch 209/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3453, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 209 epochs +INFO:train:Epoch 210/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3421, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 210 epochs +INFO:train:Epoch 211/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3447, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 211 epochs +INFO:train:Epoch 212/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3450, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 212 epochs +INFO:train:Epoch 213/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3455, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 213 epochs +INFO:train:Epoch 214/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3501, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 214 epochs +INFO:train:Epoch 215/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3441, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 215 epochs +INFO:train:Epoch 216/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3456, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 216 epochs +INFO:train:Epoch 217/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3462, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 217 epochs +INFO:train:Epoch 218/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3427, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 218 epochs +INFO:train:Epoch 219/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3453, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 219 epochs +INFO:train:Epoch 220/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3483, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 220 epochs +INFO:train:Epoch 221/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3467, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 221 epochs +INFO:train:Epoch 222/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3492, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 222 epochs +INFO:train:Epoch 223/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3464, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 223 epochs +INFO:train:Epoch 224/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3428, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 224 epochs +INFO:train:Epoch 225/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3483, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 225 epochs +INFO:train:Epoch 226/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3457, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 226 epochs +INFO:train:Epoch 227/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3488, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 227 epochs +INFO:train:Epoch 228/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3451, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 228 epochs +INFO:train:Epoch 229/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3469, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 229 epochs +INFO:train:Epoch 230/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3473, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 230 epochs +INFO:train:Epoch 231/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3513, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 231 epochs +INFO:train:Epoch 232/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3475, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 232 epochs +INFO:train:Epoch 233/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3451, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 233 epochs +INFO:train:Epoch 234/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3472, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 234 epochs +INFO:train:Epoch 235/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3465, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 235 epochs +INFO:train:Epoch 236/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3495, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 236 epochs +INFO:train:Epoch 237/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3460, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 237 epochs +INFO:train:Epoch 238/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3441, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 238 epochs +INFO:train:Epoch 239/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3526, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 239 epochs +INFO:train:Epoch 240/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3449, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 240 epochs +INFO:train:Epoch 241/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3462, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 241 epochs +INFO:train:Epoch 242/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3432, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 242 epochs +INFO:train:Epoch 243/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3474, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 243 epochs +INFO:train:Epoch 244/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3454, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 244 epochs +INFO:train:Epoch 245/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3434, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 245 epochs +INFO:train:Epoch 246/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3444, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 246 epochs +INFO:train:Epoch 247/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3470, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 247 epochs +INFO:train:Epoch 248/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3479, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 248 epochs +INFO:train:Epoch 249/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3445, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 249 epochs +INFO:train:Epoch 250/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3470, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 250 epochs +INFO:train:Epoch 251/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3485, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 251 epochs +INFO:train:Epoch 252/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3445, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 252 epochs +INFO:train:Epoch 253/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3442, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 253 epochs +INFO:train:Epoch 254/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3455, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 254 epochs +INFO:train:Epoch 255/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3434, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 255 epochs +INFO:train:Epoch 256/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3475, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 256 epochs +INFO:train:Epoch 257/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3491, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 257 epochs +INFO:train:Epoch 258/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3496, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 258 epochs +INFO:train:Epoch 259/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3409, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 259 epochs +INFO:train:Epoch 260/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3431, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 260 epochs +INFO:train:Epoch 261/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3480, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 261 epochs +INFO:train:Epoch 262/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3434, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 262 epochs +INFO:train:Epoch 263/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3445, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 263 epochs +INFO:train:Epoch 264/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3462, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 264 epochs +INFO:train:Epoch 265/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3472, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 265 epochs +INFO:train:Epoch 266/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3446, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 266 epochs +INFO:train:Epoch 267/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3536, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 267 epochs +INFO:train:Epoch 268/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3448, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 268 epochs +INFO:train:Epoch 269/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3458, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 269 epochs +INFO:train:Epoch 270/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3488, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 270 epochs +INFO:train:Epoch 271/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3461, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 271 epochs +INFO:train:Epoch 272/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3505, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 272 epochs +INFO:train:Epoch 273/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3452, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 273 epochs +INFO:train:Epoch 274/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3466, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 274 epochs +INFO:train:Epoch 275/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3498, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 275 epochs +INFO:train:Epoch 276/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3496, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 276 epochs +INFO:train:Epoch 277/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3472, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 277 epochs +INFO:train:Epoch 278/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3446, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 278 epochs +INFO:train:Epoch 279/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3404, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 279 epochs +INFO:train:Epoch 280/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3475, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 280 epochs +INFO:train:Epoch 281/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3463, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 281 epochs +INFO:train:Epoch 282/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3509, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 282 epochs +INFO:train:Epoch 283/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3463, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 283 epochs +INFO:train:Epoch 284/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3466, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 284 epochs +INFO:train:Epoch 285/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3485, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 285 epochs +INFO:train:Epoch 286/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3425, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 286 epochs +INFO:train:Epoch 287/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3494, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 287 epochs +INFO:train:Epoch 288/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3492, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 288 epochs +INFO:train:Epoch 289/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3472, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 289 epochs +INFO:train:Epoch 290/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3472, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 290 epochs +INFO:train:Epoch 291/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3444, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 291 epochs +INFO:train:Epoch 292/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3491, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 292 epochs +INFO:train:Epoch 293/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3460, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 293 epochs +INFO:train:Epoch 294/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3476, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 294 epochs +INFO:train:Epoch 295/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3454, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 295 epochs +INFO:train:Epoch 296/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3443, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 296 epochs +INFO:train:Epoch 297/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3448, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 297 epochs +INFO:train:Epoch 298/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3477, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 298 epochs +INFO:train:Epoch 299/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3453, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 299 epochs +INFO:train:Epoch 300/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3463, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 300 epochs +INFO:train:Epoch 301/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3458, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 301 epochs +INFO:train:Epoch 302/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3430, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 302 epochs +INFO:train:Epoch 303/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3399, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 303 epochs +INFO:train:Epoch 304/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3471, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 304 epochs +INFO:train:Epoch 305/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3443, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 305 epochs +INFO:train:Epoch 306/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3500, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 306 epochs +INFO:train:Epoch 307/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3427, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 307 epochs +INFO:train:Epoch 308/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3463, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 308 epochs +INFO:train:Epoch 309/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3470, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 309 epochs +INFO:train:Epoch 310/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3451, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 310 epochs +INFO:train:Epoch 311/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3506, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 311 epochs +INFO:train:Epoch 312/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3482, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 312 epochs +INFO:train:Epoch 313/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3502, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 313 epochs +INFO:train:Epoch 314/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3525, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 314 epochs +INFO:train:Epoch 315/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3496, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 315 epochs +INFO:train:Epoch 316/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3476, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 316 epochs +INFO:train:Epoch 317/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3500, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 317 epochs +INFO:train:Epoch 318/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3448, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 318 epochs +INFO:train:Epoch 319/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3509, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 319 epochs +INFO:train:Epoch 320/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3501, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 320 epochs +INFO:train:Epoch 321/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3467, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 321 epochs +INFO:train:Epoch 322/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3472, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 322 epochs +INFO:train:Epoch 323/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3507, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 323 epochs +INFO:train:Epoch 324/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3485, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 324 epochs +INFO:train:Epoch 325/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3472, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 325 epochs +INFO:train:Epoch 326/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3499, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 326 epochs +INFO:train:Epoch 327/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3463, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 327 epochs +INFO:train:Epoch 328/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3474, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 328 epochs +INFO:train:Epoch 329/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3446, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 329 epochs +INFO:train:Epoch 330/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3477, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 330 epochs +INFO:train:Epoch 331/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3456, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 331 epochs +INFO:train:Epoch 332/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3450, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 332 epochs +INFO:train:Epoch 333/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3453, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 333 epochs +INFO:train:Epoch 334/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3515, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 334 epochs +INFO:train:Epoch 335/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3449, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 335 epochs +INFO:train:Epoch 336/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3462, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 336 epochs +INFO:train:Epoch 337/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3470, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 337 epochs +INFO:train:Epoch 338/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3474, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 338 epochs +INFO:train:Epoch 339/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3480, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 339 epochs +INFO:train:Epoch 340/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3443, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 340 epochs +INFO:train:Epoch 341/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3454, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 341 epochs +INFO:train:Epoch 342/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3421, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 342 epochs +INFO:train:Epoch 343/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3451, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 343 epochs +INFO:train:Epoch 344/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3474, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 344 epochs +INFO:train:Epoch 345/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3408, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 345 epochs +INFO:train:Epoch 346/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3483, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 346 epochs +INFO:train:Epoch 347/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3460, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 347 epochs +INFO:train:Epoch 348/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3451, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 348 epochs +INFO:train:Epoch 349/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3469, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 349 epochs +INFO:train:Epoch 350/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3435, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 350 epochs +INFO:train:Epoch 351/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3453, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 351 epochs +INFO:train:Epoch 352/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3470, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 352 epochs +INFO:train:Epoch 353/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3413, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 353 epochs +INFO:train:Epoch 354/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3479, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 354 epochs +INFO:train:Epoch 355/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3444, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 355 epochs +INFO:train:Epoch 356/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3451, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 356 epochs +INFO:train:Epoch 357/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3467, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 357 epochs +INFO:train:Epoch 358/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3449, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 358 epochs +INFO:train:Epoch 359/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3493, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 359 epochs diff --git a/code/transformer/logs/instance-recognition/tmp/run_10.log b/code/transformer/logs/instance-recognition/tmp/run_10.log index e9310422..a15f59a3 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_10.log +++ b/code/transformer/logs/instance-recognition/tmp/run_10.log @@ -53,59 +53,107 @@ INFO:__main__:model: Transformer( (fc): Linear(in_features=2046, out_features=2, bias=True) ) INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.7972, Train Acc: 0.4643 Val Loss: 3.2099, Val Acc: 0.6667 -INFO:train:Epoch 2/1000 Train Loss: 2.5980, Train Acc: 0.7679 Val Loss: 4.2621, Val Acc: 0.5333 -INFO:train:Epoch 3/1000 Train Loss: 2.5423, Train Acc: 0.6607 Val Loss: 1.9501, Val Acc: 0.7333 -INFO:train:Epoch 4/1000 Train Loss: 0.7604, Train Acc: 0.8214 Val Loss: 0.6584, Val Acc: 0.8000 -INFO:train:Epoch 5/1000 Train Loss: 0.7864, Train Acc: 0.8214 Val Loss: 1.4364, Val Acc: 0.6667 -INFO:train:Epoch 6/1000 Train Loss: 0.4767, Train Acc: 0.9286 Val Loss: 1.5206, Val Acc: 0.6000 -INFO:train:Epoch 7/1000 Train Loss: 0.3968, Train Acc: 0.9643 Val Loss: 1.8886, Val Acc: 0.6667 -INFO:train:Epoch 8/1000 Train Loss: 0.3930, Train Acc: 0.9643 Val Loss: 1.8214, Val Acc: 0.6000 -INFO:train:Epoch 9/1000 Train Loss: 0.4237, Train Acc: 0.9286 Val Loss: 1.7012, Val Acc: 0.6000 -INFO:train:Epoch 10/1000 Train Loss: 0.3556, Train Acc: 0.9821 Val Loss: 1.3153, Val Acc: 0.6000 -INFO:train:Epoch 11/1000 Train Loss: 0.2995, Train Acc: 1.0000 Val Loss: 0.7498, Val Acc: 0.6667 -INFO:train:Epoch 12/1000 Train Loss: 0.2961, Train Acc: 0.9821 Val Loss: 0.7013, Val Acc: 0.6000 -INFO:train:Epoch 13/1000 Train Loss: 0.3061, Train Acc: 0.9643 Val Loss: 1.0558, Val Acc: 0.6000 -INFO:train:Epoch 14/1000 Train Loss: 0.2995, Train Acc: 0.9821 Val Loss: 0.7787, Val Acc: 0.7333 -INFO:train:Epoch 15/1000 Train Loss: 0.2443, Train Acc: 1.0000 Val Loss: 0.7663, Val Acc: 0.6667 -INFO:train:Epoch 16/1000 Train Loss: 0.2708, Train Acc: 0.9821 Val Loss: 0.8259, Val Acc: 0.6667 -INFO:train:Epoch 17/1000 Train Loss: 0.2550, Train Acc: 0.9821 Val Loss: 0.9702, Val Acc: 0.6667 -INFO:train:Epoch 18/1000 Train Loss: 0.2584, Train Acc: 1.0000 Val Loss: 0.9376, Val Acc: 0.6667 -INFO:train:Epoch 19/1000 Train Loss: 0.2627, Train Acc: 0.9821 Val Loss: 0.7310, Val Acc: 0.7333 -INFO:train:Epoch 20/1000 Train Loss: 0.2594, Train Acc: 1.0000 Val Loss: 0.6685, Val Acc: 0.6667 -INFO:train:Epoch 21/1000 Train Loss: 0.2684, Train Acc: 1.0000 Val Loss: 0.6003, Val Acc: 0.7333 -INFO:train:Epoch 22/1000 Train Loss: 0.2686, Train Acc: 1.0000 Val Loss: 0.5770, Val Acc: 0.8000 -INFO:train:Epoch 23/1000 Train Loss: 0.2376, Train Acc: 1.0000 Val Loss: 0.7309, Val Acc: 0.8000 -INFO:train:Epoch 24/1000 Train Loss: 0.2797, Train Acc: 0.9821 Val Loss: 0.5184, Val Acc: 0.8667 -INFO:train:Epoch 25/1000 Train Loss: 0.2255, Train Acc: 1.0000 Val Loss: 0.4305, Val Acc: 0.8667 -INFO:train:Epoch 26/1000 Train Loss: 0.2307, Train Acc: 1.0000 Val Loss: 0.4431, Val Acc: 0.8667 -INFO:train:Epoch 27/1000 Train Loss: 0.2583, Train Acc: 1.0000 Val Loss: 0.6035, Val Acc: 0.7333 -INFO:train:Epoch 28/1000 Train Loss: 0.2293, Train Acc: 1.0000 Val Loss: 0.7900, Val Acc: 0.6667 -INFO:train:Epoch 29/1000 Train Loss: 0.2514, Train Acc: 1.0000 Val Loss: 0.6568, Val Acc: 0.7333 -INFO:train:Epoch 30/1000 Train Loss: 0.2238, Train Acc: 1.0000 Val Loss: 0.6630, Val Acc: 0.7333 -INFO:train:Epoch 31/1000 Train Loss: 0.2409, Train Acc: 1.0000 Val Loss: 0.6831, Val Acc: 0.7333 -INFO:train:Epoch 32/1000 Train Loss: 0.2464, Train Acc: 1.0000 Val Loss: 0.6648, Val Acc: 0.7333 -INFO:train:Epoch 33/1000 Train Loss: 0.2294, Train Acc: 1.0000 Val Loss: 0.7106, Val Acc: 0.8000 -INFO:train:Epoch 34/1000 Train Loss: 0.2236, Train Acc: 1.0000 Val Loss: 0.8577, Val Acc: 0.6000 -INFO:train:Epoch 35/1000 Train Loss: 0.2671, Train Acc: 0.9821 Val Loss: 0.6755, Val Acc: 0.7333 -INFO:train:Epoch 36/1000 Train Loss: 0.2362, Train Acc: 1.0000 Val Loss: 0.5900, Val Acc: 0.8000 -INFO:train:Epoch 37/1000 Train Loss: 0.2303, Train Acc: 1.0000 Val Loss: 0.5632, Val Acc: 0.7333 -INFO:train:Epoch 38/1000 Train Loss: 0.2244, Train Acc: 1.0000 Val Loss: 0.6263, Val Acc: 0.7333 -INFO:train:Epoch 39/1000 Train Loss: 0.2325, Train Acc: 1.0000 Val Loss: 0.6773, Val Acc: 0.6667 -INFO:train:Epoch 40/1000 Train Loss: 0.2324, Train Acc: 1.0000 Val Loss: 0.7028, Val Acc: 0.7333 -INFO:train:Epoch 41/1000 Train Loss: 0.2288, Train Acc: 1.0000 Val Loss: 0.7221, Val Acc: 0.8000 -INFO:train:Epoch 42/1000 Train Loss: 0.2258, Train Acc: 1.0000 Val Loss: 0.6653, Val Acc: 0.8667 -INFO:train:Epoch 43/1000 Train Loss: 0.2208, Train Acc: 1.0000 Val Loss: 0.6771, Val Acc: 0.8000 -INFO:train:Epoch 44/1000 Train Loss: 0.2229, Train Acc: 1.0000 Val Loss: 0.6193, Val Acc: 0.7333 -INFO:train:Epoch 45/1000 Train Loss: 0.2082, Train Acc: 1.0000 Val Loss: 0.5751, Val Acc: 0.8000 +INFO:train:Epoch 1/100 Train Loss: 0.6627, Train Acc: 0.8982 Val Loss: 0.4077, Val Acc: 0.9473 +INFO:train:Epoch 2/100 Train Loss: 0.3713, Train Acc: 0.9398 Val Loss: 0.3547, Val Acc: 0.9434 +INFO:train:Epoch 3/100 Train Loss: 0.3323, Train Acc: 0.9521 Val Loss: 0.3267, Val Acc: 0.9570 +INFO:train:Epoch 4/100 Train Loss: 0.3296, Train Acc: 0.9535 Val Loss: 0.3581, Val Acc: 0.9570 +INFO:train:Epoch 5/100 Train Loss: 0.3392, Train Acc: 0.9467 Val Loss: 0.4236, Val Acc: 0.9121 +INFO:train:Epoch 6/100 Train Loss: 0.3484, Train Acc: 0.9432 Val Loss: 0.4062, Val Acc: 0.9570 +INFO:train:Epoch 7/100 Train Loss: 0.3290, Train Acc: 0.9521 Val Loss: 0.3301, Val Acc: 0.9531 +INFO:train:Epoch 8/100 Train Loss: 0.3214, Train Acc: 0.9511 Val Loss: 0.3713, Val Acc: 0.9531 +INFO:train:Epoch 9/100 Train Loss: 0.3318, Train Acc: 0.9501 Val Loss: 0.4054, Val Acc: 0.9570 +INFO:train:Epoch 10/100 Train Loss: 0.3186, Train Acc: 0.9506 Val Loss: 0.3242, Val Acc: 0.9570 +INFO:train:Epoch 11/100 Train Loss: 0.3292, Train Acc: 0.9501 Val Loss: 0.3251, Val Acc: 0.9473 +INFO:train:Epoch 12/100 Train Loss: 0.3171, Train Acc: 0.9516 Val Loss: 0.3616, Val Acc: 0.9551 +INFO:train:Epoch 13/100 Train Loss: 0.3070, Train Acc: 0.9535 Val Loss: 0.3451, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 13 epochs +INFO:train:Epoch 14/100 Train Loss: 0.3038, Train Acc: 0.9521 Val Loss: 0.3349, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 14 epochs +INFO:train:Epoch 15/100 Train Loss: 0.2973, Train Acc: 0.9599 Val Loss: 0.3555, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 15 epochs +INFO:train:Epoch 16/100 Train Loss: 0.3157, Train Acc: 0.9555 Val Loss: 0.3431, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 16 epochs +INFO:train:Epoch 17/100 Train Loss: 0.2864, Train Acc: 0.9599 Val Loss: 0.3721, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 17 epochs +INFO:train:Epoch 18/100 Train Loss: 0.2788, Train Acc: 0.9653 Val Loss: 0.3586, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 18 epochs +INFO:train:Epoch 19/100 Train Loss: 0.3039, Train Acc: 0.9579 Val Loss: 0.3820, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 19 epochs +INFO:train:Epoch 20/100 Train Loss: 0.2970, Train Acc: 0.9599 Val Loss: 0.3168, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 20 epochs +INFO:train:Epoch 21/100 Train Loss: 0.2737, Train Acc: 0.9662 Val Loss: 0.3733, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 21 epochs +INFO:train:Epoch 22/100 Train Loss: 0.2801, Train Acc: 0.9623 Val Loss: 0.3413, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 22 epochs +INFO:train:Epoch 23/100 Train Loss: 0.2651, Train Acc: 0.9736 Val Loss: 0.3471, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 23 epochs +INFO:train:Epoch 24/100 Train Loss: 0.2708, Train Acc: 0.9658 Val Loss: 0.3511, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 24 epochs +INFO:train:Epoch 25/100 Train Loss: 0.2636, Train Acc: 0.9697 Val Loss: 0.3594, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 25 epochs +INFO:train:Epoch 26/100 Train Loss: 0.2530, Train Acc: 0.9760 Val Loss: 0.3987, Val Acc: 0.9258 +INFO:train:Early stopping triggered after 26 epochs +INFO:train:Epoch 27/100 Train Loss: 0.2530, Train Acc: 0.9775 Val Loss: 0.3160, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 27 epochs +INFO:train:Epoch 28/100 Train Loss: 0.2386, Train Acc: 0.9829 Val Loss: 0.3458, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 28 epochs +INFO:train:Epoch 29/100 Train Loss: 0.2388, Train Acc: 0.9824 Val Loss: 0.3358, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 29 epochs +INFO:train:Epoch 30/100 Train Loss: 0.2506, Train Acc: 0.9770 Val Loss: 0.3472, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 30 epochs +INFO:train:Epoch 31/100 Train Loss: 0.2445, Train Acc: 0.9799 Val Loss: 0.3724, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 31 epochs +INFO:train:Epoch 32/100 Train Loss: 0.2272, Train Acc: 0.9883 Val Loss: 0.3492, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 32 epochs +INFO:train:Epoch 33/100 Train Loss: 0.2470, Train Acc: 0.9804 Val Loss: 0.3377, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 33 epochs +INFO:train:Epoch 34/100 Train Loss: 0.2451, Train Acc: 0.9819 Val Loss: 0.3644, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 34 epochs +INFO:train:Epoch 35/100 Train Loss: 0.2308, Train Acc: 0.9887 Val Loss: 0.3562, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 35 epochs +INFO:train:Epoch 36/100 Train Loss: 0.2381, Train Acc: 0.9839 Val Loss: 0.3594, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 36 epochs +INFO:train:Epoch 37/100 Train Loss: 0.2326, Train Acc: 0.9878 Val Loss: 0.3677, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 37 epochs +INFO:train:Epoch 38/100 Train Loss: 0.2346, Train Acc: 0.9843 Val Loss: 0.3196, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 38 epochs +INFO:train:Epoch 39/100 Train Loss: 0.2404, Train Acc: 0.9814 Val Loss: 0.3267, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 39 epochs +INFO:train:Epoch 40/100 Train Loss: 0.2221, Train Acc: 0.9922 Val Loss: 0.3633, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 40 epochs +INFO:train:Epoch 41/100 Train Loss: 0.2182, Train Acc: 0.9922 Val Loss: 0.3557, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 41 epochs +INFO:train:Epoch 42/100 Train Loss: 0.2150, Train Acc: 0.9941 Val Loss: 0.3373, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 42 epochs +INFO:train:Epoch 43/100 Train Loss: 0.2096, Train Acc: 0.9976 Val Loss: 0.3434, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 43 epochs +INFO:train:Epoch 44/100 Train Loss: 0.2184, Train Acc: 0.9922 Val Loss: 0.3216, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 44 epochs +INFO:train:Epoch 45/100 Train Loss: 0.2237, Train Acc: 0.9907 Val Loss: 0.3743, Val Acc: 0.9453 INFO:train:Early stopping triggered after 45 epochs -INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 19.18s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 12 / 15 correct, accuracy: 0.8 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png +INFO:train:Epoch 46/100 Train Loss: 0.2375, Train Acc: 0.9839 Val Loss: 0.3476, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 46 epochs +INFO:train:Epoch 47/100 Train Loss: 0.2196, Train Acc: 0.9917 Val Loss: 0.3684, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 47 epochs +INFO:train:Epoch 48/100 Train Loss: 0.2175, Train Acc: 0.9922 Val Loss: 0.3865, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 48 epochs +INFO:train:Epoch 49/100 Train Loss: 0.2133, Train Acc: 0.9941 Val Loss: 0.3299, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 49 epochs +INFO:train:Epoch 50/100 Train Loss: 0.2107, Train Acc: 0.9961 Val Loss: 0.3268, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 50 epochs +INFO:train:Epoch 51/100 Train Loss: 0.2182, Train Acc: 0.9922 Val Loss: 0.3704, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 51 epochs +INFO:train:Epoch 52/100 Train Loss: 0.2261, Train Acc: 0.9887 Val Loss: 0.3656, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 52 epochs +INFO:train:Epoch 53/100 Train Loss: 0.2308, Train Acc: 0.9873 Val Loss: 0.3303, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 53 epochs +INFO:train:Epoch 54/100 Train Loss: 0.2220, Train Acc: 0.9897 Val Loss: 0.3619, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 54 epochs +INFO:train:Epoch 55/100 Train Loss: 0.2200, Train Acc: 0.9907 Val Loss: 0.3485, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 55 epochs +INFO:train:Epoch 56/100 Train Loss: 0.2180, Train Acc: 0.9932 Val Loss: 0.3291, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 56 epochs +INFO:train:Epoch 57/100 Train Loss: 0.2076, Train Acc: 0.9980 Val Loss: 0.3427, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 57 epochs +INFO:train:Epoch 58/100 Train Loss: 0.2019, Train Acc: 0.9995 Val Loss: 0.3371, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 58 epochs diff --git a/code/transformer/logs/instance-recognition/tmp/run_11.log b/code/transformer/logs/instance-recognition/tmp/run_11.log index 2a5657b5..608fec8d 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_11.log +++ b/code/transformer/logs/instance-recognition/tmp/run_11.log @@ -1,103 +1 @@ INFO:__main__:Reading the dataset: fish instance-recognition -INFO:__main__:model: Transformer( - (encoder): Encoder( - (layers): ModuleList( - (0-3): 4 x EncoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - ) - ) - ) - (decoder): Decoder( - (layers): ModuleList( - (0-3): 4 x DecoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (cross_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm3): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - (dropout3): Dropout(p=0.2, inplace=False) - ) - ) - ) - (fc): Linear(in_features=2046, out_features=2, bias=True) -) -INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.8448, Train Acc: 0.3929 Val Loss: 2.8718, Val Acc: 0.7333 -INFO:train:Epoch 2/1000 Train Loss: 3.1779, Train Acc: 0.6786 Val Loss: 3.9545, Val Acc: 0.4000 -INFO:train:Epoch 3/1000 Train Loss: 2.6961, Train Acc: 0.6071 Val Loss: 2.1524, Val Acc: 0.5333 -INFO:train:Epoch 4/1000 Train Loss: 0.8888, Train Acc: 0.7143 Val Loss: 1.1774, Val Acc: 0.6667 -INFO:train:Epoch 5/1000 Train Loss: 1.4395, Train Acc: 0.6786 Val Loss: 0.8515, Val Acc: 0.6000 -INFO:train:Epoch 6/1000 Train Loss: 0.4370, Train Acc: 0.8929 Val Loss: 1.8296, Val Acc: 0.4000 -INFO:train:Epoch 7/1000 Train Loss: 0.8015, Train Acc: 0.6786 Val Loss: 1.1768, Val Acc: 0.4667 -INFO:train:Epoch 8/1000 Train Loss: 0.4728, Train Acc: 0.8929 Val Loss: 1.0048, Val Acc: 0.6000 -INFO:train:Epoch 9/1000 Train Loss: 0.4781, Train Acc: 0.9107 Val Loss: 0.7272, Val Acc: 0.7333 -INFO:train:Epoch 10/1000 Train Loss: 0.3855, Train Acc: 0.9643 Val Loss: 0.6502, Val Acc: 0.6667 -INFO:train:Epoch 11/1000 Train Loss: 0.3638, Train Acc: 0.9464 Val Loss: 0.9797, Val Acc: 0.6000 -INFO:train:Epoch 12/1000 Train Loss: 0.4247, Train Acc: 0.9286 Val Loss: 1.0541, Val Acc: 0.7333 -INFO:train:Epoch 13/1000 Train Loss: 0.3134, Train Acc: 0.9821 Val Loss: 1.1000, Val Acc: 0.4667 -INFO:train:Epoch 14/1000 Train Loss: 0.3078, Train Acc: 0.9464 Val Loss: 1.0211, Val Acc: 0.6000 -INFO:train:Epoch 15/1000 Train Loss: 0.2987, Train Acc: 1.0000 Val Loss: 0.8625, Val Acc: 0.6667 -INFO:train:Epoch 16/1000 Train Loss: 0.2505, Train Acc: 1.0000 Val Loss: 0.9631, Val Acc: 0.6000 -INFO:train:Epoch 17/1000 Train Loss: 0.2485, Train Acc: 1.0000 Val Loss: 1.1471, Val Acc: 0.5333 -INFO:train:Epoch 18/1000 Train Loss: 0.2778, Train Acc: 0.9821 Val Loss: 1.1108, Val Acc: 0.6000 -INFO:train:Epoch 19/1000 Train Loss: 0.2654, Train Acc: 0.9821 Val Loss: 0.9566, Val Acc: 0.6000 -INFO:train:Epoch 20/1000 Train Loss: 0.2399, Train Acc: 1.0000 Val Loss: 0.8241, Val Acc: 0.6000 -INFO:train:Epoch 21/1000 Train Loss: 0.2343, Train Acc: 1.0000 Val Loss: 0.7976, Val Acc: 0.5333 -INFO:train:Epoch 22/1000 Train Loss: 0.2387, Train Acc: 1.0000 Val Loss: 0.8488, Val Acc: 0.5333 -INFO:train:Epoch 23/1000 Train Loss: 0.2435, Train Acc: 1.0000 Val Loss: 0.7862, Val Acc: 0.6667 -INFO:train:Epoch 24/1000 Train Loss: 0.2335, Train Acc: 1.0000 Val Loss: 0.7137, Val Acc: 0.6667 -INFO:train:Epoch 25/1000 Train Loss: 0.2347, Train Acc: 0.9821 Val Loss: 0.6601, Val Acc: 0.7333 -INFO:train:Epoch 26/1000 Train Loss: 0.2302, Train Acc: 1.0000 Val Loss: 0.6528, Val Acc: 0.7333 -INFO:train:Epoch 27/1000 Train Loss: 0.2322, Train Acc: 1.0000 Val Loss: 0.6518, Val Acc: 0.8000 -INFO:train:Epoch 28/1000 Train Loss: 0.2346, Train Acc: 1.0000 Val Loss: 0.6612, Val Acc: 0.8000 -INFO:train:Epoch 29/1000 Train Loss: 0.2268, Train Acc: 1.0000 Val Loss: 0.6547, Val Acc: 0.8000 -INFO:train:Epoch 30/1000 Train Loss: 0.2199, Train Acc: 1.0000 Val Loss: 0.6335, Val Acc: 0.8000 -INFO:train:Epoch 31/1000 Train Loss: 0.2253, Train Acc: 1.0000 Val Loss: 0.6295, Val Acc: 0.7333 -INFO:train:Epoch 32/1000 Train Loss: 0.2229, Train Acc: 1.0000 Val Loss: 0.6230, Val Acc: 0.7333 -INFO:train:Epoch 33/1000 Train Loss: 0.2171, Train Acc: 1.0000 Val Loss: 0.6293, Val Acc: 0.7333 -INFO:train:Epoch 34/1000 Train Loss: 0.2224, Train Acc: 1.0000 Val Loss: 0.6517, Val Acc: 0.8000 -INFO:train:Epoch 35/1000 Train Loss: 0.2108, Train Acc: 1.0000 Val Loss: 0.7306, Val Acc: 0.7333 -INFO:train:Epoch 36/1000 Train Loss: 0.2211, Train Acc: 1.0000 Val Loss: 0.7754, Val Acc: 0.6667 -INFO:train:Epoch 37/1000 Train Loss: 0.2323, Train Acc: 1.0000 Val Loss: 0.7643, Val Acc: 0.6667 -INFO:train:Early stopping triggered after 37 epochs -INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 15.65s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 10 / 15 correct, accuracy: 0.6666666666666666 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png diff --git a/code/transformer/logs/instance-recognition/tmp/run_12.log b/code/transformer/logs/instance-recognition/tmp/run_12.log index 6b203e5e..608fec8d 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_12.log +++ b/code/transformer/logs/instance-recognition/tmp/run_12.log @@ -1,96 +1 @@ INFO:__main__:Reading the dataset: fish instance-recognition -INFO:__main__:model: Transformer( - (encoder): Encoder( - (layers): ModuleList( - (0-3): 4 x EncoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - ) - ) - ) - (decoder): Decoder( - (layers): ModuleList( - (0-3): 4 x DecoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (cross_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm3): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - (dropout3): Dropout(p=0.2, inplace=False) - ) - ) - ) - (fc): Linear(in_features=2046, out_features=2, bias=True) -) -INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.7056, Train Acc: 0.6071 Val Loss: 4.8858, Val Acc: 0.7333 -INFO:train:Epoch 2/1000 Train Loss: 3.4859, Train Acc: 0.7321 Val Loss: 3.0353, Val Acc: 0.6000 -INFO:train:Epoch 3/1000 Train Loss: 1.9031, Train Acc: 0.5179 Val Loss: 1.6060, Val Acc: 0.7333 -INFO:train:Epoch 4/1000 Train Loss: 1.1825, Train Acc: 0.8036 Val Loss: 1.6440, Val Acc: 0.6000 -INFO:train:Epoch 5/1000 Train Loss: 0.9375, Train Acc: 0.8214 Val Loss: 0.6772, Val Acc: 0.8000 -INFO:train:Epoch 6/1000 Train Loss: 0.4045, Train Acc: 0.9286 Val Loss: 0.8469, Val Acc: 0.7333 -INFO:train:Epoch 7/1000 Train Loss: 0.5049, Train Acc: 0.8571 Val Loss: 1.6750, Val Acc: 0.4667 -INFO:train:Epoch 8/1000 Train Loss: 0.4206, Train Acc: 0.8750 Val Loss: 1.6567, Val Acc: 0.5333 -INFO:train:Epoch 9/1000 Train Loss: 0.4074, Train Acc: 0.9464 Val Loss: 1.2114, Val Acc: 0.6667 -INFO:train:Epoch 10/1000 Train Loss: 0.3901, Train Acc: 0.9464 Val Loss: 0.9907, Val Acc: 0.7333 -INFO:train:Epoch 11/1000 Train Loss: 0.3036, Train Acc: 0.9821 Val Loss: 1.2224, Val Acc: 0.6667 -INFO:train:Epoch 12/1000 Train Loss: 0.3805, Train Acc: 0.9464 Val Loss: 0.9843, Val Acc: 0.7333 -INFO:train:Epoch 13/1000 Train Loss: 0.3019, Train Acc: 0.9464 Val Loss: 1.0114, Val Acc: 0.6000 -INFO:train:Epoch 14/1000 Train Loss: 0.3029, Train Acc: 0.9464 Val Loss: 1.0379, Val Acc: 0.6667 -INFO:train:Epoch 15/1000 Train Loss: 0.2842, Train Acc: 1.0000 Val Loss: 0.7773, Val Acc: 0.8667 -INFO:train:Epoch 16/1000 Train Loss: 0.2916, Train Acc: 0.9821 Val Loss: 0.8120, Val Acc: 0.7333 -INFO:train:Epoch 17/1000 Train Loss: 0.2973, Train Acc: 0.9643 Val Loss: 1.0437, Val Acc: 0.6000 -INFO:train:Epoch 18/1000 Train Loss: 0.2997, Train Acc: 0.9643 Val Loss: 0.8598, Val Acc: 0.8000 -INFO:train:Epoch 19/1000 Train Loss: 0.2863, Train Acc: 0.9821 Val Loss: 0.8460, Val Acc: 0.8000 -INFO:train:Epoch 20/1000 Train Loss: 0.2824, Train Acc: 0.9821 Val Loss: 0.8144, Val Acc: 0.6667 -INFO:train:Epoch 21/1000 Train Loss: 0.2358, Train Acc: 1.0000 Val Loss: 1.0975, Val Acc: 0.5333 -INFO:train:Epoch 22/1000 Train Loss: 0.2656, Train Acc: 1.0000 Val Loss: 0.7888, Val Acc: 0.7333 -INFO:train:Epoch 23/1000 Train Loss: 0.2336, Train Acc: 1.0000 Val Loss: 0.7638, Val Acc: 0.8000 -INFO:train:Epoch 24/1000 Train Loss: 0.2447, Train Acc: 1.0000 Val Loss: 0.9266, Val Acc: 0.6667 -INFO:train:Epoch 25/1000 Train Loss: 0.2402, Train Acc: 1.0000 Val Loss: 0.8815, Val Acc: 0.6000 -INFO:train:Epoch 26/1000 Train Loss: 0.2388, Train Acc: 1.0000 Val Loss: 0.7507, Val Acc: 0.7333 -INFO:train:Epoch 27/1000 Train Loss: 0.2366, Train Acc: 1.0000 Val Loss: 0.7098, Val Acc: 0.8000 -INFO:train:Epoch 28/1000 Train Loss: 0.2493, Train Acc: 1.0000 Val Loss: 0.7315, Val Acc: 0.8000 -INFO:train:Epoch 29/1000 Train Loss: 0.2308, Train Acc: 1.0000 Val Loss: 0.8151, Val Acc: 0.5333 -INFO:train:Epoch 30/1000 Train Loss: 0.2457, Train Acc: 1.0000 Val Loss: 0.6037, Val Acc: 0.8667 -INFO:train:Early stopping triggered after 30 epochs -INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 13.62s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 13 / 15 correct, accuracy: 0.8666666666666667 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png diff --git a/code/transformer/logs/instance-recognition/tmp/run_13.log b/code/transformer/logs/instance-recognition/tmp/run_13.log index 8b9d5cbe..608fec8d 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_13.log +++ b/code/transformer/logs/instance-recognition/tmp/run_13.log @@ -1,105 +1 @@ INFO:__main__:Reading the dataset: fish instance-recognition -INFO:__main__:model: Transformer( - (encoder): Encoder( - (layers): ModuleList( - (0-3): 4 x EncoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - ) - ) - ) - (decoder): Decoder( - (layers): ModuleList( - (0-3): 4 x DecoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (cross_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm3): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - (dropout3): Dropout(p=0.2, inplace=False) - ) - ) - ) - (fc): Linear(in_features=2046, out_features=2, bias=True) -) -INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.8645, Train Acc: 0.4464 Val Loss: 7.1099, Val Acc: 0.6667 -INFO:train:Epoch 2/1000 Train Loss: 3.7848, Train Acc: 0.7143 Val Loss: 1.9898, Val Acc: 0.4667 -INFO:train:Epoch 3/1000 Train Loss: 0.9888, Train Acc: 0.7857 Val Loss: 1.1575, Val Acc: 0.6667 -INFO:train:Epoch 4/1000 Train Loss: 1.6707, Train Acc: 0.5357 Val Loss: 1.8724, Val Acc: 0.4667 -INFO:train:Epoch 5/1000 Train Loss: 0.6128, Train Acc: 0.8393 Val Loss: 1.6018, Val Acc: 0.6667 -INFO:train:Epoch 6/1000 Train Loss: 0.6919, Train Acc: 0.7857 Val Loss: 1.2342, Val Acc: 0.6000 -INFO:train:Epoch 7/1000 Train Loss: 0.3755, Train Acc: 0.9464 Val Loss: 0.9066, Val Acc: 0.7333 -INFO:train:Epoch 8/1000 Train Loss: 0.4236, Train Acc: 0.9107 Val Loss: 0.9545, Val Acc: 0.8000 -INFO:train:Epoch 9/1000 Train Loss: 0.4006, Train Acc: 0.9107 Val Loss: 1.1646, Val Acc: 0.8000 -INFO:train:Epoch 10/1000 Train Loss: 0.3219, Train Acc: 0.9821 Val Loss: 1.3811, Val Acc: 0.6667 -INFO:train:Epoch 11/1000 Train Loss: 0.3765, Train Acc: 0.9286 Val Loss: 1.7047, Val Acc: 0.4667 -INFO:train:Epoch 12/1000 Train Loss: 0.4198, Train Acc: 0.8929 Val Loss: 1.7186, Val Acc: 0.7333 -INFO:train:Epoch 13/1000 Train Loss: 0.4056, Train Acc: 0.9286 Val Loss: 1.6533, Val Acc: 0.6000 -INFO:train:Epoch 14/1000 Train Loss: 0.3185, Train Acc: 0.9643 Val Loss: 1.6438, Val Acc: 0.6667 -INFO:train:Epoch 15/1000 Train Loss: 0.3109, Train Acc: 0.9821 Val Loss: 1.6914, Val Acc: 0.5333 -INFO:train:Epoch 16/1000 Train Loss: 0.3499, Train Acc: 0.9286 Val Loss: 1.2003, Val Acc: 0.6667 -INFO:train:Epoch 17/1000 Train Loss: 0.2756, Train Acc: 1.0000 Val Loss: 1.1395, Val Acc: 0.6667 -INFO:train:Epoch 18/1000 Train Loss: 0.3098, Train Acc: 0.9821 Val Loss: 1.0954, Val Acc: 0.6667 -INFO:train:Epoch 19/1000 Train Loss: 0.3380, Train Acc: 0.9464 Val Loss: 0.8726, Val Acc: 0.6667 -INFO:train:Epoch 20/1000 Train Loss: 0.2848, Train Acc: 0.9821 Val Loss: 0.7222, Val Acc: 0.7333 -INFO:train:Epoch 21/1000 Train Loss: 0.2858, Train Acc: 0.9821 Val Loss: 0.7574, Val Acc: 0.7333 -INFO:train:Epoch 22/1000 Train Loss: 0.2749, Train Acc: 0.9643 Val Loss: 0.8573, Val Acc: 0.6667 -INFO:train:Epoch 23/1000 Train Loss: 0.2438, Train Acc: 1.0000 Val Loss: 1.0361, Val Acc: 0.6000 -INFO:train:Epoch 24/1000 Train Loss: 0.2679, Train Acc: 0.9821 Val Loss: 1.1296, Val Acc: 0.6000 -INFO:train:Epoch 25/1000 Train Loss: 0.2682, Train Acc: 0.9821 Val Loss: 1.0449, Val Acc: 0.6000 -INFO:train:Epoch 26/1000 Train Loss: 0.2473, Train Acc: 1.0000 Val Loss: 0.8314, Val Acc: 0.6667 -INFO:train:Epoch 27/1000 Train Loss: 0.2441, Train Acc: 1.0000 Val Loss: 0.7098, Val Acc: 0.7333 -INFO:train:Epoch 28/1000 Train Loss: 0.2532, Train Acc: 1.0000 Val Loss: 0.7506, Val Acc: 0.7333 -INFO:train:Epoch 29/1000 Train Loss: 0.2514, Train Acc: 0.9821 Val Loss: 0.9600, Val Acc: 0.6000 -INFO:train:Epoch 30/1000 Train Loss: 0.2368, Train Acc: 1.0000 Val Loss: 1.1250, Val Acc: 0.6000 -INFO:train:Epoch 31/1000 Train Loss: 0.2331, Train Acc: 1.0000 Val Loss: 1.2114, Val Acc: 0.6000 -INFO:train:Epoch 32/1000 Train Loss: 0.2375, Train Acc: 1.0000 Val Loss: 1.1380, Val Acc: 0.6667 -INFO:train:Epoch 33/1000 Train Loss: 0.2259, Train Acc: 1.0000 Val Loss: 0.9847, Val Acc: 0.6667 -INFO:train:Epoch 34/1000 Train Loss: 0.2329, Train Acc: 1.0000 Val Loss: 0.9481, Val Acc: 0.7333 -INFO:train:Epoch 35/1000 Train Loss: 0.2258, Train Acc: 1.0000 Val Loss: 0.9838, Val Acc: 0.6667 -INFO:train:Epoch 36/1000 Train Loss: 0.2207, Train Acc: 1.0000 Val Loss: 1.0061, Val Acc: 0.6000 -INFO:train:Epoch 37/1000 Train Loss: 0.2235, Train Acc: 1.0000 Val Loss: 0.9436, Val Acc: 0.6000 -INFO:train:Epoch 38/1000 Train Loss: 0.2212, Train Acc: 1.0000 Val Loss: 0.8733, Val Acc: 0.6667 -INFO:train:Epoch 39/1000 Train Loss: 0.2191, Train Acc: 1.0000 Val Loss: 0.8200, Val Acc: 0.6667 -INFO:train:Early stopping triggered after 39 epochs -INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 17.32s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 10 / 15 correct, accuracy: 0.6666666666666666 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png diff --git a/code/transformer/logs/instance-recognition/tmp/run_14.log b/code/transformer/logs/instance-recognition/tmp/run_14.log index 8cd4d951..608fec8d 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_14.log +++ b/code/transformer/logs/instance-recognition/tmp/run_14.log @@ -1,108 +1 @@ INFO:__main__:Reading the dataset: fish instance-recognition -INFO:__main__:model: Transformer( - (encoder): Encoder( - (layers): ModuleList( - (0-3): 4 x EncoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - ) - ) - ) - (decoder): Decoder( - (layers): ModuleList( - (0-3): 4 x DecoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (cross_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm3): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - (dropout3): Dropout(p=0.2, inplace=False) - ) - ) - ) - (fc): Linear(in_features=2046, out_features=2, bias=True) -) -INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.6980, Train Acc: 0.6071 Val Loss: 1.9372, Val Acc: 0.8000 -INFO:train:Epoch 2/1000 Train Loss: 1.6708, Train Acc: 0.7679 Val Loss: 5.4766, Val Acc: 0.5333 -INFO:train:Epoch 3/1000 Train Loss: 2.6327, Train Acc: 0.6607 Val Loss: 1.6395, Val Acc: 0.4667 -INFO:train:Epoch 4/1000 Train Loss: 0.5755, Train Acc: 0.8393 Val Loss: 3.1294, Val Acc: 0.4667 -INFO:train:Epoch 5/1000 Train Loss: 1.9074, Train Acc: 0.6607 Val Loss: 1.9366, Val Acc: 0.7333 -INFO:train:Epoch 6/1000 Train Loss: 1.2141, Train Acc: 0.7500 Val Loss: 1.8035, Val Acc: 0.8000 -INFO:train:Epoch 7/1000 Train Loss: 0.6800, Train Acc: 0.8750 Val Loss: 1.4187, Val Acc: 0.7333 -INFO:train:Epoch 8/1000 Train Loss: 0.5798, Train Acc: 0.9286 Val Loss: 1.4639, Val Acc: 0.8000 -INFO:train:Epoch 9/1000 Train Loss: 0.6796, Train Acc: 0.8929 Val Loss: 1.5509, Val Acc: 0.6667 -INFO:train:Epoch 10/1000 Train Loss: 0.4806, Train Acc: 0.9643 Val Loss: 1.3304, Val Acc: 0.6667 -INFO:train:Epoch 11/1000 Train Loss: 0.3903, Train Acc: 0.9821 Val Loss: 1.0737, Val Acc: 0.6667 -INFO:train:Epoch 12/1000 Train Loss: 0.3326, Train Acc: 0.9821 Val Loss: 0.9355, Val Acc: 0.6667 -INFO:train:Epoch 13/1000 Train Loss: 0.3681, Train Acc: 0.9464 Val Loss: 0.7749, Val Acc: 0.7333 -INFO:train:Epoch 14/1000 Train Loss: 0.3259, Train Acc: 0.9107 Val Loss: 0.9046, Val Acc: 0.7333 -INFO:train:Epoch 15/1000 Train Loss: 0.3404, Train Acc: 0.9464 Val Loss: 0.9301, Val Acc: 0.6667 -INFO:train:Epoch 16/1000 Train Loss: 0.3135, Train Acc: 0.9464 Val Loss: 0.8203, Val Acc: 0.6667 -INFO:train:Epoch 17/1000 Train Loss: 0.2738, Train Acc: 1.0000 Val Loss: 0.8486, Val Acc: 0.5333 -INFO:train:Epoch 18/1000 Train Loss: 0.3107, Train Acc: 0.9821 Val Loss: 0.7702, Val Acc: 0.6000 -INFO:train:Epoch 19/1000 Train Loss: 0.2865, Train Acc: 0.9821 Val Loss: 0.7402, Val Acc: 0.6667 -INFO:train:Epoch 20/1000 Train Loss: 0.2563, Train Acc: 1.0000 Val Loss: 0.7711, Val Acc: 0.7333 -INFO:train:Epoch 21/1000 Train Loss: 0.2596, Train Acc: 1.0000 Val Loss: 0.7727, Val Acc: 0.7333 -INFO:train:Epoch 22/1000 Train Loss: 0.2602, Train Acc: 1.0000 Val Loss: 0.7585, Val Acc: 0.8000 -INFO:train:Epoch 23/1000 Train Loss: 0.2797, Train Acc: 0.9821 Val Loss: 0.6542, Val Acc: 0.8667 -INFO:train:Epoch 24/1000 Train Loss: 0.2674, Train Acc: 1.0000 Val Loss: 0.6135, Val Acc: 0.8000 -INFO:train:Epoch 25/1000 Train Loss: 0.2432, Train Acc: 1.0000 Val Loss: 0.6042, Val Acc: 0.7333 -INFO:train:Epoch 26/1000 Train Loss: 0.2416, Train Acc: 1.0000 Val Loss: 0.6056, Val Acc: 0.8000 -INFO:train:Epoch 27/1000 Train Loss: 0.2411, Train Acc: 1.0000 Val Loss: 0.5362, Val Acc: 0.8000 -INFO:train:Epoch 28/1000 Train Loss: 0.2366, Train Acc: 1.0000 Val Loss: 0.4946, Val Acc: 0.8000 -INFO:train:Epoch 29/1000 Train Loss: 0.2300, Train Acc: 1.0000 Val Loss: 0.5345, Val Acc: 0.7333 -INFO:train:Epoch 30/1000 Train Loss: 0.2365, Train Acc: 1.0000 Val Loss: 0.5575, Val Acc: 0.7333 -INFO:train:Epoch 31/1000 Train Loss: 0.2375, Train Acc: 1.0000 Val Loss: 0.4802, Val Acc: 0.8000 -INFO:train:Epoch 32/1000 Train Loss: 0.2337, Train Acc: 1.0000 Val Loss: 0.5501, Val Acc: 0.8667 -INFO:train:Epoch 33/1000 Train Loss: 0.2296, Train Acc: 1.0000 Val Loss: 0.6539, Val Acc: 0.8000 -INFO:train:Epoch 34/1000 Train Loss: 0.2293, Train Acc: 1.0000 Val Loss: 0.6456, Val Acc: 0.8000 -INFO:train:Epoch 35/1000 Train Loss: 0.2273, Train Acc: 1.0000 Val Loss: 0.6155, Val Acc: 0.7333 -INFO:train:Epoch 36/1000 Train Loss: 0.2241, Train Acc: 1.0000 Val Loss: 0.5796, Val Acc: 0.7333 -INFO:train:Epoch 37/1000 Train Loss: 0.2279, Train Acc: 1.0000 Val Loss: 0.6054, Val Acc: 0.7333 -INFO:train:Epoch 38/1000 Train Loss: 0.2263, Train Acc: 1.0000 Val Loss: 0.7390, Val Acc: 0.6667 -INFO:train:Epoch 39/1000 Train Loss: 0.2221, Train Acc: 1.0000 Val Loss: 0.6395, Val Acc: 0.6667 -INFO:train:Epoch 40/1000 Train Loss: 0.2176, Train Acc: 1.0000 Val Loss: 0.5205, Val Acc: 0.8000 -INFO:train:Epoch 41/1000 Train Loss: 0.2180, Train Acc: 1.0000 Val Loss: 0.4887, Val Acc: 0.8000 -INFO:train:Epoch 42/1000 Train Loss: 0.2207, Train Acc: 1.0000 Val Loss: 0.5418, Val Acc: 0.8000 -INFO:train:Early stopping triggered after 42 epochs -INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 17.78s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 12 / 15 correct, accuracy: 0.8 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.10s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png diff --git a/code/transformer/logs/instance-recognition/tmp/run_15.log b/code/transformer/logs/instance-recognition/tmp/run_15.log index 81d2dd83..608fec8d 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_15.log +++ b/code/transformer/logs/instance-recognition/tmp/run_15.log @@ -1,97 +1 @@ INFO:__main__:Reading the dataset: fish instance-recognition -INFO:__main__:model: Transformer( - (encoder): Encoder( - (layers): ModuleList( - (0-3): 4 x EncoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - ) - ) - ) - (decoder): Decoder( - (layers): ModuleList( - (0-3): 4 x DecoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (cross_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm3): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - (dropout3): Dropout(p=0.2, inplace=False) - ) - ) - ) - (fc): Linear(in_features=2046, out_features=2, bias=True) -) -INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 1.0614, Train Acc: 0.3036 Val Loss: 5.6195, Val Acc: 0.7333 -INFO:train:Epoch 2/1000 Train Loss: 4.3877, Train Acc: 0.7500 Val Loss: 1.0645, Val Acc: 0.6667 -INFO:train:Epoch 3/1000 Train Loss: 0.8539, Train Acc: 0.8214 Val Loss: 3.0613, Val Acc: 0.5333 -INFO:train:Epoch 4/1000 Train Loss: 2.3194, Train Acc: 0.5893 Val Loss: 1.0381, Val Acc: 0.8000 -INFO:train:Epoch 5/1000 Train Loss: 0.6750, Train Acc: 0.8393 Val Loss: 1.8097, Val Acc: 0.6667 -INFO:train:Epoch 6/1000 Train Loss: 0.7309, Train Acc: 0.6964 Val Loss: 0.8804, Val Acc: 0.7333 -INFO:train:Epoch 7/1000 Train Loss: 0.4547, Train Acc: 0.9107 Val Loss: 0.5662, Val Acc: 0.8667 -INFO:train:Epoch 8/1000 Train Loss: 0.4599, Train Acc: 0.8929 Val Loss: 1.0465, Val Acc: 0.7333 -INFO:train:Epoch 9/1000 Train Loss: 0.4152, Train Acc: 0.9643 Val Loss: 1.1679, Val Acc: 0.7333 -INFO:train:Epoch 10/1000 Train Loss: 0.3906, Train Acc: 0.9464 Val Loss: 0.8505, Val Acc: 0.8000 -INFO:train:Epoch 11/1000 Train Loss: 0.3215, Train Acc: 0.9821 Val Loss: 0.5876, Val Acc: 0.6667 -INFO:train:Epoch 12/1000 Train Loss: 0.2743, Train Acc: 1.0000 Val Loss: 0.6472, Val Acc: 0.6667 -INFO:train:Epoch 13/1000 Train Loss: 0.3558, Train Acc: 0.9107 Val Loss: 0.5847, Val Acc: 0.8000 -INFO:train:Epoch 14/1000 Train Loss: 0.2828, Train Acc: 1.0000 Val Loss: 0.6060, Val Acc: 0.8667 -INFO:train:Epoch 15/1000 Train Loss: 0.2790, Train Acc: 1.0000 Val Loss: 0.6206, Val Acc: 0.8000 -INFO:train:Epoch 16/1000 Train Loss: 0.2578, Train Acc: 1.0000 Val Loss: 0.6266, Val Acc: 0.7333 -INFO:train:Epoch 17/1000 Train Loss: 0.2517, Train Acc: 1.0000 Val Loss: 0.6144, Val Acc: 0.7333 -INFO:train:Epoch 18/1000 Train Loss: 0.2665, Train Acc: 1.0000 Val Loss: 0.6258, Val Acc: 0.7333 -INFO:train:Epoch 19/1000 Train Loss: 0.2465, Train Acc: 1.0000 Val Loss: 0.6324, Val Acc: 0.7333 -INFO:train:Epoch 20/1000 Train Loss: 0.2462, Train Acc: 1.0000 Val Loss: 0.6035, Val Acc: 0.7333 -INFO:train:Epoch 21/1000 Train Loss: 0.2442, Train Acc: 0.9821 Val Loss: 0.5049, Val Acc: 0.7333 -INFO:train:Epoch 22/1000 Train Loss: 0.2309, Train Acc: 1.0000 Val Loss: 0.4621, Val Acc: 0.8000 -INFO:train:Epoch 23/1000 Train Loss: 0.2300, Train Acc: 1.0000 Val Loss: 0.4989, Val Acc: 0.8000 -INFO:train:Epoch 24/1000 Train Loss: 0.2270, Train Acc: 1.0000 Val Loss: 0.5517, Val Acc: 0.8000 -INFO:train:Epoch 25/1000 Train Loss: 0.2273, Train Acc: 1.0000 Val Loss: 0.5443, Val Acc: 0.8000 -INFO:train:Epoch 26/1000 Train Loss: 0.2198, Train Acc: 1.0000 Val Loss: 0.5049, Val Acc: 0.8000 -INFO:train:Epoch 27/1000 Train Loss: 0.2206, Train Acc: 1.0000 Val Loss: 0.4599, Val Acc: 0.8000 -INFO:train:Epoch 28/1000 Train Loss: 0.2238, Train Acc: 1.0000 Val Loss: 0.4282, Val Acc: 0.8000 -INFO:train:Epoch 29/1000 Train Loss: 0.2318, Train Acc: 1.0000 Val Loss: 0.4496, Val Acc: 0.8667 -INFO:train:Epoch 30/1000 Train Loss: 0.2279, Train Acc: 1.0000 Val Loss: 0.4891, Val Acc: 0.8667 -INFO:train:Epoch 31/1000 Train Loss: 0.2174, Train Acc: 1.0000 Val Loss: 0.5336, Val Acc: 0.8667 -INFO:train:Early stopping triggered after 31 epochs -INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 13.73s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.21s -INFO:train:validation got 13 / 15 correct, accuracy: 0.8666666666666667 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png diff --git a/code/transformer/logs/instance-recognition/tmp/run_16.log b/code/transformer/logs/instance-recognition/tmp/run_16.log index 92279459..608fec8d 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_16.log +++ b/code/transformer/logs/instance-recognition/tmp/run_16.log @@ -1,104 +1 @@ INFO:__main__:Reading the dataset: fish instance-recognition -INFO:__main__:model: Transformer( - (encoder): Encoder( - (layers): ModuleList( - (0-3): 4 x EncoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - ) - ) - ) - (decoder): Decoder( - (layers): ModuleList( - (0-3): 4 x DecoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (cross_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm3): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - (dropout3): Dropout(p=0.2, inplace=False) - ) - ) - ) - (fc): Linear(in_features=2046, out_features=2, bias=True) -) -INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.7168, Train Acc: 0.5893 Val Loss: 1.5643, Val Acc: 0.7333 -INFO:train:Epoch 2/1000 Train Loss: 1.5934, Train Acc: 0.8214 Val Loss: 9.0294, Val Acc: 0.3333 -INFO:train:Epoch 3/1000 Train Loss: 3.9073, Train Acc: 0.6607 Val Loss: 2.5653, Val Acc: 0.5333 -INFO:train:Epoch 4/1000 Train Loss: 1.0126, Train Acc: 0.7679 Val Loss: 1.3342, Val Acc: 0.7333 -INFO:train:Epoch 5/1000 Train Loss: 0.7168, Train Acc: 0.7857 Val Loss: 1.5738, Val Acc: 0.6000 -INFO:train:Epoch 6/1000 Train Loss: 0.6775, Train Acc: 0.8214 Val Loss: 2.4837, Val Acc: 0.4667 -INFO:train:Epoch 7/1000 Train Loss: 0.8339, Train Acc: 0.8214 Val Loss: 2.0204, Val Acc: 0.4000 -INFO:train:Epoch 8/1000 Train Loss: 0.4915, Train Acc: 0.8750 Val Loss: 1.2179, Val Acc: 0.6667 -INFO:train:Epoch 9/1000 Train Loss: 0.3111, Train Acc: 1.0000 Val Loss: 0.9612, Val Acc: 0.7333 -INFO:train:Epoch 10/1000 Train Loss: 0.3967, Train Acc: 0.9643 Val Loss: 1.0043, Val Acc: 0.8000 -INFO:train:Epoch 11/1000 Train Loss: 0.4495, Train Acc: 0.9286 Val Loss: 1.1201, Val Acc: 0.6667 -INFO:train:Epoch 12/1000 Train Loss: 0.3468, Train Acc: 0.9643 Val Loss: 1.0389, Val Acc: 0.6667 -INFO:train:Epoch 13/1000 Train Loss: 0.2929, Train Acc: 1.0000 Val Loss: 1.0222, Val Acc: 0.8000 -INFO:train:Epoch 14/1000 Train Loss: 0.2825, Train Acc: 1.0000 Val Loss: 1.0887, Val Acc: 0.6000 -INFO:train:Epoch 15/1000 Train Loss: 0.2722, Train Acc: 1.0000 Val Loss: 1.0930, Val Acc: 0.5333 -INFO:train:Epoch 16/1000 Train Loss: 0.2714, Train Acc: 0.9821 Val Loss: 0.8050, Val Acc: 0.5333 -INFO:train:Epoch 17/1000 Train Loss: 0.2455, Train Acc: 1.0000 Val Loss: 0.6981, Val Acc: 0.7333 -INFO:train:Epoch 18/1000 Train Loss: 0.2764, Train Acc: 0.9643 Val Loss: 0.7583, Val Acc: 0.6667 -INFO:train:Epoch 19/1000 Train Loss: 0.2676, Train Acc: 0.9821 Val Loss: 0.7429, Val Acc: 0.6667 -INFO:train:Epoch 20/1000 Train Loss: 0.2379, Train Acc: 1.0000 Val Loss: 0.7485, Val Acc: 0.6667 -INFO:train:Epoch 21/1000 Train Loss: 0.2624, Train Acc: 1.0000 Val Loss: 0.7668, Val Acc: 0.6667 -INFO:train:Epoch 22/1000 Train Loss: 0.2277, Train Acc: 1.0000 Val Loss: 0.8758, Val Acc: 0.4667 -INFO:train:Epoch 23/1000 Train Loss: 0.2436, Train Acc: 1.0000 Val Loss: 0.9064, Val Acc: 0.4667 -INFO:train:Epoch 24/1000 Train Loss: 0.2570, Train Acc: 0.9821 Val Loss: 0.7981, Val Acc: 0.6000 -INFO:train:Epoch 25/1000 Train Loss: 0.2295, Train Acc: 1.0000 Val Loss: 0.7833, Val Acc: 0.6667 -INFO:train:Epoch 26/1000 Train Loss: 0.2701, Train Acc: 1.0000 Val Loss: 0.8516, Val Acc: 0.6000 -INFO:train:Epoch 27/1000 Train Loss: 0.2358, Train Acc: 1.0000 Val Loss: 1.0368, Val Acc: 0.6667 -INFO:train:Epoch 28/1000 Train Loss: 0.2767, Train Acc: 0.9821 Val Loss: 0.8254, Val Acc: 0.5333 -INFO:train:Epoch 29/1000 Train Loss: 0.2261, Train Acc: 1.0000 Val Loss: 0.8791, Val Acc: 0.7333 -INFO:train:Epoch 30/1000 Train Loss: 0.2368, Train Acc: 1.0000 Val Loss: 0.9473, Val Acc: 0.6667 -INFO:train:Epoch 31/1000 Train Loss: 0.2460, Train Acc: 1.0000 Val Loss: 0.9051, Val Acc: 0.4000 -INFO:train:Epoch 32/1000 Train Loss: 0.2203, Train Acc: 1.0000 Val Loss: 1.0660, Val Acc: 0.5333 -INFO:train:Epoch 33/1000 Train Loss: 0.2541, Train Acc: 1.0000 Val Loss: 0.9855, Val Acc: 0.6000 -INFO:train:Epoch 34/1000 Train Loss: 0.2212, Train Acc: 1.0000 Val Loss: 0.9577, Val Acc: 0.6667 -INFO:train:Epoch 35/1000 Train Loss: 0.2358, Train Acc: 1.0000 Val Loss: 0.9025, Val Acc: 0.7333 -INFO:train:Epoch 36/1000 Train Loss: 0.2260, Train Acc: 1.0000 Val Loss: 0.8758, Val Acc: 0.6000 -INFO:train:Epoch 37/1000 Train Loss: 0.2169, Train Acc: 1.0000 Val Loss: 0.8926, Val Acc: 0.5333 -INFO:train:Epoch 38/1000 Train Loss: 0.2228, Train Acc: 1.0000 Val Loss: 0.8701, Val Acc: 0.4667 -INFO:train:Early stopping triggered after 38 epochs -INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 16.77s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.21s -INFO:train:validation got 8 / 15 correct, accuracy: 0.5333333333333333 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.11s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png diff --git a/code/transformer/logs/instance-recognition/tmp/run_17.log b/code/transformer/logs/instance-recognition/tmp/run_17.log index 6ec0cdfc..608fec8d 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_17.log +++ b/code/transformer/logs/instance-recognition/tmp/run_17.log @@ -1,102 +1 @@ INFO:__main__:Reading the dataset: fish instance-recognition -INFO:__main__:model: Transformer( - (encoder): Encoder( - (layers): ModuleList( - (0-3): 4 x EncoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - ) - ) - ) - (decoder): Decoder( - (layers): ModuleList( - (0-3): 4 x DecoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (cross_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm3): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - (dropout3): Dropout(p=0.2, inplace=False) - ) - ) - ) - (fc): Linear(in_features=2046, out_features=2, bias=True) -) -INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.8100, Train Acc: 0.3929 Val Loss: 2.3086, Val Acc: 0.7333 -INFO:train:Epoch 2/1000 Train Loss: 1.0364, Train Acc: 0.8036 Val Loss: 8.6631, Val Acc: 0.3333 -INFO:train:Epoch 3/1000 Train Loss: 3.3382, Train Acc: 0.6250 Val Loss: 2.1482, Val Acc: 0.6000 -INFO:train:Epoch 4/1000 Train Loss: 0.5010, Train Acc: 0.9107 Val Loss: 2.0038, Val Acc: 0.7333 -INFO:train:Epoch 5/1000 Train Loss: 0.7682, Train Acc: 0.7679 Val Loss: 1.6549, Val Acc: 0.6000 -INFO:train:Epoch 6/1000 Train Loss: 0.4976, Train Acc: 0.9107 Val Loss: 2.0500, Val Acc: 0.6000 -INFO:train:Epoch 7/1000 Train Loss: 0.3950, Train Acc: 0.9464 Val Loss: 2.0241, Val Acc: 0.6000 -INFO:train:Epoch 8/1000 Train Loss: 0.3413, Train Acc: 1.0000 Val Loss: 1.8118, Val Acc: 0.5333 -INFO:train:Epoch 9/1000 Train Loss: 0.3562, Train Acc: 0.9643 Val Loss: 1.6285, Val Acc: 0.4000 -INFO:train:Epoch 10/1000 Train Loss: 0.2982, Train Acc: 0.9821 Val Loss: 1.7826, Val Acc: 0.0667 -INFO:train:Epoch 11/1000 Train Loss: 0.2959, Train Acc: 0.9643 Val Loss: 1.6280, Val Acc: 0.4000 -INFO:train:Epoch 12/1000 Train Loss: 0.2550, Train Acc: 1.0000 Val Loss: 1.8370, Val Acc: 0.4000 -INFO:train:Epoch 13/1000 Train Loss: 0.2576, Train Acc: 1.0000 Val Loss: 2.0071, Val Acc: 0.4667 -INFO:train:Epoch 14/1000 Train Loss: 0.2999, Train Acc: 0.9821 Val Loss: 2.0173, Val Acc: 0.4667 -INFO:train:Epoch 15/1000 Train Loss: 0.2791, Train Acc: 1.0000 Val Loss: 1.8983, Val Acc: 0.4000 -INFO:train:Epoch 16/1000 Train Loss: 0.2547, Train Acc: 1.0000 Val Loss: 1.8425, Val Acc: 0.4000 -INFO:train:Epoch 17/1000 Train Loss: 0.2619, Train Acc: 0.9821 Val Loss: 1.8589, Val Acc: 0.2667 -INFO:train:Epoch 18/1000 Train Loss: 0.2490, Train Acc: 1.0000 Val Loss: 1.7848, Val Acc: 0.2667 -INFO:train:Epoch 19/1000 Train Loss: 0.2392, Train Acc: 1.0000 Val Loss: 1.6997, Val Acc: 0.3333 -INFO:train:Epoch 20/1000 Train Loss: 0.2421, Train Acc: 1.0000 Val Loss: 1.6184, Val Acc: 0.3333 -INFO:train:Epoch 21/1000 Train Loss: 0.2406, Train Acc: 1.0000 Val Loss: 1.5528, Val Acc: 0.4667 -INFO:train:Epoch 22/1000 Train Loss: 0.2371, Train Acc: 1.0000 Val Loss: 1.5222, Val Acc: 0.4000 -INFO:train:Epoch 23/1000 Train Loss: 0.2343, Train Acc: 1.0000 Val Loss: 1.4468, Val Acc: 0.3333 -INFO:train:Epoch 24/1000 Train Loss: 0.2317, Train Acc: 1.0000 Val Loss: 1.3509, Val Acc: 0.4667 -INFO:train:Epoch 25/1000 Train Loss: 0.2342, Train Acc: 1.0000 Val Loss: 1.2563, Val Acc: 0.4000 -INFO:train:Epoch 26/1000 Train Loss: 0.2390, Train Acc: 0.9821 Val Loss: 1.3032, Val Acc: 0.3333 -INFO:train:Epoch 27/1000 Train Loss: 0.2299, Train Acc: 1.0000 Val Loss: 1.3768, Val Acc: 0.4667 -INFO:train:Epoch 28/1000 Train Loss: 0.2257, Train Acc: 1.0000 Val Loss: 1.5591, Val Acc: 0.4667 -INFO:train:Epoch 29/1000 Train Loss: 0.2437, Train Acc: 1.0000 Val Loss: 1.5989, Val Acc: 0.4000 -INFO:train:Epoch 30/1000 Train Loss: 0.2233, Train Acc: 1.0000 Val Loss: 1.7427, Val Acc: 0.2667 -INFO:train:Epoch 31/1000 Train Loss: 0.2389, Train Acc: 1.0000 Val Loss: 1.6208, Val Acc: 0.5333 -INFO:train:Epoch 32/1000 Train Loss: 0.2318, Train Acc: 1.0000 Val Loss: 1.6596, Val Acc: 0.5333 -INFO:train:Epoch 33/1000 Train Loss: 0.2360, Train Acc: 1.0000 Val Loss: 1.5898, Val Acc: 0.3333 -INFO:train:Epoch 34/1000 Train Loss: 0.2330, Train Acc: 1.0000 Val Loss: 1.5566, Val Acc: 0.3333 -INFO:train:Epoch 35/1000 Train Loss: 0.2258, Train Acc: 1.0000 Val Loss: 1.5029, Val Acc: 0.5333 -INFO:train:Epoch 36/1000 Train Loss: 0.2266, Train Acc: 1.0000 Val Loss: 1.5168, Val Acc: 0.5333 -INFO:train:Early stopping triggered after 36 epochs -INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 15.25s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 8 / 15 correct, accuracy: 0.5333333333333333 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png diff --git a/code/transformer/logs/instance-recognition/tmp/run_18.log b/code/transformer/logs/instance-recognition/tmp/run_18.log index 8592c857..608fec8d 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_18.log +++ b/code/transformer/logs/instance-recognition/tmp/run_18.log @@ -1,93 +1 @@ INFO:__main__:Reading the dataset: fish instance-recognition -INFO:__main__:model: Transformer( - (encoder): Encoder( - (layers): ModuleList( - (0-3): 4 x EncoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - ) - ) - ) - (decoder): Decoder( - (layers): ModuleList( - (0-3): 4 x DecoderLayer( - (self_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (cross_attention): MultiHeadAttention( - (query): Linear(in_features=2046, out_features=2046, bias=True) - (key): Linear(in_features=2046, out_features=2046, bias=True) - (value): Linear(in_features=2046, out_features=2046, bias=True) - (fc_out): Linear(in_features=2046, out_features=2046, bias=True) - ) - (feed_forward): FeedForward( - (fc1): Linear(in_features=2046, out_features=128, bias=True) - (fc2): Linear(in_features=128, out_features=2046, bias=True) - (dropout): Dropout(p=0.2, inplace=False) - ) - (norm1): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm2): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (norm3): LayerNorm((2046,), eps=1e-05, elementwise_affine=True) - (dropout1): Dropout(p=0.2, inplace=False) - (dropout2): Dropout(p=0.2, inplace=False) - (dropout3): Dropout(p=0.2, inplace=False) - ) - ) - ) - (fc): Linear(in_features=2046, out_features=2, bias=True) -) -INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.8702, Train Acc: 0.4464 Val Loss: 3.3647, Val Acc: 0.7333 -INFO:train:Epoch 2/1000 Train Loss: 3.9212, Train Acc: 0.7500 Val Loss: 2.6643, Val Acc: 0.5333 -INFO:train:Epoch 3/1000 Train Loss: 1.5206, Train Acc: 0.7857 Val Loss: 1.7169, Val Acc: 0.6000 -INFO:train:Epoch 4/1000 Train Loss: 0.4517, Train Acc: 0.8214 Val Loss: 1.0492, Val Acc: 0.6667 -INFO:train:Epoch 5/1000 Train Loss: 1.2738, Train Acc: 0.6786 Val Loss: 2.5988, Val Acc: 0.6000 -INFO:train:Epoch 6/1000 Train Loss: 0.4895, Train Acc: 0.8929 Val Loss: 2.4510, Val Acc: 0.6667 -INFO:train:Epoch 7/1000 Train Loss: 0.3972, Train Acc: 0.9643 Val Loss: 1.7360, Val Acc: 0.6667 -INFO:train:Epoch 8/1000 Train Loss: 0.3730, Train Acc: 0.9464 Val Loss: 1.1572, Val Acc: 0.7333 -INFO:train:Epoch 9/1000 Train Loss: 0.4717, Train Acc: 0.9286 Val Loss: 1.0509, Val Acc: 0.7333 -INFO:train:Epoch 10/1000 Train Loss: 0.3351, Train Acc: 1.0000 Val Loss: 1.2304, Val Acc: 0.6667 -INFO:train:Epoch 11/1000 Train Loss: 0.3616, Train Acc: 0.9464 Val Loss: 1.2737, Val Acc: 0.6667 -INFO:train:Epoch 12/1000 Train Loss: 0.3041, Train Acc: 1.0000 Val Loss: 1.4340, Val Acc: 0.6667 -INFO:train:Epoch 13/1000 Train Loss: 0.2746, Train Acc: 1.0000 Val Loss: 1.4504, Val Acc: 0.6667 -INFO:train:Epoch 14/1000 Train Loss: 0.2879, Train Acc: 0.9821 Val Loss: 1.2424, Val Acc: 0.6667 -INFO:train:Epoch 15/1000 Train Loss: 0.2800, Train Acc: 0.9643 Val Loss: 1.0794, Val Acc: 0.6667 -INFO:train:Epoch 16/1000 Train Loss: 0.2620, Train Acc: 0.9821 Val Loss: 1.0898, Val Acc: 0.7333 -INFO:train:Epoch 17/1000 Train Loss: 0.2500, Train Acc: 1.0000 Val Loss: 1.0467, Val Acc: 0.7333 -INFO:train:Epoch 18/1000 Train Loss: 0.2502, Train Acc: 1.0000 Val Loss: 1.0086, Val Acc: 0.6667 -INFO:train:Epoch 19/1000 Train Loss: 0.2425, Train Acc: 1.0000 Val Loss: 0.9435, Val Acc: 0.6667 -INFO:train:Epoch 20/1000 Train Loss: 0.2388, Train Acc: 1.0000 Val Loss: 0.8201, Val Acc: 0.6667 -INFO:train:Epoch 21/1000 Train Loss: 0.2278, Train Acc: 1.0000 Val Loss: 0.7462, Val Acc: 0.6667 -INFO:train:Epoch 22/1000 Train Loss: 0.2417, Train Acc: 1.0000 Val Loss: 0.7787, Val Acc: 0.6667 -INFO:train:Epoch 23/1000 Train Loss: 0.2411, Train Acc: 1.0000 Val Loss: 0.7832, Val Acc: 0.7333 -INFO:train:Epoch 24/1000 Train Loss: 0.2374, Train Acc: 1.0000 Val Loss: 0.7913, Val Acc: 0.6667 -INFO:train:Epoch 25/1000 Train Loss: 0.2361, Train Acc: 1.0000 Val Loss: 0.7470, Val Acc: 0.7333 -INFO:train:Epoch 26/1000 Train Loss: 0.2232, Train Acc: 1.0000 Val Loss: 0.7284, Val Acc: 0.7333 -INFO:train:Epoch 27/1000 Train Loss: 0.2154, Train Acc: 1.0000 Val Loss: 0.7939, Val Acc: 0.7333 -INFO:train:Early stopping triggered after 27 epochs -INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 12.32s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 11 / 15 correct, accuracy: 0.7333333333333333 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png diff --git a/code/transformer/logs/instance-recognition/tmp/run_19.log b/code/transformer/logs/instance-recognition/tmp/run_19.log index 044e98a4..4abaaa68 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_19.log +++ b/code/transformer/logs/instance-recognition/tmp/run_19.log @@ -53,53 +53,994 @@ INFO:__main__:model: Transformer( (fc): Linear(in_features=2046, out_features=2, bias=True) ) INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.7069, Train Acc: 0.5714 Val Loss: 6.2424, Val Acc: 0.7333 -INFO:train:Epoch 2/1000 Train Loss: 2.9961, Train Acc: 0.8036 Val Loss: 1.5477, Val Acc: 0.6667 -INFO:train:Epoch 3/1000 Train Loss: 1.1309, Train Acc: 0.7679 Val Loss: 1.2601, Val Acc: 0.6667 -INFO:train:Epoch 4/1000 Train Loss: 0.9179, Train Acc: 0.7143 Val Loss: 3.2984, Val Acc: 0.6000 -INFO:train:Epoch 5/1000 Train Loss: 1.0944, Train Acc: 0.7857 Val Loss: 3.4681, Val Acc: 0.6667 -INFO:train:Epoch 6/1000 Train Loss: 1.0580, Train Acc: 0.9107 Val Loss: 2.1598, Val Acc: 0.6667 -INFO:train:Epoch 7/1000 Train Loss: 0.7648, Train Acc: 0.9643 Val Loss: 1.0607, Val Acc: 0.6667 -INFO:train:Epoch 8/1000 Train Loss: 0.5654, Train Acc: 0.9286 Val Loss: 0.7965, Val Acc: 0.8667 -INFO:train:Epoch 9/1000 Train Loss: 0.5974, Train Acc: 0.9107 Val Loss: 0.5364, Val Acc: 0.7333 -INFO:train:Epoch 10/1000 Train Loss: 0.3552, Train Acc: 0.9464 Val Loss: 1.0923, Val Acc: 0.7333 -INFO:train:Epoch 11/1000 Train Loss: 0.4407, Train Acc: 0.8750 Val Loss: 1.1559, Val Acc: 0.5333 -INFO:train:Epoch 12/1000 Train Loss: 0.4456, Train Acc: 0.8571 Val Loss: 0.8120, Val Acc: 0.6667 -INFO:train:Epoch 13/1000 Train Loss: 0.3204, Train Acc: 0.9464 Val Loss: 0.7503, Val Acc: 0.8000 -INFO:train:Epoch 14/1000 Train Loss: 0.3439, Train Acc: 0.9464 Val Loss: 0.6615, Val Acc: 0.8667 -INFO:train:Epoch 15/1000 Train Loss: 0.3235, Train Acc: 1.0000 Val Loss: 0.6840, Val Acc: 0.8000 -INFO:train:Epoch 16/1000 Train Loss: 0.3278, Train Acc: 1.0000 Val Loss: 0.7415, Val Acc: 0.8000 -INFO:train:Epoch 17/1000 Train Loss: 0.3347, Train Acc: 1.0000 Val Loss: 0.7855, Val Acc: 0.8000 -INFO:train:Epoch 18/1000 Train Loss: 0.3199, Train Acc: 1.0000 Val Loss: 0.8108, Val Acc: 0.6667 -INFO:train:Epoch 19/1000 Train Loss: 0.3092, Train Acc: 1.0000 Val Loss: 0.8393, Val Acc: 0.6667 -INFO:train:Epoch 20/1000 Train Loss: 0.3154, Train Acc: 1.0000 Val Loss: 0.8572, Val Acc: 0.8000 -INFO:train:Epoch 21/1000 Train Loss: 0.2917, Train Acc: 1.0000 Val Loss: 0.7605, Val Acc: 0.8667 -INFO:train:Epoch 22/1000 Train Loss: 0.2634, Train Acc: 1.0000 Val Loss: 0.5493, Val Acc: 0.8000 -INFO:train:Epoch 23/1000 Train Loss: 0.2385, Train Acc: 1.0000 Val Loss: 0.4060, Val Acc: 0.8667 -INFO:train:Epoch 24/1000 Train Loss: 0.2398, Train Acc: 0.9821 Val Loss: 0.4589, Val Acc: 0.9333 -INFO:train:Epoch 25/1000 Train Loss: 0.2641, Train Acc: 0.9643 Val Loss: 0.5310, Val Acc: 0.8000 -INFO:train:Epoch 26/1000 Train Loss: 0.2461, Train Acc: 1.0000 Val Loss: 0.6895, Val Acc: 0.8000 -INFO:train:Epoch 27/1000 Train Loss: 0.2397, Train Acc: 1.0000 Val Loss: 0.8356, Val Acc: 0.8000 -INFO:train:Epoch 28/1000 Train Loss: 0.2336, Train Acc: 1.0000 Val Loss: 0.8335, Val Acc: 0.8000 -INFO:train:Epoch 29/1000 Train Loss: 0.2642, Train Acc: 0.9643 Val Loss: 0.6822, Val Acc: 0.8000 -INFO:train:Epoch 30/1000 Train Loss: 0.2277, Train Acc: 1.0000 Val Loss: 0.5577, Val Acc: 0.8000 -INFO:train:Epoch 31/1000 Train Loss: 0.2277, Train Acc: 1.0000 Val Loss: 0.5107, Val Acc: 0.8000 -INFO:train:Epoch 32/1000 Train Loss: 0.2124, Train Acc: 1.0000 Val Loss: 0.5154, Val Acc: 0.8667 -INFO:train:Epoch 33/1000 Train Loss: 0.2190, Train Acc: 1.0000 Val Loss: 0.5680, Val Acc: 0.8000 -INFO:train:Epoch 34/1000 Train Loss: 0.2195, Train Acc: 1.0000 Val Loss: 0.5784, Val Acc: 0.8000 -INFO:train:Epoch 35/1000 Train Loss: 0.2180, Train Acc: 1.0000 Val Loss: 0.6292, Val Acc: 0.8000 -INFO:train:Epoch 36/1000 Train Loss: 0.2251, Train Acc: 1.0000 Val Loss: 0.6259, Val Acc: 0.8000 -INFO:train:Epoch 37/1000 Train Loss: 0.2248, Train Acc: 1.0000 Val Loss: 0.5736, Val Acc: 0.8000 -INFO:train:Epoch 38/1000 Train Loss: 0.2241, Train Acc: 1.0000 Val Loss: 0.5841, Val Acc: 0.8000 -INFO:train:Epoch 39/1000 Train Loss: 0.2164, Train Acc: 1.0000 Val Loss: 0.5666, Val Acc: 0.8000 +INFO:train:Epoch 1/1000 Train Loss: 0.7973, Train Acc: 0.8841 Val Loss: 0.4458, Val Acc: 0.9395 +INFO:train:Epoch 2/1000 Train Loss: 0.3811, Train Acc: 0.9364 Val Loss: 0.3301, Val Acc: 0.9570 +INFO:train:Epoch 3/1000 Train Loss: 0.3362, Train Acc: 0.9521 Val Loss: 0.4062, Val Acc: 0.9551 +INFO:train:Epoch 4/1000 Train Loss: 0.3484, Train Acc: 0.9467 Val Loss: 0.3516, Val Acc: 0.9570 +INFO:train:Epoch 5/1000 Train Loss: 0.3203, Train Acc: 0.9525 Val Loss: 0.3711, Val Acc: 0.9316 +INFO:train:Epoch 6/1000 Train Loss: 0.3253, Train Acc: 0.9501 Val Loss: 0.3721, Val Acc: 0.9023 +INFO:train:Epoch 7/1000 Train Loss: 0.3257, Train Acc: 0.9462 Val Loss: 0.3744, Val Acc: 0.9551 +INFO:train:Epoch 8/1000 Train Loss: 0.3240, Train Acc: 0.9521 Val Loss: 0.4400, Val Acc: 0.9043 +INFO:train:Epoch 9/1000 Train Loss: 0.3363, Train Acc: 0.9467 Val Loss: 0.3445, Val Acc: 0.9570 +INFO:train:Epoch 10/1000 Train Loss: 0.3240, Train Acc: 0.9472 Val Loss: 0.3419, Val Acc: 0.9492 +INFO:train:Epoch 11/1000 Train Loss: 0.3079, Train Acc: 0.9540 Val Loss: 0.3808, Val Acc: 0.9551 +INFO:train:Epoch 12/1000 Train Loss: 0.3075, Train Acc: 0.9545 Val Loss: 0.3496, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 12 epochs +INFO:train:Epoch 13/1000 Train Loss: 0.3101, Train Acc: 0.9496 Val Loss: 0.3329, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 13 epochs +INFO:train:Epoch 14/1000 Train Loss: 0.3117, Train Acc: 0.9540 Val Loss: 0.3345, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 14 epochs +INFO:train:Epoch 15/1000 Train Loss: 0.2999, Train Acc: 0.9565 Val Loss: 0.3261, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 15 epochs +INFO:train:Epoch 16/1000 Train Loss: 0.2981, Train Acc: 0.9599 Val Loss: 0.3731, Val Acc: 0.9160 +INFO:train:Early stopping triggered after 16 epochs +INFO:train:Epoch 17/1000 Train Loss: 0.2819, Train Acc: 0.9623 Val Loss: 0.3377, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 17 epochs +INFO:train:Epoch 18/1000 Train Loss: 0.2836, Train Acc: 0.9648 Val Loss: 0.3738, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 18 epochs +INFO:train:Epoch 19/1000 Train Loss: 0.2923, Train Acc: 0.9623 Val Loss: 0.3216, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 19 epochs +INFO:train:Epoch 20/1000 Train Loss: 0.2856, Train Acc: 0.9648 Val Loss: 0.3115, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 20 epochs +INFO:train:Epoch 21/1000 Train Loss: 0.2754, Train Acc: 0.9623 Val Loss: 0.3203, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 21 epochs +INFO:train:Epoch 22/1000 Train Loss: 0.2709, Train Acc: 0.9702 Val Loss: 0.3279, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 22 epochs +INFO:train:Epoch 23/1000 Train Loss: 0.2597, Train Acc: 0.9716 Val Loss: 0.3282, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 23 epochs +INFO:train:Epoch 24/1000 Train Loss: 0.2610, Train Acc: 0.9711 Val Loss: 0.3360, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 24 epochs +INFO:train:Epoch 25/1000 Train Loss: 0.2626, Train Acc: 0.9741 Val Loss: 0.3428, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 25 epochs +INFO:train:Epoch 26/1000 Train Loss: 0.2518, Train Acc: 0.9804 Val Loss: 0.3210, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 26 epochs +INFO:train:Epoch 27/1000 Train Loss: 0.2432, Train Acc: 0.9809 Val Loss: 0.3456, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 27 epochs +INFO:train:Epoch 28/1000 Train Loss: 0.2518, Train Acc: 0.9755 Val Loss: 0.4324, Val Acc: 0.9258 +INFO:train:Early stopping triggered after 28 epochs +INFO:train:Epoch 29/1000 Train Loss: 0.2438, Train Acc: 0.9824 Val Loss: 0.3383, Val Acc: 0.9297 +INFO:train:Early stopping triggered after 29 epochs +INFO:train:Epoch 30/1000 Train Loss: 0.2382, Train Acc: 0.9829 Val Loss: 0.3308, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 30 epochs +INFO:train:Epoch 31/1000 Train Loss: 0.2270, Train Acc: 0.9878 Val Loss: 0.3546, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 31 epochs +INFO:train:Epoch 32/1000 Train Loss: 0.2412, Train Acc: 0.9799 Val Loss: 0.3351, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 32 epochs +INFO:train:Epoch 33/1000 Train Loss: 0.2521, Train Acc: 0.9770 Val Loss: 0.3623, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 33 epochs +INFO:train:Epoch 34/1000 Train Loss: 0.2370, Train Acc: 0.9858 Val Loss: 0.3203, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 34 epochs +INFO:train:Epoch 35/1000 Train Loss: 0.2312, Train Acc: 0.9897 Val Loss: 0.4192, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 35 epochs +INFO:train:Epoch 36/1000 Train Loss: 0.2326, Train Acc: 0.9853 Val Loss: 0.3391, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 36 epochs +INFO:train:Epoch 37/1000 Train Loss: 0.2481, Train Acc: 0.9795 Val Loss: 0.3657, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 37 epochs +INFO:train:Epoch 38/1000 Train Loss: 0.2252, Train Acc: 0.9912 Val Loss: 0.3456, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 38 epochs +INFO:train:Epoch 39/1000 Train Loss: 0.2261, Train Acc: 0.9892 Val Loss: 0.3477, Val Acc: 0.9434 INFO:train:Early stopping triggered after 39 epochs -INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 16.66s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 12 / 15 correct, accuracy: 0.8 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png +INFO:train:Epoch 40/1000 Train Loss: 0.2270, Train Acc: 0.9907 Val Loss: 0.3573, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 40 epochs +INFO:train:Epoch 41/1000 Train Loss: 0.2148, Train Acc: 0.9946 Val Loss: 0.3650, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 41 epochs +INFO:train:Epoch 42/1000 Train Loss: 0.2267, Train Acc: 0.9878 Val Loss: 0.3387, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 42 epochs +INFO:train:Epoch 43/1000 Train Loss: 0.2290, Train Acc: 0.9863 Val Loss: 0.3147, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 43 epochs +INFO:train:Epoch 44/1000 Train Loss: 0.2184, Train Acc: 0.9917 Val Loss: 0.3493, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 44 epochs +INFO:train:Epoch 45/1000 Train Loss: 0.2130, Train Acc: 0.9956 Val Loss: 0.3205, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 45 epochs +INFO:train:Epoch 46/1000 Train Loss: 0.2234, Train Acc: 0.9897 Val Loss: 0.3518, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 46 epochs +INFO:train:Epoch 47/1000 Train Loss: 0.2318, Train Acc: 0.9873 Val Loss: 0.3921, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 47 epochs +INFO:train:Epoch 48/1000 Train Loss: 0.2182, Train Acc: 0.9936 Val Loss: 0.3395, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 48 epochs +INFO:train:Epoch 49/1000 Train Loss: 0.2310, Train Acc: 0.9858 Val Loss: 0.3805, Val Acc: 0.9297 +INFO:train:Early stopping triggered after 49 epochs +INFO:train:Epoch 50/1000 Train Loss: 0.2255, Train Acc: 0.9902 Val Loss: 0.3615, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 50 epochs +INFO:train:Epoch 51/1000 Train Loss: 0.2189, Train Acc: 0.9932 Val Loss: 0.3358, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 51 epochs +INFO:train:Epoch 52/1000 Train Loss: 0.2099, Train Acc: 0.9956 Val Loss: 0.3376, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 52 epochs +INFO:train:Epoch 53/1000 Train Loss: 0.2098, Train Acc: 0.9976 Val Loss: 0.3312, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 53 epochs +INFO:train:Epoch 54/1000 Train Loss: 0.2126, Train Acc: 0.9951 Val Loss: 0.3496, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 54 epochs +INFO:train:Epoch 55/1000 Train Loss: 0.2060, Train Acc: 0.9980 Val Loss: 0.3524, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 55 epochs +INFO:train:Epoch 56/1000 Train Loss: 0.2041, Train Acc: 0.9990 Val Loss: 0.3461, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 56 epochs +INFO:train:Epoch 57/1000 Train Loss: 0.2019, Train Acc: 0.9995 Val Loss: 0.3386, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 57 epochs +INFO:train:Epoch 58/1000 Train Loss: 0.2136, Train Acc: 0.9941 Val Loss: 0.3376, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 58 epochs +INFO:train:Epoch 59/1000 Train Loss: 0.2187, Train Acc: 0.9932 Val Loss: 0.3426, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 59 epochs +INFO:train:Epoch 60/1000 Train Loss: 0.2304, Train Acc: 0.9883 Val Loss: 0.4086, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 60 epochs +INFO:train:Epoch 61/1000 Train Loss: 0.2277, Train Acc: 0.9878 Val Loss: 0.3385, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 61 epochs +INFO:train:Epoch 62/1000 Train Loss: 0.2236, Train Acc: 0.9902 Val Loss: 0.3513, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 62 epochs +INFO:train:Epoch 63/1000 Train Loss: 0.2242, Train Acc: 0.9887 Val Loss: 0.3247, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 63 epochs +INFO:train:Epoch 64/1000 Train Loss: 0.2492, Train Acc: 0.9775 Val Loss: 0.3397, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 64 epochs +INFO:train:Epoch 65/1000 Train Loss: 0.2287, Train Acc: 0.9873 Val Loss: 0.3209, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 65 epochs +INFO:train:Epoch 66/1000 Train Loss: 0.2358, Train Acc: 0.9848 Val Loss: 0.3378, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 66 epochs +INFO:train:Epoch 67/1000 Train Loss: 0.2092, Train Acc: 0.9976 Val Loss: 0.3554, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 67 epochs +INFO:train:Epoch 68/1000 Train Loss: 0.2060, Train Acc: 0.9976 Val Loss: 0.3476, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 68 epochs +INFO:train:Epoch 69/1000 Train Loss: 0.2129, Train Acc: 0.9946 Val Loss: 0.3315, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 69 epochs +INFO:train:Epoch 70/1000 Train Loss: 0.2127, Train Acc: 0.9936 Val Loss: 0.3406, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 70 epochs +INFO:train:Epoch 71/1000 Train Loss: 0.2103, Train Acc: 0.9956 Val Loss: 0.3520, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 71 epochs +INFO:train:Epoch 72/1000 Train Loss: 0.2081, Train Acc: 0.9976 Val Loss: 0.3258, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 72 epochs +INFO:train:Epoch 73/1000 Train Loss: 0.2080, Train Acc: 0.9976 Val Loss: 0.3355, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 73 epochs +INFO:train:Epoch 74/1000 Train Loss: 0.2059, Train Acc: 0.9980 Val Loss: 0.3756, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 74 epochs +INFO:train:Epoch 75/1000 Train Loss: 0.2086, Train Acc: 0.9966 Val Loss: 0.3413, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 75 epochs +INFO:train:Epoch 76/1000 Train Loss: 0.2075, Train Acc: 0.9966 Val Loss: 0.3373, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 76 epochs +INFO:train:Epoch 77/1000 Train Loss: 0.2075, Train Acc: 0.9976 Val Loss: 0.3404, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 77 epochs +INFO:train:Epoch 78/1000 Train Loss: 0.2161, Train Acc: 0.9941 Val Loss: 0.3590, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 78 epochs +INFO:train:Epoch 79/1000 Train Loss: 0.2176, Train Acc: 0.9917 Val Loss: 0.3424, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 79 epochs +INFO:train:Epoch 80/1000 Train Loss: 0.2134, Train Acc: 0.9951 Val Loss: 0.3920, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 80 epochs +INFO:train:Epoch 81/1000 Train Loss: 0.2110, Train Acc: 0.9951 Val Loss: 0.3679, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 81 epochs +INFO:train:Epoch 82/1000 Train Loss: 0.2156, Train Acc: 0.9927 Val Loss: 0.3512, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 82 epochs +INFO:train:Epoch 83/1000 Train Loss: 0.2228, Train Acc: 0.9927 Val Loss: 0.3544, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 83 epochs +INFO:train:Epoch 84/1000 Train Loss: 0.2057, Train Acc: 0.9971 Val Loss: 0.3765, Val Acc: 0.9297 +INFO:train:Early stopping triggered after 84 epochs +INFO:train:Epoch 85/1000 Train Loss: 0.2081, Train Acc: 0.9961 Val Loss: 0.3569, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 85 epochs +INFO:train:Epoch 86/1000 Train Loss: 0.2049, Train Acc: 0.9980 Val Loss: 0.3583, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 86 epochs +INFO:train:Epoch 87/1000 Train Loss: 0.2007, Train Acc: 0.9995 Val Loss: 0.3584, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 87 epochs +INFO:train:Epoch 88/1000 Train Loss: 0.2018, Train Acc: 0.9995 Val Loss: 0.3590, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 88 epochs +INFO:train:Epoch 89/1000 Train Loss: 0.2000, Train Acc: 1.0000 Val Loss: 0.3599, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 89 epochs +INFO:train:Epoch 90/1000 Train Loss: 0.1997, Train Acc: 1.0000 Val Loss: 0.3520, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 90 epochs +INFO:train:Epoch 91/1000 Train Loss: 0.1996, Train Acc: 1.0000 Val Loss: 0.3566, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 91 epochs +INFO:train:Epoch 92/1000 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3577, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 92 epochs +INFO:train:Epoch 93/1000 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3543, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 93 epochs +INFO:train:Epoch 94/1000 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3577, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 94 epochs +INFO:train:Epoch 95/1000 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3521, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 95 epochs +INFO:train:Epoch 96/1000 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3508, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 96 epochs +INFO:train:Epoch 97/1000 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3580, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 97 epochs +INFO:train:Epoch 98/1000 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3606, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 98 epochs +INFO:train:Epoch 99/1000 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3574, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 99 epochs +INFO:train:Epoch 100/1000 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3567, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 100 epochs +INFO:train:Epoch 101/1000 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3537, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 101 epochs +INFO:train:Epoch 102/1000 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3530, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 102 epochs +INFO:train:Epoch 103/1000 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3544, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 103 epochs +INFO:train:Epoch 104/1000 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3499, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 104 epochs +INFO:train:Epoch 105/1000 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3536, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 105 epochs +INFO:train:Epoch 106/1000 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3506, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 106 epochs +INFO:train:Epoch 107/1000 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3538, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 107 epochs +INFO:train:Epoch 108/1000 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3540, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 108 epochs +INFO:train:Epoch 109/1000 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3550, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 109 epochs +INFO:train:Epoch 110/1000 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3537, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 110 epochs +INFO:train:Epoch 111/1000 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3582, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 111 epochs +INFO:train:Epoch 112/1000 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3555, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 112 epochs +INFO:train:Epoch 113/1000 Train Loss: 0.1989, Train Acc: 1.0000 Val Loss: 0.3567, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 113 epochs +INFO:train:Epoch 114/1000 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3559, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 114 epochs +INFO:train:Epoch 115/1000 Train Loss: 0.1989, Train Acc: 1.0000 Val Loss: 0.3521, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 115 epochs +INFO:train:Epoch 116/1000 Train Loss: 0.1989, Train Acc: 1.0000 Val Loss: 0.3515, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 116 epochs +INFO:train:Epoch 117/1000 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3594, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 117 epochs +INFO:train:Epoch 118/1000 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3650, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 118 epochs +INFO:train:Epoch 119/1000 Train Loss: 0.2193, Train Acc: 0.9892 Val Loss: 0.3537, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 119 epochs +INFO:train:Epoch 120/1000 Train Loss: 0.2336, Train Acc: 0.9873 Val Loss: 0.4013, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 120 epochs +INFO:train:Epoch 121/1000 Train Loss: 0.2431, Train Acc: 0.9829 Val Loss: 0.3166, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 121 epochs +INFO:train:Epoch 122/1000 Train Loss: 0.2480, Train Acc: 0.9829 Val Loss: 0.3248, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 122 epochs +INFO:train:Epoch 123/1000 Train Loss: 0.2429, Train Acc: 0.9809 Val Loss: 0.3272, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 123 epochs +INFO:train:Epoch 124/1000 Train Loss: 0.2297, Train Acc: 0.9873 Val Loss: 0.3842, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 124 epochs +INFO:train:Epoch 125/1000 Train Loss: 0.2306, Train Acc: 0.9868 Val Loss: 0.3322, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 125 epochs +INFO:train:Epoch 126/1000 Train Loss: 0.2279, Train Acc: 0.9878 Val Loss: 0.3257, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 126 epochs +INFO:train:Epoch 127/1000 Train Loss: 0.2224, Train Acc: 0.9917 Val Loss: 0.3356, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 127 epochs +INFO:train:Epoch 128/1000 Train Loss: 0.2319, Train Acc: 0.9848 Val Loss: 0.3294, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 128 epochs +INFO:train:Epoch 129/1000 Train Loss: 0.2298, Train Acc: 0.9863 Val Loss: 0.3001, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 129 epochs +INFO:train:Epoch 130/1000 Train Loss: 0.2298, Train Acc: 0.9873 Val Loss: 0.3337, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 130 epochs +INFO:train:Epoch 131/1000 Train Loss: 0.2182, Train Acc: 0.9917 Val Loss: 0.3488, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 131 epochs +INFO:train:Epoch 132/1000 Train Loss: 0.2210, Train Acc: 0.9912 Val Loss: 0.3323, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 132 epochs +INFO:train:Epoch 133/1000 Train Loss: 0.2182, Train Acc: 0.9917 Val Loss: 0.3563, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 133 epochs +INFO:train:Epoch 134/1000 Train Loss: 0.2171, Train Acc: 0.9932 Val Loss: 0.3617, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 134 epochs +INFO:train:Epoch 135/1000 Train Loss: 0.2059, Train Acc: 0.9976 Val Loss: 0.3623, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 135 epochs +INFO:train:Epoch 136/1000 Train Loss: 0.2159, Train Acc: 0.9927 Val Loss: 0.3602, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 136 epochs +INFO:train:Epoch 137/1000 Train Loss: 0.2107, Train Acc: 0.9951 Val Loss: 0.3381, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 137 epochs +INFO:train:Epoch 138/1000 Train Loss: 0.2137, Train Acc: 0.9936 Val Loss: 0.3315, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 138 epochs +INFO:train:Epoch 139/1000 Train Loss: 0.2135, Train Acc: 0.9932 Val Loss: 0.3500, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 139 epochs +INFO:train:Epoch 140/1000 Train Loss: 0.2090, Train Acc: 0.9951 Val Loss: 0.3692, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 140 epochs +INFO:train:Epoch 141/1000 Train Loss: 0.2169, Train Acc: 0.9932 Val Loss: 0.3614, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 141 epochs +INFO:train:Epoch 142/1000 Train Loss: 0.2060, Train Acc: 0.9976 Val Loss: 0.3696, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 142 epochs +INFO:train:Epoch 143/1000 Train Loss: 0.2174, Train Acc: 0.9927 Val Loss: 0.3450, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 143 epochs +INFO:train:Epoch 144/1000 Train Loss: 0.2232, Train Acc: 0.9917 Val Loss: 0.3712, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 144 epochs +INFO:train:Epoch 145/1000 Train Loss: 0.2152, Train Acc: 0.9941 Val Loss: 0.3337, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 145 epochs +INFO:train:Epoch 146/1000 Train Loss: 0.2130, Train Acc: 0.9936 Val Loss: 0.3604, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 146 epochs +INFO:train:Epoch 147/1000 Train Loss: 0.2162, Train Acc: 0.9922 Val Loss: 0.3415, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 147 epochs +INFO:train:Epoch 148/1000 Train Loss: 0.2139, Train Acc: 0.9932 Val Loss: 0.3402, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 148 epochs +INFO:train:Epoch 149/1000 Train Loss: 0.2137, Train Acc: 0.9941 Val Loss: 0.3438, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 149 epochs +INFO:train:Epoch 150/1000 Train Loss: 0.2028, Train Acc: 0.9985 Val Loss: 0.3504, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 150 epochs +INFO:train:Epoch 151/1000 Train Loss: 0.2037, Train Acc: 0.9976 Val Loss: 0.3302, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 151 epochs +INFO:train:Epoch 152/1000 Train Loss: 0.2024, Train Acc: 0.9990 Val Loss: 0.3161, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 152 epochs +INFO:train:Epoch 153/1000 Train Loss: 0.1998, Train Acc: 0.9995 Val Loss: 0.3210, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 153 epochs +INFO:train:Epoch 154/1000 Train Loss: 0.2008, Train Acc: 0.9990 Val Loss: 0.3278, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 154 epochs +INFO:train:Epoch 155/1000 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3378, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 155 epochs +INFO:train:Epoch 156/1000 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3433, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 156 epochs +INFO:train:Epoch 157/1000 Train Loss: 0.1989, Train Acc: 1.0000 Val Loss: 0.3447, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 157 epochs +INFO:train:Epoch 158/1000 Train Loss: 0.1989, Train Acc: 1.0000 Val Loss: 0.3393, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 158 epochs +INFO:train:Epoch 159/1000 Train Loss: 0.1989, Train Acc: 1.0000 Val Loss: 0.3396, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 159 epochs +INFO:train:Epoch 160/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3386, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 160 epochs +INFO:train:Epoch 161/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3390, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 161 epochs +INFO:train:Epoch 162/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3374, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 162 epochs +INFO:train:Epoch 163/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3397, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 163 epochs +INFO:train:Epoch 164/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3357, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 164 epochs +INFO:train:Epoch 165/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3405, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 165 epochs +INFO:train:Epoch 166/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3401, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 166 epochs +INFO:train:Epoch 167/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3395, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 167 epochs +INFO:train:Epoch 168/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3364, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 168 epochs +INFO:train:Epoch 169/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3371, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 169 epochs +INFO:train:Epoch 170/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3361, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 170 epochs +INFO:train:Epoch 171/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3361, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 171 epochs +INFO:train:Epoch 172/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3332, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 172 epochs +INFO:train:Epoch 173/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3337, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 173 epochs +INFO:train:Epoch 174/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3364, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 174 epochs +INFO:train:Epoch 175/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3352, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 175 epochs +INFO:train:Epoch 176/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3363, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 176 epochs +INFO:train:Epoch 177/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3370, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 177 epochs +INFO:train:Epoch 178/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3354, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 178 epochs +INFO:train:Epoch 179/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3346, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 179 epochs +INFO:train:Epoch 180/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3352, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 180 epochs +INFO:train:Epoch 181/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3350, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 181 epochs +INFO:train:Epoch 182/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3356, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 182 epochs +INFO:train:Epoch 183/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3379, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 183 epochs +INFO:train:Epoch 184/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3407, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 184 epochs +INFO:train:Epoch 185/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3338, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 185 epochs +INFO:train:Epoch 186/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3354, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 186 epochs +INFO:train:Epoch 187/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3346, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 187 epochs +INFO:train:Epoch 188/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3382, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 188 epochs +INFO:train:Epoch 189/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3344, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 189 epochs +INFO:train:Epoch 190/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3375, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 190 epochs +INFO:train:Epoch 191/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3376, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 191 epochs +INFO:train:Epoch 192/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3382, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 192 epochs +INFO:train:Epoch 193/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3387, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 193 epochs +INFO:train:Epoch 194/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3393, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 194 epochs +INFO:train:Epoch 195/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3378, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 195 epochs +INFO:train:Epoch 196/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3365, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 196 epochs +INFO:train:Epoch 197/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3363, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 197 epochs +INFO:train:Epoch 198/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3364, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 198 epochs +INFO:train:Epoch 199/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3370, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 199 epochs +INFO:train:Epoch 200/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3345, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 200 epochs +INFO:train:Epoch 201/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3392, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 201 epochs +INFO:train:Epoch 202/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3355, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 202 epochs +INFO:train:Epoch 203/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3365, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 203 epochs +INFO:train:Epoch 204/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3361, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 204 epochs +INFO:train:Epoch 205/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3376, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 205 epochs +INFO:train:Epoch 206/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3369, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 206 epochs +INFO:train:Epoch 207/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3381, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 207 epochs +INFO:train:Epoch 208/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3390, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 208 epochs +INFO:train:Epoch 209/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3378, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 209 epochs +INFO:train:Epoch 210/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3370, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 210 epochs +INFO:train:Epoch 211/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3391, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 211 epochs +INFO:train:Epoch 212/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3370, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 212 epochs +INFO:train:Epoch 213/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3374, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 213 epochs +INFO:train:Epoch 214/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3386, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 214 epochs +INFO:train:Epoch 215/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3367, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 215 epochs +INFO:train:Epoch 216/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3370, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 216 epochs +INFO:train:Epoch 217/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3364, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 217 epochs +INFO:train:Epoch 218/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3382, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 218 epochs +INFO:train:Epoch 219/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3374, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 219 epochs +INFO:train:Epoch 220/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3362, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 220 epochs +INFO:train:Epoch 221/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3381, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 221 epochs +INFO:train:Epoch 222/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3380, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 222 epochs +INFO:train:Epoch 223/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3380, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 223 epochs +INFO:train:Epoch 224/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3378, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 224 epochs +INFO:train:Epoch 225/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3384, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 225 epochs +INFO:train:Epoch 226/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3372, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 226 epochs +INFO:train:Epoch 227/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3369, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 227 epochs +INFO:train:Epoch 228/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3370, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 228 epochs +INFO:train:Epoch 229/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3385, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 229 epochs +INFO:train:Epoch 230/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3370, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 230 epochs +INFO:train:Epoch 231/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3378, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 231 epochs +INFO:train:Epoch 232/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3377, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 232 epochs +INFO:train:Epoch 233/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3339, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 233 epochs +INFO:train:Epoch 234/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3401, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 234 epochs +INFO:train:Epoch 235/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3362, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 235 epochs +INFO:train:Epoch 236/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3411, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 236 epochs +INFO:train:Epoch 237/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3388, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 237 epochs +INFO:train:Epoch 238/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3381, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 238 epochs +INFO:train:Epoch 239/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3387, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 239 epochs +INFO:train:Epoch 240/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3385, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 240 epochs +INFO:train:Epoch 241/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3386, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 241 epochs +INFO:train:Epoch 242/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3401, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 242 epochs +INFO:train:Epoch 243/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3385, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 243 epochs +INFO:train:Epoch 244/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3385, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 244 epochs +INFO:train:Epoch 245/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3374, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 245 epochs +INFO:train:Epoch 246/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3375, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 246 epochs +INFO:train:Epoch 247/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3349, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 247 epochs +INFO:train:Epoch 248/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3410, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 248 epochs +INFO:train:Epoch 249/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3361, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 249 epochs +INFO:train:Epoch 250/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3407, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 250 epochs +INFO:train:Epoch 251/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3391, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 251 epochs +INFO:train:Epoch 252/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3407, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 252 epochs +INFO:train:Epoch 253/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3387, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 253 epochs +INFO:train:Epoch 254/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3399, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 254 epochs +INFO:train:Epoch 255/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3368, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 255 epochs +INFO:train:Epoch 256/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3389, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 256 epochs +INFO:train:Epoch 257/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3414, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 257 epochs +INFO:train:Epoch 258/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3380, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 258 epochs +INFO:train:Epoch 259/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3368, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 259 epochs +INFO:train:Epoch 260/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3399, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 260 epochs +INFO:train:Epoch 261/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3410, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 261 epochs +INFO:train:Epoch 262/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3391, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 262 epochs +INFO:train:Epoch 263/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3395, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 263 epochs +INFO:train:Epoch 264/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3391, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 264 epochs +INFO:train:Epoch 265/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3414, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 265 epochs +INFO:train:Epoch 266/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3377, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 266 epochs +INFO:train:Epoch 267/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3350, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 267 epochs +INFO:train:Epoch 268/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3383, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 268 epochs +INFO:train:Epoch 269/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3394, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 269 epochs +INFO:train:Epoch 270/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3399, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 270 epochs +INFO:train:Epoch 271/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3390, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 271 epochs +INFO:train:Epoch 272/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3448, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 272 epochs +INFO:train:Epoch 273/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3397, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 273 epochs +INFO:train:Epoch 274/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3420, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 274 epochs +INFO:train:Epoch 275/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3345, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 275 epochs +INFO:train:Epoch 276/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3408, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 276 epochs +INFO:train:Epoch 277/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3414, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 277 epochs +INFO:train:Epoch 278/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3418, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 278 epochs +INFO:train:Epoch 279/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3375, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 279 epochs +INFO:train:Epoch 280/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3434, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 280 epochs +INFO:train:Epoch 281/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3380, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 281 epochs +INFO:train:Epoch 282/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3386, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 282 epochs +INFO:train:Epoch 283/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3444, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 283 epochs +INFO:train:Epoch 284/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3405, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 284 epochs +INFO:train:Epoch 285/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3413, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 285 epochs +INFO:train:Epoch 286/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3399, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 286 epochs +INFO:train:Epoch 287/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3447, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 287 epochs +INFO:train:Epoch 288/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3425, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 288 epochs +INFO:train:Epoch 289/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3431, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 289 epochs +INFO:train:Epoch 290/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3422, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 290 epochs +INFO:train:Epoch 291/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3417, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 291 epochs +INFO:train:Epoch 292/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3426, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 292 epochs +INFO:train:Epoch 293/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3394, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 293 epochs +INFO:train:Epoch 294/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3427, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 294 epochs +INFO:train:Epoch 295/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3385, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 295 epochs +INFO:train:Epoch 296/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3439, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 296 epochs +INFO:train:Epoch 297/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3440, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 297 epochs +INFO:train:Epoch 298/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3464, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 298 epochs +INFO:train:Epoch 299/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3448, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 299 epochs +INFO:train:Epoch 300/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3457, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 300 epochs +INFO:train:Epoch 301/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3434, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 301 epochs +INFO:train:Epoch 302/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3395, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 302 epochs +INFO:train:Epoch 303/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3507, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 303 epochs +INFO:train:Epoch 304/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3439, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 304 epochs +INFO:train:Epoch 305/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3445, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 305 epochs +INFO:train:Epoch 306/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3428, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 306 epochs +INFO:train:Epoch 307/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3458, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 307 epochs +INFO:train:Epoch 308/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3503, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 308 epochs +INFO:train:Epoch 309/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3444, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 309 epochs +INFO:train:Epoch 310/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3493, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 310 epochs +INFO:train:Epoch 311/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3450, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 311 epochs +INFO:train:Epoch 312/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3423, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 312 epochs +INFO:train:Epoch 313/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3473, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 313 epochs +INFO:train:Epoch 314/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3444, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 314 epochs +INFO:train:Epoch 315/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3449, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 315 epochs +INFO:train:Epoch 316/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3485, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 316 epochs +INFO:train:Epoch 317/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3465, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 317 epochs +INFO:train:Epoch 318/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3436, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 318 epochs +INFO:train:Epoch 319/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3430, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 319 epochs +INFO:train:Epoch 320/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3436, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 320 epochs +INFO:train:Epoch 321/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3494, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 321 epochs +INFO:train:Epoch 322/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3472, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 322 epochs +INFO:train:Epoch 323/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3491, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 323 epochs +INFO:train:Epoch 324/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3496, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 324 epochs +INFO:train:Epoch 325/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3458, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 325 epochs +INFO:train:Epoch 326/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3399, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 326 epochs +INFO:train:Epoch 327/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3420, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 327 epochs +INFO:train:Epoch 328/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3394, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 328 epochs +INFO:train:Epoch 329/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3486, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 329 epochs +INFO:train:Epoch 330/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3436, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 330 epochs +INFO:train:Epoch 331/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3489, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 331 epochs +INFO:train:Epoch 332/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3459, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 332 epochs +INFO:train:Epoch 333/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3400, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 333 epochs +INFO:train:Epoch 334/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3396, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 334 epochs +INFO:train:Epoch 335/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3417, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 335 epochs +INFO:train:Epoch 336/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3421, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 336 epochs +INFO:train:Epoch 337/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3393, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 337 epochs +INFO:train:Epoch 338/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3397, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 338 epochs +INFO:train:Epoch 339/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3464, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 339 epochs +INFO:train:Epoch 340/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3441, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 340 epochs +INFO:train:Epoch 341/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3489, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 341 epochs +INFO:train:Epoch 342/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3492, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 342 epochs +INFO:train:Epoch 343/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3503, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 343 epochs +INFO:train:Epoch 344/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3473, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 344 epochs +INFO:train:Epoch 345/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3532, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 345 epochs +INFO:train:Epoch 346/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3425, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 346 epochs +INFO:train:Epoch 347/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3447, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 347 epochs +INFO:train:Epoch 348/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3432, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 348 epochs +INFO:train:Epoch 349/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3411, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 349 epochs +INFO:train:Epoch 350/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3439, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 350 epochs +INFO:train:Epoch 351/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3435, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 351 epochs +INFO:train:Epoch 352/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3419, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 352 epochs +INFO:train:Epoch 353/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3462, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 353 epochs +INFO:train:Epoch 354/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3435, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 354 epochs +INFO:train:Epoch 355/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3472, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 355 epochs +INFO:train:Epoch 356/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3406, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 356 epochs +INFO:train:Epoch 357/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3478, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 357 epochs +INFO:train:Epoch 358/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3486, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 358 epochs +INFO:train:Epoch 359/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3500, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 359 epochs +INFO:train:Epoch 360/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3516, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 360 epochs +INFO:train:Epoch 361/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3449, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 361 epochs +INFO:train:Epoch 362/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3465, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 362 epochs +INFO:train:Epoch 363/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3485, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 363 epochs +INFO:train:Epoch 364/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3484, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 364 epochs +INFO:train:Epoch 365/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3474, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 365 epochs +INFO:train:Epoch 366/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3466, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 366 epochs +INFO:train:Epoch 367/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3475, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 367 epochs +INFO:train:Epoch 368/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3402, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 368 epochs +INFO:train:Epoch 369/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3449, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 369 epochs +INFO:train:Epoch 370/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3400, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 370 epochs +INFO:train:Epoch 371/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3362, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 371 epochs +INFO:train:Epoch 372/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3390, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 372 epochs +INFO:train:Epoch 373/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3446, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 373 epochs +INFO:train:Epoch 374/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3395, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 374 epochs +INFO:train:Epoch 375/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3403, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 375 epochs +INFO:train:Epoch 376/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3434, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 376 epochs +INFO:train:Epoch 377/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3413, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 377 epochs +INFO:train:Epoch 378/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3431, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 378 epochs +INFO:train:Epoch 379/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3520, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 379 epochs +INFO:train:Epoch 380/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3484, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 380 epochs +INFO:train:Epoch 381/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3472, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 381 epochs +INFO:train:Epoch 382/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3512, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 382 epochs +INFO:train:Epoch 383/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3529, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 383 epochs +INFO:train:Epoch 384/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3498, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 384 epochs +INFO:train:Epoch 385/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3539, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 385 epochs +INFO:train:Epoch 386/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3501, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 386 epochs +INFO:train:Epoch 387/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3469, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 387 epochs +INFO:train:Epoch 388/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3492, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 388 epochs +INFO:train:Epoch 389/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3476, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 389 epochs +INFO:train:Epoch 390/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3455, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 390 epochs +INFO:train:Epoch 391/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3437, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 391 epochs +INFO:train:Epoch 392/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3412, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 392 epochs +INFO:train:Epoch 393/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3357, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 393 epochs +INFO:train:Epoch 394/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3404, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 394 epochs +INFO:train:Epoch 395/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3315, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 395 epochs +INFO:train:Epoch 396/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3454, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 396 epochs +INFO:train:Epoch 397/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3464, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 397 epochs +INFO:train:Epoch 398/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3497, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 398 epochs +INFO:train:Epoch 399/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3455, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 399 epochs +INFO:train:Epoch 400/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3446, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 400 epochs +INFO:train:Epoch 401/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3464, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 401 epochs +INFO:train:Epoch 402/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3472, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 402 epochs +INFO:train:Epoch 403/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3489, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 403 epochs +INFO:train:Epoch 404/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3603, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 404 epochs +INFO:train:Epoch 405/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3504, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 405 epochs +INFO:train:Epoch 406/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3562, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 406 epochs +INFO:train:Epoch 407/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3616, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 407 epochs +INFO:train:Epoch 408/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3550, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 408 epochs +INFO:train:Epoch 409/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3492, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 409 epochs +INFO:train:Epoch 410/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3479, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 410 epochs +INFO:train:Epoch 411/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3479, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 411 epochs +INFO:train:Epoch 412/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3535, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 412 epochs +INFO:train:Epoch 413/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3504, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 413 epochs +INFO:train:Epoch 414/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3495, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 414 epochs +INFO:train:Epoch 415/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3540, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 415 epochs +INFO:train:Epoch 416/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3512, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 416 epochs +INFO:train:Epoch 417/1000 Train Loss: 0.8301, Train Acc: 0.8841 Val Loss: 1.2517, Val Acc: 0.8105 +INFO:train:Early stopping triggered after 417 epochs +INFO:train:Epoch 418/1000 Train Loss: 1.4268, Train Acc: 0.8434 Val Loss: 1.6955, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 418 epochs +INFO:train:Epoch 419/1000 Train Loss: 0.5340, Train Acc: 0.9242 Val Loss: 0.3320, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 419 epochs +INFO:train:Epoch 420/1000 Train Loss: 0.3077, Train Acc: 0.9560 Val Loss: 0.3068, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 420 epochs +INFO:train:Epoch 421/1000 Train Loss: 0.2958, Train Acc: 0.9579 Val Loss: 0.3149, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 421 epochs +INFO:train:Epoch 422/1000 Train Loss: 0.2851, Train Acc: 0.9579 Val Loss: 0.3383, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 422 epochs +INFO:train:Epoch 423/1000 Train Loss: 0.2725, Train Acc: 0.9594 Val Loss: 0.3042, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 423 epochs +INFO:train:Epoch 424/1000 Train Loss: 0.2605, Train Acc: 0.9633 Val Loss: 0.3217, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 424 epochs +INFO:train:Epoch 425/1000 Train Loss: 0.2541, Train Acc: 0.9726 Val Loss: 0.3317, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 425 epochs +INFO:train:Epoch 426/1000 Train Loss: 0.2460, Train Acc: 0.9750 Val Loss: 0.3315, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 426 epochs +INFO:train:Epoch 427/1000 Train Loss: 0.2332, Train Acc: 0.9824 Val Loss: 0.3550, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 427 epochs +INFO:train:Epoch 428/1000 Train Loss: 0.2268, Train Acc: 0.9858 Val Loss: 0.3609, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 428 epochs +INFO:train:Epoch 429/1000 Train Loss: 0.2371, Train Acc: 0.9809 Val Loss: 0.3320, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 429 epochs +INFO:train:Epoch 430/1000 Train Loss: 0.2246, Train Acc: 0.9878 Val Loss: 0.3821, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 430 epochs +INFO:train:Epoch 431/1000 Train Loss: 0.2171, Train Acc: 0.9917 Val Loss: 0.3536, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 431 epochs +INFO:train:Epoch 432/1000 Train Loss: 0.2113, Train Acc: 0.9936 Val Loss: 0.3708, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 432 epochs +INFO:train:Epoch 433/1000 Train Loss: 0.2157, Train Acc: 0.9932 Val Loss: 0.3511, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 433 epochs +INFO:train:Epoch 434/1000 Train Loss: 0.2201, Train Acc: 0.9907 Val Loss: 0.3564, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 434 epochs +INFO:train:Epoch 435/1000 Train Loss: 0.2108, Train Acc: 0.9946 Val Loss: 0.3750, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 435 epochs +INFO:train:Epoch 436/1000 Train Loss: 0.2124, Train Acc: 0.9917 Val Loss: 0.3599, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 436 epochs +INFO:train:Epoch 437/1000 Train Loss: 0.2130, Train Acc: 0.9917 Val Loss: 0.3570, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 437 epochs +INFO:train:Epoch 438/1000 Train Loss: 0.2055, Train Acc: 0.9966 Val Loss: 0.3740, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 438 epochs +INFO:train:Epoch 439/1000 Train Loss: 0.2033, Train Acc: 0.9985 Val Loss: 0.3569, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 439 epochs +INFO:train:Epoch 440/1000 Train Loss: 0.2086, Train Acc: 0.9961 Val Loss: 0.3710, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 440 epochs +INFO:train:Epoch 441/1000 Train Loss: 0.2115, Train Acc: 0.9951 Val Loss: 0.3369, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 441 epochs +INFO:train:Epoch 442/1000 Train Loss: 0.2057, Train Acc: 0.9976 Val Loss: 0.3583, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 442 epochs +INFO:train:Epoch 443/1000 Train Loss: 0.1998, Train Acc: 1.0000 Val Loss: 0.3540, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 443 epochs +INFO:train:Epoch 444/1000 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3478, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 444 epochs +INFO:train:Epoch 445/1000 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3549, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 445 epochs +INFO:train:Epoch 446/1000 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3517, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 446 epochs +INFO:train:Epoch 447/1000 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3528, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 447 epochs +INFO:train:Epoch 448/1000 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3495, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 448 epochs +INFO:train:Epoch 449/1000 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3542, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 449 epochs +INFO:train:Epoch 450/1000 Train Loss: 0.1989, Train Acc: 1.0000 Val Loss: 0.3504, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 450 epochs +INFO:train:Epoch 451/1000 Train Loss: 0.1989, Train Acc: 1.0000 Val Loss: 0.3514, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 451 epochs +INFO:train:Epoch 452/1000 Train Loss: 0.1989, Train Acc: 1.0000 Val Loss: 0.3552, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 452 epochs +INFO:train:Epoch 453/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3545, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 453 epochs +INFO:train:Epoch 454/1000 Train Loss: 0.1989, Train Acc: 1.0000 Val Loss: 0.3514, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 454 epochs +INFO:train:Epoch 455/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3535, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 455 epochs +INFO:train:Epoch 456/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3487, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 456 epochs +INFO:train:Epoch 457/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3518, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 457 epochs +INFO:train:Epoch 458/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3539, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 458 epochs +INFO:train:Epoch 459/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3530, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 459 epochs +INFO:train:Epoch 460/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3560, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 460 epochs +INFO:train:Epoch 461/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3508, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 461 epochs +INFO:train:Epoch 462/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3523, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 462 epochs +INFO:train:Epoch 463/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3507, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 463 epochs +INFO:train:Epoch 464/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3518, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 464 epochs +INFO:train:Epoch 465/1000 Train Loss: 0.1988, Train Acc: 1.0000 Val Loss: 0.3520, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 465 epochs +INFO:train:Epoch 466/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3536, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 466 epochs +INFO:train:Epoch 467/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3518, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 467 epochs +INFO:train:Epoch 468/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3530, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 468 epochs +INFO:train:Epoch 469/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3532, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 469 epochs +INFO:train:Epoch 470/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3499, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 470 epochs +INFO:train:Epoch 471/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3513, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 471 epochs +INFO:train:Epoch 472/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3502, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 472 epochs +INFO:train:Epoch 473/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3517, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 473 epochs +INFO:train:Epoch 474/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3502, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 474 epochs +INFO:train:Epoch 475/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3532, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 475 epochs +INFO:train:Epoch 476/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3500, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 476 epochs +INFO:train:Epoch 477/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3491, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 477 epochs +INFO:train:Epoch 478/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3508, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 478 epochs +INFO:train:Epoch 479/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3492, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 479 epochs +INFO:train:Epoch 480/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3498, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 480 epochs +INFO:train:Epoch 481/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3515, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 481 epochs +INFO:train:Epoch 482/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3506, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 482 epochs +INFO:train:Epoch 483/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3533, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 483 epochs +INFO:train:Epoch 484/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3536, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 484 epochs +INFO:train:Epoch 485/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3515, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 485 epochs +INFO:train:Epoch 486/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3515, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 486 epochs +INFO:train:Epoch 487/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3497, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 487 epochs +INFO:train:Epoch 488/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3546, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 488 epochs +INFO:train:Epoch 489/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3502, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 489 epochs +INFO:train:Epoch 490/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3507, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 490 epochs +INFO:train:Epoch 491/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3507, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 491 epochs +INFO:train:Epoch 492/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3483, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 492 epochs +INFO:train:Epoch 493/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3468, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 493 epochs +INFO:train:Epoch 494/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3502, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 494 epochs +INFO:train:Epoch 495/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3522, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 495 epochs +INFO:train:Epoch 496/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3511, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 496 epochs +INFO:train:Epoch 497/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3515, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 497 epochs +INFO:train:Epoch 498/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3508, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 498 epochs +INFO:train:Epoch 499/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3465, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 499 epochs +INFO:train:Epoch 500/1000 Train Loss: 0.1987, Train Acc: 1.0000 Val Loss: 0.3513, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 500 epochs +INFO:train:Epoch 501/1000 Train Loss: 0.1986, Train Acc: 1.0000 Val Loss: 0.3536, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 501 epochs diff --git a/code/transformer/logs/instance-recognition/tmp/run_2.log b/code/transformer/logs/instance-recognition/tmp/run_2.log index c2b82644..250b96f3 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_2.log +++ b/code/transformer/logs/instance-recognition/tmp/run_2.log @@ -53,44 +53,228 @@ INFO:__main__:model: Transformer( (fc): Linear(in_features=2046, out_features=2, bias=True) ) INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.7616, Train Acc: 0.5536 Val Loss: 4.1443, Val Acc: 0.6000 -INFO:train:Epoch 2/1000 Train Loss: 2.6284, Train Acc: 0.6250 Val Loss: 5.5705, Val Acc: 0.6000 -INFO:train:Epoch 3/1000 Train Loss: 3.2781, Train Acc: 0.7321 Val Loss: 2.3166, Val Acc: 0.7333 -INFO:train:Epoch 4/1000 Train Loss: 0.8643, Train Acc: 0.8214 Val Loss: 2.1145, Val Acc: 0.7333 -INFO:train:Epoch 5/1000 Train Loss: 0.9212, Train Acc: 0.6964 Val Loss: 0.8930, Val Acc: 0.7333 -INFO:train:Epoch 6/1000 Train Loss: 0.5516, Train Acc: 0.8393 Val Loss: 1.9994, Val Acc: 0.6667 -INFO:train:Epoch 7/1000 Train Loss: 0.5339, Train Acc: 0.9107 Val Loss: 2.2063, Val Acc: 0.6667 -INFO:train:Epoch 8/1000 Train Loss: 0.4435, Train Acc: 0.9643 Val Loss: 1.9716, Val Acc: 0.7333 -INFO:train:Epoch 9/1000 Train Loss: 0.5341, Train Acc: 0.9464 Val Loss: 1.8835, Val Acc: 0.6667 -INFO:train:Epoch 10/1000 Train Loss: 0.3696, Train Acc: 0.9643 Val Loss: 1.6527, Val Acc: 0.6000 -INFO:train:Epoch 11/1000 Train Loss: 0.3200, Train Acc: 1.0000 Val Loss: 1.4106, Val Acc: 0.6667 -INFO:train:Epoch 12/1000 Train Loss: 0.3516, Train Acc: 0.9464 Val Loss: 0.8132, Val Acc: 0.8000 -INFO:train:Epoch 13/1000 Train Loss: 0.2719, Train Acc: 0.9821 Val Loss: 0.6777, Val Acc: 0.6667 -INFO:train:Epoch 14/1000 Train Loss: 0.3224, Train Acc: 0.9464 Val Loss: 0.5492, Val Acc: 0.7333 -INFO:train:Epoch 15/1000 Train Loss: 0.2862, Train Acc: 1.0000 Val Loss: 0.7024, Val Acc: 0.6667 -INFO:train:Epoch 16/1000 Train Loss: 0.2449, Train Acc: 1.0000 Val Loss: 1.0124, Val Acc: 0.6667 -INFO:train:Epoch 17/1000 Train Loss: 0.2733, Train Acc: 0.9821 Val Loss: 1.1288, Val Acc: 0.6000 -INFO:train:Epoch 18/1000 Train Loss: 0.2572, Train Acc: 1.0000 Val Loss: 1.0892, Val Acc: 0.6000 -INFO:train:Epoch 19/1000 Train Loss: 0.2588, Train Acc: 1.0000 Val Loss: 1.0328, Val Acc: 0.6667 -INFO:train:Epoch 20/1000 Train Loss: 0.2917, Train Acc: 0.9821 Val Loss: 1.0480, Val Acc: 0.6000 -INFO:train:Epoch 21/1000 Train Loss: 0.2427, Train Acc: 1.0000 Val Loss: 1.0248, Val Acc: 0.6000 -INFO:train:Epoch 22/1000 Train Loss: 0.2452, Train Acc: 1.0000 Val Loss: 0.9414, Val Acc: 0.6000 -INFO:train:Epoch 23/1000 Train Loss: 0.2482, Train Acc: 1.0000 Val Loss: 0.8008, Val Acc: 0.6000 -INFO:train:Epoch 24/1000 Train Loss: 0.2423, Train Acc: 1.0000 Val Loss: 0.6626, Val Acc: 0.6000 -INFO:train:Epoch 25/1000 Train Loss: 0.2495, Train Acc: 1.0000 Val Loss: 0.6835, Val Acc: 0.6667 -INFO:train:Epoch 26/1000 Train Loss: 0.2252, Train Acc: 1.0000 Val Loss: 0.8477, Val Acc: 0.6000 -INFO:train:Epoch 27/1000 Train Loss: 0.2255, Train Acc: 1.0000 Val Loss: 1.0115, Val Acc: 0.6000 -INFO:train:Epoch 28/1000 Train Loss: 0.2346, Train Acc: 1.0000 Val Loss: 1.0051, Val Acc: 0.6000 -INFO:train:Epoch 29/1000 Train Loss: 0.2347, Train Acc: 1.0000 Val Loss: 0.8988, Val Acc: 0.6667 -INFO:train:Epoch 30/1000 Train Loss: 0.2218, Train Acc: 1.0000 Val Loss: 0.7749, Val Acc: 0.6667 +INFO:train:Epoch 1/100 Train Loss: 0.8238, Train Acc: 0.8684 Val Loss: 0.3860, Val Acc: 0.9570 +INFO:train:Epoch 2/100 Train Loss: 0.3932, Train Acc: 0.9374 Val Loss: 0.4029, Val Acc: 0.9570 +INFO:train:Epoch 3/100 Train Loss: 0.3305, Train Acc: 0.9525 Val Loss: 0.3359, Val Acc: 0.9570 +INFO:train:Epoch 4/100 Train Loss: 0.3336, Train Acc: 0.9506 Val Loss: 0.3346, Val Acc: 0.9570 +INFO:train:Epoch 5/100 Train Loss: 0.3127, Train Acc: 0.9545 Val Loss: 0.3463, Val Acc: 0.9492 +INFO:train:Epoch 6/100 Train Loss: 0.3159, Train Acc: 0.9565 Val Loss: 0.3162, Val Acc: 0.9570 +INFO:train:Epoch 7/100 Train Loss: 0.3139, Train Acc: 0.9525 Val Loss: 0.3442, Val Acc: 0.9570 +INFO:train:Epoch 8/100 Train Loss: 0.3299, Train Acc: 0.9486 Val Loss: 0.3473, Val Acc: 0.9395 +INFO:train:Epoch 9/100 Train Loss: 0.3211, Train Acc: 0.9525 Val Loss: 0.3692, Val Acc: 0.9570 +INFO:train:Epoch 10/100 Train Loss: 0.3330, Train Acc: 0.9472 Val Loss: 0.3459, Val Acc: 0.9570 +INFO:train:Epoch 11/100 Train Loss: 0.3196, Train Acc: 0.9550 Val Loss: 0.3307, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 11 epochs +INFO:train:Epoch 12/100 Train Loss: 0.3028, Train Acc: 0.9584 Val Loss: 0.3571, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 12 epochs +INFO:train:Epoch 13/100 Train Loss: 0.3156, Train Acc: 0.9530 Val Loss: 0.4232, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 13 epochs +INFO:train:Epoch 14/100 Train Loss: 0.3118, Train Acc: 0.9555 Val Loss: 0.3360, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 14 epochs +INFO:train:Epoch 15/100 Train Loss: 0.3041, Train Acc: 0.9516 Val Loss: 0.3509, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 15 epochs +INFO:train:Epoch 16/100 Train Loss: 0.2975, Train Acc: 0.9609 Val Loss: 0.3623, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 16 epochs +INFO:train:Epoch 17/100 Train Loss: 0.2895, Train Acc: 0.9599 Val Loss: 0.3281, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 17 epochs +INFO:train:Epoch 18/100 Train Loss: 0.2830, Train Acc: 0.9648 Val Loss: 0.3336, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 18 epochs +INFO:train:Epoch 19/100 Train Loss: 0.2956, Train Acc: 0.9574 Val Loss: 0.4697, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 19 epochs +INFO:train:Epoch 20/100 Train Loss: 0.2800, Train Acc: 0.9604 Val Loss: 0.3497, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 20 epochs +INFO:train:Epoch 21/100 Train Loss: 0.2691, Train Acc: 0.9662 Val Loss: 0.3487, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 21 epochs +INFO:train:Epoch 22/100 Train Loss: 0.2586, Train Acc: 0.9755 Val Loss: 0.3482, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 22 epochs +INFO:train:Epoch 23/100 Train Loss: 0.2684, Train Acc: 0.9697 Val Loss: 0.3268, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 23 epochs +INFO:train:Epoch 24/100 Train Loss: 0.2643, Train Acc: 0.9746 Val Loss: 0.3418, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 24 epochs +INFO:train:Epoch 25/100 Train Loss: 0.2532, Train Acc: 0.9736 Val Loss: 0.3655, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 25 epochs +INFO:train:Epoch 26/100 Train Loss: 0.2525, Train Acc: 0.9760 Val Loss: 0.4188, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 26 epochs +INFO:train:Epoch 27/100 Train Loss: 0.2501, Train Acc: 0.9775 Val Loss: 0.3552, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 27 epochs +INFO:train:Epoch 28/100 Train Loss: 0.2510, Train Acc: 0.9795 Val Loss: 0.3247, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 28 epochs +INFO:train:Epoch 29/100 Train Loss: 0.2518, Train Acc: 0.9750 Val Loss: 0.3508, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 29 epochs +INFO:train:Epoch 30/100 Train Loss: 0.2540, Train Acc: 0.9760 Val Loss: 0.3560, Val Acc: 0.9414 INFO:train:Early stopping triggered after 30 epochs +INFO:train:Epoch 31/100 Train Loss: 0.2472, Train Acc: 0.9790 Val Loss: 0.3359, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 31 epochs +INFO:train:Epoch 32/100 Train Loss: 0.2416, Train Acc: 0.9814 Val Loss: 0.3547, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 32 epochs +INFO:train:Epoch 33/100 Train Loss: 0.2334, Train Acc: 0.9858 Val Loss: 0.3271, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 33 epochs +INFO:train:Epoch 34/100 Train Loss: 0.2331, Train Acc: 0.9883 Val Loss: 0.3354, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 34 epochs +INFO:train:Epoch 35/100 Train Loss: 0.2281, Train Acc: 0.9873 Val Loss: 0.3499, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 35 epochs +INFO:train:Epoch 36/100 Train Loss: 0.2204, Train Acc: 0.9917 Val Loss: 0.3281, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 36 epochs +INFO:train:Epoch 37/100 Train Loss: 0.2340, Train Acc: 0.9863 Val Loss: 0.3460, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 37 epochs +INFO:train:Epoch 38/100 Train Loss: 0.2227, Train Acc: 0.9907 Val Loss: 0.3759, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 38 epochs +INFO:train:Epoch 39/100 Train Loss: 0.2209, Train Acc: 0.9907 Val Loss: 0.3549, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 39 epochs +INFO:train:Epoch 40/100 Train Loss: 0.2193, Train Acc: 0.9936 Val Loss: 0.3290, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 40 epochs +INFO:train:Epoch 41/100 Train Loss: 0.2303, Train Acc: 0.9868 Val Loss: 0.3430, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 41 epochs +INFO:train:Epoch 42/100 Train Loss: 0.2180, Train Acc: 0.9927 Val Loss: 0.3636, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 42 epochs +INFO:train:Epoch 43/100 Train Loss: 0.2345, Train Acc: 0.9858 Val Loss: 0.3276, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 43 epochs +INFO:train:Epoch 44/100 Train Loss: 0.2296, Train Acc: 0.9878 Val Loss: 0.3289, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 44 epochs +INFO:train:Epoch 45/100 Train Loss: 0.2312, Train Acc: 0.9868 Val Loss: 0.3447, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 45 epochs +INFO:train:Epoch 46/100 Train Loss: 0.2235, Train Acc: 0.9897 Val Loss: 0.3386, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 46 epochs +INFO:train:Epoch 47/100 Train Loss: 0.2217, Train Acc: 0.9907 Val Loss: 0.3434, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 47 epochs +INFO:train:Epoch 48/100 Train Loss: 0.2151, Train Acc: 0.9922 Val Loss: 0.3472, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 48 epochs +INFO:train:Epoch 49/100 Train Loss: 0.2162, Train Acc: 0.9927 Val Loss: 0.3443, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 49 epochs +INFO:train:Epoch 50/100 Train Loss: 0.2245, Train Acc: 0.9873 Val Loss: 0.3696, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 50 epochs +INFO:train:Epoch 51/100 Train Loss: 0.2207, Train Acc: 0.9912 Val Loss: 0.3637, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 51 epochs +INFO:train:Epoch 52/100 Train Loss: 0.2178, Train Acc: 0.9927 Val Loss: 0.3639, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 52 epochs +INFO:train:Epoch 53/100 Train Loss: 0.2201, Train Acc: 0.9927 Val Loss: 0.3461, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 53 epochs +INFO:train:Epoch 54/100 Train Loss: 0.2106, Train Acc: 0.9966 Val Loss: 0.3496, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 54 epochs +INFO:train:Epoch 55/100 Train Loss: 0.2078, Train Acc: 0.9971 Val Loss: 0.3644, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 55 epochs +INFO:train:Epoch 56/100 Train Loss: 0.2135, Train Acc: 0.9927 Val Loss: 0.3796, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 56 epochs +INFO:train:Epoch 57/100 Train Loss: 0.2094, Train Acc: 0.9966 Val Loss: 0.3539, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 57 epochs +INFO:train:Epoch 58/100 Train Loss: 0.2079, Train Acc: 0.9966 Val Loss: 0.3576, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 58 epochs +INFO:train:Epoch 59/100 Train Loss: 0.2093, Train Acc: 0.9956 Val Loss: 0.3471, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 59 epochs +INFO:train:Epoch 60/100 Train Loss: 0.2109, Train Acc: 0.9956 Val Loss: 0.3586, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 60 epochs +INFO:train:Epoch 61/100 Train Loss: 0.2104, Train Acc: 0.9951 Val Loss: 0.3802, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 61 epochs +INFO:train:Epoch 62/100 Train Loss: 0.2113, Train Acc: 0.9956 Val Loss: 0.3788, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 62 epochs +INFO:train:Epoch 63/100 Train Loss: 0.2102, Train Acc: 0.9961 Val Loss: 0.3510, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 63 epochs +INFO:train:Epoch 64/100 Train Loss: 0.2088, Train Acc: 0.9966 Val Loss: 0.3658, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 64 epochs +INFO:train:Epoch 65/100 Train Loss: 0.2105, Train Acc: 0.9956 Val Loss: 0.3454, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 65 epochs +INFO:train:Epoch 66/100 Train Loss: 0.2099, Train Acc: 0.9976 Val Loss: 0.3297, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 66 epochs +INFO:train:Epoch 67/100 Train Loss: 0.2071, Train Acc: 0.9966 Val Loss: 0.3426, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 67 epochs +INFO:train:Epoch 68/100 Train Loss: 0.2043, Train Acc: 0.9990 Val Loss: 0.3531, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 68 epochs +INFO:train:Epoch 69/100 Train Loss: 0.2027, Train Acc: 0.9990 Val Loss: 0.3376, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 69 epochs +INFO:train:Epoch 70/100 Train Loss: 0.2119, Train Acc: 0.9956 Val Loss: 0.3192, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 70 epochs +INFO:train:Epoch 71/100 Train Loss: 0.2114, Train Acc: 0.9946 Val Loss: 0.3484, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 71 epochs +INFO:train:Epoch 72/100 Train Loss: 0.2120, Train Acc: 0.9946 Val Loss: 0.3674, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 72 epochs +INFO:train:Epoch 73/100 Train Loss: 0.2145, Train Acc: 0.9936 Val Loss: 0.3305, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 73 epochs +INFO:train:Epoch 74/100 Train Loss: 0.2131, Train Acc: 0.9941 Val Loss: 0.3389, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 74 epochs +INFO:train:Epoch 75/100 Train Loss: 0.2161, Train Acc: 0.9922 Val Loss: 0.3608, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 75 epochs +INFO:train:Epoch 76/100 Train Loss: 0.2229, Train Acc: 0.9897 Val Loss: 0.3118, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 76 epochs +INFO:train:Epoch 77/100 Train Loss: 0.2122, Train Acc: 0.9966 Val Loss: 0.3540, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 77 epochs +INFO:train:Epoch 78/100 Train Loss: 0.2126, Train Acc: 0.9951 Val Loss: 0.3467, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 78 epochs +INFO:train:Epoch 79/100 Train Loss: 0.2086, Train Acc: 0.9966 Val Loss: 0.3355, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 79 epochs +INFO:train:Epoch 80/100 Train Loss: 0.2076, Train Acc: 0.9956 Val Loss: 0.3568, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 80 epochs +INFO:train:Epoch 81/100 Train Loss: 0.2093, Train Acc: 0.9961 Val Loss: 0.3433, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 81 epochs +INFO:train:Epoch 82/100 Train Loss: 0.2132, Train Acc: 0.9941 Val Loss: 0.3308, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 82 epochs +INFO:train:Epoch 83/100 Train Loss: 0.2137, Train Acc: 0.9927 Val Loss: 0.3905, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 83 epochs +INFO:train:Epoch 84/100 Train Loss: 0.2088, Train Acc: 0.9956 Val Loss: 0.3528, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 84 epochs +INFO:train:Epoch 85/100 Train Loss: 0.2095, Train Acc: 0.9956 Val Loss: 0.3333, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 85 epochs +INFO:train:Epoch 86/100 Train Loss: 0.2102, Train Acc: 0.9961 Val Loss: 0.3638, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 86 epochs +INFO:train:Epoch 87/100 Train Loss: 0.2037, Train Acc: 0.9990 Val Loss: 0.3606, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 87 epochs +INFO:train:Epoch 88/100 Train Loss: 0.2011, Train Acc: 0.9995 Val Loss: 0.3418, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 88 epochs +INFO:train:Epoch 89/100 Train Loss: 0.2036, Train Acc: 0.9985 Val Loss: 0.3308, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 89 epochs +INFO:train:Epoch 90/100 Train Loss: 0.2003, Train Acc: 1.0000 Val Loss: 0.3358, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 90 epochs +INFO:train:Epoch 91/100 Train Loss: 0.1997, Train Acc: 1.0000 Val Loss: 0.3367, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 91 epochs +INFO:train:Epoch 92/100 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3339, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 92 epochs +INFO:train:Epoch 93/100 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3348, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 93 epochs +INFO:train:Epoch 94/100 Train Loss: 0.1994, Train Acc: 1.0000 Val Loss: 0.3321, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 94 epochs +INFO:train:Epoch 95/100 Train Loss: 0.1994, Train Acc: 1.0000 Val Loss: 0.3368, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 95 epochs +INFO:train:Epoch 96/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3362, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 96 epochs +INFO:train:Epoch 97/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3396, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 97 epochs +INFO:train:Epoch 98/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3388, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 98 epochs +INFO:train:Epoch 99/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3359, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 99 epochs +INFO:train:Epoch 100/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3330, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 100 epochs INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 13.10s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 10 / 15 correct, accuracy: 0.6666666666666666 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png +INFO:__main__:Total time taken to train the model: 1398.11s +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 diff --git a/code/transformer/logs/instance-recognition/tmp/run_20.log b/code/transformer/logs/instance-recognition/tmp/run_20.log index 846fea4f..f9ee373f 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_20.log +++ b/code/transformer/logs/instance-recognition/tmp/run_20.log @@ -52,45 +52,3 @@ INFO:__main__:model: Transformer( ) (fc): Linear(in_features=2046, out_features=2, bias=True) ) -INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.8462, Train Acc: 0.4464 Val Loss: 6.5337, Val Acc: 0.4667 -INFO:train:Epoch 2/1000 Train Loss: 1.9764, Train Acc: 0.7500 Val Loss: 3.8826, Val Acc: 0.4667 -INFO:train:Epoch 3/1000 Train Loss: 1.3078, Train Acc: 0.7143 Val Loss: 1.5503, Val Acc: 0.6667 -INFO:train:Epoch 4/1000 Train Loss: 1.8209, Train Acc: 0.6071 Val Loss: 3.2394, Val Acc: 0.6000 -INFO:train:Epoch 5/1000 Train Loss: 0.7737, Train Acc: 0.8393 Val Loss: 4.0569, Val Acc: 0.5333 -INFO:train:Epoch 6/1000 Train Loss: 0.5273, Train Acc: 0.9643 Val Loss: 3.3345, Val Acc: 0.5333 -INFO:train:Epoch 7/1000 Train Loss: 0.6154, Train Acc: 0.9464 Val Loss: 1.9790, Val Acc: 0.6667 -INFO:train:Epoch 8/1000 Train Loss: 0.5498, Train Acc: 0.9821 Val Loss: 1.3179, Val Acc: 0.7333 -INFO:train:Epoch 9/1000 Train Loss: 0.4065, Train Acc: 0.9821 Val Loss: 1.0595, Val Acc: 0.7333 -INFO:train:Epoch 10/1000 Train Loss: 0.4079, Train Acc: 0.8929 Val Loss: 1.0664, Val Acc: 0.6667 -INFO:train:Epoch 11/1000 Train Loss: 0.3622, Train Acc: 0.9286 Val Loss: 1.2969, Val Acc: 0.5333 -INFO:train:Epoch 12/1000 Train Loss: 0.3336, Train Acc: 0.9107 Val Loss: 1.4261, Val Acc: 0.5333 -INFO:train:Epoch 13/1000 Train Loss: 0.2852, Train Acc: 1.0000 Val Loss: 1.6228, Val Acc: 0.5333 -INFO:train:Epoch 14/1000 Train Loss: 0.2692, Train Acc: 1.0000 Val Loss: 1.7079, Val Acc: 0.5333 -INFO:train:Epoch 15/1000 Train Loss: 0.2699, Train Acc: 1.0000 Val Loss: 1.6706, Val Acc: 0.6000 -INFO:train:Epoch 16/1000 Train Loss: 0.2843, Train Acc: 1.0000 Val Loss: 1.5578, Val Acc: 0.5333 -INFO:train:Epoch 17/1000 Train Loss: 0.2655, Train Acc: 1.0000 Val Loss: 1.4314, Val Acc: 0.3333 -INFO:train:Epoch 18/1000 Train Loss: 0.2665, Train Acc: 1.0000 Val Loss: 1.4566, Val Acc: 0.4000 -INFO:train:Epoch 19/1000 Train Loss: 0.2530, Train Acc: 0.9821 Val Loss: 1.3117, Val Acc: 0.4000 -INFO:train:Epoch 20/1000 Train Loss: 0.2741, Train Acc: 0.9643 Val Loss: 1.1675, Val Acc: 0.4667 -INFO:train:Epoch 21/1000 Train Loss: 0.2524, Train Acc: 1.0000 Val Loss: 1.1793, Val Acc: 0.5333 -INFO:train:Epoch 22/1000 Train Loss: 0.2380, Train Acc: 1.0000 Val Loss: 1.2091, Val Acc: 0.6000 -INFO:train:Epoch 23/1000 Train Loss: 0.2392, Train Acc: 1.0000 Val Loss: 1.1948, Val Acc: 0.5333 -INFO:train:Epoch 24/1000 Train Loss: 0.2279, Train Acc: 1.0000 Val Loss: 1.1473, Val Acc: 0.6000 -INFO:train:Epoch 25/1000 Train Loss: 0.2244, Train Acc: 1.0000 Val Loss: 1.1684, Val Acc: 0.5333 -INFO:train:Epoch 26/1000 Train Loss: 0.2197, Train Acc: 1.0000 Val Loss: 1.2142, Val Acc: 0.5333 -INFO:train:Epoch 27/1000 Train Loss: 0.2205, Train Acc: 1.0000 Val Loss: 1.2440, Val Acc: 0.5333 -INFO:train:Epoch 28/1000 Train Loss: 0.2238, Train Acc: 1.0000 Val Loss: 1.2733, Val Acc: 0.6000 -INFO:train:Epoch 29/1000 Train Loss: 0.2238, Train Acc: 1.0000 Val Loss: 1.3523, Val Acc: 0.5333 -INFO:train:Epoch 30/1000 Train Loss: 0.2196, Train Acc: 1.0000 Val Loss: 1.3984, Val Acc: 0.5333 -INFO:train:Early stopping triggered after 30 epochs -INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 13.18s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.19s -INFO:train:validation got 8 / 15 correct, accuracy: 0.5333333333333333 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png diff --git a/code/transformer/logs/instance-recognition/tmp/run_3.log b/code/transformer/logs/instance-recognition/tmp/run_3.log index 8cab8f10..b81cf13c 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_3.log +++ b/code/transformer/logs/instance-recognition/tmp/run_3.log @@ -53,43 +53,196 @@ INFO:__main__:model: Transformer( (fc): Linear(in_features=2046, out_features=2, bias=True) ) INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.7713, Train Acc: 0.5357 Val Loss: 5.5804, Val Acc: 0.6000 -INFO:train:Epoch 2/1000 Train Loss: 2.6904, Train Acc: 0.7500 Val Loss: 2.7159, Val Acc: 0.6000 -INFO:train:Epoch 3/1000 Train Loss: 2.0138, Train Acc: 0.6071 Val Loss: 1.5913, Val Acc: 0.5333 -INFO:train:Epoch 4/1000 Train Loss: 0.7408, Train Acc: 0.8214 Val Loss: 1.5649, Val Acc: 0.4667 -INFO:train:Epoch 5/1000 Train Loss: 0.4781, Train Acc: 0.8929 Val Loss: 1.2401, Val Acc: 0.6667 -INFO:train:Epoch 6/1000 Train Loss: 0.6499, Train Acc: 0.8750 Val Loss: 1.1252, Val Acc: 0.8000 -INFO:train:Epoch 7/1000 Train Loss: 0.6931, Train Acc: 0.7679 Val Loss: 1.6614, Val Acc: 0.6000 -INFO:train:Epoch 8/1000 Train Loss: 0.4195, Train Acc: 0.9107 Val Loss: 1.7689, Val Acc: 0.6667 -INFO:train:Epoch 9/1000 Train Loss: 0.5189, Train Acc: 0.8929 Val Loss: 0.9281, Val Acc: 0.7333 -INFO:train:Epoch 10/1000 Train Loss: 0.2920, Train Acc: 1.0000 Val Loss: 0.8206, Val Acc: 0.6667 -INFO:train:Epoch 11/1000 Train Loss: 0.3912, Train Acc: 0.9286 Val Loss: 0.7439, Val Acc: 0.7333 -INFO:train:Epoch 12/1000 Train Loss: 0.3213, Train Acc: 0.9643 Val Loss: 0.8004, Val Acc: 0.6000 -INFO:train:Epoch 13/1000 Train Loss: 0.2897, Train Acc: 1.0000 Val Loss: 1.0287, Val Acc: 0.5333 -INFO:train:Epoch 14/1000 Train Loss: 0.2953, Train Acc: 1.0000 Val Loss: 1.1717, Val Acc: 0.6667 -INFO:train:Epoch 15/1000 Train Loss: 0.2872, Train Acc: 1.0000 Val Loss: 1.1816, Val Acc: 0.5333 -INFO:train:Epoch 16/1000 Train Loss: 0.2582, Train Acc: 1.0000 Val Loss: 1.1062, Val Acc: 0.6000 -INFO:train:Epoch 17/1000 Train Loss: 0.2651, Train Acc: 1.0000 Val Loss: 0.9671, Val Acc: 0.5333 -INFO:train:Epoch 18/1000 Train Loss: 0.2686, Train Acc: 0.9643 Val Loss: 0.9335, Val Acc: 0.6667 -INFO:train:Epoch 19/1000 Train Loss: 0.2566, Train Acc: 0.9821 Val Loss: 0.7743, Val Acc: 0.6667 -INFO:train:Epoch 20/1000 Train Loss: 0.2322, Train Acc: 1.0000 Val Loss: 0.7514, Val Acc: 0.6000 -INFO:train:Epoch 21/1000 Train Loss: 0.2365, Train Acc: 1.0000 Val Loss: 0.8007, Val Acc: 0.5333 -INFO:train:Epoch 22/1000 Train Loss: 0.2521, Train Acc: 1.0000 Val Loss: 0.7849, Val Acc: 0.5333 -INFO:train:Epoch 23/1000 Train Loss: 0.2522, Train Acc: 1.0000 Val Loss: 0.7555, Val Acc: 0.5333 -INFO:train:Epoch 24/1000 Train Loss: 0.2387, Train Acc: 1.0000 Val Loss: 0.7164, Val Acc: 0.6000 -INFO:train:Epoch 25/1000 Train Loss: 0.2313, Train Acc: 1.0000 Val Loss: 0.7615, Val Acc: 0.6000 -INFO:train:Epoch 26/1000 Train Loss: 0.2202, Train Acc: 1.0000 Val Loss: 0.9251, Val Acc: 0.5333 -INFO:train:Epoch 27/1000 Train Loss: 0.2235, Train Acc: 1.0000 Val Loss: 1.0157, Val Acc: 0.4667 -INFO:train:Epoch 28/1000 Train Loss: 0.2396, Train Acc: 1.0000 Val Loss: 1.0222, Val Acc: 0.6667 -INFO:train:Epoch 29/1000 Train Loss: 0.2214, Train Acc: 1.0000 Val Loss: 1.1079, Val Acc: 0.6000 +INFO:train:Epoch 1/100 Train Loss: 0.7091, Train Acc: 0.8752 Val Loss: 0.5089, Val Acc: 0.9570 +INFO:train:Epoch 2/100 Train Loss: 0.3782, Train Acc: 0.9408 Val Loss: 0.3433, Val Acc: 0.9531 +INFO:train:Epoch 3/100 Train Loss: 0.3376, Train Acc: 0.9535 Val Loss: 0.4011, Val Acc: 0.9570 +INFO:train:Epoch 4/100 Train Loss: 0.3323, Train Acc: 0.9511 Val Loss: 0.3493, Val Acc: 0.9570 +INFO:train:Epoch 5/100 Train Loss: 0.3369, Train Acc: 0.9486 Val Loss: 0.4227, Val Acc: 0.9570 +INFO:train:Epoch 6/100 Train Loss: 0.3379, Train Acc: 0.9511 Val Loss: 0.3771, Val Acc: 0.9199 +INFO:train:Epoch 7/100 Train Loss: 0.3362, Train Acc: 0.9506 Val Loss: 0.3462, Val Acc: 0.9570 +INFO:train:Epoch 8/100 Train Loss: 0.3120, Train Acc: 0.9525 Val Loss: 0.3525, Val Acc: 0.9570 +INFO:train:Epoch 9/100 Train Loss: 0.3177, Train Acc: 0.9565 Val Loss: 0.3348, Val Acc: 0.9531 +INFO:train:Epoch 10/100 Train Loss: 0.3290, Train Acc: 0.9467 Val Loss: 0.4328, Val Acc: 0.9434 +INFO:train:Epoch 11/100 Train Loss: 0.3182, Train Acc: 0.9506 Val Loss: 0.3465, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 11 epochs +INFO:train:Epoch 12/100 Train Loss: 0.3089, Train Acc: 0.9565 Val Loss: 0.3388, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 12 epochs +INFO:train:Epoch 13/100 Train Loss: 0.3027, Train Acc: 0.9530 Val Loss: 0.3543, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 13 epochs +INFO:train:Epoch 14/100 Train Loss: 0.2943, Train Acc: 0.9560 Val Loss: 0.3344, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 14 epochs +INFO:train:Epoch 15/100 Train Loss: 0.2962, Train Acc: 0.9609 Val Loss: 0.3275, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 15 epochs +INFO:train:Epoch 16/100 Train Loss: 0.2993, Train Acc: 0.9579 Val Loss: 0.3828, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 16 epochs +INFO:train:Epoch 17/100 Train Loss: 0.2952, Train Acc: 0.9604 Val Loss: 0.3537, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 17 epochs +INFO:train:Epoch 18/100 Train Loss: 0.2801, Train Acc: 0.9633 Val Loss: 0.3456, Val Acc: 0.9219 +INFO:train:Early stopping triggered after 18 epochs +INFO:train:Epoch 19/100 Train Loss: 0.2833, Train Acc: 0.9614 Val Loss: 0.3572, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 19 epochs +INFO:train:Epoch 20/100 Train Loss: 0.2739, Train Acc: 0.9692 Val Loss: 0.3528, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 20 epochs +INFO:train:Epoch 21/100 Train Loss: 0.2758, Train Acc: 0.9667 Val Loss: 0.3128, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 21 epochs +INFO:train:Epoch 22/100 Train Loss: 0.2741, Train Acc: 0.9667 Val Loss: 0.3277, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 22 epochs +INFO:train:Epoch 23/100 Train Loss: 0.2593, Train Acc: 0.9746 Val Loss: 0.3927, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 23 epochs +INFO:train:Epoch 24/100 Train Loss: 0.2738, Train Acc: 0.9687 Val Loss: 0.3945, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 24 epochs +INFO:train:Epoch 25/100 Train Loss: 0.2700, Train Acc: 0.9726 Val Loss: 0.3788, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 25 epochs +INFO:train:Epoch 26/100 Train Loss: 0.2520, Train Acc: 0.9785 Val Loss: 0.3375, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 26 epochs +INFO:train:Epoch 27/100 Train Loss: 0.2523, Train Acc: 0.9775 Val Loss: 0.3602, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 27 epochs +INFO:train:Epoch 28/100 Train Loss: 0.2571, Train Acc: 0.9799 Val Loss: 0.3734, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 28 epochs +INFO:train:Epoch 29/100 Train Loss: 0.2580, Train Acc: 0.9765 Val Loss: 0.3480, Val Acc: 0.9434 INFO:train:Early stopping triggered after 29 epochs +INFO:train:Epoch 30/100 Train Loss: 0.2387, Train Acc: 0.9843 Val Loss: 0.3169, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 30 epochs +INFO:train:Epoch 31/100 Train Loss: 0.2364, Train Acc: 0.9843 Val Loss: 0.3886, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 31 epochs +INFO:train:Epoch 32/100 Train Loss: 0.2355, Train Acc: 0.9868 Val Loss: 0.3521, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 32 epochs +INFO:train:Epoch 33/100 Train Loss: 0.2335, Train Acc: 0.9858 Val Loss: 0.3548, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 33 epochs +INFO:train:Epoch 34/100 Train Loss: 0.2327, Train Acc: 0.9883 Val Loss: 0.3622, Val Acc: 0.9277 +INFO:train:Early stopping triggered after 34 epochs +INFO:train:Epoch 35/100 Train Loss: 0.2356, Train Acc: 0.9853 Val Loss: 0.3790, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 35 epochs +INFO:train:Epoch 36/100 Train Loss: 0.2284, Train Acc: 0.9887 Val Loss: 0.3936, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 36 epochs +INFO:train:Epoch 37/100 Train Loss: 0.2260, Train Acc: 0.9878 Val Loss: 0.3559, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 37 epochs +INFO:train:Epoch 38/100 Train Loss: 0.2270, Train Acc: 0.9887 Val Loss: 0.3462, Val Acc: 0.9297 +INFO:train:Early stopping triggered after 38 epochs +INFO:train:Epoch 39/100 Train Loss: 0.2172, Train Acc: 0.9956 Val Loss: 0.3286, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 39 epochs +INFO:train:Epoch 40/100 Train Loss: 0.2174, Train Acc: 0.9936 Val Loss: 0.3297, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 40 epochs +INFO:train:Epoch 41/100 Train Loss: 0.2178, Train Acc: 0.9941 Val Loss: 0.3519, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 41 epochs +INFO:train:Epoch 42/100 Train Loss: 0.2158, Train Acc: 0.9936 Val Loss: 0.3567, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 42 epochs +INFO:train:Epoch 43/100 Train Loss: 0.2231, Train Acc: 0.9907 Val Loss: 0.3565, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 43 epochs +INFO:train:Epoch 44/100 Train Loss: 0.2159, Train Acc: 0.9941 Val Loss: 0.3297, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 44 epochs +INFO:train:Epoch 45/100 Train Loss: 0.2191, Train Acc: 0.9912 Val Loss: 0.3370, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 45 epochs +INFO:train:Epoch 46/100 Train Loss: 0.2215, Train Acc: 0.9902 Val Loss: 0.3483, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 46 epochs +INFO:train:Epoch 47/100 Train Loss: 0.2204, Train Acc: 0.9927 Val Loss: 0.3390, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 47 epochs +INFO:train:Epoch 48/100 Train Loss: 0.2214, Train Acc: 0.9907 Val Loss: 0.3415, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 48 epochs +INFO:train:Epoch 49/100 Train Loss: 0.2219, Train Acc: 0.9892 Val Loss: 0.3359, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 49 epochs +INFO:train:Epoch 50/100 Train Loss: 0.2274, Train Acc: 0.9902 Val Loss: 0.3782, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 50 epochs +INFO:train:Epoch 51/100 Train Loss: 0.2266, Train Acc: 0.9907 Val Loss: 0.3362, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 51 epochs +INFO:train:Epoch 52/100 Train Loss: 0.2228, Train Acc: 0.9907 Val Loss: 0.3414, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 52 epochs +INFO:train:Epoch 53/100 Train Loss: 0.2253, Train Acc: 0.9902 Val Loss: 0.3339, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 53 epochs +INFO:train:Epoch 54/100 Train Loss: 0.2234, Train Acc: 0.9927 Val Loss: 0.3442, Val Acc: 0.9609 +INFO:train:Epoch 55/100 Train Loss: 0.2199, Train Acc: 0.9912 Val Loss: 0.3344, Val Acc: 0.9492 +INFO:train:Epoch 56/100 Train Loss: 0.2249, Train Acc: 0.9887 Val Loss: 0.3532, Val Acc: 0.9297 +INFO:train:Epoch 57/100 Train Loss: 0.2100, Train Acc: 0.9966 Val Loss: 0.3277, Val Acc: 0.9492 +INFO:train:Epoch 58/100 Train Loss: 0.2116, Train Acc: 0.9941 Val Loss: 0.3778, Val Acc: 0.9355 +INFO:train:Epoch 59/100 Train Loss: 0.2187, Train Acc: 0.9907 Val Loss: 0.3527, Val Acc: 0.9512 +INFO:train:Epoch 60/100 Train Loss: 0.2153, Train Acc: 0.9961 Val Loss: 0.3356, Val Acc: 0.9492 +INFO:train:Epoch 61/100 Train Loss: 0.2092, Train Acc: 0.9961 Val Loss: 0.3528, Val Acc: 0.9453 +INFO:train:Epoch 62/100 Train Loss: 0.2133, Train Acc: 0.9941 Val Loss: 0.3442, Val Acc: 0.9473 +INFO:train:Epoch 63/100 Train Loss: 0.2200, Train Acc: 0.9917 Val Loss: 0.3447, Val Acc: 0.9434 +INFO:train:Epoch 64/100 Train Loss: 0.2142, Train Acc: 0.9961 Val Loss: 0.3537, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 64 epochs +INFO:train:Epoch 65/100 Train Loss: 0.2056, Train Acc: 0.9985 Val Loss: 0.3349, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 65 epochs +INFO:train:Epoch 66/100 Train Loss: 0.2139, Train Acc: 0.9951 Val Loss: 0.3045, Val Acc: 0.9590 +INFO:train:Early stopping triggered after 66 epochs +INFO:train:Epoch 67/100 Train Loss: 0.2134, Train Acc: 0.9946 Val Loss: 0.3336, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 67 epochs +INFO:train:Epoch 68/100 Train Loss: 0.2122, Train Acc: 0.9956 Val Loss: 0.3375, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 68 epochs +INFO:train:Epoch 69/100 Train Loss: 0.2211, Train Acc: 0.9902 Val Loss: 0.3240, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 69 epochs +INFO:train:Epoch 70/100 Train Loss: 0.2222, Train Acc: 0.9902 Val Loss: 0.3337, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 70 epochs +INFO:train:Epoch 71/100 Train Loss: 0.2204, Train Acc: 0.9922 Val Loss: 0.3481, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 71 epochs +INFO:train:Epoch 72/100 Train Loss: 0.2088, Train Acc: 0.9971 Val Loss: 0.3193, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 72 epochs +INFO:train:Epoch 73/100 Train Loss: 0.2059, Train Acc: 0.9971 Val Loss: 0.3239, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 73 epochs +INFO:train:Epoch 74/100 Train Loss: 0.2157, Train Acc: 0.9907 Val Loss: 0.3565, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 74 epochs +INFO:train:Epoch 75/100 Train Loss: 0.2155, Train Acc: 0.9941 Val Loss: 0.3485, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 75 epochs +INFO:train:Epoch 76/100 Train Loss: 0.2251, Train Acc: 0.9922 Val Loss: 0.3077, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 76 epochs +INFO:train:Epoch 77/100 Train Loss: 0.2176, Train Acc: 0.9927 Val Loss: 0.3318, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 77 epochs +INFO:train:Epoch 78/100 Train Loss: 0.2081, Train Acc: 0.9966 Val Loss: 0.3629, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 78 epochs +INFO:train:Epoch 79/100 Train Loss: 0.2080, Train Acc: 0.9976 Val Loss: 0.3596, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 79 epochs +INFO:train:Epoch 80/100 Train Loss: 0.2015, Train Acc: 1.0000 Val Loss: 0.3367, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 80 epochs +INFO:train:Epoch 81/100 Train Loss: 0.2011, Train Acc: 0.9995 Val Loss: 0.3327, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 81 epochs +INFO:train:Epoch 82/100 Train Loss: 0.2002, Train Acc: 1.0000 Val Loss: 0.3391, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 82 epochs +INFO:train:Epoch 83/100 Train Loss: 0.1999, Train Acc: 1.0000 Val Loss: 0.3352, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 83 epochs +INFO:train:Epoch 84/100 Train Loss: 0.1997, Train Acc: 1.0000 Val Loss: 0.3377, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 84 epochs +INFO:train:Epoch 85/100 Train Loss: 0.1996, Train Acc: 1.0000 Val Loss: 0.3371, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 85 epochs +INFO:train:Epoch 86/100 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3334, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 86 epochs +INFO:train:Epoch 87/100 Train Loss: 0.1994, Train Acc: 1.0000 Val Loss: 0.3314, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 87 epochs +INFO:train:Epoch 88/100 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3344, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 88 epochs +INFO:train:Epoch 89/100 Train Loss: 0.1994, Train Acc: 1.0000 Val Loss: 0.3355, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 89 epochs +INFO:train:Epoch 90/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3377, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 90 epochs +INFO:train:Epoch 91/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3374, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 91 epochs +INFO:train:Epoch 92/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3342, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 92 epochs +INFO:train:Epoch 93/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3325, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 93 epochs +INFO:train:Epoch 94/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3298, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 94 epochs +INFO:train:Epoch 95/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3327, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 95 epochs +INFO:train:Epoch 96/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3347, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 96 epochs +INFO:train:Epoch 97/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3308, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 97 epochs +INFO:train:Epoch 98/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3319, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 98 epochs +INFO:train:Epoch 99/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3309, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 99 epochs +INFO:train:Epoch 100/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3343, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 100 epochs INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 12.46s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 +INFO:__main__:Total time taken to train the model: 1431.25s +INFO:train:train got 64 / 64 correct, accuracy: 1.0 INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 9 / 15 correct, accuracy: 0.6 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 diff --git a/code/transformer/logs/instance-recognition/tmp/run_4.log b/code/transformer/logs/instance-recognition/tmp/run_4.log index de1d52fa..8c45aab6 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_4.log +++ b/code/transformer/logs/instance-recognition/tmp/run_4.log @@ -53,50 +53,216 @@ INFO:__main__:model: Transformer( (fc): Linear(in_features=2046, out_features=2, bias=True) ) INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.8805, Train Acc: 0.3750 Val Loss: 3.0248, Val Acc: 0.6000 -INFO:train:Epoch 2/1000 Train Loss: 1.7812, Train Acc: 0.7143 Val Loss: 4.7509, Val Acc: 0.6000 -INFO:train:Epoch 3/1000 Train Loss: 3.8443, Train Acc: 0.6071 Val Loss: 1.6564, Val Acc: 0.6000 -INFO:train:Epoch 4/1000 Train Loss: 0.3983, Train Acc: 0.9107 Val Loss: 2.9598, Val Acc: 0.5333 -INFO:train:Epoch 5/1000 Train Loss: 1.4661, Train Acc: 0.6250 Val Loss: 1.9005, Val Acc: 0.5333 -INFO:train:Epoch 6/1000 Train Loss: 0.5042, Train Acc: 0.8929 Val Loss: 2.1872, Val Acc: 0.6667 -INFO:train:Epoch 7/1000 Train Loss: 0.7024, Train Acc: 0.8571 Val Loss: 1.6855, Val Acc: 0.5333 -INFO:train:Epoch 8/1000 Train Loss: 0.5246, Train Acc: 0.9107 Val Loss: 1.3065, Val Acc: 0.6667 -INFO:train:Epoch 9/1000 Train Loss: 0.4993, Train Acc: 0.9107 Val Loss: 1.4617, Val Acc: 0.6667 -INFO:train:Epoch 10/1000 Train Loss: 0.5702, Train Acc: 0.9286 Val Loss: 1.5130, Val Acc: 0.6667 -INFO:train:Epoch 11/1000 Train Loss: 0.4856, Train Acc: 0.9286 Val Loss: 1.2745, Val Acc: 0.6000 -INFO:train:Epoch 12/1000 Train Loss: 0.3466, Train Acc: 0.9464 Val Loss: 1.5090, Val Acc: 0.4000 -INFO:train:Epoch 13/1000 Train Loss: 0.3134, Train Acc: 0.9286 Val Loss: 1.8808, Val Acc: 0.4667 -INFO:train:Epoch 14/1000 Train Loss: 0.4802, Train Acc: 0.8750 Val Loss: 1.5918, Val Acc: 0.5333 -INFO:train:Epoch 15/1000 Train Loss: 0.3556, Train Acc: 0.9286 Val Loss: 1.3170, Val Acc: 0.5333 -INFO:train:Epoch 16/1000 Train Loss: 0.3362, Train Acc: 0.9643 Val Loss: 1.1442, Val Acc: 0.7333 -INFO:train:Epoch 17/1000 Train Loss: 0.2476, Train Acc: 1.0000 Val Loss: 1.1409, Val Acc: 0.6667 -INFO:train:Epoch 18/1000 Train Loss: 0.2929, Train Acc: 0.9643 Val Loss: 1.1383, Val Acc: 0.6667 -INFO:train:Epoch 19/1000 Train Loss: 0.2948, Train Acc: 1.0000 Val Loss: 1.1821, Val Acc: 0.5333 -INFO:train:Epoch 20/1000 Train Loss: 0.2881, Train Acc: 1.0000 Val Loss: 1.2624, Val Acc: 0.6000 -INFO:train:Epoch 21/1000 Train Loss: 0.2709, Train Acc: 1.0000 Val Loss: 1.4211, Val Acc: 0.7333 -INFO:train:Epoch 22/1000 Train Loss: 0.2626, Train Acc: 1.0000 Val Loss: 1.6164, Val Acc: 0.6667 -INFO:train:Epoch 23/1000 Train Loss: 0.2778, Train Acc: 1.0000 Val Loss: 1.5703, Val Acc: 0.5333 -INFO:train:Epoch 24/1000 Train Loss: 0.2697, Train Acc: 1.0000 Val Loss: 1.4044, Val Acc: 0.6000 -INFO:train:Epoch 25/1000 Train Loss: 0.2375, Train Acc: 1.0000 Val Loss: 1.2960, Val Acc: 0.6000 -INFO:train:Epoch 26/1000 Train Loss: 0.2725, Train Acc: 0.9821 Val Loss: 1.2055, Val Acc: 0.6000 -INFO:train:Epoch 27/1000 Train Loss: 0.2376, Train Acc: 1.0000 Val Loss: 1.1671, Val Acc: 0.6000 -INFO:train:Epoch 28/1000 Train Loss: 0.2214, Train Acc: 1.0000 Val Loss: 1.1736, Val Acc: 0.6000 -INFO:train:Epoch 29/1000 Train Loss: 0.2384, Train Acc: 1.0000 Val Loss: 1.0312, Val Acc: 0.6667 -INFO:train:Epoch 30/1000 Train Loss: 0.2437, Train Acc: 1.0000 Val Loss: 0.9619, Val Acc: 0.6000 -INFO:train:Epoch 31/1000 Train Loss: 0.2297, Train Acc: 1.0000 Val Loss: 1.0360, Val Acc: 0.5333 -INFO:train:Epoch 32/1000 Train Loss: 0.2351, Train Acc: 1.0000 Val Loss: 1.1052, Val Acc: 0.5333 -INFO:train:Epoch 33/1000 Train Loss: 0.2257, Train Acc: 1.0000 Val Loss: 1.2020, Val Acc: 0.6000 -INFO:train:Epoch 34/1000 Train Loss: 0.2214, Train Acc: 1.0000 Val Loss: 1.2692, Val Acc: 0.6667 -INFO:train:Epoch 35/1000 Train Loss: 0.2391, Train Acc: 1.0000 Val Loss: 1.2907, Val Acc: 0.6667 -INFO:train:Epoch 36/1000 Train Loss: 0.2284, Train Acc: 1.0000 Val Loss: 1.2007, Val Acc: 0.6000 +INFO:train:Epoch 1/100 Train Loss: 0.8283, Train Acc: 0.8889 Val Loss: 0.3875, Val Acc: 0.9570 +INFO:train:Epoch 2/100 Train Loss: 0.3699, Train Acc: 0.9369 Val Loss: 0.4604, Val Acc: 0.9570 +INFO:train:Epoch 3/100 Train Loss: 0.3442, Train Acc: 0.9491 Val Loss: 0.3422, Val Acc: 0.9551 +INFO:train:Epoch 4/100 Train Loss: 0.3261, Train Acc: 0.9525 Val Loss: 0.3285, Val Acc: 0.9492 +INFO:train:Epoch 5/100 Train Loss: 0.3283, Train Acc: 0.9521 Val Loss: 0.3661, Val Acc: 0.9414 +INFO:train:Epoch 6/100 Train Loss: 0.3375, Train Acc: 0.9452 Val Loss: 0.3658, Val Acc: 0.9512 +INFO:train:Epoch 7/100 Train Loss: 0.3411, Train Acc: 0.9462 Val Loss: 0.3520, Val Acc: 0.9551 +INFO:train:Epoch 8/100 Train Loss: 0.3104, Train Acc: 0.9545 Val Loss: 0.3348, Val Acc: 0.9570 +INFO:train:Epoch 9/100 Train Loss: 0.3186, Train Acc: 0.9496 Val Loss: 0.3664, Val Acc: 0.9551 +INFO:train:Epoch 10/100 Train Loss: 0.3264, Train Acc: 0.9481 Val Loss: 0.3088, Val Acc: 0.9551 +INFO:train:Epoch 11/100 Train Loss: 0.3073, Train Acc: 0.9540 Val Loss: 0.3422, Val Acc: 0.9258 +INFO:train:Early stopping triggered after 11 epochs +INFO:train:Epoch 12/100 Train Loss: 0.3176, Train Acc: 0.9516 Val Loss: 0.3787, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 12 epochs +INFO:train:Epoch 13/100 Train Loss: 0.3127, Train Acc: 0.9521 Val Loss: 0.3743, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 13 epochs +INFO:train:Epoch 14/100 Train Loss: 0.3046, Train Acc: 0.9550 Val Loss: 0.3404, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 14 epochs +INFO:train:Epoch 15/100 Train Loss: 0.3012, Train Acc: 0.9545 Val Loss: 0.3382, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 15 epochs +INFO:train:Epoch 16/100 Train Loss: 0.2897, Train Acc: 0.9584 Val Loss: 0.3700, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 16 epochs +INFO:train:Epoch 17/100 Train Loss: 0.3035, Train Acc: 0.9589 Val Loss: 0.3791, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 17 epochs +INFO:train:Epoch 18/100 Train Loss: 0.2928, Train Acc: 0.9589 Val Loss: 0.3351, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 18 epochs +INFO:train:Epoch 19/100 Train Loss: 0.3075, Train Acc: 0.9535 Val Loss: 0.3661, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 19 epochs +INFO:train:Epoch 20/100 Train Loss: 0.2878, Train Acc: 0.9545 Val Loss: 0.3657, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 20 epochs +INFO:train:Epoch 21/100 Train Loss: 0.2807, Train Acc: 0.9614 Val Loss: 0.3448, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 21 epochs +INFO:train:Epoch 22/100 Train Loss: 0.2751, Train Acc: 0.9648 Val Loss: 0.3220, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 22 epochs +INFO:train:Epoch 23/100 Train Loss: 0.2646, Train Acc: 0.9677 Val Loss: 0.3657, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 23 epochs +INFO:train:Epoch 24/100 Train Loss: 0.2747, Train Acc: 0.9687 Val Loss: 0.3506, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 24 epochs +INFO:train:Epoch 25/100 Train Loss: 0.2715, Train Acc: 0.9687 Val Loss: 0.3180, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 25 epochs +INFO:train:Epoch 26/100 Train Loss: 0.2590, Train Acc: 0.9726 Val Loss: 0.3676, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 26 epochs +INFO:train:Epoch 27/100 Train Loss: 0.2571, Train Acc: 0.9760 Val Loss: 0.3383, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 27 epochs +INFO:train:Epoch 28/100 Train Loss: 0.2522, Train Acc: 0.9790 Val Loss: 0.3218, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 28 epochs +INFO:train:Epoch 29/100 Train Loss: 0.2502, Train Acc: 0.9799 Val Loss: 0.3591, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 29 epochs +INFO:train:Epoch 30/100 Train Loss: 0.2493, Train Acc: 0.9790 Val Loss: 0.3250, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 30 epochs +INFO:train:Epoch 31/100 Train Loss: 0.2442, Train Acc: 0.9829 Val Loss: 0.4022, Val Acc: 0.9102 +INFO:train:Early stopping triggered after 31 epochs +INFO:train:Epoch 32/100 Train Loss: 0.2480, Train Acc: 0.9809 Val Loss: 0.3454, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 32 epochs +INFO:train:Epoch 33/100 Train Loss: 0.2464, Train Acc: 0.9804 Val Loss: 0.3401, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 33 epochs +INFO:train:Epoch 34/100 Train Loss: 0.2300, Train Acc: 0.9853 Val Loss: 0.3854, Val Acc: 0.9180 +INFO:train:Early stopping triggered after 34 epochs +INFO:train:Epoch 35/100 Train Loss: 0.2364, Train Acc: 0.9863 Val Loss: 0.3617, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 35 epochs +INFO:train:Epoch 36/100 Train Loss: 0.2344, Train Acc: 0.9848 Val Loss: 0.3172, Val Acc: 0.9570 INFO:train:Early stopping triggered after 36 epochs +INFO:train:Epoch 37/100 Train Loss: 0.2546, Train Acc: 0.9775 Val Loss: 0.3315, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 37 epochs +INFO:train:Epoch 38/100 Train Loss: 0.2340, Train Acc: 0.9848 Val Loss: 0.3309, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 38 epochs +INFO:train:Epoch 39/100 Train Loss: 0.2379, Train Acc: 0.9819 Val Loss: 0.3379, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 39 epochs +INFO:train:Epoch 40/100 Train Loss: 0.2403, Train Acc: 0.9829 Val Loss: 0.3398, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 40 epochs +INFO:train:Epoch 41/100 Train Loss: 0.2283, Train Acc: 0.9873 Val Loss: 0.3323, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 41 epochs +INFO:train:Epoch 42/100 Train Loss: 0.2225, Train Acc: 0.9912 Val Loss: 0.3304, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 42 epochs +INFO:train:Epoch 43/100 Train Loss: 0.2228, Train Acc: 0.9922 Val Loss: 0.3285, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 43 epochs +INFO:train:Epoch 44/100 Train Loss: 0.2253, Train Acc: 0.9892 Val Loss: 0.3471, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 44 epochs +INFO:train:Epoch 45/100 Train Loss: 0.2194, Train Acc: 0.9922 Val Loss: 0.3471, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 45 epochs +INFO:train:Epoch 46/100 Train Loss: 0.2212, Train Acc: 0.9912 Val Loss: 0.3121, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 46 epochs +INFO:train:Epoch 47/100 Train Loss: 0.2157, Train Acc: 0.9971 Val Loss: 0.3459, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 47 epochs +INFO:train:Epoch 48/100 Train Loss: 0.2085, Train Acc: 0.9966 Val Loss: 0.3583, Val Acc: 0.9297 +INFO:train:Early stopping triggered after 48 epochs +INFO:train:Epoch 49/100 Train Loss: 0.2181, Train Acc: 0.9932 Val Loss: 0.3400, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 49 epochs +INFO:train:Epoch 50/100 Train Loss: 0.2069, Train Acc: 0.9980 Val Loss: 0.3653, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 50 epochs +INFO:train:Epoch 51/100 Train Loss: 0.2108, Train Acc: 0.9946 Val Loss: 0.3449, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 51 epochs +INFO:train:Epoch 52/100 Train Loss: 0.2090, Train Acc: 0.9971 Val Loss: 0.3512, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 52 epochs +INFO:train:Epoch 53/100 Train Loss: 0.2103, Train Acc: 0.9951 Val Loss: 0.3285, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 53 epochs +INFO:train:Epoch 54/100 Train Loss: 0.2098, Train Acc: 0.9951 Val Loss: 0.3149, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 54 epochs +INFO:train:Epoch 55/100 Train Loss: 0.2186, Train Acc: 0.9912 Val Loss: 0.3547, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 55 epochs +INFO:train:Epoch 56/100 Train Loss: 0.2292, Train Acc: 0.9868 Val Loss: 0.3882, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 56 epochs +INFO:train:Epoch 57/100 Train Loss: 0.2234, Train Acc: 0.9897 Val Loss: 0.3809, Val Acc: 0.9238 +INFO:train:Early stopping triggered after 57 epochs +INFO:train:Epoch 58/100 Train Loss: 0.2260, Train Acc: 0.9902 Val Loss: 0.3468, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 58 epochs +INFO:train:Epoch 59/100 Train Loss: 0.2170, Train Acc: 0.9936 Val Loss: 0.3328, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 59 epochs +INFO:train:Epoch 60/100 Train Loss: 0.2074, Train Acc: 0.9976 Val Loss: 0.3318, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 60 epochs +INFO:train:Epoch 61/100 Train Loss: 0.2059, Train Acc: 0.9976 Val Loss: 0.3296, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 61 epochs +INFO:train:Epoch 62/100 Train Loss: 0.2162, Train Acc: 0.9941 Val Loss: 0.3385, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 62 epochs +INFO:train:Epoch 63/100 Train Loss: 0.2070, Train Acc: 0.9976 Val Loss: 0.3329, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 63 epochs +INFO:train:Epoch 64/100 Train Loss: 0.2149, Train Acc: 0.9946 Val Loss: 0.3465, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 64 epochs +INFO:train:Epoch 65/100 Train Loss: 0.2091, Train Acc: 0.9976 Val Loss: 0.3490, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 65 epochs +INFO:train:Epoch 66/100 Train Loss: 0.2043, Train Acc: 0.9976 Val Loss: 0.3338, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 66 epochs +INFO:train:Epoch 67/100 Train Loss: 0.2010, Train Acc: 1.0000 Val Loss: 0.3325, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 67 epochs +INFO:train:Epoch 68/100 Train Loss: 0.2003, Train Acc: 1.0000 Val Loss: 0.3312, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 68 epochs +INFO:train:Epoch 69/100 Train Loss: 0.2002, Train Acc: 1.0000 Val Loss: 0.3283, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 69 epochs +INFO:train:Epoch 70/100 Train Loss: 0.2000, Train Acc: 1.0000 Val Loss: 0.3295, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 70 epochs +INFO:train:Epoch 71/100 Train Loss: 0.1999, Train Acc: 1.0000 Val Loss: 0.3259, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 71 epochs +INFO:train:Epoch 72/100 Train Loss: 0.1998, Train Acc: 1.0000 Val Loss: 0.3284, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 72 epochs +INFO:train:Epoch 73/100 Train Loss: 0.1998, Train Acc: 1.0000 Val Loss: 0.3268, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 73 epochs +INFO:train:Epoch 74/100 Train Loss: 0.1997, Train Acc: 1.0000 Val Loss: 0.3270, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 74 epochs +INFO:train:Epoch 75/100 Train Loss: 0.1996, Train Acc: 1.0000 Val Loss: 0.3238, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 75 epochs +INFO:train:Epoch 76/100 Train Loss: 0.1996, Train Acc: 1.0000 Val Loss: 0.3236, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 76 epochs +INFO:train:Epoch 77/100 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3272, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 77 epochs +INFO:train:Epoch 78/100 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3254, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 78 epochs +INFO:train:Epoch 79/100 Train Loss: 0.1994, Train Acc: 1.0000 Val Loss: 0.3210, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 79 epochs +INFO:train:Epoch 80/100 Train Loss: 0.1994, Train Acc: 1.0000 Val Loss: 0.3245, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 80 epochs +INFO:train:Epoch 81/100 Train Loss: 0.1994, Train Acc: 1.0000 Val Loss: 0.3269, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 81 epochs +INFO:train:Epoch 82/100 Train Loss: 0.1994, Train Acc: 1.0000 Val Loss: 0.3236, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 82 epochs +INFO:train:Epoch 83/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3236, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 83 epochs +INFO:train:Epoch 84/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3233, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 84 epochs +INFO:train:Epoch 85/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3231, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 85 epochs +INFO:train:Epoch 86/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3253, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 86 epochs +INFO:train:Epoch 87/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3241, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 87 epochs +INFO:train:Epoch 88/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3278, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 88 epochs +INFO:train:Epoch 89/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3228, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 89 epochs +INFO:train:Epoch 90/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3248, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 90 epochs +INFO:train:Epoch 91/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3240, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 91 epochs +INFO:train:Epoch 92/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3218, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 92 epochs +INFO:train:Epoch 93/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3240, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 93 epochs +INFO:train:Epoch 94/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3220, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 94 epochs +INFO:train:Epoch 95/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3203, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 95 epochs +INFO:train:Epoch 96/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3219, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 96 epochs +INFO:train:Epoch 97/100 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3230, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 97 epochs +INFO:train:Epoch 98/100 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3215, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 98 epochs +INFO:train:Epoch 99/100 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3225, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 99 epochs +INFO:train:Epoch 100/100 Train Loss: 0.1990, Train Acc: 1.0000 Val Loss: 0.3252, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 100 epochs INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 15.44s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 +INFO:__main__:Total time taken to train the model: 1393.31s +INFO:train:train got 64 / 64 correct, accuracy: 1.0 INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.19s -INFO:train:validation got 9 / 15 correct, accuracy: 0.6 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 diff --git a/code/transformer/logs/instance-recognition/tmp/run_5.log b/code/transformer/logs/instance-recognition/tmp/run_5.log index 3d859eae..f22a8a02 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_5.log +++ b/code/transformer/logs/instance-recognition/tmp/run_5.log @@ -53,57 +53,200 @@ INFO:__main__:model: Transformer( (fc): Linear(in_features=2046, out_features=2, bias=True) ) INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.7744, Train Acc: 0.5179 Val Loss: 4.5557, Val Acc: 0.5333 -INFO:train:Epoch 2/1000 Train Loss: 2.3772, Train Acc: 0.6250 Val Loss: 2.3453, Val Acc: 0.6000 -INFO:train:Epoch 3/1000 Train Loss: 1.9846, Train Acc: 0.6786 Val Loss: 3.0067, Val Acc: 0.4667 -INFO:train:Epoch 4/1000 Train Loss: 1.5314, Train Acc: 0.6964 Val Loss: 3.0645, Val Acc: 0.3333 -INFO:train:Epoch 5/1000 Train Loss: 0.8283, Train Acc: 0.8036 Val Loss: 2.3065, Val Acc: 0.5333 -INFO:train:Epoch 6/1000 Train Loss: 0.9328, Train Acc: 0.7857 Val Loss: 2.2477, Val Acc: 0.4000 -INFO:train:Epoch 7/1000 Train Loss: 0.5375, Train Acc: 0.9107 Val Loss: 1.9853, Val Acc: 0.4000 -INFO:train:Epoch 8/1000 Train Loss: 0.4526, Train Acc: 0.9464 Val Loss: 1.9247, Val Acc: 0.4667 -INFO:train:Epoch 9/1000 Train Loss: 0.5690, Train Acc: 0.8571 Val Loss: 1.4028, Val Acc: 0.6000 -INFO:train:Epoch 10/1000 Train Loss: 0.3654, Train Acc: 0.9464 Val Loss: 1.0580, Val Acc: 0.7333 -INFO:train:Epoch 11/1000 Train Loss: 0.3100, Train Acc: 0.9464 Val Loss: 1.0148, Val Acc: 0.6667 -INFO:train:Epoch 12/1000 Train Loss: 0.3142, Train Acc: 0.9464 Val Loss: 1.1647, Val Acc: 0.5333 -INFO:train:Epoch 13/1000 Train Loss: 0.2888, Train Acc: 0.9821 Val Loss: 1.3979, Val Acc: 0.5333 -INFO:train:Epoch 14/1000 Train Loss: 0.2536, Train Acc: 1.0000 Val Loss: 1.6276, Val Acc: 0.4667 -INFO:train:Epoch 15/1000 Train Loss: 0.2795, Train Acc: 0.9821 Val Loss: 1.8350, Val Acc: 0.4000 -INFO:train:Epoch 16/1000 Train Loss: 0.2917, Train Acc: 0.9821 Val Loss: 1.7953, Val Acc: 0.4000 -INFO:train:Epoch 17/1000 Train Loss: 0.2765, Train Acc: 0.9821 Val Loss: 1.7840, Val Acc: 0.5333 -INFO:train:Epoch 18/1000 Train Loss: 0.3187, Train Acc: 0.9464 Val Loss: 1.7246, Val Acc: 0.5333 -INFO:train:Epoch 19/1000 Train Loss: 0.2734, Train Acc: 0.9821 Val Loss: 1.6170, Val Acc: 0.5333 -INFO:train:Epoch 20/1000 Train Loss: 0.2645, Train Acc: 1.0000 Val Loss: 1.3449, Val Acc: 0.4000 -INFO:train:Epoch 21/1000 Train Loss: 0.2409, Train Acc: 1.0000 Val Loss: 1.3543, Val Acc: 0.6000 -INFO:train:Epoch 22/1000 Train Loss: 0.2532, Train Acc: 1.0000 Val Loss: 1.1756, Val Acc: 0.6000 -INFO:train:Epoch 23/1000 Train Loss: 0.2393, Train Acc: 1.0000 Val Loss: 1.1057, Val Acc: 0.6000 -INFO:train:Epoch 24/1000 Train Loss: 0.2334, Train Acc: 1.0000 Val Loss: 1.0520, Val Acc: 0.6000 -INFO:train:Epoch 25/1000 Train Loss: 0.2355, Train Acc: 1.0000 Val Loss: 1.0465, Val Acc: 0.6000 -INFO:train:Epoch 26/1000 Train Loss: 0.2291, Train Acc: 1.0000 Val Loss: 1.0925, Val Acc: 0.6000 -INFO:train:Epoch 27/1000 Train Loss: 0.2326, Train Acc: 1.0000 Val Loss: 1.0571, Val Acc: 0.6000 -INFO:train:Epoch 28/1000 Train Loss: 0.2330, Train Acc: 1.0000 Val Loss: 0.9065, Val Acc: 0.6667 -INFO:train:Epoch 29/1000 Train Loss: 0.2315, Train Acc: 1.0000 Val Loss: 0.8772, Val Acc: 0.6000 -INFO:train:Epoch 30/1000 Train Loss: 0.2301, Train Acc: 1.0000 Val Loss: 1.0408, Val Acc: 0.6000 -INFO:train:Epoch 31/1000 Train Loss: 0.2339, Train Acc: 1.0000 Val Loss: 0.9513, Val Acc: 0.6000 -INFO:train:Epoch 32/1000 Train Loss: 0.2335, Train Acc: 1.0000 Val Loss: 0.9218, Val Acc: 0.5333 -INFO:train:Epoch 33/1000 Train Loss: 0.2523, Train Acc: 0.9821 Val Loss: 0.9787, Val Acc: 0.6000 -INFO:train:Epoch 34/1000 Train Loss: 0.2188, Train Acc: 1.0000 Val Loss: 1.2632, Val Acc: 0.6000 -INFO:train:Epoch 35/1000 Train Loss: 0.2503, Train Acc: 1.0000 Val Loss: 1.1755, Val Acc: 0.6000 -INFO:train:Epoch 36/1000 Train Loss: 0.2298, Train Acc: 1.0000 Val Loss: 1.1200, Val Acc: 0.4000 -INFO:train:Epoch 37/1000 Train Loss: 0.2334, Train Acc: 1.0000 Val Loss: 1.1259, Val Acc: 0.4000 -INFO:train:Epoch 38/1000 Train Loss: 0.2329, Train Acc: 1.0000 Val Loss: 1.0751, Val Acc: 0.4000 -INFO:train:Epoch 39/1000 Train Loss: 0.2310, Train Acc: 1.0000 Val Loss: 1.1144, Val Acc: 0.6000 -INFO:train:Epoch 40/1000 Train Loss: 0.2308, Train Acc: 1.0000 Val Loss: 1.0718, Val Acc: 0.6000 -INFO:train:Epoch 41/1000 Train Loss: 0.2328, Train Acc: 1.0000 Val Loss: 1.0294, Val Acc: 0.5333 -INFO:train:Epoch 42/1000 Train Loss: 0.2207, Train Acc: 1.0000 Val Loss: 1.1037, Val Acc: 0.4667 -INFO:train:Epoch 43/1000 Train Loss: 0.2325, Train Acc: 1.0000 Val Loss: 1.1420, Val Acc: 0.6000 +INFO:train:Epoch 1/100 Train Loss: 0.8227, Train Acc: 0.8777 Val Loss: 0.4957, Val Acc: 0.9570 +INFO:train:Epoch 2/100 Train Loss: 0.3799, Train Acc: 0.9403 Val Loss: 0.3472, Val Acc: 0.9570 +INFO:train:Epoch 3/100 Train Loss: 0.4018, Train Acc: 0.9335 Val Loss: 0.3673, Val Acc: 0.9570 +INFO:train:Epoch 4/100 Train Loss: 0.3437, Train Acc: 0.9491 Val Loss: 0.3831, Val Acc: 0.9219 +INFO:train:Epoch 5/100 Train Loss: 0.3234, Train Acc: 0.9560 Val Loss: 0.3700, Val Acc: 0.9082 +INFO:train:Epoch 6/100 Train Loss: 0.3403, Train Acc: 0.9501 Val Loss: 0.3587, Val Acc: 0.9570 +INFO:train:Epoch 7/100 Train Loss: 0.3248, Train Acc: 0.9540 Val Loss: 0.3459, Val Acc: 0.9551 +INFO:train:Epoch 8/100 Train Loss: 0.3179, Train Acc: 0.9545 Val Loss: 0.3630, Val Acc: 0.9570 +INFO:train:Epoch 9/100 Train Loss: 0.3168, Train Acc: 0.9540 Val Loss: 0.3184, Val Acc: 0.9551 +INFO:train:Epoch 10/100 Train Loss: 0.3084, Train Acc: 0.9545 Val Loss: 0.3819, Val Acc: 0.9512 +INFO:train:Epoch 11/100 Train Loss: 0.3137, Train Acc: 0.9491 Val Loss: 0.4074, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 11 epochs +INFO:train:Epoch 12/100 Train Loss: 0.3144, Train Acc: 0.9545 Val Loss: 0.3750, Val Acc: 0.9141 +INFO:train:Early stopping triggered after 12 epochs +INFO:train:Epoch 13/100 Train Loss: 0.3183, Train Acc: 0.9530 Val Loss: 0.3350, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 13 epochs +INFO:train:Epoch 14/100 Train Loss: 0.2996, Train Acc: 0.9574 Val Loss: 0.3341, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 14 epochs +INFO:train:Epoch 15/100 Train Loss: 0.2894, Train Acc: 0.9614 Val Loss: 0.3289, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 15 epochs +INFO:train:Epoch 16/100 Train Loss: 0.2863, Train Acc: 0.9579 Val Loss: 0.3337, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 16 epochs +INFO:train:Epoch 17/100 Train Loss: 0.2897, Train Acc: 0.9614 Val Loss: 0.3678, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 17 epochs +INFO:train:Epoch 18/100 Train Loss: 0.2813, Train Acc: 0.9614 Val Loss: 0.3269, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 18 epochs +INFO:train:Epoch 19/100 Train Loss: 0.2726, Train Acc: 0.9623 Val Loss: 0.3526, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 19 epochs +INFO:train:Epoch 20/100 Train Loss: 0.2631, Train Acc: 0.9721 Val Loss: 0.3471, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 20 epochs +INFO:train:Epoch 21/100 Train Loss: 0.2705, Train Acc: 0.9687 Val Loss: 0.3149, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 21 epochs +INFO:train:Epoch 22/100 Train Loss: 0.2664, Train Acc: 0.9697 Val Loss: 0.3287, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 22 epochs +INFO:train:Epoch 23/100 Train Loss: 0.2800, Train Acc: 0.9614 Val Loss: 0.3490, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 23 epochs +INFO:train:Epoch 24/100 Train Loss: 0.2752, Train Acc: 0.9721 Val Loss: 0.3535, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 24 epochs +INFO:train:Epoch 25/100 Train Loss: 0.2698, Train Acc: 0.9682 Val Loss: 0.3377, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 25 epochs +INFO:train:Epoch 26/100 Train Loss: 0.2558, Train Acc: 0.9755 Val Loss: 0.3419, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 26 epochs +INFO:train:Epoch 27/100 Train Loss: 0.2416, Train Acc: 0.9814 Val Loss: 0.3496, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 27 epochs +INFO:train:Epoch 28/100 Train Loss: 0.2389, Train Acc: 0.9829 Val Loss: 0.3525, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 28 epochs +INFO:train:Epoch 29/100 Train Loss: 0.2578, Train Acc: 0.9750 Val Loss: 0.3297, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 29 epochs +INFO:train:Epoch 30/100 Train Loss: 0.2399, Train Acc: 0.9824 Val Loss: 0.3837, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 30 epochs +INFO:train:Epoch 31/100 Train Loss: 0.2538, Train Acc: 0.9765 Val Loss: 0.3231, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 31 epochs +INFO:train:Epoch 32/100 Train Loss: 0.2475, Train Acc: 0.9790 Val Loss: 0.3891, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 32 epochs +INFO:train:Epoch 33/100 Train Loss: 0.2484, Train Acc: 0.9804 Val Loss: 0.3456, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 33 epochs +INFO:train:Epoch 34/100 Train Loss: 0.2346, Train Acc: 0.9858 Val Loss: 0.3942, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 34 epochs +INFO:train:Epoch 35/100 Train Loss: 0.2342, Train Acc: 0.9868 Val Loss: 0.3151, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 35 epochs +INFO:train:Epoch 36/100 Train Loss: 0.2437, Train Acc: 0.9834 Val Loss: 0.3422, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 36 epochs +INFO:train:Epoch 37/100 Train Loss: 0.2279, Train Acc: 0.9902 Val Loss: 0.3428, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 37 epochs +INFO:train:Epoch 38/100 Train Loss: 0.2322, Train Acc: 0.9858 Val Loss: 0.3512, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 38 epochs +INFO:train:Epoch 39/100 Train Loss: 0.2346, Train Acc: 0.9834 Val Loss: 0.3339, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 39 epochs +INFO:train:Epoch 40/100 Train Loss: 0.2323, Train Acc: 0.9868 Val Loss: 0.3416, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 40 epochs +INFO:train:Epoch 41/100 Train Loss: 0.2316, Train Acc: 0.9848 Val Loss: 0.3295, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 41 epochs +INFO:train:Epoch 42/100 Train Loss: 0.2252, Train Acc: 0.9897 Val Loss: 0.3354, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 42 epochs +INFO:train:Epoch 43/100 Train Loss: 0.2405, Train Acc: 0.9799 Val Loss: 0.3265, Val Acc: 0.9453 INFO:train:Early stopping triggered after 43 epochs +INFO:train:Epoch 44/100 Train Loss: 0.2253, Train Acc: 0.9922 Val Loss: 0.3246, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 44 epochs +INFO:train:Epoch 45/100 Train Loss: 0.2239, Train Acc: 0.9917 Val Loss: 0.3722, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 45 epochs +INFO:train:Epoch 46/100 Train Loss: 0.2287, Train Acc: 0.9883 Val Loss: 0.3868, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 46 epochs +INFO:train:Epoch 47/100 Train Loss: 0.2164, Train Acc: 0.9941 Val Loss: 0.3551, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 47 epochs +INFO:train:Epoch 48/100 Train Loss: 0.2116, Train Acc: 0.9951 Val Loss: 0.3269, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 48 epochs +INFO:train:Epoch 49/100 Train Loss: 0.2100, Train Acc: 0.9966 Val Loss: 0.3476, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 49 epochs +INFO:train:Epoch 50/100 Train Loss: 0.2197, Train Acc: 0.9917 Val Loss: 0.3311, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 50 epochs +INFO:train:Epoch 51/100 Train Loss: 0.2167, Train Acc: 0.9946 Val Loss: 0.3544, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 51 epochs +INFO:train:Epoch 52/100 Train Loss: 0.2247, Train Acc: 0.9897 Val Loss: 0.3242, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 52 epochs +INFO:train:Epoch 53/100 Train Loss: 0.2156, Train Acc: 0.9927 Val Loss: 0.3382, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 53 epochs +INFO:train:Epoch 54/100 Train Loss: 0.2148, Train Acc: 0.9941 Val Loss: 0.3468, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 54 epochs +INFO:train:Epoch 55/100 Train Loss: 0.2061, Train Acc: 0.9971 Val Loss: 0.3485, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 55 epochs +INFO:train:Epoch 56/100 Train Loss: 0.2061, Train Acc: 0.9976 Val Loss: 0.3315, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 56 epochs +INFO:train:Epoch 57/100 Train Loss: 0.2035, Train Acc: 0.9995 Val Loss: 0.3243, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 57 epochs +INFO:train:Epoch 58/100 Train Loss: 0.2043, Train Acc: 0.9971 Val Loss: 0.3341, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 58 epochs +INFO:train:Epoch 59/100 Train Loss: 0.2162, Train Acc: 0.9907 Val Loss: 0.3503, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 59 epochs +INFO:train:Epoch 60/100 Train Loss: 0.2178, Train Acc: 0.9936 Val Loss: 0.3478, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 60 epochs +INFO:train:Epoch 61/100 Train Loss: 0.2105, Train Acc: 0.9961 Val Loss: 0.3305, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 61 epochs +INFO:train:Epoch 62/100 Train Loss: 0.2142, Train Acc: 0.9956 Val Loss: 0.3697, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 62 epochs +INFO:train:Epoch 63/100 Train Loss: 0.2049, Train Acc: 0.9990 Val Loss: 0.3555, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 63 epochs +INFO:train:Epoch 64/100 Train Loss: 0.2296, Train Acc: 0.9858 Val Loss: 0.3338, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 64 epochs +INFO:train:Epoch 65/100 Train Loss: 0.2150, Train Acc: 0.9951 Val Loss: 0.3762, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 65 epochs +INFO:train:Epoch 66/100 Train Loss: 0.2094, Train Acc: 0.9966 Val Loss: 0.3464, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 66 epochs +INFO:train:Epoch 67/100 Train Loss: 0.2098, Train Acc: 0.9951 Val Loss: 0.3633, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 67 epochs +INFO:train:Epoch 68/100 Train Loss: 0.2154, Train Acc: 0.9932 Val Loss: 0.3292, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 68 epochs +INFO:train:Epoch 69/100 Train Loss: 0.2181, Train Acc: 0.9932 Val Loss: 0.3436, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 69 epochs +INFO:train:Epoch 70/100 Train Loss: 0.2221, Train Acc: 0.9897 Val Loss: 0.3311, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 70 epochs +INFO:train:Epoch 71/100 Train Loss: 0.2165, Train Acc: 0.9936 Val Loss: 0.3495, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 71 epochs +INFO:train:Epoch 72/100 Train Loss: 0.2128, Train Acc: 0.9951 Val Loss: 0.3274, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 72 epochs +INFO:train:Epoch 73/100 Train Loss: 0.2076, Train Acc: 0.9956 Val Loss: 0.3465, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 73 epochs +INFO:train:Epoch 74/100 Train Loss: 0.2216, Train Acc: 0.9907 Val Loss: 0.3194, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 74 epochs +INFO:train:Epoch 75/100 Train Loss: 0.2128, Train Acc: 0.9946 Val Loss: 0.3487, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 75 epochs +INFO:train:Epoch 76/100 Train Loss: 0.2108, Train Acc: 0.9956 Val Loss: 0.3394, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 76 epochs +INFO:train:Epoch 77/100 Train Loss: 0.2105, Train Acc: 0.9956 Val Loss: 0.3276, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 77 epochs +INFO:train:Epoch 78/100 Train Loss: 0.2156, Train Acc: 0.9941 Val Loss: 0.3659, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 78 epochs +INFO:train:Epoch 79/100 Train Loss: 0.2163, Train Acc: 0.9917 Val Loss: 0.3302, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 79 epochs +INFO:train:Epoch 80/100 Train Loss: 0.2166, Train Acc: 0.9922 Val Loss: 0.3636, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 80 epochs +INFO:train:Epoch 81/100 Train Loss: 0.2271, Train Acc: 0.9897 Val Loss: 0.3285, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 81 epochs +INFO:train:Epoch 82/100 Train Loss: 0.2118, Train Acc: 0.9941 Val Loss: 0.3353, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 82 epochs +INFO:train:Epoch 83/100 Train Loss: 0.2065, Train Acc: 0.9971 Val Loss: 0.3535, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 83 epochs +INFO:train:Epoch 84/100 Train Loss: 0.2032, Train Acc: 0.9980 Val Loss: 0.3529, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 84 epochs +INFO:train:Epoch 85/100 Train Loss: 0.2106, Train Acc: 0.9946 Val Loss: 0.3405, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 85 epochs +INFO:train:Epoch 86/100 Train Loss: 0.2181, Train Acc: 0.9922 Val Loss: 0.3959, Val Acc: 0.9258 +INFO:train:Early stopping triggered after 86 epochs +INFO:train:Epoch 87/100 Train Loss: 0.2105, Train Acc: 0.9946 Val Loss: 0.3558, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 87 epochs +INFO:train:Epoch 88/100 Train Loss: 0.2310, Train Acc: 0.9843 Val Loss: 0.3325, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 88 epochs +INFO:train:Epoch 89/100 Train Loss: 0.2117, Train Acc: 0.9966 Val Loss: 0.3357, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 89 epochs +INFO:train:Epoch 90/100 Train Loss: 0.2057, Train Acc: 0.9966 Val Loss: 0.3616, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 90 epochs +INFO:train:Epoch 91/100 Train Loss: 0.2040, Train Acc: 0.9985 Val Loss: 0.3626, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 91 epochs +INFO:train:Epoch 92/100 Train Loss: 0.2027, Train Acc: 0.9985 Val Loss: 0.3482, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 92 epochs +INFO:train:Epoch 93/100 Train Loss: 0.2058, Train Acc: 0.9976 Val Loss: 0.3346, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 93 epochs +INFO:train:Epoch 94/100 Train Loss: 0.2090, Train Acc: 0.9961 Val Loss: 0.3348, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 94 epochs +INFO:train:Epoch 95/100 Train Loss: 0.2039, Train Acc: 0.9990 Val Loss: 0.3460, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 95 epochs +INFO:train:Epoch 96/100 Train Loss: 0.2013, Train Acc: 0.9995 Val Loss: 0.3305, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 96 epochs +INFO:train:Epoch 97/100 Train Loss: 0.2011, Train Acc: 0.9995 Val Loss: 0.3341, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 97 epochs +INFO:train:Epoch 98/100 Train Loss: 0.1997, Train Acc: 1.0000 Val Loss: 0.3422, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 98 epochs +INFO:train:Epoch 99/100 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3356, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 99 epochs +INFO:train:Epoch 100/100 Train Loss: 0.1994, Train Acc: 1.0000 Val Loss: 0.3406, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 100 epochs INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 18.57s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 +INFO:__main__:Total time taken to train the model: 1432.75s +INFO:train:train got 64 / 64 correct, accuracy: 1.0 INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 8 / 15 correct, accuracy: 0.5333333333333333 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 diff --git a/code/transformer/logs/instance-recognition/tmp/run_6.log b/code/transformer/logs/instance-recognition/tmp/run_6.log index 757c4957..628ac5bf 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_6.log +++ b/code/transformer/logs/instance-recognition/tmp/run_6.log @@ -53,65 +53,244 @@ INFO:__main__:model: Transformer( (fc): Linear(in_features=2046, out_features=2, bias=True) ) INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.8211, Train Acc: 0.5000 Val Loss: 4.2550, Val Acc: 0.6667 -INFO:train:Epoch 2/1000 Train Loss: 3.1817, Train Acc: 0.6786 Val Loss: 5.2121, Val Acc: 0.4667 -INFO:train:Epoch 3/1000 Train Loss: 2.8048, Train Acc: 0.6786 Val Loss: 1.1562, Val Acc: 0.6000 -INFO:train:Epoch 4/1000 Train Loss: 0.4307, Train Acc: 0.8929 Val Loss: 1.6554, Val Acc: 0.6000 -INFO:train:Epoch 5/1000 Train Loss: 0.8677, Train Acc: 0.8036 Val Loss: 0.8647, Val Acc: 0.5333 -INFO:train:Epoch 6/1000 Train Loss: 0.5360, Train Acc: 0.8214 Val Loss: 1.4453, Val Acc: 0.6667 -INFO:train:Epoch 7/1000 Train Loss: 0.5065, Train Acc: 0.8571 Val Loss: 1.6144, Val Acc: 0.6000 -INFO:train:Epoch 8/1000 Train Loss: 0.4517, Train Acc: 0.9286 Val Loss: 1.2888, Val Acc: 0.6000 -INFO:train:Epoch 9/1000 Train Loss: 0.2862, Train Acc: 1.0000 Val Loss: 1.1864, Val Acc: 0.5333 -INFO:train:Epoch 10/1000 Train Loss: 0.3266, Train Acc: 0.9643 Val Loss: 1.4877, Val Acc: 0.6667 -INFO:train:Epoch 11/1000 Train Loss: 0.3251, Train Acc: 0.9821 Val Loss: 1.7098, Val Acc: 0.6000 -INFO:train:Epoch 12/1000 Train Loss: 0.3553, Train Acc: 0.9643 Val Loss: 1.4579, Val Acc: 0.6667 -INFO:train:Epoch 13/1000 Train Loss: 0.2872, Train Acc: 1.0000 Val Loss: 1.0602, Val Acc: 0.7333 -INFO:train:Epoch 14/1000 Train Loss: 0.2677, Train Acc: 1.0000 Val Loss: 0.8454, Val Acc: 0.7333 -INFO:train:Epoch 15/1000 Train Loss: 0.2648, Train Acc: 0.9821 Val Loss: 0.7085, Val Acc: 0.6000 -INFO:train:Epoch 16/1000 Train Loss: 0.2237, Train Acc: 1.0000 Val Loss: 0.7410, Val Acc: 0.6667 -INFO:train:Epoch 17/1000 Train Loss: 0.2542, Train Acc: 0.9821 Val Loss: 0.6959, Val Acc: 0.7333 -INFO:train:Epoch 18/1000 Train Loss: 0.2460, Train Acc: 1.0000 Val Loss: 0.6497, Val Acc: 0.6667 -INFO:train:Epoch 19/1000 Train Loss: 0.2353, Train Acc: 1.0000 Val Loss: 0.6863, Val Acc: 0.6667 -INFO:train:Epoch 20/1000 Train Loss: 0.2388, Train Acc: 0.9821 Val Loss: 0.7087, Val Acc: 0.7333 -INFO:train:Epoch 21/1000 Train Loss: 0.2314, Train Acc: 1.0000 Val Loss: 0.7658, Val Acc: 0.6667 -INFO:train:Epoch 22/1000 Train Loss: 0.2344, Train Acc: 1.0000 Val Loss: 0.8004, Val Acc: 0.6667 -INFO:train:Epoch 23/1000 Train Loss: 0.2364, Train Acc: 1.0000 Val Loss: 0.7671, Val Acc: 0.7333 -INFO:train:Epoch 24/1000 Train Loss: 0.2390, Train Acc: 0.9821 Val Loss: 0.6675, Val Acc: 0.6000 -INFO:train:Epoch 25/1000 Train Loss: 0.2259, Train Acc: 1.0000 Val Loss: 0.6122, Val Acc: 0.6000 -INFO:train:Epoch 26/1000 Train Loss: 0.2258, Train Acc: 1.0000 Val Loss: 0.6044, Val Acc: 0.6667 -INFO:train:Epoch 27/1000 Train Loss: 0.2303, Train Acc: 1.0000 Val Loss: 0.6086, Val Acc: 0.6667 -INFO:train:Epoch 28/1000 Train Loss: 0.2213, Train Acc: 1.0000 Val Loss: 0.6257, Val Acc: 0.6667 -INFO:train:Epoch 29/1000 Train Loss: 0.2387, Train Acc: 0.9821 Val Loss: 0.6042, Val Acc: 0.6667 -INFO:train:Epoch 30/1000 Train Loss: 0.2190, Train Acc: 1.0000 Val Loss: 0.6161, Val Acc: 0.6000 -INFO:train:Epoch 31/1000 Train Loss: 0.2188, Train Acc: 1.0000 Val Loss: 0.6183, Val Acc: 0.6667 -INFO:train:Epoch 32/1000 Train Loss: 0.2314, Train Acc: 1.0000 Val Loss: 0.6307, Val Acc: 0.7333 -INFO:train:Epoch 33/1000 Train Loss: 0.2283, Train Acc: 1.0000 Val Loss: 0.6851, Val Acc: 0.8000 -INFO:train:Epoch 34/1000 Train Loss: 0.2267, Train Acc: 1.0000 Val Loss: 0.7208, Val Acc: 0.7333 -INFO:train:Epoch 35/1000 Train Loss: 0.2199, Train Acc: 1.0000 Val Loss: 0.7631, Val Acc: 0.6000 -INFO:train:Epoch 36/1000 Train Loss: 0.2189, Train Acc: 1.0000 Val Loss: 0.7416, Val Acc: 0.5333 -INFO:train:Epoch 37/1000 Train Loss: 0.2214, Train Acc: 1.0000 Val Loss: 0.6879, Val Acc: 0.6667 -INFO:train:Epoch 38/1000 Train Loss: 0.2340, Train Acc: 1.0000 Val Loss: 0.7034, Val Acc: 0.6000 -INFO:train:Epoch 39/1000 Train Loss: 0.2087, Train Acc: 1.0000 Val Loss: 0.7586, Val Acc: 0.6667 -INFO:train:Epoch 40/1000 Train Loss: 0.2245, Train Acc: 1.0000 Val Loss: 0.7799, Val Acc: 0.6000 -INFO:train:Epoch 41/1000 Train Loss: 0.2351, Train Acc: 0.9821 Val Loss: 0.7621, Val Acc: 0.6000 -INFO:train:Epoch 42/1000 Train Loss: 0.2172, Train Acc: 1.0000 Val Loss: 0.6958, Val Acc: 0.6667 -INFO:train:Epoch 43/1000 Train Loss: 0.2148, Train Acc: 1.0000 Val Loss: 0.6766, Val Acc: 0.6667 -INFO:train:Epoch 44/1000 Train Loss: 0.2193, Train Acc: 1.0000 Val Loss: 0.6796, Val Acc: 0.6667 -INFO:train:Epoch 45/1000 Train Loss: 0.2252, Train Acc: 1.0000 Val Loss: 0.7052, Val Acc: 0.5333 -INFO:train:Epoch 46/1000 Train Loss: 0.2106, Train Acc: 1.0000 Val Loss: 0.7455, Val Acc: 0.6000 -INFO:train:Epoch 47/1000 Train Loss: 0.2108, Train Acc: 1.0000 Val Loss: 0.7390, Val Acc: 0.6667 -INFO:train:Epoch 48/1000 Train Loss: 0.2129, Train Acc: 1.0000 Val Loss: 0.7047, Val Acc: 0.6000 -INFO:train:Epoch 49/1000 Train Loss: 0.2148, Train Acc: 1.0000 Val Loss: 0.6501, Val Acc: 0.5333 -INFO:train:Epoch 50/1000 Train Loss: 0.2166, Train Acc: 1.0000 Val Loss: 0.6464, Val Acc: 0.6000 -INFO:train:Epoch 51/1000 Train Loss: 0.2131, Train Acc: 1.0000 Val Loss: 0.6283, Val Acc: 0.6667 +INFO:train:Epoch 1/100 Train Loss: 0.5695, Train Acc: 0.9085 Val Loss: 0.3616, Val Acc: 0.9590 +INFO:train:Epoch 2/100 Train Loss: 0.3909, Train Acc: 0.9359 Val Loss: 0.3367, Val Acc: 0.9551 +INFO:train:Epoch 3/100 Train Loss: 0.3364, Train Acc: 0.9525 Val Loss: 0.4032, Val Acc: 0.9570 +INFO:train:Epoch 4/100 Train Loss: 0.3437, Train Acc: 0.9462 Val Loss: 0.3473, Val Acc: 0.9531 +INFO:train:Epoch 5/100 Train Loss: 0.3306, Train Acc: 0.9506 Val Loss: 0.3679, Val Acc: 0.9473 +INFO:train:Epoch 6/100 Train Loss: 0.3434, Train Acc: 0.9477 Val Loss: 0.3638, Val Acc: 0.9570 +INFO:train:Epoch 7/100 Train Loss: 0.3271, Train Acc: 0.9506 Val Loss: 0.3645, Val Acc: 0.9570 +INFO:train:Epoch 8/100 Train Loss: 0.3302, Train Acc: 0.9516 Val Loss: 0.3843, Val Acc: 0.9297 +INFO:train:Epoch 9/100 Train Loss: 0.3301, Train Acc: 0.9477 Val Loss: 0.3365, Val Acc: 0.9570 +INFO:train:Epoch 10/100 Train Loss: 0.3179, Train Acc: 0.9521 Val Loss: 0.3635, Val Acc: 0.9512 +INFO:train:Epoch 11/100 Train Loss: 0.3189, Train Acc: 0.9521 Val Loss: 0.3446, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 11 epochs +INFO:train:Epoch 12/100 Train Loss: 0.3166, Train Acc: 0.9516 Val Loss: 0.4019, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 12 epochs +INFO:train:Epoch 13/100 Train Loss: 0.3095, Train Acc: 0.9535 Val Loss: 0.3449, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 13 epochs +INFO:train:Epoch 14/100 Train Loss: 0.3121, Train Acc: 0.9545 Val Loss: 0.3272, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 14 epochs +INFO:train:Epoch 15/100 Train Loss: 0.3131, Train Acc: 0.9555 Val Loss: 0.3285, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 15 epochs +INFO:train:Epoch 16/100 Train Loss: 0.3027, Train Acc: 0.9521 Val Loss: 0.3562, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 16 epochs +INFO:train:Epoch 17/100 Train Loss: 0.2917, Train Acc: 0.9628 Val Loss: 0.3585, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 17 epochs +INFO:train:Epoch 18/100 Train Loss: 0.2839, Train Acc: 0.9653 Val Loss: 0.3193, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 18 epochs +INFO:train:Epoch 19/100 Train Loss: 0.2762, Train Acc: 0.9667 Val Loss: 0.3476, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 19 epochs +INFO:train:Epoch 20/100 Train Loss: 0.2831, Train Acc: 0.9653 Val Loss: 0.3987, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 20 epochs +INFO:train:Epoch 21/100 Train Loss: 0.2688, Train Acc: 0.9721 Val Loss: 0.3755, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 21 epochs +INFO:train:Epoch 22/100 Train Loss: 0.2786, Train Acc: 0.9697 Val Loss: 0.3556, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 22 epochs +INFO:train:Epoch 23/100 Train Loss: 0.2711, Train Acc: 0.9687 Val Loss: 0.3617, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 23 epochs +INFO:train:Epoch 24/100 Train Loss: 0.2800, Train Acc: 0.9643 Val Loss: 0.3426, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 24 epochs +INFO:train:Epoch 25/100 Train Loss: 0.2756, Train Acc: 0.9697 Val Loss: 0.3544, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 25 epochs +INFO:train:Epoch 26/100 Train Loss: 0.2542, Train Acc: 0.9755 Val Loss: 0.3539, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 26 epochs +INFO:train:Epoch 27/100 Train Loss: 0.2664, Train Acc: 0.9662 Val Loss: 0.3628, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 27 epochs +INFO:train:Epoch 28/100 Train Loss: 0.2581, Train Acc: 0.9780 Val Loss: 0.3289, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 28 epochs +INFO:train:Epoch 29/100 Train Loss: 0.2553, Train Acc: 0.9770 Val Loss: 0.3625, Val Acc: 0.9258 +INFO:train:Early stopping triggered after 29 epochs +INFO:train:Epoch 30/100 Train Loss: 0.2415, Train Acc: 0.9839 Val Loss: 0.3582, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 30 epochs +INFO:train:Epoch 31/100 Train Loss: 0.2410, Train Acc: 0.9829 Val Loss: 0.3565, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 31 epochs +INFO:train:Epoch 32/100 Train Loss: 0.2419, Train Acc: 0.9829 Val Loss: 0.4033, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 32 epochs +INFO:train:Epoch 33/100 Train Loss: 0.2372, Train Acc: 0.9843 Val Loss: 0.3386, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 33 epochs +INFO:train:Epoch 34/100 Train Loss: 0.2350, Train Acc: 0.9892 Val Loss: 0.3682, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 34 epochs +INFO:train:Epoch 35/100 Train Loss: 0.2297, Train Acc: 0.9878 Val Loss: 0.3430, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 35 epochs +INFO:train:Epoch 36/100 Train Loss: 0.2370, Train Acc: 0.9853 Val Loss: 0.3494, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 36 epochs +INFO:train:Epoch 37/100 Train Loss: 0.2303, Train Acc: 0.9858 Val Loss: 0.4188, Val Acc: 0.9258 +INFO:train:Early stopping triggered after 37 epochs +INFO:train:Epoch 38/100 Train Loss: 0.2304, Train Acc: 0.9863 Val Loss: 0.3496, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 38 epochs +INFO:train:Epoch 39/100 Train Loss: 0.2408, Train Acc: 0.9824 Val Loss: 0.3578, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 39 epochs +INFO:train:Epoch 40/100 Train Loss: 0.2305, Train Acc: 0.9878 Val Loss: 0.3533, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 40 epochs +INFO:train:Epoch 41/100 Train Loss: 0.2320, Train Acc: 0.9843 Val Loss: 0.3543, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 41 epochs +INFO:train:Epoch 42/100 Train Loss: 0.2316, Train Acc: 0.9853 Val Loss: 0.3171, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 42 epochs +INFO:train:Epoch 43/100 Train Loss: 0.2220, Train Acc: 0.9902 Val Loss: 0.3465, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 43 epochs +INFO:train:Epoch 44/100 Train Loss: 0.2187, Train Acc: 0.9946 Val Loss: 0.3603, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 44 epochs +INFO:train:Epoch 45/100 Train Loss: 0.2111, Train Acc: 0.9966 Val Loss: 0.3397, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 45 epochs +INFO:train:Epoch 46/100 Train Loss: 0.2230, Train Acc: 0.9897 Val Loss: 0.3463, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 46 epochs +INFO:train:Epoch 47/100 Train Loss: 0.2298, Train Acc: 0.9868 Val Loss: 0.3194, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 47 epochs +INFO:train:Epoch 48/100 Train Loss: 0.2243, Train Acc: 0.9887 Val Loss: 0.3723, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 48 epochs +INFO:train:Epoch 49/100 Train Loss: 0.2270, Train Acc: 0.9887 Val Loss: 0.3972, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 49 epochs +INFO:train:Epoch 50/100 Train Loss: 0.2219, Train Acc: 0.9897 Val Loss: 0.4105, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 50 epochs +INFO:train:Epoch 51/100 Train Loss: 0.2240, Train Acc: 0.9887 Val Loss: 0.3511, Val Acc: 0.9414 INFO:train:Early stopping triggered after 51 epochs +INFO:train:Epoch 52/100 Train Loss: 0.2204, Train Acc: 0.9907 Val Loss: 0.3690, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 52 epochs +INFO:train:Epoch 53/100 Train Loss: 0.2201, Train Acc: 0.9936 Val Loss: 0.3798, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 53 epochs +INFO:train:Epoch 54/100 Train Loss: 0.2226, Train Acc: 0.9912 Val Loss: 0.3526, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 54 epochs +INFO:train:Epoch 55/100 Train Loss: 0.2312, Train Acc: 0.9883 Val Loss: 0.3707, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 55 epochs +INFO:train:Epoch 56/100 Train Loss: 0.2197, Train Acc: 0.9907 Val Loss: 0.3642, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 56 epochs +INFO:train:Epoch 57/100 Train Loss: 0.2267, Train Acc: 0.9878 Val Loss: 0.3506, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 57 epochs +INFO:train:Epoch 58/100 Train Loss: 0.2294, Train Acc: 0.9873 Val Loss: 0.3326, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 58 epochs +INFO:train:Epoch 59/100 Train Loss: 0.2086, Train Acc: 0.9966 Val Loss: 0.3438, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 59 epochs +INFO:train:Epoch 60/100 Train Loss: 0.2049, Train Acc: 0.9990 Val Loss: 0.3569, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 60 epochs +INFO:train:Epoch 61/100 Train Loss: 0.2083, Train Acc: 0.9971 Val Loss: 0.3584, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 61 epochs +INFO:train:Epoch 62/100 Train Loss: 0.2120, Train Acc: 0.9936 Val Loss: 0.3516, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 62 epochs +INFO:train:Epoch 63/100 Train Loss: 0.2089, Train Acc: 0.9971 Val Loss: 0.3403, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 63 epochs +INFO:train:Epoch 64/100 Train Loss: 0.2077, Train Acc: 0.9961 Val Loss: 0.3404, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 64 epochs +INFO:train:Epoch 65/100 Train Loss: 0.2063, Train Acc: 0.9980 Val Loss: 0.3584, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 65 epochs +INFO:train:Epoch 66/100 Train Loss: 0.2091, Train Acc: 0.9956 Val Loss: 0.3244, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 66 epochs +INFO:train:Epoch 67/100 Train Loss: 0.2106, Train Acc: 0.9956 Val Loss: 0.3357, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 67 epochs +INFO:train:Epoch 68/100 Train Loss: 0.2162, Train Acc: 0.9936 Val Loss: 0.3640, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 68 epochs +INFO:train:Epoch 69/100 Train Loss: 0.2105, Train Acc: 0.9961 Val Loss: 0.3486, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 69 epochs +INFO:train:Epoch 70/100 Train Loss: 0.2255, Train Acc: 0.9887 Val Loss: 0.3630, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 70 epochs +INFO:train:Epoch 71/100 Train Loss: 0.2186, Train Acc: 0.9927 Val Loss: 0.3594, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 71 epochs +INFO:train:Epoch 72/100 Train Loss: 0.2167, Train Acc: 0.9927 Val Loss: 0.3838, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 72 epochs +INFO:train:Epoch 73/100 Train Loss: 0.2135, Train Acc: 0.9932 Val Loss: 0.3337, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 73 epochs +INFO:train:Epoch 74/100 Train Loss: 0.2133, Train Acc: 0.9932 Val Loss: 0.3722, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 74 epochs +INFO:train:Epoch 75/100 Train Loss: 0.2107, Train Acc: 0.9966 Val Loss: 0.3630, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 75 epochs +INFO:train:Epoch 76/100 Train Loss: 0.2045, Train Acc: 0.9985 Val Loss: 0.4097, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 76 epochs +INFO:train:Epoch 77/100 Train Loss: 0.2074, Train Acc: 0.9976 Val Loss: 0.3571, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 77 epochs +INFO:train:Epoch 78/100 Train Loss: 0.2065, Train Acc: 0.9976 Val Loss: 0.3971, Val Acc: 0.9277 +INFO:train:Early stopping triggered after 78 epochs +INFO:train:Epoch 79/100 Train Loss: 0.2272, Train Acc: 0.9848 Val Loss: 0.3496, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 79 epochs +INFO:train:Epoch 80/100 Train Loss: 0.2118, Train Acc: 0.9961 Val Loss: 0.3460, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 80 epochs +INFO:train:Epoch 81/100 Train Loss: 0.2074, Train Acc: 0.9980 Val Loss: 0.3712, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 81 epochs +INFO:train:Epoch 82/100 Train Loss: 0.2046, Train Acc: 0.9985 Val Loss: 0.3395, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 82 epochs +INFO:train:Epoch 83/100 Train Loss: 0.2071, Train Acc: 0.9961 Val Loss: 0.3744, Val Acc: 0.9297 +INFO:train:Early stopping triggered after 83 epochs +INFO:train:Epoch 84/100 Train Loss: 0.2094, Train Acc: 0.9961 Val Loss: 0.3352, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 84 epochs +INFO:train:Epoch 85/100 Train Loss: 0.2023, Train Acc: 0.9990 Val Loss: 0.3448, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 85 epochs +INFO:train:Epoch 86/100 Train Loss: 0.2001, Train Acc: 1.0000 Val Loss: 0.3396, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 86 epochs +INFO:train:Epoch 87/100 Train Loss: 0.1998, Train Acc: 1.0000 Val Loss: 0.3393, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 87 epochs +INFO:train:Epoch 88/100 Train Loss: 0.1996, Train Acc: 1.0000 Val Loss: 0.3368, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 88 epochs +INFO:train:Epoch 89/100 Train Loss: 0.1996, Train Acc: 1.0000 Val Loss: 0.3380, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 89 epochs +INFO:train:Epoch 90/100 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3407, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 90 epochs +INFO:train:Epoch 91/100 Train Loss: 0.1994, Train Acc: 1.0000 Val Loss: 0.3382, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 91 epochs +INFO:train:Epoch 92/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3407, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 92 epochs +INFO:train:Epoch 93/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3385, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 93 epochs +INFO:train:Epoch 94/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3395, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 94 epochs +INFO:train:Epoch 95/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3364, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 95 epochs +INFO:train:Epoch 96/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3382, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 96 epochs +INFO:train:Epoch 97/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3329, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 97 epochs +INFO:train:Epoch 98/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3343, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 98 epochs +INFO:train:Epoch 99/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3389, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 99 epochs +INFO:train:Epoch 100/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3350, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 100 epochs INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 21.56s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 10 / 15 correct, accuracy: 0.6666666666666666 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png +INFO:__main__:Total time taken to train the model: 1449.14s +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 diff --git a/code/transformer/logs/instance-recognition/tmp/run_7.log b/code/transformer/logs/instance-recognition/tmp/run_7.log index de372a69..76c11fec 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_7.log +++ b/code/transformer/logs/instance-recognition/tmp/run_7.log @@ -53,66 +53,228 @@ INFO:__main__:model: Transformer( (fc): Linear(in_features=2046, out_features=2, bias=True) ) INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.7700, Train Acc: 0.5000 Val Loss: 7.4965, Val Acc: 0.6667 -INFO:train:Epoch 2/1000 Train Loss: 3.3466, Train Acc: 0.7143 Val Loss: 4.5623, Val Acc: 0.2667 -INFO:train:Epoch 3/1000 Train Loss: 1.0713, Train Acc: 0.7500 Val Loss: 3.3766, Val Acc: 0.4000 -INFO:train:Epoch 4/1000 Train Loss: 2.4375, Train Acc: 0.5357 Val Loss: 3.6662, Val Acc: 0.4667 -INFO:train:Epoch 5/1000 Train Loss: 0.8125, Train Acc: 0.9107 Val Loss: 4.3586, Val Acc: 0.5333 -INFO:train:Epoch 6/1000 Train Loss: 1.0756, Train Acc: 0.8214 Val Loss: 3.3441, Val Acc: 0.5333 -INFO:train:Epoch 7/1000 Train Loss: 0.6618, Train Acc: 0.8929 Val Loss: 2.2820, Val Acc: 0.5333 -INFO:train:Epoch 8/1000 Train Loss: 0.3688, Train Acc: 1.0000 Val Loss: 1.8231, Val Acc: 0.3333 -INFO:train:Epoch 9/1000 Train Loss: 0.5800, Train Acc: 0.7857 Val Loss: 1.4265, Val Acc: 0.6000 -INFO:train:Epoch 10/1000 Train Loss: 0.3543, Train Acc: 0.9643 Val Loss: 1.6058, Val Acc: 0.6667 -INFO:train:Epoch 11/1000 Train Loss: 0.3068, Train Acc: 1.0000 Val Loss: 2.1568, Val Acc: 0.4000 -INFO:train:Epoch 12/1000 Train Loss: 0.3603, Train Acc: 0.9821 Val Loss: 2.4901, Val Acc: 0.4000 -INFO:train:Epoch 13/1000 Train Loss: 0.3672, Train Acc: 0.9643 Val Loss: 2.2290, Val Acc: 0.4000 -INFO:train:Epoch 14/1000 Train Loss: 0.3025, Train Acc: 1.0000 Val Loss: 1.8840, Val Acc: 0.4667 -INFO:train:Epoch 15/1000 Train Loss: 0.2853, Train Acc: 1.0000 Val Loss: 1.5669, Val Acc: 0.5333 -INFO:train:Epoch 16/1000 Train Loss: 0.2988, Train Acc: 0.9821 Val Loss: 1.4812, Val Acc: 0.4667 -INFO:train:Epoch 17/1000 Train Loss: 0.2986, Train Acc: 0.9821 Val Loss: 1.3759, Val Acc: 0.5333 -INFO:train:Epoch 18/1000 Train Loss: 0.2679, Train Acc: 1.0000 Val Loss: 1.3552, Val Acc: 0.4000 -INFO:train:Epoch 19/1000 Train Loss: 0.2685, Train Acc: 0.9821 Val Loss: 1.3254, Val Acc: 0.4667 -INFO:train:Epoch 20/1000 Train Loss: 0.2444, Train Acc: 1.0000 Val Loss: 1.4269, Val Acc: 0.5333 -INFO:train:Epoch 21/1000 Train Loss: 0.2412, Train Acc: 1.0000 Val Loss: 1.3246, Val Acc: 0.5333 -INFO:train:Epoch 22/1000 Train Loss: 0.2489, Train Acc: 1.0000 Val Loss: 0.9732, Val Acc: 0.5333 -INFO:train:Epoch 23/1000 Train Loss: 0.2780, Train Acc: 0.9643 Val Loss: 1.0150, Val Acc: 0.5333 -INFO:train:Epoch 24/1000 Train Loss: 0.2231, Train Acc: 1.0000 Val Loss: 1.1338, Val Acc: 0.6000 -INFO:train:Epoch 25/1000 Train Loss: 0.2383, Train Acc: 1.0000 Val Loss: 1.0870, Val Acc: 0.5333 -INFO:train:Epoch 26/1000 Train Loss: 0.2492, Train Acc: 1.0000 Val Loss: 1.0786, Val Acc: 0.4667 -INFO:train:Epoch 27/1000 Train Loss: 0.2382, Train Acc: 1.0000 Val Loss: 1.0707, Val Acc: 0.4667 -INFO:train:Epoch 28/1000 Train Loss: 0.2364, Train Acc: 1.0000 Val Loss: 1.0469, Val Acc: 0.5333 -INFO:train:Epoch 29/1000 Train Loss: 0.2284, Train Acc: 1.0000 Val Loss: 1.0048, Val Acc: 0.4667 -INFO:train:Epoch 30/1000 Train Loss: 0.2224, Train Acc: 1.0000 Val Loss: 0.9214, Val Acc: 0.4667 -INFO:train:Epoch 31/1000 Train Loss: 0.2156, Train Acc: 1.0000 Val Loss: 0.7865, Val Acc: 0.5333 -INFO:train:Epoch 32/1000 Train Loss: 0.2364, Train Acc: 0.9821 Val Loss: 0.8899, Val Acc: 0.6000 -INFO:train:Epoch 33/1000 Train Loss: 0.2350, Train Acc: 1.0000 Val Loss: 0.9178, Val Acc: 0.5333 -INFO:train:Epoch 34/1000 Train Loss: 0.2221, Train Acc: 1.0000 Val Loss: 0.9192, Val Acc: 0.5333 -INFO:train:Epoch 35/1000 Train Loss: 0.2222, Train Acc: 1.0000 Val Loss: 1.0010, Val Acc: 0.5333 -INFO:train:Epoch 36/1000 Train Loss: 0.2519, Train Acc: 0.9821 Val Loss: 1.2912, Val Acc: 0.5333 -INFO:train:Epoch 37/1000 Train Loss: 0.2485, Train Acc: 1.0000 Val Loss: 1.4271, Val Acc: 0.5333 -INFO:train:Epoch 38/1000 Train Loss: 0.2543, Train Acc: 1.0000 Val Loss: 1.1218, Val Acc: 0.4667 -INFO:train:Epoch 39/1000 Train Loss: 0.2252, Train Acc: 1.0000 Val Loss: 1.0485, Val Acc: 0.5333 -INFO:train:Epoch 40/1000 Train Loss: 0.2457, Train Acc: 1.0000 Val Loss: 1.1996, Val Acc: 0.4667 -INFO:train:Epoch 41/1000 Train Loss: 0.2305, Train Acc: 1.0000 Val Loss: 1.4146, Val Acc: 0.5333 -INFO:train:Epoch 42/1000 Train Loss: 0.2696, Train Acc: 0.9821 Val Loss: 1.1552, Val Acc: 0.5333 -INFO:train:Epoch 43/1000 Train Loss: 0.2225, Train Acc: 1.0000 Val Loss: 0.9080, Val Acc: 0.6000 -INFO:train:Epoch 44/1000 Train Loss: 0.2327, Train Acc: 1.0000 Val Loss: 1.0134, Val Acc: 0.5333 -INFO:train:Epoch 45/1000 Train Loss: 0.2182, Train Acc: 1.0000 Val Loss: 1.1344, Val Acc: 0.6000 -INFO:train:Epoch 46/1000 Train Loss: 0.2344, Train Acc: 1.0000 Val Loss: 1.0975, Val Acc: 0.5333 -INFO:train:Epoch 47/1000 Train Loss: 0.2138, Train Acc: 1.0000 Val Loss: 1.0202, Val Acc: 0.4667 -INFO:train:Epoch 48/1000 Train Loss: 0.2282, Train Acc: 1.0000 Val Loss: 0.9591, Val Acc: 0.5333 -INFO:train:Epoch 49/1000 Train Loss: 0.2158, Train Acc: 1.0000 Val Loss: 0.8886, Val Acc: 0.5333 -INFO:train:Epoch 50/1000 Train Loss: 0.2127, Train Acc: 1.0000 Val Loss: 0.9197, Val Acc: 0.5333 -INFO:train:Epoch 51/1000 Train Loss: 0.2114, Train Acc: 1.0000 Val Loss: 0.9670, Val Acc: 0.5333 -INFO:train:Epoch 52/1000 Train Loss: 0.2191, Train Acc: 1.0000 Val Loss: 0.9731, Val Acc: 0.6000 +INFO:train:Epoch 1/100 Train Loss: 0.8429, Train Acc: 0.8782 Val Loss: 0.4647, Val Acc: 0.9570 +INFO:train:Epoch 2/100 Train Loss: 0.3605, Train Acc: 0.9403 Val Loss: 0.3206, Val Acc: 0.9570 +INFO:train:Epoch 3/100 Train Loss: 0.3336, Train Acc: 0.9550 Val Loss: 0.3539, Val Acc: 0.9570 +INFO:train:Epoch 4/100 Train Loss: 0.3466, Train Acc: 0.9442 Val Loss: 0.3646, Val Acc: 0.9570 +INFO:train:Epoch 5/100 Train Loss: 0.3224, Train Acc: 0.9525 Val Loss: 0.3263, Val Acc: 0.9531 +INFO:train:Epoch 6/100 Train Loss: 0.3311, Train Acc: 0.9550 Val Loss: 0.3446, Val Acc: 0.9570 +INFO:train:Epoch 7/100 Train Loss: 0.3292, Train Acc: 0.9516 Val Loss: 0.3579, Val Acc: 0.9238 +INFO:train:Epoch 8/100 Train Loss: 0.3190, Train Acc: 0.9491 Val Loss: 0.3479, Val Acc: 0.9434 +INFO:train:Epoch 9/100 Train Loss: 0.3213, Train Acc: 0.9535 Val Loss: 0.3209, Val Acc: 0.9570 +INFO:train:Epoch 10/100 Train Loss: 0.3129, Train Acc: 0.9569 Val Loss: 0.3485, Val Acc: 0.9434 +INFO:train:Epoch 11/100 Train Loss: 0.3191, Train Acc: 0.9491 Val Loss: 0.3286, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 11 epochs +INFO:train:Epoch 12/100 Train Loss: 0.3077, Train Acc: 0.9550 Val Loss: 0.3351, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 12 epochs +INFO:train:Epoch 13/100 Train Loss: 0.3032, Train Acc: 0.9530 Val Loss: 0.3552, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 13 epochs +INFO:train:Epoch 14/100 Train Loss: 0.3031, Train Acc: 0.9569 Val Loss: 0.3332, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 14 epochs +INFO:train:Epoch 15/100 Train Loss: 0.2990, Train Acc: 0.9555 Val Loss: 0.3518, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 15 epochs +INFO:train:Epoch 16/100 Train Loss: 0.2887, Train Acc: 0.9614 Val Loss: 0.3315, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 16 epochs +INFO:train:Epoch 17/100 Train Loss: 0.2843, Train Acc: 0.9618 Val Loss: 0.3201, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 17 epochs +INFO:train:Epoch 18/100 Train Loss: 0.2873, Train Acc: 0.9569 Val Loss: 0.3289, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 18 epochs +INFO:train:Epoch 19/100 Train Loss: 0.2910, Train Acc: 0.9569 Val Loss: 0.3613, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 19 epochs +INFO:train:Epoch 20/100 Train Loss: 0.2810, Train Acc: 0.9658 Val Loss: 0.3406, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 20 epochs +INFO:train:Epoch 21/100 Train Loss: 0.2803, Train Acc: 0.9633 Val Loss: 0.3543, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 21 epochs +INFO:train:Epoch 22/100 Train Loss: 0.2752, Train Acc: 0.9662 Val Loss: 0.3497, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 22 epochs +INFO:train:Epoch 23/100 Train Loss: 0.2619, Train Acc: 0.9721 Val Loss: 0.3376, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 23 epochs +INFO:train:Epoch 24/100 Train Loss: 0.2832, Train Acc: 0.9628 Val Loss: 0.3423, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 24 epochs +INFO:train:Epoch 25/100 Train Loss: 0.2697, Train Acc: 0.9716 Val Loss: 0.3830, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 25 epochs +INFO:train:Epoch 26/100 Train Loss: 0.2635, Train Acc: 0.9677 Val Loss: 0.3179, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 26 epochs +INFO:train:Epoch 27/100 Train Loss: 0.2561, Train Acc: 0.9716 Val Loss: 0.3421, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 27 epochs +INFO:train:Epoch 28/100 Train Loss: 0.2566, Train Acc: 0.9736 Val Loss: 0.3324, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 28 epochs +INFO:train:Epoch 29/100 Train Loss: 0.2345, Train Acc: 0.9853 Val Loss: 0.3389, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 29 epochs +INFO:train:Epoch 30/100 Train Loss: 0.2384, Train Acc: 0.9858 Val Loss: 0.3602, Val Acc: 0.9297 +INFO:train:Early stopping triggered after 30 epochs +INFO:train:Epoch 31/100 Train Loss: 0.2476, Train Acc: 0.9839 Val Loss: 0.3402, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 31 epochs +INFO:train:Epoch 32/100 Train Loss: 0.2428, Train Acc: 0.9809 Val Loss: 0.3381, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 32 epochs +INFO:train:Epoch 33/100 Train Loss: 0.2296, Train Acc: 0.9887 Val Loss: 0.3760, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 33 epochs +INFO:train:Epoch 34/100 Train Loss: 0.2392, Train Acc: 0.9843 Val Loss: 0.3548, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 34 epochs +INFO:train:Epoch 35/100 Train Loss: 0.2231, Train Acc: 0.9932 Val Loss: 0.3778, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 35 epochs +INFO:train:Epoch 36/100 Train Loss: 0.2239, Train Acc: 0.9922 Val Loss: 0.4062, Val Acc: 0.9277 +INFO:train:Early stopping triggered after 36 epochs +INFO:train:Epoch 37/100 Train Loss: 0.2234, Train Acc: 0.9912 Val Loss: 0.3323, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 37 epochs +INFO:train:Epoch 38/100 Train Loss: 0.2315, Train Acc: 0.9853 Val Loss: 0.3539, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 38 epochs +INFO:train:Epoch 39/100 Train Loss: 0.2345, Train Acc: 0.9863 Val Loss: 0.3564, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 39 epochs +INFO:train:Epoch 40/100 Train Loss: 0.2169, Train Acc: 0.9946 Val Loss: 0.3424, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 40 epochs +INFO:train:Epoch 41/100 Train Loss: 0.2257, Train Acc: 0.9897 Val Loss: 0.3723, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 41 epochs +INFO:train:Epoch 42/100 Train Loss: 0.2309, Train Acc: 0.9878 Val Loss: 0.3559, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 42 epochs +INFO:train:Epoch 43/100 Train Loss: 0.2308, Train Acc: 0.9887 Val Loss: 0.3838, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 43 epochs +INFO:train:Epoch 44/100 Train Loss: 0.2383, Train Acc: 0.9853 Val Loss: 0.4167, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 44 epochs +INFO:train:Epoch 45/100 Train Loss: 0.2220, Train Acc: 0.9927 Val Loss: 0.3680, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 45 epochs +INFO:train:Epoch 46/100 Train Loss: 0.2194, Train Acc: 0.9902 Val Loss: 0.3428, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 46 epochs +INFO:train:Epoch 47/100 Train Loss: 0.2263, Train Acc: 0.9912 Val Loss: 0.2960, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 47 epochs +INFO:train:Epoch 48/100 Train Loss: 0.2208, Train Acc: 0.9927 Val Loss: 0.3472, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 48 epochs +INFO:train:Epoch 49/100 Train Loss: 0.2136, Train Acc: 0.9927 Val Loss: 0.3292, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 49 epochs +INFO:train:Epoch 50/100 Train Loss: 0.2129, Train Acc: 0.9951 Val Loss: 0.3561, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 50 epochs +INFO:train:Epoch 51/100 Train Loss: 0.2286, Train Acc: 0.9878 Val Loss: 0.3310, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 51 epochs +INFO:train:Epoch 52/100 Train Loss: 0.2205, Train Acc: 0.9897 Val Loss: 0.3655, Val Acc: 0.9258 INFO:train:Early stopping triggered after 52 epochs +INFO:train:Epoch 53/100 Train Loss: 0.2302, Train Acc: 0.9858 Val Loss: 0.3157, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 53 epochs +INFO:train:Epoch 54/100 Train Loss: 0.2235, Train Acc: 0.9922 Val Loss: 0.3381, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 54 epochs +INFO:train:Epoch 55/100 Train Loss: 0.2216, Train Acc: 0.9917 Val Loss: 0.3400, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 55 epochs +INFO:train:Epoch 56/100 Train Loss: 0.2308, Train Acc: 0.9892 Val Loss: 0.3318, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 56 epochs +INFO:train:Epoch 57/100 Train Loss: 0.2194, Train Acc: 0.9927 Val Loss: 0.3389, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 57 epochs +INFO:train:Epoch 58/100 Train Loss: 0.2174, Train Acc: 0.9936 Val Loss: 0.3342, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 58 epochs +INFO:train:Epoch 59/100 Train Loss: 0.2126, Train Acc: 0.9946 Val Loss: 0.3275, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 59 epochs +INFO:train:Epoch 60/100 Train Loss: 0.2129, Train Acc: 0.9932 Val Loss: 0.3254, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 60 epochs +INFO:train:Epoch 61/100 Train Loss: 0.2188, Train Acc: 0.9902 Val Loss: 0.3278, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 61 epochs +INFO:train:Epoch 62/100 Train Loss: 0.2200, Train Acc: 0.9936 Val Loss: 0.3250, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 62 epochs +INFO:train:Epoch 63/100 Train Loss: 0.2257, Train Acc: 0.9897 Val Loss: 0.3448, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 63 epochs +INFO:train:Epoch 64/100 Train Loss: 0.2093, Train Acc: 0.9961 Val Loss: 0.3297, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 64 epochs +INFO:train:Epoch 65/100 Train Loss: 0.2057, Train Acc: 0.9971 Val Loss: 0.3266, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 65 epochs +INFO:train:Epoch 66/100 Train Loss: 0.2064, Train Acc: 0.9976 Val Loss: 0.3264, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 66 epochs +INFO:train:Epoch 67/100 Train Loss: 0.2153, Train Acc: 0.9932 Val Loss: 0.3382, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 67 epochs +INFO:train:Epoch 68/100 Train Loss: 0.2235, Train Acc: 0.9892 Val Loss: 0.3300, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 68 epochs +INFO:train:Epoch 69/100 Train Loss: 0.2150, Train Acc: 0.9941 Val Loss: 0.3249, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 69 epochs +INFO:train:Epoch 70/100 Train Loss: 0.2102, Train Acc: 0.9961 Val Loss: 0.3347, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 70 epochs +INFO:train:Epoch 71/100 Train Loss: 0.2039, Train Acc: 0.9980 Val Loss: 0.3375, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 71 epochs +INFO:train:Epoch 72/100 Train Loss: 0.2019, Train Acc: 1.0000 Val Loss: 0.3448, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 72 epochs +INFO:train:Epoch 73/100 Train Loss: 0.2062, Train Acc: 0.9976 Val Loss: 0.3366, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 73 epochs +INFO:train:Epoch 74/100 Train Loss: 0.2118, Train Acc: 0.9956 Val Loss: 0.3490, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 74 epochs +INFO:train:Epoch 75/100 Train Loss: 0.2197, Train Acc: 0.9907 Val Loss: 0.3280, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 75 epochs +INFO:train:Epoch 76/100 Train Loss: 0.2097, Train Acc: 0.9956 Val Loss: 0.3710, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 76 epochs +INFO:train:Epoch 77/100 Train Loss: 0.2185, Train Acc: 0.9912 Val Loss: 0.3308, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 77 epochs +INFO:train:Epoch 78/100 Train Loss: 0.2257, Train Acc: 0.9902 Val Loss: 0.3568, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 78 epochs +INFO:train:Epoch 79/100 Train Loss: 0.2178, Train Acc: 0.9922 Val Loss: 0.3294, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 79 epochs +INFO:train:Epoch 80/100 Train Loss: 0.2097, Train Acc: 0.9971 Val Loss: 0.3438, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 80 epochs +INFO:train:Epoch 81/100 Train Loss: 0.2077, Train Acc: 0.9971 Val Loss: 0.3484, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 81 epochs +INFO:train:Epoch 82/100 Train Loss: 0.2042, Train Acc: 0.9971 Val Loss: 0.3347, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 82 epochs +INFO:train:Epoch 83/100 Train Loss: 0.2136, Train Acc: 0.9927 Val Loss: 0.3326, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 83 epochs +INFO:train:Epoch 84/100 Train Loss: 0.2247, Train Acc: 0.9883 Val Loss: 0.3242, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 84 epochs +INFO:train:Epoch 85/100 Train Loss: 0.2156, Train Acc: 0.9936 Val Loss: 0.3302, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 85 epochs +INFO:train:Epoch 86/100 Train Loss: 0.2079, Train Acc: 0.9976 Val Loss: 0.3404, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 86 epochs +INFO:train:Epoch 87/100 Train Loss: 0.2027, Train Acc: 0.9995 Val Loss: 0.3165, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 87 epochs +INFO:train:Epoch 88/100 Train Loss: 0.2006, Train Acc: 1.0000 Val Loss: 0.3144, Val Acc: 0.9590 +INFO:train:Epoch 89/100 Train Loss: 0.2002, Train Acc: 1.0000 Val Loss: 0.3151, Val Acc: 0.9551 +INFO:train:Epoch 90/100 Train Loss: 0.1998, Train Acc: 1.0000 Val Loss: 0.3172, Val Acc: 0.9551 +INFO:train:Epoch 91/100 Train Loss: 0.2002, Train Acc: 1.0000 Val Loss: 0.3205, Val Acc: 0.9531 +INFO:train:Epoch 92/100 Train Loss: 0.2125, Train Acc: 0.9941 Val Loss: 0.3162, Val Acc: 0.9531 +INFO:train:Epoch 93/100 Train Loss: 0.2088, Train Acc: 0.9980 Val Loss: 0.3208, Val Acc: 0.9551 +INFO:train:Epoch 94/100 Train Loss: 0.2010, Train Acc: 0.9995 Val Loss: 0.3197, Val Acc: 0.9570 +INFO:train:Epoch 95/100 Train Loss: 0.1998, Train Acc: 1.0000 Val Loss: 0.3161, Val Acc: 0.9570 +INFO:train:Epoch 96/100 Train Loss: 0.1997, Train Acc: 1.0000 Val Loss: 0.3213, Val Acc: 0.9551 +INFO:train:Epoch 97/100 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3172, Val Acc: 0.9551 +INFO:train:Epoch 98/100 Train Loss: 0.1994, Train Acc: 1.0000 Val Loss: 0.3146, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 98 epochs +INFO:train:Epoch 99/100 Train Loss: 0.1994, Train Acc: 1.0000 Val Loss: 0.3173, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 99 epochs +INFO:train:Epoch 100/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3154, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 100 epochs INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 21.46s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 -INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 9 / 15 correct, accuracy: 0.6 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png +INFO:__main__:Total time taken to train the model: 1391.70s +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 diff --git a/code/transformer/logs/instance-recognition/tmp/run_8.log b/code/transformer/logs/instance-recognition/tmp/run_8.log index ca6a1a56..4640ee69 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_8.log +++ b/code/transformer/logs/instance-recognition/tmp/run_8.log @@ -53,45 +53,211 @@ INFO:__main__:model: Transformer( (fc): Linear(in_features=2046, out_features=2, bias=True) ) INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.8704, Train Acc: 0.3571 Val Loss: 3.4084, Val Acc: 0.7333 -INFO:train:Epoch 2/1000 Train Loss: 2.6079, Train Acc: 0.7143 Val Loss: 5.3008, Val Acc: 0.4667 -INFO:train:Epoch 3/1000 Train Loss: 4.1099, Train Acc: 0.5714 Val Loss: 1.2130, Val Acc: 0.7333 -INFO:train:Epoch 4/1000 Train Loss: 0.5454, Train Acc: 0.8393 Val Loss: 0.4456, Val Acc: 0.8667 -INFO:train:Epoch 5/1000 Train Loss: 1.0048, Train Acc: 0.6964 Val Loss: 1.0929, Val Acc: 0.7333 -INFO:train:Epoch 6/1000 Train Loss: 0.3593, Train Acc: 0.9464 Val Loss: 1.7729, Val Acc: 0.6667 -INFO:train:Epoch 7/1000 Train Loss: 0.5088, Train Acc: 0.8571 Val Loss: 1.3721, Val Acc: 0.6667 -INFO:train:Epoch 8/1000 Train Loss: 0.3738, Train Acc: 0.9464 Val Loss: 0.9203, Val Acc: 0.6667 -INFO:train:Epoch 9/1000 Train Loss: 0.2900, Train Acc: 1.0000 Val Loss: 0.6006, Val Acc: 0.7333 -INFO:train:Epoch 10/1000 Train Loss: 0.3193, Train Acc: 0.9464 Val Loss: 0.4868, Val Acc: 0.8667 -INFO:train:Epoch 11/1000 Train Loss: 0.2953, Train Acc: 0.9821 Val Loss: 0.5474, Val Acc: 0.8667 -INFO:train:Epoch 12/1000 Train Loss: 0.3110, Train Acc: 0.9643 Val Loss: 0.6799, Val Acc: 0.8000 -INFO:train:Epoch 13/1000 Train Loss: 0.2778, Train Acc: 0.9821 Val Loss: 0.7599, Val Acc: 0.7333 -INFO:train:Epoch 14/1000 Train Loss: 0.2471, Train Acc: 0.9821 Val Loss: 0.7799, Val Acc: 0.7333 -INFO:train:Epoch 15/1000 Train Loss: 0.2547, Train Acc: 1.0000 Val Loss: 0.8593, Val Acc: 0.6667 -INFO:train:Epoch 16/1000 Train Loss: 0.2577, Train Acc: 0.9821 Val Loss: 1.0067, Val Acc: 0.6667 -INFO:train:Epoch 17/1000 Train Loss: 0.2564, Train Acc: 1.0000 Val Loss: 0.9707, Val Acc: 0.6667 -INFO:train:Epoch 18/1000 Train Loss: 0.2638, Train Acc: 1.0000 Val Loss: 0.8026, Val Acc: 0.6667 -INFO:train:Epoch 19/1000 Train Loss: 0.2471, Train Acc: 1.0000 Val Loss: 0.7762, Val Acc: 0.6000 -INFO:train:Epoch 20/1000 Train Loss: 0.2408, Train Acc: 1.0000 Val Loss: 0.9008, Val Acc: 0.6667 -INFO:train:Epoch 21/1000 Train Loss: 0.2433, Train Acc: 0.9821 Val Loss: 0.9137, Val Acc: 0.6667 -INFO:train:Epoch 22/1000 Train Loss: 0.2325, Train Acc: 1.0000 Val Loss: 0.8157, Val Acc: 0.7333 -INFO:train:Epoch 23/1000 Train Loss: 0.2429, Train Acc: 1.0000 Val Loss: 0.6787, Val Acc: 0.6667 -INFO:train:Epoch 24/1000 Train Loss: 0.2327, Train Acc: 1.0000 Val Loss: 0.7085, Val Acc: 0.6667 -INFO:train:Epoch 25/1000 Train Loss: 0.2345, Train Acc: 1.0000 Val Loss: 0.7227, Val Acc: 0.7333 -INFO:train:Epoch 26/1000 Train Loss: 0.2244, Train Acc: 1.0000 Val Loss: 0.7996, Val Acc: 0.7333 -INFO:train:Epoch 27/1000 Train Loss: 0.2187, Train Acc: 1.0000 Val Loss: 0.8868, Val Acc: 0.7333 -INFO:train:Epoch 28/1000 Train Loss: 0.2293, Train Acc: 1.0000 Val Loss: 0.8202, Val Acc: 0.7333 -INFO:train:Epoch 29/1000 Train Loss: 0.2280, Train Acc: 1.0000 Val Loss: 0.7916, Val Acc: 0.6000 -INFO:train:Epoch 30/1000 Train Loss: 0.2297, Train Acc: 1.0000 Val Loss: 0.7886, Val Acc: 0.6667 -INFO:train:Epoch 31/1000 Train Loss: 0.2287, Train Acc: 1.0000 Val Loss: 0.7877, Val Acc: 0.7333 +INFO:train:Epoch 1/100 Train Loss: 0.7852, Train Acc: 0.8738 Val Loss: 0.6405, Val Acc: 0.7891 +INFO:train:Epoch 2/100 Train Loss: 0.3765, Train Acc: 0.9432 Val Loss: 0.3644, Val Acc: 0.9570 +INFO:train:Epoch 3/100 Train Loss: 0.3406, Train Acc: 0.9511 Val Loss: 0.3639, Val Acc: 0.9551 +INFO:train:Epoch 4/100 Train Loss: 0.3285, Train Acc: 0.9540 Val Loss: 0.3170, Val Acc: 0.9531 +INFO:train:Epoch 5/100 Train Loss: 0.3206, Train Acc: 0.9525 Val Loss: 0.3703, Val Acc: 0.9570 +INFO:train:Epoch 6/100 Train Loss: 0.3251, Train Acc: 0.9486 Val Loss: 0.3428, Val Acc: 0.9551 +INFO:train:Epoch 7/100 Train Loss: 0.3330, Train Acc: 0.9501 Val Loss: 0.3343, Val Acc: 0.9531 +INFO:train:Epoch 8/100 Train Loss: 0.3199, Train Acc: 0.9501 Val Loss: 0.3208, Val Acc: 0.9570 +INFO:train:Epoch 9/100 Train Loss: 0.3102, Train Acc: 0.9540 Val Loss: 0.3357, Val Acc: 0.9570 +INFO:train:Epoch 10/100 Train Loss: 0.3150, Train Acc: 0.9545 Val Loss: 0.3259, Val Acc: 0.9531 +INFO:train:Epoch 11/100 Train Loss: 0.3052, Train Acc: 0.9560 Val Loss: 0.3638, Val Acc: 0.9531 +INFO:train:Epoch 12/100 Train Loss: 0.3099, Train Acc: 0.9535 Val Loss: 0.3755, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 12 epochs +INFO:train:Epoch 13/100 Train Loss: 0.3027, Train Acc: 0.9550 Val Loss: 0.3434, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 13 epochs +INFO:train:Epoch 14/100 Train Loss: 0.2969, Train Acc: 0.9525 Val Loss: 0.3682, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 14 epochs +INFO:train:Epoch 15/100 Train Loss: 0.3164, Train Acc: 0.9477 Val Loss: 0.3736, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 15 epochs +INFO:train:Epoch 16/100 Train Loss: 0.3119, Train Acc: 0.9501 Val Loss: 0.3187, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 16 epochs +INFO:train:Epoch 17/100 Train Loss: 0.3063, Train Acc: 0.9545 Val Loss: 0.3408, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 17 epochs +INFO:train:Epoch 18/100 Train Loss: 0.2888, Train Acc: 0.9589 Val Loss: 0.3498, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 18 epochs +INFO:train:Epoch 19/100 Train Loss: 0.2757, Train Acc: 0.9658 Val Loss: 0.4044, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 19 epochs +INFO:train:Epoch 20/100 Train Loss: 0.2668, Train Acc: 0.9702 Val Loss: 0.3430, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 20 epochs +INFO:train:Epoch 21/100 Train Loss: 0.2725, Train Acc: 0.9633 Val Loss: 0.3215, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 21 epochs +INFO:train:Epoch 22/100 Train Loss: 0.2722, Train Acc: 0.9677 Val Loss: 0.3756, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 22 epochs +INFO:train:Epoch 23/100 Train Loss: 0.2715, Train Acc: 0.9677 Val Loss: 0.3466, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 23 epochs +INFO:train:Epoch 24/100 Train Loss: 0.2598, Train Acc: 0.9741 Val Loss: 0.3848, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 24 epochs +INFO:train:Epoch 25/100 Train Loss: 0.2584, Train Acc: 0.9716 Val Loss: 0.3486, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 25 epochs +INFO:train:Epoch 26/100 Train Loss: 0.2520, Train Acc: 0.9765 Val Loss: 0.3636, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 26 epochs +INFO:train:Epoch 27/100 Train Loss: 0.2392, Train Acc: 0.9834 Val Loss: 0.3912, Val Acc: 0.9277 +INFO:train:Early stopping triggered after 27 epochs +INFO:train:Epoch 28/100 Train Loss: 0.2402, Train Acc: 0.9829 Val Loss: 0.3667, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 28 epochs +INFO:train:Epoch 29/100 Train Loss: 0.2426, Train Acc: 0.9819 Val Loss: 0.3977, Val Acc: 0.9219 +INFO:train:Early stopping triggered after 29 epochs +INFO:train:Epoch 30/100 Train Loss: 0.2337, Train Acc: 0.9853 Val Loss: 0.3845, Val Acc: 0.9277 +INFO:train:Early stopping triggered after 30 epochs +INFO:train:Epoch 31/100 Train Loss: 0.2466, Train Acc: 0.9770 Val Loss: 0.3318, Val Acc: 0.9434 INFO:train:Early stopping triggered after 31 epochs +INFO:train:Epoch 32/100 Train Loss: 0.2329, Train Acc: 0.9873 Val Loss: 0.3806, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 32 epochs +INFO:train:Epoch 33/100 Train Loss: 0.2299, Train Acc: 0.9843 Val Loss: 0.3573, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 33 epochs +INFO:train:Epoch 34/100 Train Loss: 0.2373, Train Acc: 0.9829 Val Loss: 0.3273, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 34 epochs +INFO:train:Epoch 35/100 Train Loss: 0.2376, Train Acc: 0.9829 Val Loss: 0.3379, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 35 epochs +INFO:train:Epoch 36/100 Train Loss: 0.2291, Train Acc: 0.9873 Val Loss: 0.3533, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 36 epochs +INFO:train:Epoch 37/100 Train Loss: 0.2286, Train Acc: 0.9883 Val Loss: 0.3794, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 37 epochs +INFO:train:Epoch 38/100 Train Loss: 0.2267, Train Acc: 0.9892 Val Loss: 0.3348, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 38 epochs +INFO:train:Epoch 39/100 Train Loss: 0.2234, Train Acc: 0.9902 Val Loss: 0.3260, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 39 epochs +INFO:train:Epoch 40/100 Train Loss: 0.2308, Train Acc: 0.9868 Val Loss: 0.3222, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 40 epochs +INFO:train:Epoch 41/100 Train Loss: 0.2257, Train Acc: 0.9932 Val Loss: 0.3633, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 41 epochs +INFO:train:Epoch 42/100 Train Loss: 0.2144, Train Acc: 0.9936 Val Loss: 0.3362, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 42 epochs +INFO:train:Epoch 43/100 Train Loss: 0.2198, Train Acc: 0.9917 Val Loss: 0.3166, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 43 epochs +INFO:train:Epoch 44/100 Train Loss: 0.2296, Train Acc: 0.9868 Val Loss: 0.3295, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 44 epochs +INFO:train:Epoch 45/100 Train Loss: 0.2146, Train Acc: 0.9951 Val Loss: 0.3335, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 45 epochs +INFO:train:Epoch 46/100 Train Loss: 0.2234, Train Acc: 0.9883 Val Loss: 0.3393, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 46 epochs +INFO:train:Epoch 47/100 Train Loss: 0.2171, Train Acc: 0.9941 Val Loss: 0.4076, Val Acc: 0.9219 +INFO:train:Early stopping triggered after 47 epochs +INFO:train:Epoch 48/100 Train Loss: 0.2118, Train Acc: 0.9946 Val Loss: 0.3413, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 48 epochs +INFO:train:Epoch 49/100 Train Loss: 0.2286, Train Acc: 0.9892 Val Loss: 0.3554, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 49 epochs +INFO:train:Epoch 50/100 Train Loss: 0.2229, Train Acc: 0.9897 Val Loss: 0.3575, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 50 epochs +INFO:train:Epoch 51/100 Train Loss: 0.2227, Train Acc: 0.9917 Val Loss: 0.3458, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 51 epochs +INFO:train:Epoch 52/100 Train Loss: 0.2124, Train Acc: 0.9961 Val Loss: 0.3495, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 52 epochs +INFO:train:Epoch 53/100 Train Loss: 0.2165, Train Acc: 0.9917 Val Loss: 0.3568, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 53 epochs +INFO:train:Epoch 54/100 Train Loss: 0.2198, Train Acc: 0.9927 Val Loss: 0.3646, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 54 epochs +INFO:train:Epoch 55/100 Train Loss: 0.2257, Train Acc: 0.9868 Val Loss: 0.3509, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 55 epochs +INFO:train:Epoch 56/100 Train Loss: 0.2222, Train Acc: 0.9902 Val Loss: 0.3308, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 56 epochs +INFO:train:Epoch 57/100 Train Loss: 0.2236, Train Acc: 0.9902 Val Loss: 0.3457, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 57 epochs +INFO:train:Epoch 58/100 Train Loss: 0.2158, Train Acc: 0.9936 Val Loss: 0.3401, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 58 epochs +INFO:train:Epoch 59/100 Train Loss: 0.2148, Train Acc: 0.9941 Val Loss: 0.3588, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 59 epochs +INFO:train:Epoch 60/100 Train Loss: 0.2169, Train Acc: 0.9927 Val Loss: 0.3604, Val Acc: 0.9277 +INFO:train:Early stopping triggered after 60 epochs +INFO:train:Epoch 61/100 Train Loss: 0.2168, Train Acc: 0.9936 Val Loss: 0.3501, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 61 epochs +INFO:train:Epoch 62/100 Train Loss: 0.2086, Train Acc: 0.9971 Val Loss: 0.3340, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 62 epochs +INFO:train:Epoch 63/100 Train Loss: 0.2102, Train Acc: 0.9961 Val Loss: 0.3527, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 63 epochs +INFO:train:Epoch 64/100 Train Loss: 0.2113, Train Acc: 0.9956 Val Loss: 0.3483, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 64 epochs +INFO:train:Epoch 65/100 Train Loss: 0.2115, Train Acc: 0.9951 Val Loss: 0.3296, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 65 epochs +INFO:train:Epoch 66/100 Train Loss: 0.2084, Train Acc: 0.9966 Val Loss: 0.3866, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 66 epochs +INFO:train:Epoch 67/100 Train Loss: 0.2122, Train Acc: 0.9932 Val Loss: 0.3545, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 67 epochs +INFO:train:Epoch 68/100 Train Loss: 0.2159, Train Acc: 0.9932 Val Loss: 0.3735, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 68 epochs +INFO:train:Epoch 69/100 Train Loss: 0.2189, Train Acc: 0.9912 Val Loss: 0.3549, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 69 epochs +INFO:train:Epoch 70/100 Train Loss: 0.2107, Train Acc: 0.9966 Val Loss: 0.3482, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 70 epochs +INFO:train:Epoch 71/100 Train Loss: 0.2112, Train Acc: 0.9961 Val Loss: 0.3411, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 71 epochs +INFO:train:Epoch 72/100 Train Loss: 0.2169, Train Acc: 0.9922 Val Loss: 0.3286, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 72 epochs +INFO:train:Epoch 73/100 Train Loss: 0.2155, Train Acc: 0.9946 Val Loss: 0.3708, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 73 epochs +INFO:train:Epoch 74/100 Train Loss: 0.2172, Train Acc: 0.9927 Val Loss: 0.3127, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 74 epochs +INFO:train:Epoch 75/100 Train Loss: 0.2181, Train Acc: 0.9902 Val Loss: 0.3637, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 75 epochs +INFO:train:Epoch 76/100 Train Loss: 0.2278, Train Acc: 0.9897 Val Loss: 0.3109, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 76 epochs +INFO:train:Epoch 77/100 Train Loss: 0.2284, Train Acc: 0.9843 Val Loss: 0.3244, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 77 epochs +INFO:train:Epoch 78/100 Train Loss: 0.2283, Train Acc: 0.9858 Val Loss: 0.3794, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 78 epochs +INFO:train:Epoch 79/100 Train Loss: 0.2177, Train Acc: 0.9941 Val Loss: 0.3230, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 79 epochs +INFO:train:Epoch 80/100 Train Loss: 0.2112, Train Acc: 0.9946 Val Loss: 0.3454, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 80 epochs +INFO:train:Epoch 81/100 Train Loss: 0.2100, Train Acc: 0.9956 Val Loss: 0.3137, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 81 epochs +INFO:train:Epoch 82/100 Train Loss: 0.2121, Train Acc: 0.9951 Val Loss: 0.3345, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 82 epochs +INFO:train:Epoch 83/100 Train Loss: 0.2067, Train Acc: 0.9985 Val Loss: 0.3293, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 83 epochs +INFO:train:Epoch 84/100 Train Loss: 0.2048, Train Acc: 0.9971 Val Loss: 0.3170, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 84 epochs +INFO:train:Epoch 85/100 Train Loss: 0.2097, Train Acc: 0.9966 Val Loss: 0.3521, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 85 epochs +INFO:train:Epoch 86/100 Train Loss: 0.2065, Train Acc: 0.9971 Val Loss: 0.3625, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 86 epochs +INFO:train:Epoch 87/100 Train Loss: 0.2059, Train Acc: 0.9976 Val Loss: 0.3724, Val Acc: 0.9375 +INFO:train:Early stopping triggered after 87 epochs +INFO:train:Epoch 88/100 Train Loss: 0.2034, Train Acc: 0.9990 Val Loss: 0.3313, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 88 epochs +INFO:train:Epoch 89/100 Train Loss: 0.2009, Train Acc: 0.9995 Val Loss: 0.3519, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 89 epochs +INFO:train:Epoch 90/100 Train Loss: 0.2014, Train Acc: 0.9990 Val Loss: 0.3525, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 90 epochs +INFO:train:Epoch 91/100 Train Loss: 0.1998, Train Acc: 1.0000 Val Loss: 0.3559, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 91 epochs +INFO:train:Epoch 92/100 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3479, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 92 epochs +INFO:train:Epoch 93/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3453, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 93 epochs +INFO:train:Epoch 94/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3450, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 94 epochs +INFO:train:Epoch 95/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3465, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 95 epochs +INFO:train:Epoch 96/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3435, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 96 epochs +INFO:train:Epoch 97/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3428, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 97 epochs +INFO:train:Epoch 98/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3417, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 98 epochs +INFO:train:Epoch 99/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3407, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 99 epochs +INFO:train:Epoch 100/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3426, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 100 epochs INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 13.86s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 +INFO:__main__:Total time taken to train the model: 1423.06s +INFO:train:train got 64 / 64 correct, accuracy: 1.0 INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.20s -INFO:train:validation got 11 / 15 correct, accuracy: 0.7333333333333333 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 diff --git a/code/transformer/logs/instance-recognition/tmp/run_9.log b/code/transformer/logs/instance-recognition/tmp/run_9.log index bea1607e..6563c5fe 100644 --- a/code/transformer/logs/instance-recognition/tmp/run_9.log +++ b/code/transformer/logs/instance-recognition/tmp/run_9.log @@ -53,51 +53,199 @@ INFO:__main__:model: Transformer( (fc): Linear(in_features=2046, out_features=2, bias=True) ) INFO:__main__:Training the network -INFO:train:Epoch 1/1000 Train Loss: 0.6358, Train Acc: 0.6964 Val Loss: 5.0210, Val Acc: 0.7333 -INFO:train:Epoch 2/1000 Train Loss: 3.4817, Train Acc: 0.6964 Val Loss: 7.3948, Val Acc: 0.4000 -INFO:train:Epoch 3/1000 Train Loss: 2.6750, Train Acc: 0.7143 Val Loss: 1.9840, Val Acc: 0.4667 -INFO:train:Epoch 4/1000 Train Loss: 0.4900, Train Acc: 0.9107 Val Loss: 1.7911, Val Acc: 0.7333 -INFO:train:Epoch 5/1000 Train Loss: 1.4390, Train Acc: 0.6429 Val Loss: 1.1363, Val Acc: 0.6667 -INFO:train:Epoch 6/1000 Train Loss: 0.4604, Train Acc: 0.9107 Val Loss: 2.0332, Val Acc: 0.6000 -INFO:train:Epoch 7/1000 Train Loss: 0.4180, Train Acc: 0.9286 Val Loss: 2.6042, Val Acc: 0.6000 -INFO:train:Epoch 8/1000 Train Loss: 0.4957, Train Acc: 0.9286 Val Loss: 2.3735, Val Acc: 0.6667 -INFO:train:Epoch 9/1000 Train Loss: 0.3909, Train Acc: 0.9821 Val Loss: 2.1100, Val Acc: 0.6000 -INFO:train:Epoch 10/1000 Train Loss: 0.3535, Train Acc: 1.0000 Val Loss: 1.9029, Val Acc: 0.4667 -INFO:train:Epoch 11/1000 Train Loss: 0.3551, Train Acc: 0.9821 Val Loss: 1.6559, Val Acc: 0.4667 -INFO:train:Epoch 12/1000 Train Loss: 0.3264, Train Acc: 0.9643 Val Loss: 1.3167, Val Acc: 0.4667 -INFO:train:Epoch 13/1000 Train Loss: 0.2581, Train Acc: 0.9821 Val Loss: 1.1846, Val Acc: 0.5333 -INFO:train:Epoch 14/1000 Train Loss: 0.3388, Train Acc: 0.9107 Val Loss: 1.1457, Val Acc: 0.6000 -INFO:train:Epoch 15/1000 Train Loss: 0.2530, Train Acc: 1.0000 Val Loss: 1.4346, Val Acc: 0.6667 -INFO:train:Epoch 16/1000 Train Loss: 0.3154, Train Acc: 0.9286 Val Loss: 1.3325, Val Acc: 0.6667 -INFO:train:Epoch 17/1000 Train Loss: 0.2750, Train Acc: 0.9821 Val Loss: 1.2753, Val Acc: 0.4667 -INFO:train:Epoch 18/1000 Train Loss: 0.2902, Train Acc: 0.9286 Val Loss: 1.3836, Val Acc: 0.5333 -INFO:train:Epoch 19/1000 Train Loss: 0.2476, Train Acc: 1.0000 Val Loss: 1.5235, Val Acc: 0.4000 -INFO:train:Epoch 20/1000 Train Loss: 0.2792, Train Acc: 0.9821 Val Loss: 1.3571, Val Acc: 0.6000 -INFO:train:Epoch 21/1000 Train Loss: 0.2489, Train Acc: 1.0000 Val Loss: 1.2909, Val Acc: 0.6000 -INFO:train:Epoch 22/1000 Train Loss: 0.2562, Train Acc: 1.0000 Val Loss: 1.2448, Val Acc: 0.6667 -INFO:train:Epoch 23/1000 Train Loss: 0.2598, Train Acc: 1.0000 Val Loss: 1.2197, Val Acc: 0.6000 -INFO:train:Epoch 24/1000 Train Loss: 0.2550, Train Acc: 1.0000 Val Loss: 1.2039, Val Acc: 0.6667 -INFO:train:Epoch 25/1000 Train Loss: 0.2471, Train Acc: 1.0000 Val Loss: 1.1245, Val Acc: 0.6000 -INFO:train:Epoch 26/1000 Train Loss: 0.2488, Train Acc: 1.0000 Val Loss: 1.0153, Val Acc: 0.6000 -INFO:train:Epoch 27/1000 Train Loss: 0.2521, Train Acc: 0.9821 Val Loss: 1.0158, Val Acc: 0.5333 -INFO:train:Epoch 28/1000 Train Loss: 0.2398, Train Acc: 1.0000 Val Loss: 1.0645, Val Acc: 0.5333 -INFO:train:Epoch 29/1000 Train Loss: 0.2242, Train Acc: 1.0000 Val Loss: 1.0817, Val Acc: 0.6000 -INFO:train:Epoch 30/1000 Train Loss: 0.2211, Train Acc: 1.0000 Val Loss: 1.0949, Val Acc: 0.6000 -INFO:train:Epoch 31/1000 Train Loss: 0.2347, Train Acc: 1.0000 Val Loss: 1.1482, Val Acc: 0.6000 -INFO:train:Epoch 32/1000 Train Loss: 0.2268, Train Acc: 1.0000 Val Loss: 1.1700, Val Acc: 0.5333 -INFO:train:Epoch 33/1000 Train Loss: 0.2221, Train Acc: 1.0000 Val Loss: 1.1602, Val Acc: 0.5333 -INFO:train:Epoch 34/1000 Train Loss: 0.2247, Train Acc: 1.0000 Val Loss: 1.1116, Val Acc: 0.5333 -INFO:train:Epoch 35/1000 Train Loss: 0.2233, Train Acc: 1.0000 Val Loss: 1.0726, Val Acc: 0.5333 -INFO:train:Epoch 36/1000 Train Loss: 0.2199, Train Acc: 1.0000 Val Loss: 1.0903, Val Acc: 0.5333 -INFO:train:Epoch 37/1000 Train Loss: 0.2191, Train Acc: 1.0000 Val Loss: 1.1068, Val Acc: 0.5333 +INFO:train:Epoch 1/100 Train Loss: 0.8400, Train Acc: 0.8865 Val Loss: 0.4292, Val Acc: 0.8711 +INFO:train:Epoch 2/100 Train Loss: 0.3512, Train Acc: 0.9452 Val Loss: 0.3531, Val Acc: 0.9570 +INFO:train:Epoch 3/100 Train Loss: 0.3396, Train Acc: 0.9506 Val Loss: 0.3497, Val Acc: 0.9570 +INFO:train:Epoch 4/100 Train Loss: 0.3442, Train Acc: 0.9452 Val Loss: 0.4237, Val Acc: 0.9570 +INFO:train:Epoch 5/100 Train Loss: 0.3314, Train Acc: 0.9525 Val Loss: 0.3434, Val Acc: 0.9551 +INFO:train:Epoch 6/100 Train Loss: 0.3374, Train Acc: 0.9496 Val Loss: 0.3424, Val Acc: 0.9570 +INFO:train:Epoch 7/100 Train Loss: 0.3098, Train Acc: 0.9521 Val Loss: 0.3211, Val Acc: 0.9531 +INFO:train:Epoch 8/100 Train Loss: 0.3257, Train Acc: 0.9535 Val Loss: 0.3304, Val Acc: 0.9551 +INFO:train:Epoch 9/100 Train Loss: 0.3150, Train Acc: 0.9491 Val Loss: 0.3426, Val Acc: 0.9531 +INFO:train:Epoch 10/100 Train Loss: 0.3053, Train Acc: 0.9540 Val Loss: 0.3429, Val Acc: 0.9473 +INFO:train:Epoch 11/100 Train Loss: 0.3177, Train Acc: 0.9491 Val Loss: 0.3210, Val Acc: 0.9512 +INFO:train:Epoch 12/100 Train Loss: 0.2987, Train Acc: 0.9550 Val Loss: 0.3222, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 12 epochs +INFO:train:Epoch 13/100 Train Loss: 0.3076, Train Acc: 0.9530 Val Loss: 0.3343, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 13 epochs +INFO:train:Epoch 14/100 Train Loss: 0.2943, Train Acc: 0.9579 Val Loss: 0.3643, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 14 epochs +INFO:train:Epoch 15/100 Train Loss: 0.2867, Train Acc: 0.9550 Val Loss: 0.3178, Val Acc: 0.9570 +INFO:train:Early stopping triggered after 15 epochs +INFO:train:Epoch 16/100 Train Loss: 0.2902, Train Acc: 0.9565 Val Loss: 0.3781, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 16 epochs +INFO:train:Epoch 17/100 Train Loss: 0.3155, Train Acc: 0.9525 Val Loss: 0.3342, Val Acc: 0.9551 +INFO:train:Early stopping triggered after 17 epochs +INFO:train:Epoch 18/100 Train Loss: 0.2968, Train Acc: 0.9584 Val Loss: 0.3481, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 18 epochs +INFO:train:Epoch 19/100 Train Loss: 0.2909, Train Acc: 0.9618 Val Loss: 0.3636, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 19 epochs +INFO:train:Epoch 20/100 Train Loss: 0.2796, Train Acc: 0.9609 Val Loss: 0.3688, Val Acc: 0.9219 +INFO:train:Early stopping triggered after 20 epochs +INFO:train:Epoch 21/100 Train Loss: 0.2696, Train Acc: 0.9692 Val Loss: 0.3101, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 21 epochs +INFO:train:Epoch 22/100 Train Loss: 0.2696, Train Acc: 0.9662 Val Loss: 0.3581, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 22 epochs +INFO:train:Epoch 23/100 Train Loss: 0.2814, Train Acc: 0.9623 Val Loss: 0.3478, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 23 epochs +INFO:train:Epoch 24/100 Train Loss: 0.2630, Train Acc: 0.9736 Val Loss: 0.3141, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 24 epochs +INFO:train:Epoch 25/100 Train Loss: 0.2589, Train Acc: 0.9702 Val Loss: 0.3588, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 25 epochs +INFO:train:Epoch 26/100 Train Loss: 0.2519, Train Acc: 0.9765 Val Loss: 0.3338, Val Acc: 0.9531 +INFO:train:Early stopping triggered after 26 epochs +INFO:train:Epoch 27/100 Train Loss: 0.2453, Train Acc: 0.9824 Val Loss: 0.4914, Val Acc: 0.9199 +INFO:train:Early stopping triggered after 27 epochs +INFO:train:Epoch 28/100 Train Loss: 0.2592, Train Acc: 0.9741 Val Loss: 0.3467, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 28 epochs +INFO:train:Epoch 29/100 Train Loss: 0.2331, Train Acc: 0.9868 Val Loss: 0.3147, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 29 epochs +INFO:train:Epoch 30/100 Train Loss: 0.2410, Train Acc: 0.9829 Val Loss: 0.3315, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 30 epochs +INFO:train:Epoch 31/100 Train Loss: 0.2391, Train Acc: 0.9843 Val Loss: 0.3269, Val Acc: 0.9395 +INFO:train:Early stopping triggered after 31 epochs +INFO:train:Epoch 32/100 Train Loss: 0.2304, Train Acc: 0.9878 Val Loss: 0.3557, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 32 epochs +INFO:train:Epoch 33/100 Train Loss: 0.2215, Train Acc: 0.9927 Val Loss: 0.3243, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 33 epochs +INFO:train:Epoch 34/100 Train Loss: 0.2216, Train Acc: 0.9917 Val Loss: 0.3459, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 34 epochs +INFO:train:Epoch 35/100 Train Loss: 0.2225, Train Acc: 0.9907 Val Loss: 0.3270, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 35 epochs +INFO:train:Epoch 36/100 Train Loss: 0.2451, Train Acc: 0.9814 Val Loss: 0.3353, Val Acc: 0.9277 +INFO:train:Early stopping triggered after 36 epochs +INFO:train:Epoch 37/100 Train Loss: 0.2284, Train Acc: 0.9892 Val Loss: 0.3893, Val Acc: 0.9238 INFO:train:Early stopping triggered after 37 epochs +INFO:train:Epoch 38/100 Train Loss: 0.2324, Train Acc: 0.9858 Val Loss: 0.3338, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 38 epochs +INFO:train:Epoch 39/100 Train Loss: 0.2329, Train Acc: 0.9883 Val Loss: 0.3323, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 39 epochs +INFO:train:Epoch 40/100 Train Loss: 0.2363, Train Acc: 0.9819 Val Loss: 0.3587, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 40 epochs +INFO:train:Epoch 41/100 Train Loss: 0.2423, Train Acc: 0.9843 Val Loss: 0.3678, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 41 epochs +INFO:train:Epoch 42/100 Train Loss: 0.2347, Train Acc: 0.9839 Val Loss: 0.3138, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 42 epochs +INFO:train:Epoch 43/100 Train Loss: 0.2208, Train Acc: 0.9932 Val Loss: 0.3344, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 43 epochs +INFO:train:Epoch 44/100 Train Loss: 0.2137, Train Acc: 0.9946 Val Loss: 0.3435, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 44 epochs +INFO:train:Epoch 45/100 Train Loss: 0.2284, Train Acc: 0.9883 Val Loss: 0.3166, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 45 epochs +INFO:train:Epoch 46/100 Train Loss: 0.2152, Train Acc: 0.9922 Val Loss: 0.3518, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 46 epochs +INFO:train:Epoch 47/100 Train Loss: 0.2179, Train Acc: 0.9917 Val Loss: 0.3504, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 47 epochs +INFO:train:Epoch 48/100 Train Loss: 0.2207, Train Acc: 0.9912 Val Loss: 0.3716, Val Acc: 0.9297 +INFO:train:Early stopping triggered after 48 epochs +INFO:train:Epoch 49/100 Train Loss: 0.2194, Train Acc: 0.9917 Val Loss: 0.3432, Val Acc: 0.9355 +INFO:train:Early stopping triggered after 49 epochs +INFO:train:Epoch 50/100 Train Loss: 0.2213, Train Acc: 0.9897 Val Loss: 0.3807, Val Acc: 0.9258 +INFO:train:Early stopping triggered after 50 epochs +INFO:train:Epoch 51/100 Train Loss: 0.2376, Train Acc: 0.9843 Val Loss: 0.3182, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 51 epochs +INFO:train:Epoch 52/100 Train Loss: 0.2244, Train Acc: 0.9897 Val Loss: 0.3290, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 52 epochs +INFO:train:Epoch 53/100 Train Loss: 0.2218, Train Acc: 0.9927 Val Loss: 0.3483, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 53 epochs +INFO:train:Epoch 54/100 Train Loss: 0.2205, Train Acc: 0.9912 Val Loss: 0.3546, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 54 epochs +INFO:train:Epoch 55/100 Train Loss: 0.2108, Train Acc: 0.9971 Val Loss: 0.3343, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 55 epochs +INFO:train:Epoch 56/100 Train Loss: 0.2066, Train Acc: 0.9971 Val Loss: 0.3422, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 56 epochs +INFO:train:Epoch 57/100 Train Loss: 0.2162, Train Acc: 0.9927 Val Loss: 0.3352, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 57 epochs +INFO:train:Epoch 58/100 Train Loss: 0.2082, Train Acc: 0.9961 Val Loss: 0.3449, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 58 epochs +INFO:train:Epoch 59/100 Train Loss: 0.2148, Train Acc: 0.9941 Val Loss: 0.3436, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 59 epochs +INFO:train:Epoch 60/100 Train Loss: 0.2243, Train Acc: 0.9887 Val Loss: 0.3638, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 60 epochs +INFO:train:Epoch 61/100 Train Loss: 0.2158, Train Acc: 0.9936 Val Loss: 0.3280, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 61 epochs +INFO:train:Epoch 62/100 Train Loss: 0.2174, Train Acc: 0.9902 Val Loss: 0.3357, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 62 epochs +INFO:train:Epoch 63/100 Train Loss: 0.2123, Train Acc: 0.9951 Val Loss: 0.3551, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 63 epochs +INFO:train:Epoch 64/100 Train Loss: 0.2180, Train Acc: 0.9907 Val Loss: 0.3829, Val Acc: 0.9316 +INFO:train:Early stopping triggered after 64 epochs +INFO:train:Epoch 65/100 Train Loss: 0.2159, Train Acc: 0.9927 Val Loss: 0.3300, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 65 epochs +INFO:train:Epoch 66/100 Train Loss: 0.2152, Train Acc: 0.9922 Val Loss: 0.3286, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 66 epochs +INFO:train:Epoch 67/100 Train Loss: 0.2135, Train Acc: 0.9951 Val Loss: 0.3668, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 67 epochs +INFO:train:Epoch 68/100 Train Loss: 0.2130, Train Acc: 0.9932 Val Loss: 0.3454, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 68 epochs +INFO:train:Epoch 69/100 Train Loss: 0.2201, Train Acc: 0.9892 Val Loss: 0.3463, Val Acc: 0.9414 +INFO:train:Early stopping triggered after 69 epochs +INFO:train:Epoch 70/100 Train Loss: 0.2106, Train Acc: 0.9941 Val Loss: 0.3390, Val Acc: 0.9434 +INFO:train:Early stopping triggered after 70 epochs +INFO:train:Epoch 71/100 Train Loss: 0.2079, Train Acc: 0.9961 Val Loss: 0.3605, Val Acc: 0.9336 +INFO:train:Early stopping triggered after 71 epochs +INFO:train:Epoch 72/100 Train Loss: 0.2154, Train Acc: 0.9946 Val Loss: 0.3392, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 72 epochs +INFO:train:Epoch 73/100 Train Loss: 0.2090, Train Acc: 0.9956 Val Loss: 0.3228, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 73 epochs +INFO:train:Epoch 74/100 Train Loss: 0.2058, Train Acc: 0.9971 Val Loss: 0.3372, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 74 epochs +INFO:train:Epoch 75/100 Train Loss: 0.2037, Train Acc: 0.9985 Val Loss: 0.3447, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 75 epochs +INFO:train:Epoch 76/100 Train Loss: 0.2075, Train Acc: 0.9961 Val Loss: 0.3322, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 76 epochs +INFO:train:Epoch 77/100 Train Loss: 0.2028, Train Acc: 0.9990 Val Loss: 0.3338, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 77 epochs +INFO:train:Epoch 78/100 Train Loss: 0.2015, Train Acc: 0.9990 Val Loss: 0.3364, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 78 epochs +INFO:train:Epoch 79/100 Train Loss: 0.2023, Train Acc: 0.9995 Val Loss: 0.3381, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 79 epochs +INFO:train:Epoch 80/100 Train Loss: 0.2013, Train Acc: 0.9995 Val Loss: 0.3400, Val Acc: 0.9453 +INFO:train:Early stopping triggered after 80 epochs +INFO:train:Epoch 81/100 Train Loss: 0.2007, Train Acc: 0.9995 Val Loss: 0.3465, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 81 epochs +INFO:train:Epoch 82/100 Train Loss: 0.2045, Train Acc: 0.9985 Val Loss: 0.3187, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 82 epochs +INFO:train:Epoch 83/100 Train Loss: 0.2023, Train Acc: 0.9990 Val Loss: 0.3437, Val Acc: 0.9512 +INFO:train:Early stopping triggered after 83 epochs +INFO:train:Epoch 84/100 Train Loss: 0.2005, Train Acc: 1.0000 Val Loss: 0.3312, Val Acc: 0.9473 +INFO:train:Early stopping triggered after 84 epochs +INFO:train:Epoch 85/100 Train Loss: 0.1997, Train Acc: 1.0000 Val Loss: 0.3343, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 85 epochs +INFO:train:Epoch 86/100 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3328, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 86 epochs +INFO:train:Epoch 87/100 Train Loss: 0.1995, Train Acc: 1.0000 Val Loss: 0.3346, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 87 epochs +INFO:train:Epoch 88/100 Train Loss: 0.1994, Train Acc: 1.0000 Val Loss: 0.3336, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 88 epochs +INFO:train:Epoch 89/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3334, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 89 epochs +INFO:train:Epoch 90/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3342, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 90 epochs +INFO:train:Epoch 91/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3354, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 91 epochs +INFO:train:Epoch 92/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3319, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 92 epochs +INFO:train:Epoch 93/100 Train Loss: 0.1993, Train Acc: 1.0000 Val Loss: 0.3334, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 93 epochs +INFO:train:Epoch 94/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3328, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 94 epochs +INFO:train:Epoch 95/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3341, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 95 epochs +INFO:train:Epoch 96/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3326, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 96 epochs +INFO:train:Epoch 97/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3310, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 97 epochs +INFO:train:Epoch 98/100 Train Loss: 0.1992, Train Acc: 1.0000 Val Loss: 0.3323, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 98 epochs +INFO:train:Epoch 99/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3320, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 99 epochs +INFO:train:Epoch 100/100 Train Loss: 0.1991, Train Acc: 1.0000 Val Loss: 0.3318, Val Acc: 0.9492 +INFO:train:Early stopping triggered after 100 epochs INFO:plot:Saving attention map to: figures/model_accuracy.png -INFO:__main__:Total time taken to train the model: 16.34s -INFO:train:train got 56 / 56 correct, accuracy: 1.0 +INFO:__main__:Total time taken to train the model: 1447.14s +INFO:train:train got 64 / 64 correct, accuracy: 1.0 INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png -INFO:train:Total time taken evaluate on train set the model: 0.19s -INFO:train:validation got 8 / 15 correct, accuracy: 0.5333333333333333 -INFO:plot:Saving cofusion matrix map to: figures/validation_confusion_matrix.png -INFO:train:Total time taken evaluate on validation set the model: 0.09s -INFO:plot:Saving attention map to: figures/encoder_attention_map.png -INFO:plot:Saving attention map to: figures/decoder_attention_map.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 +INFO:plot:Saving cofusion matrix map to: figures/train_confusion_matrix.png +INFO:train:train got 64 / 64 correct, accuracy: 1.0 diff --git a/code/transformer/logs/results_0.log b/code/transformer/logs/results_0.log index 8a53e790..f9ee373f 100644 --- a/code/transformer/logs/results_0.log +++ b/code/transformer/logs/results_0.log @@ -52,4 +52,3 @@ INFO:__main__:model: Transformer( ) (fc): Linear(in_features=2046, out_features=2, bias=True) ) -INFO:__main__:Training the network diff --git a/code/transformer/run.sh b/code/transformer/run.sh index a02cb06b..8896e183 100755 --- a/code/transformer/run.sh +++ b/code/transformer/run.sh @@ -19,11 +19,11 @@ fi # The server has 3 GPUs to use in parallel. ts -S 3 -for i in {1..30}; +for i in {1..10}; do # Run the experiments using the ts command. ts -G 1 python3 main.py \ --dataset "${DATASET}" --output "logs/${DATASET}/${NAME}/run" --run "$i" \ - --dropout 0.2 --label-smoothing 0.1 --early-stopping 10 \ - --epochs 1000 --learning-rate "1E-4"; + --dropout 0.2 --label-smoothing 0.1 --early-stopping 10 \ + --epochs 100 --learning-rate "1E-4"; done diff --git a/code/transformer/util.py b/code/transformer/util.py index fa9b576b..2ba73e74 100644 --- a/code/transformer/util.py +++ b/code/transformer/util.py @@ -102,8 +102,8 @@ def random_augmentation( return xs, ys def load_from_file( - path: Iterable = ["~/", "Desktop", "fishy-business", "data", "REIMS_data.xlsx"] - # path: Iterable = ["/vol","ecrg-solar","woodj4","fishy-business","data", "REIMS_data.xlsx"] + # path: Iterable = ["~/", "Desktop", "fishy-business", "data", "REIMS_data.xlsx"] + path: Iterable = ["/vol","ecrg-solar","woodj4","fishy-business","data", "REIMS_data.xlsx"] ) -> pd.DataFrame: """ Load the dataset from a file path.