From 16fdbb2542cec7ba197e123194fb431b2fc03e7a Mon Sep 17 00:00:00 2001 From: donghufeng Date: Thu, 25 Mar 2021 09:26:57 +0800 Subject: [PATCH] update qnn tutorial --- .../images/classical_nlp_loss.png | Bin 0 -> 15344 bytes .../advanced_use/images/nlp_loss.png | Bin 31626 -> 13425 bytes .../advanced_use/qnn_for_nlp.ipynb | 227 +++++++++++++++--- 3 files changed, 189 insertions(+), 38 deletions(-) create mode 100644 tutorials/training/source_zh_cn/advanced_use/images/classical_nlp_loss.png diff --git a/tutorials/training/source_zh_cn/advanced_use/images/classical_nlp_loss.png b/tutorials/training/source_zh_cn/advanced_use/images/classical_nlp_loss.png new file mode 100644 index 0000000000000000000000000000000000000000..47745d5c5254253d814ad67d8d8daaaad56ff6b9 GIT binary patch literal 15344 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�hYS%;G!;ZX5n3_Nn! zB!`z&^whm858FI;V>DY_+nOM)w3X&|Y8zr_@}qx_>6Q&s<~{Og43fg#)0ofuyOX?B zO&AGo*f@rd5_v*9457WD37bwcpBBCqXh4uK4~e&)o(icat6l>QFNI z289tv39MReY1uWXby$Q=;BOH|O+=-Lpjn=5xYAj#s<Z_(Mt{EfevLL}pys!Q zwZpo=r;2{zE4F1aBZ~GypS8A$>g=X6@nVh!_>qBXyWit2(efFDXjJL9*qkz*fGdt& z=J~$P7Kk28A*f7RYCjNP^^Fi7^PkiM?c;i7sS=YQYC|pzH{#cqknjk#>WE&yDx=U zXiv~H!q|IgPcEX^SHuXDDa23~~7FfH6C=5uXb~wsdNs z_+b<){j?P!>gj`);7Z2phbTYXh&c8eT}rnLUWB6fl42RY+xz_7{19PCR!A!;5fJNa zv$OX?7RQBfYxb}v=loHy4FzoHVbm8yjvueY5;{!I##^#jW#v}li1AgUG$My#%-1Bp z1HC>!MYzuoC0@E01*K9PCTha2bxG<5!00F#aa5XT+uzoWW8?#a(=uFmryWuh3k0S2 z1+^UnOW%p3$Y8}`nO3SHow=Qh&0l8f9_hsfRT?Npr)pf!Nu=@JX;7Yzf8)t6ll3FC zP{xSCnZ0@(_JNT~9;g%O4h&EOb;4W!Ly`Ym!{;{^C2~j8?;FCw>pu`_2?g=uH+rA` E9|{8H;s5{u literal 31626 zcma&N1x#Gw)-DWfp`}HOLxJKtP~6>$OK~mk3_7?K_rer+mqCg<6n7}@P~6@9ZqCV< zd^dmc=aK+{Y@2tl^{(~E3RRSsM0ro}9u5u;Me3`VG8`Oy81PN|4iWfIJiGlZ%0a37nZN*v16pXyjmGV(VxQb~=9DCIAQb8BR(} zSj9ElK~-7Ce=A3D12=1NS_R%^@WwCr)*ux+lQ zs)`}>){ume-I5{~9_q|4|LaX%QETPT#V75XBGH2r2vh3%| zO&WkM%=X#O@akZ0(P0ooK}7`-z$GCWJ@$F_kccK8=H5>AUpUOq%QN|`Cl4$EIs)as zMQ0ESGKoOy?5svx^xPqYj~I`9VFMBYRH=n&H zmx$OoZPW(0V5_R0y7KARwIlcuM4_*}YiX)Tl@wUhSRJ!$pDM=8q4I-yiQTn@@WP**G}v(1c*(1ru2lySYxm z=>B4IR=h4PHGyYTZ}TD{=^CxL1=_JnLB;S%N{O;mm6esQJ6XYSA)%q|=4@vtooFsi z@&ywpU4uxZuVlr;oWlGODHOZ9x-K+$H@@zNz9U5p{#E$p$@|om_-Ux_!s+}0BN5pl zhf@V5SxZ4AqC(IL*iTw3o z@ZTLI*yfNhNQvX#AtZ^u2QE5gslmtY&rGYtHmf5$5*BAtKq~FMClaEEf60??+#TqS zN7iM$EA_wf?f><|{O=^4@O=|jV>MH0K1RlX^C83Q3Lh>k`((EugT-Q;LL!o&o4&mH zM>fstQwJceewYir5|@^Kf4$-(_^m+x&~s${^yFqe`g{YbaCX#me72Jlt*of{<$rQ1 zm*%^vDOFNZl9<>h24Ni?9a(E@1}K$WhdG$eaF z2}$&lZSVeN_QbBag#{@URnKwbf^8GZ|CIp1v233`u!y6Br>E6`?1MC=)z)%IM17Jn zG9u5*%LBH$3d<=vdEP^|XL$3P9VZ?q9wLHB)6YTV0qBNsD18yxzkmNEw5|6e;)R@~ ztULro3*3b~KWq!?IE{(F>;tYXdL!K1pSDKQc>iY=C=?^`S%XwzYPbA8Q>yCrz&A>l z46vHAN~&S|Hr9+*rbEBY&tl2OEKH^av83o#fS4)P{-pDGz%!8Yi9$Tt^(c8af(VCb z&ma{2Cv;9EgxCgVp4Z$DFH}0!KYbRD9{n{S40!uu(LDu{G5ENMLYBWmL-AQs@QPm| zWGn~BDZK_;D(wMnJSc&ztg4+~RPyX)=VcaC6u}p<-c^ey#v$FX?|oexx0TsP+t|ABEa~|40Q9BmrWR`&n-J_?xAMG|-Gz^p0rZ z0uxVn*_Z7RNz?t~|EF5Ns+G(trn9X}iI2y@5+`L~i0JG4%0?iUsi*u715Qs|TuJpp zEArtHRSEtBP@hizilQm$>B+mgasefB(dYS5Hkpl9k%=|{@B0)8HT}t*WEd4~TVB>= zxi41{O)5a>PkcI-cvfbn@BL9zbTF}dNQF`F8PHoG>}>|1zm`=}N!L^znt(~WdWdq* z@VBKSrm#+Sek4WzjUT86Gg+*+e*pRc3TEaQ-6qKCpVw$Ny4US*Nq&P@1c1xd*K;Yp z6h%^TRSO#z7Xb(@9SFjCiu3KAB&7&xX388#3W|TbkdDr$%gf8jsi|9CXhz29!CX}m zyA=*Ib8H=`>wDIOC6~+Emm&9+g|4_NmVViv*}kGme@wCT$`e{VuFuxOnG7p56tMy& zNxXjDo^QJ}*>3d3z`61f8yXqCX8%Omg)wfU(Q4~+$`@hVUv zC#$9=4&3$_zuFmme%edI>iuvd)RKx$CbUK-+a=!TFrkR^TPSO0zhOJw!}XuvTXS>s ze+N~gTj?H0NRvRN40!j`cZ6nZG~>8#5~yx#H)J28{wGhz$gP@E5K}N!RYm!+FbtJV zb>6L-8Cj5Xwl!m5-`wJpH@Iq<0s$`a)f7u4#CBd+@99z%gI$ffMvc17)q|eBbo{+D z4OED<>+|}V>)bc1ydsd;CJWmQ_Va`^=nttJ5RZ6bi+X|jEmeUo9I78prq3^?CK6*X zeQp#!2?6oAfV-tU{k<1f_+Z@rj)985xLEpfmQ)(J9Wq(>CCBod3X+gjQ?SW`l?Y1| z(r!ibJ(T-leO#)9p=3K=o%3|}s`zJwctH9P4RE8ij>tqOtyDb(6m&w{cXJv;?jSIj zVf*ow{y(i&SbR-eC^_@^r%L9~zdv6dITqbws~?ts)?aHGOD3noLhdvtLHEyzekr|* zw*?(P`84Ej%*%0(1ASuhBQjz+@HX$R-&krbBqd`HHW3ckyQ|vrPzFc177_De0iCSj zPYV}%h6TOuBLc#zpk9O)SgN{`n~e?ab#q(G!nw!(yqz1?5TdSPFS&>UM^zx6aVve< z_K{27*>U-m!-7>xVHM&vvM7-I1q-mpbp6_#`0=~i%qVeWRG=ey2gE4t>`GVF%7KxM z{cGZK5l#QJtEd(~oZ#R}2}#9X!zbiA?kUbTZFQKj76UPW?XM-EUFhosF46U9TcLga;Z+v%GL(T~nM{t%!Y>DTUCz7%?q$n?&8y&H<+U||VQgP_7 zM$Ybx6efbc0|701fTBTUBoFNP4FtL*XHXLvUSM|8ZsSN(>hd$env~&<$18gbD#nZ? zangsEsaBu>rMM?@R_^Ss}HH8P} z#P&rTyB&+9&H}XtLqvNZ`PNe%1h+4pasvU2hDbWSeDc=|({zeU9~b4EnO(nTqLT%5 zL@XuP4+XWKQ|}&n(-4a9-tyS5LH~0%LCRPl9M7DU_`k6jCZ-eN?vXlICZe_ScLm`0 zDa6ea{ih&_^kq)i-xs;*@Nx#fgA)7O+6~c^9NHea`Dkyi?{Zgc6nxFZD@N=E=b?)x z>J?B@EpnOvcq8O2!|Sn+n%=RjG2iusIF|z)G78Q|H~h<0jbk91lEUP2mvD(L>i?f& z<{FOFQsz%UbnW7dw`r^(#2ZhLuI!>@A_X)HvH<^?@n6jnBPOwEJC2xwyV zDnw)dQ^K|)WxEV{Tt~CzdQa)2SU0 zwGz=`T2XJ-xqw;Py1E5y`%@~R-io5yOp#9*b>D+@0Jo$O6>FdMa{i^r*Zp23*nCN2$@ zIM9t5)h*aJ=%l)BB}EYN;=rcnC$>M3$_o{Z8SuG20U5iZ-IdU^f76TGWbcNhqWY>w zalK9w=+8#ChEp0gbqUAte>(!i@g|#&WH#dH% z+Mx4{uB4XMJcgG6fFyy--d-($Z+8`Zq_wpP^7E2{|Hwme}F(a;C~@SGig57`R+?Z|6W9y=Jp3v$(jpn4}~$ zCT48inK9u*!eAhob3`B>+ts8Nuz7rP5F)J09-pM@2Z@I2XBL)}7;g^50hL0}>r%C> z>4@j*Xi3K2{`5ajsM+et4WQ7@^;5h3(z;5+?)Po`NA>HdRC38(lSSWd@Ak{1pY+KB z@VT%RQM zxLFt(qh1PbSC`l))VB%(w-g1b4$^g2Pfyov>zD2?u+X8OQu3JzLj*aohXW`G&v|RC zJrw8vZZZF&WlPtQojiEYBOxJK&;IrcXKGDsZswDvnozPawPGU(LL>1$39ROSHcT2e zB_ksX2?-G@PdN7xK}NKwSbeaQXk0lb7SCF8G#>oBb~CeXdL_fuBIf4C4IopYoH4s@ zY;`A(iDR@h`QD)<)`sV&d(C<~(ow-@KA*dZ3`FaHBB_OodI+irIRZ{DhZ1S=gJ!0u z^Ydr6qdpa|D22KiyW61>^hnu&ANrY!s&TQgAN4#>#R&)rLn9+M2k6VYj9G}raHlP6 z7TvbfJb@4ap!`W6dGr^@ts!{AdUWb+qBs!Wqcd}H@!2}m5ibD;v$DdP!RF}HEkWB9 zOEeOAb!BB+TPffz;A+OxC7LCgRY57XjiH>&uKq(qL*#dB%*@O>o~PZfIW$P+jcw#P z>)L8#vUzyntilL2ud3WML=^RlDu(-y8&osBRG;IHYu;{uT z2`8J%6*E7twYRqy#RXu=yU|^x6DQiVRaKQ#;y}d>+!}6=bauAt22K6(zJQCr!%ku+ zx1b*ckrL9<(vAG;Dk=eE=E&2D0eG>79gz>l-i!o7uNNVfj1?GJw@otPNbB?5bNt>z z)_*T=nz`(6hiS$qCi+K5x2q@Q$=TWC_Vz3RkSA_g{AmuC>?hDS0~LVn_v8Z>ki_~=X9+Ky$m}7cqqFlCz<)IK z^yH+Zq*z8+WX9Hqw$g+L8x#`gw#c4$SMzI##5#?bs)0?TL)*EFUA}FmU{uhf%jE$B zV@h10@Q5NZH~-Vt{^gzR?r$3#oBE}rOcd#m_RPla_Go>L-YaQ()=DF{yFClBKm=Rb zzWJjq^50imA-Hovl zwd!{R`{f`DLm4+2A$W%$S%ORy2@|B0R!wT`L2|kj)ZmRf1 zWV$h97QJN##)7juzLpHOW+jBfzM7mpp`%kP2xfvzRW{8JIL^pYGjTiJQSM5GWatmk{*cE6&gr@ze`*$jY->r~d{L+sL_PsF_;U4PoR(>bUD z<6M};R8`l=q7HuU3&ExB}oZ^QVN0dri&ZX_uP~hM8v-=Pe!I+U4Z- zqOvOoDj>fHvSs(m5~w7Y^3em?V^VyOxnG%E2aYqP&;?80lHl z6tzLax-I*alE;^Dr=_T>wyHI^;@lo+Va8~cBBVn%BG$j~*G{cUeRS=%kT{U z2<*>O5Bc$H#}XZ4rp?GJ+tIx408IQJb5j+T6-_sryxOzhtc(;&BUf76(xxF&mx9VH zIlxC!%UK=APwJAuGymO?$jK6u__=&482^&bv)@=x^V<&`l!W1d4(oSE8GRvQAHpT5 zPv=IofJXZK+~4P#&~%cOl0GWVg8(iu9ot_bN7>AVn)&Qz59(#^P*Hpr&)ppZw77_o zJ6~Rh7X+4_t+E(PW<6t0vlEKAbPI%u-N441JC5Sh;1hzr=SGPh!6w9BnzI4hS zjYa00Jg>udC$6-;E*X!lJpC8v!anhWrw2J4Rq7|4{+|n1_tt&yi*SCG>z_#Mi74Ty zW)kwBSc7|68F&~bJGmKwmM7a^s$6_wQ=*}Gs=t8Ove3M?s-+TvGN2&Wzu)@r>0@Z8 z`-6s(E+PH(lZRY zH74rhDBq|PdC3yw)!Y&kmjBO;G*F~oX%wn1zg{6jZLsH1OTj)rl-j&b-NMG$ z(WihDv2$>0-$~o)pH5*<_H)>pwDIqL^}}Wd(qiME8Md7^`s=d{>~6RXN{OFX*z=VH z?N~rq>8F)05V`3D#25(6YYX6Ll?K5~w||>Ev6!>v4iI-My?_$ySAaM2h5GN&#Zn~ofR%-e>c$bQu>fr=8RPSX;(Z*IKMlw=~_Y4BM z;?GRA7Mj2hIMeeto{}gDqXVeJnRi(u^CQ3(2-FGLkr2wE!kp&*k)UyjaidQB3>?f0 z9>ZSV7ZzX8h7nD{OLuX-S7*6B<#B4u$+0the@lZ>T{8Z=*h2pPRwbVTwW_mF4cjKX;H;9>&v-SM+AtqEufE?t5b`sk zNRVZ{Gbs-9?M-E>>1G!T2PpZ}qIE462O4ED$4vTZ^;GHwsTzmvFVx>|qWt2VOZtV; zIXE-?{ti!vIFN7)WqWTSrwq~vKxylqiODNQOnV_ZaidqUFMnX84fYX~am_jih$ zDs}2v-K$gsCB20+r>E1>5Y>Bk=W;sB@3&2siX-!O?v9osw-=4UJA9~m~uGA|ajE|@Z!Lf||Xjjtmo=?Va~_s9sr&+g zW1ZQ|gif#3lpyM=^a|y4r!5kZk>WS1Xk4nuc?e#+!=3)NvbA<#-~VtP{O!Tir>R)0{;2!%7iUe?7r~fk9d0>g<7i*c z0$B=-70!d zr^rtZt6lIOrB4Kc3_%u}{NS5qx4S;Q<5|(oL0$IAy4z%a(2|;{l4Q^~b^YU_g64kp z%d5d9=Yula%O;5nc~h*%%tAW(y7Kx&iHWg?H~MM_H_w7Z(P(_-V>en}5HDgOkG>gY z__UrGE{OtufxSl(P@39cc11tm*)8#(Yp+>Ni*8u4IsT{TtE9QpR1Uh(8p=qnrS}M% zt>?WiEI%}E>kT0yz!dct+M3dbH0>f1%JppksqwbzCu)N zGpBZU)sFWXR4EtT?!K;p{0n|bHFt;9u7eq5%PC36eKZ+J$3x_E+F`|sms+vGinQ^5 z=)Z&jWvkb5l)o2XzqoHVp#G<^l6n0{hF((S0A*(Cj}tr?uC7{S4f)-g8yaT%mZuak zI(to3~ctbPtPmxgPVNq))f5Oy)+2wus(+N18(<< zZc=L@6p8f&C{cw~wdY;x9=x1R?dow(pMl!)W?Td$<|$Sn?C0QZ$W|nJ9Qd#?6tpAWC|#;=_tXj`GdaobA=rTw+4P zSLI)mo;)9gk+8rmmpCtogD1`Q@0+m3X~^=Dii9pKd<~IMJ|V$oO3nIEPah^0nO|jM zsHiTQyfCL^B3=NWCO?>D6zg_TNh|zG=p=yflFxaHtyZ=AC!PfvtAL@Rll=W4HLu(4 z!eeevqU+TjzA?3!UH=6#z{VIlx;3nBd;&HfM$y6CnHU`28{J%NJ%$T+xL|;D)Yk9R0kWjJ&d?b&@)2# zwN|P4S%Z2>o;p6yshh3umdn7=l)3yicBFJk<%kW%ukbvF1y=L$)_X#=b+f^Y*5e7C=*fNKroumA&bEVkPQE+Jo^1yI2wJQIlUy&k zkd(Jv5deCTPxK7eCsY8Uz6hT8JA~Qw{Cd;zY-fkdi1Vq$bjd^qC6(jzNA2sXcJ(do zY52&Q{LTi@4x17 zEz=3~<(X@CupPEmd~tQ4pQciojjB!ML`bkxfJsPX(oLf1m+W+wayaMz?fP?T~00jgBExqa{c{+KkqS_6R4y%E<#8dlxPn+rMEMI+@ zCi+W#wNFPi1%GKP-JbV0;d3&CF?Y&GxU=ue5YFiy%9t&xOn2m04#OcwqisKGZ-2zb zX~vhx8Sa)@IXd<{NC`!(n;y@CE*=TKwJ<-@F0@~RH2imXPaZ|R^xH2+X;mAhVKJ^8HjwUU*XVHYk|UXK!#)4 z;&2DcEhz^F)&N|c@`7_;K?gq1d=A5h6FH^M3KYoCU09f-QA&6f$zzaNS^7YSQoq09 z`LzZRzaD&xHRbK{Zcu+_VPq@}Dt_iwcgqraILlH-ffY>|JqMM)JwNer+q=I_xLS!K zz(qnhW!}@>u13hp!ViTMn_I3gQ}V)T=+AdGrML^yvk349ol_yW*Hjzujf+xK^uKoG>q!HB`J}3FoO|qbgHWAW=u*m zkw@8Yd$St~MPHQ7w1cLvc$MF?C@2&_UxSz$?$f)D1!vo3R^tC1_LiKRPc7&?wnDt5 zFsHB9*Ik%6n(reeerfg|VE9wJt+`@U3o-jVdFIO^$tG{p-byuJL!pS`sNTOzXf2E# z-5d*p?S}x33|Cfa8*Mvs{dzmfsC(&L(_#NpdaJv{R~GNB4a&0|Xysoxi!swyLDIO& ze2!W*w)IOy0rSaP9-eEOMlJRE#lsQTOrri7Mw{v?i2nL26EcRXD(|y4A3rqU-D`q> z9+=8EYh|}Xg78&uUmpg{jU}bx5AM&5u9<;x6sI@dUE2Lv17{qWx-lJCZ52jTE35aYR za*1Dj#>f7hUtb|=+M!?e5@YdYoUM30EIpPBc6Kk$zyGuI&}b_68+Dl)pFT3N)#DrV zhP+3u6LI*p8^GU8U`{>4i~I#d9mNSw9?nQO+VDw%iSVcTE+~%;jDx0hxa2st5C?F1 zVYkB`tp`mjUOveB*wfD5)^kx>bjb%1cz>)J3VH|mk8O-@kF@elZsS)OQ)1d-R)Zld z`?qu1F|tD;rU$=weB-a8*a%&(l6S3_SBB0ywBl{bcOBzT9l%1{zZbFtck< z>qe^rO*439MZy^dX1!OCabdP{)!FWqq}2WzC2(~ouX|W%y;_RW`fE|4cILO8%13f2 zNXN$k^%O%wMJ1MOSeUjefq*E8Q+G38orCylK25ch0!644mNPcHwJ~8cHM^uIPn0GL zkz~!o_OR5fC}>@%k&hNpmEk3iT{QoTT+DLS3&p%@y84HJ2{g_dqa?>YtHg`ugD#CyTJ|}#-w;Z6JNA9 z#9Cz!KxpJ&{fyjHZ=+v-)K(xknGsL{c2XWIkG3)|Pd5x!hqc#g4vSk(-;}}B)TG%9 zDNPHolO0?SS8r!pI3^$Mfwy(T-G&?&iSS&Ep!Wrmt7iq%neg7uBj%=CeR5MVJXyF0 zWdgLpZ<+8Ue{pl2eqrtq%2f*2L_5WBHyq-TxplMmWL(Y&uk9eO(Zne*0L3v^yYL%E;_q=ZyNzD zMM=M(WMFdqmG7c(w0z`R@tme{cW{-tQ|t=&d*5sx!bqFPQE47!;5qpi<27&V^(>07tZRDQ<5gB!b%47P}bvb2$J0B~g@IR>)-1HvZgVK1$;SFUIJyFt{avW|GgR;g6J zUbjNnX#>GUOp6x;EwvNw(>Ll?0aO+(yv~-z@0#erV~%5I1sGQY=oDo%p8HL9t4Vh=hP_V zpq}fN(5gh&jaVs-1+>~S8%sxL`i1;rI_Z%8dZK9g8zK0U$50EPn>=#Of!qFEe5;}Z zE~tO{9vblakh*HUgT{ida;S9JWO#BR)xYw+g%9^)x~A?Mx^ z$%Fby`;v|hHTZZdKX0j%aDPD4{a$DJSb5o4#*J0Jj`Oou7bZjg$T9}-R=ODR)p$yS z=uJ(kJ_{nHOo-|^7}ss`LWO4zO=&qg`dYT5R-cy_U){u~XAdFrh5eAv;XXnuK^*+~ z4hyazTF#(*bo;!VDcp5+VO$ZdKmo5-316A6JU(xrQ+oYU&Q+d>>QdC=a3!`l*o99=AuM2+958NZP%C_vignnu2FTzxu zLL8`HL0M`Ky_K|mBX+fxtCy}@oz-6Hi0#r1Ul>yeVz$mIz`H%!9pP~tfr0)0(=F|j zU!@?Y*ffL_H6dZ5H^1@>_cZe~uGYsyjuydWcxWJW{VjBY(xjFoNH!DhYZ#m3=yeY| zw&}kLrf}3}BvM0Xcdl_&79gq9uj_JVEV-Y#N{uGg>|FNqr;pUk9o_uB<-0N`VhJ#N z?h&w;oO3@~W!%f; zVfcT~DV(Pv#ai?DNuNUJGS@3LH32ypv*l{%=&tS;r{gB8)d`*5b~ayG8t*6H+KkA_p@fRnzX1-@R zW)RV!*|kqSw4nhhw)~4NJnB@v=%e^ z-r~q?Dfi~xYa|?U)0U{Tsp-t}ERv}Azu2mY68y-93b#oTic9%go44_|iORuifL`3Nmz(PC#Sah~uyjos@hYZ6CxAwM>-_~)w6|?=^YpAB zkJrulu)Vm(L=Ix>?nX|4vcpF3bR6L+PePdJQU%a6wmvrBwo@#@%geJ~{*S?|EFnah zVYRTUNtg7m`V9qsEj4OAd6(rp4lSi=`5c_wNEm4{Ut86>-ug$p*Lhw;1Ul`R48GKu zehjSXYG!`=cq9v!l$~f&d>Yh{y2SdsT%(9DhELF4T?I*cWXGU zZ>9tEpSe?vgVHJtTnpo)5V2&y+{FLhC|JCzybOhn&aFR2gNT^mP#$30Xp8F3RSk$Z z3f?C4%A`$A*$~~Bw^YI8ff?DquqPuo)~|2}FmO)yDk zf5#K*E&2|^DqXb*&{75A{pG{;U?w8&$Y3xR-l8<2S18%@buIXtc6lI4MyjYWIt-I! zG{`BF>oY(d+Z1fsFK@7^9Tpj>*Tl`t9B$hMimF3s!L2ppoF+3WqR?S~;qvyJ!h@39 z)eG0qFT42Z<_2022GqI)fbR!@Z9Q08l>BC9;!mr@$=^0d^v)WL$@YgB z7->F#kR2gO60$w}V`G%TYmaAuNTdov-P)i+C-lBa3X@dQY^-T?lz85{dvD9-_NJjf z1`uxc!|oZic9i~wr`4qL@Nj3cSIc94q~S5IA*jS8>ytlOs#)^3WZaiYp4BzljAOqC zlyV)tK#0rAm?%Q+wZl!R)k;K6KTa7hcW^&G^9F?mKrW}v5uHm=*!LOg`N#> zf>NK4!TnKa+x_(Uu^9x--tQ$lV1;}a{ft1l9=~0TvZQAR9csk>AfZ`fkYIBfwIKi? zoqigBQ0eAy3BB%w+raY})0N$L$W3RhE&EP2AmG1YOiS;NPS=)%E)5UxUruVKHG7>~ z_vDK^uKr?+KQ7A|-rcQfRaUYgv@IVHqTT`M_orG{GTa9b=k2ro-*~K{F;pB0H8;8$ zpG?-a%_0c?Mp}o@*>xe|@k9m%^!W>x(?HW*!@*3F1rz9C?uTOq*?Qu%+}^A3jlfGX zTDpiTYUFjZ@Us^Q^`$2!ZnI`l9~v+|_-*8~4l1cQ4X>+n81rcbR&8m*+3_RUJ3?Q< zE`U{aX;$*J`I#=Zv@$yl`U(d$CRmkKpQ*R0J_2h0vW2z@eTH=@8Hl4~A+11N>7Jbs zZY5pA-CCnAj{sn~PK#fNCZ~4SqsJ%n*c|sZC~*c(pb|-<;LOGBml5KOABg(+Q1KjS z=&p%We*RQ{-Mz>PjVx@+Zdi)@;i4L-3((;S!Q|-%vur=_xR25CCI#M5d~v}p@x+ku zFEJS(y8%c_6E;w`r*^=ImUjtZBMAAxdDff9JEy+l7`?h&&BgcdDA3nPJ)N+P_tlAD<*ew%h>&giRnlSl}b>Lm-0e%Tm(-nUIu|ITn09 zRaN<$7@NyN>=W#oSZ6@9wJIodcPs)QhiIJ418_y!3bLcc9XU6q-@23d+*Y6b&d^t} z>IFE^$70V=QIs;5C}H`Wu}t`C9yv3$o(RT%rYZ+aK%eTg{tIjgKx456l2F5$2JV8I zpx(ZERoR+bv~U(w+##BQ6Z^?zD;3ECm;x|`6luAaq~GQT9AB}Y)pcXyrSZ5{@_i&5 z=JT3TSzgi*{x$ap*p3WYb~JQVdO_v3+5ImN6q!kfmz73%#E`>ol-ua0AC}U{4|Z{D zxabGd+Bp3*2P8I=Z;9M|>5#gFjMmmr07k)`{JUMRcXBs1>yc}Jq7smz(Urq?3IfBD`;GUp4I`7DIHeHueYF-!&bJ)<`j*K$?xZBl(HR$} z%$lXh>_X4u3NTOkqp3dm3g0aeAPl%Z2F<-DW&i}n3~QL-H_Z ztvyhzWC)Ue5)c1)paA?4fYHpKt)!?mg!oe#TM8bOJU>d-ue+ zlFCYKHxPBx*qmnouUg?eIqXu8?ftmS0m%Jkkt7nf$`sr3UrqYs{dQp$EyZ#B>H4Du zE+ZfMCG5cf2psBn3*D(s9=YfNR(Ra_8kA5GAzX zxRsQjVa$K1Ltx27i4@y&m&}sKPx|ZDy6IbrU3ySxZQ?%iXK517 zy4-pb_t-jbsr000{&9mMfYnsvIzvXvix8Mbz;7B1mnx?mGwgsB11OEiirbYf}>1=(DP`N^@#s5USd*VM#bPRP-S&RTGAt z4ad#Qvi%XOL(Ed1cKe@>c)TcZCffPQ6(nUQTX7in7E;rMUu6RFdil1q@~_av+^4)| z`Tj5zSKVxdTGa}7Fu5w|(DQd*SS8h4?BT!4svL{=s*#LWHR2^=qbqnjK;IB zJl%(h$xu~^=!ntAls@G!O^O^+Ct_0NvwQxd()56cQxib#ZdLxp@en-?-2wjX2vc`8 z21kjmsxNKVEHprHhs8g|sgmp&OJInYMaWUojt`Bl%*!gJF@cwJIu-~A8rG|0fISR| zd&Fz6dd!ne?*g%4CGTIQdf3>+kJ%wbnic-p>*^*|X@r19QM5O71y?O07RzMoi1pm< zAQ(Ek^6$H;yiVIV<=gR1)+)`!4B4tqaUkX{Yp-nSv7T?5e}0ps{%GGlN9$0 zpRis0+qkQT5rTVUP*u+@QwAXS@Ht*Od7oaHPGeo`l4g4OdK3eKfqi3(u@kMs?AF08 zU*LPbi(T6i-TCU}iZ2Pbw^Ch1n^{e3cO2elXA%U5wuT+Z%}z_mJuVE}^8FF})`L8x zpm}h-nT^Z&EG|Duh>G7T5(b}rH`XGNrgKZuFJjQ!qdTcr;vsS)5t~up&g%~^e~fIu zw<@h~(HlbKH;Yy{M8+aUP$rX`tga<--flGwPC0+7Np92QO8<}_Q2Tj)ujLYW$DS<+ z07ic}@>ys&zlhP{A!pr5$pZ-VV_SyxmBH(=13O0ty;lkHqdW1%i{>s>xtX#1Tao|D zaig{Y==0ZtZP9h$WCXe)(GoAH&*eubk1s4+pS2MCO}$@f%iE-$8x7 z+@JN!4u|nuyH}mW4@yNX4{9?ytEM+Ke0(4FC=?==n#qh3dU?qA70~ zb;-`Hixb0yy?!*G+F(EX9Y?PYbnZNyJRegb1Y9tO;$AmKBo4HkD| zb|n28dmIrMw>EY#Ez$o8_ca>nTwA%(NkXD7ov6tJ>7!Y+%`ii=&iEUYV-floO&9aty&rx#v2LgyQ;Mn@e&?8)<;KKJ)i219m zY&2=9kr6NVc-Kjnzsv97va#iBgX8@&$-VJ{>67{7$KbXvLbmCGKL9K+ig2RiWB6rTHB-_9=jBb`FD;@`gNA5Y9+I3Q6oJd&yT_<86%9p=DWeUvx z&Tg#@m`zvI&bqvUT!pyyp!~5oNw2Q;s6Xx`YHrD5_^khIH;{6$q}NoNBlQ!Ji-7g~)7|73wwL2=45ez|I9ESUt~F`m74j$mOqI9KvIa4i4<9Dacmw$`;!~?DS!ed+ zwQ?(?{`DHm`2{=bL18UOHUB4jUHequ-t#tbR5$(|vF_ z%V|;FWFe?yP%G-$+>$)6w!O-P1x$%PO7OnJORho0!D2axik{@6oGIV}ZJL;x> zY)zAsUvoS|Z~Ges+Fv->!^)CiIm$Uagcx~ZN$)ss-}1sHM1dRXw>70z zn^)-%XR&w7JzQJqXNe)W?ksju}X zs7Kn^F7xO1`jMarA6j_sT(@zK8At$%3xU-YJ5V7Fw@z+s*HiiV(hJIx2d2+(05z(U zAD`X(%m`V$au}% zgQfR!1g4ZG{?#?KS@^I<+PuYt2WZC^^yuT=8vI(DljLgM&Qc^GMn5%av?vGazs!B= zO2rx`Own$*6-rM9&9F8A;Ip9iui%D3rt^zbSAa)m_#9{9i4yIJ;y6ICfa>vBVdsH; zAkVqnIiy#X!JFM%k|3lBOeoHEu0L2RUQ+P3cg$fb+k0RGI>%A1u+8LtB0Ha-Qc+9^ zt?k})bT$m&MqlLO>RCHre38XU?2{7zkN_NGYBEIjQ5>RPceXdLZ0lx1UhuqbCI5J@ z4$NVA&3?wPovd(B@G2*H9_(#8K^EdrQ>Qxtv?}~0V^Utm)HbH{zooezvWb3gM@S@X zV9>Jr`xb<%vIs;_l|&aN80ly(bv-R$Qg~~qqUeP$Yph9I4L1G(pgnKrD|3LnG&3^! z(*u|Wfh29V*LY*na zolm7!+lp)6i-_G&P<R+1*~s6=M0gXy9*$}mai=J9DZ<2VqWw~lDm*K z#qy6>fSv7M*V-Sg!!#cC)1ySb=}O%nkjM^-h*wk7{^hOyzf zJ5PEVADgQxV!>A&C%X2S3G&AcXzf3gLSN6HXSUHLA5Ic&jX0S((`OtO8oC+SBy5-P z-Kt{PM&pVr(c1hraIQ~^$Ck;J8s%PBc73LFH@(+eBRDnDWNOgmK-h3qYSy%@8wNW zLT2HGY2A1h9HW>^)ish zRm1&~4c4!k7e`eH5=p&Wn<$}R%krSEK|e;k6$y=3+S(>w^vF8p1T8_6LQu%3O=4>=^(i|Y_xsJ3Z?}_w%YHB@z3DLR3hMAeT3Qw2O6qw}x zVrXZ`u~Gl7uc?Q5GN{D`xnPPZIW|hE+@w3bab%q0es6&Wc=>yYL}?s6NrF$``8d;J z7w~=M+=&1!q-)Kh#l`LZG4_zb-5BA+(-n5K=X4v({9B-_Z}wc0)w?@I7HIZj1P<+s z28LQ@j%`iG$mts%Ya)>qs_ptotC~DUh$Gci(Rdd$TgvT)P+x1wy4wnv+%O-vM@onC z9k92Gr1eTF+_r!I?kA$E3e3rk?oGkmF2*Dq_RE?IOOO{E??TB~Ieq{x6t)kNl=k~S zFouTrTka@tSe!@F*djuAd({?8hBv!+uOJ_A=uR$XD7kcAyYRRJW4ZCqp73Z7-*wCa zXVXh&zxD20UB9j2)&G_fzOA0{X>8lLH_(On~8@8dFj}_W9Aw1dLq)^J&H!vRuF* z=VhLpr>aKuM9yz(Nf5$)3b&6kK?RYpr;{{=2QV*83pTY>8_iQgP5g<&{y7+)odCtr z0n_bDa^h>)#ftS2?Dco`rsAfIzw*)Sn6`f*jQ4&__xm}ZIANK$g3AcjyHe#dj=OmY zuh4OEgU8IfEcqWW?z7|pDr@uL6OO`YSK&w|rt%NBbt&x6puo@WAWxT$~q9Qm45b>hSH2wI`7{n^5^O=s>5vAy7C zPTs_oAObsxDq;aQ>R)R#1cHOSs17d3EJ+eKf&!o#zdI5_RUiok2#b+o9PcX$_$D6d zfD(}HMw_~viAUhETgpVZZ~?b9)hxW^0?wt7#6nh_b)-9J<E-JYAyuAr4{K2TXQ>^(Y*g?`_a1(gBTvXtvufLa(gLWGtkOw4>Z!_;hT zD(j7g2W*CbuGBc?t*oMXrDO##rrr~QFY4X;95gpyV^vgC)V_bI zth>}k#YoMQrUs1fx38XkG?=`gZxaLvOl_R4N+&D!yhzEm)@MK>U1Vbl)}5*yap#Km zYz+pye&;7^p~gKVy3g>y6fj`b+#C9soRIL>>L=HqLseQZ>QMhmI?$uKZ{wk?xX^?(R-0QBu0QyQLchq$CBAE@>|z-6h@K-3|ZT z_xr!^K94?dIQN`6Gqd;Fd!L!L+&)-DnDm>qqo4Hq~ zD;^^u$$g;;CKWBFcq=6)g{`bC^eP_fl6RPFhIe4Ms9!J zG^euabxn{I*TjsjIaAV;b?#zymhjCATr!h(H(0*4xU)?11_3wfRa94CuEiX~%5I#X zd!L(GOX9Hkyf$;$sy*k)(cq7v$bs76Je;ZV8sEAtb=LJmCL3NIC-p!psY&jNM40bG zLn2~@*~)oQrH5USa9tBK+T8HI7wi$MsF`LTf08-=Fyl5$a(XU+%qA_n*gSj0R0kwl zpn4-0^Zo08wb;>P?P={Bd%c|fbK7}wMRO^g?;B~n-=OxN^iA)m_%Cd9tEg9pq^r{= zhM6!+&wO|qDA~Ft14G*aO25`yn#ofTMCLo5nHIa&YG;QIkaUBT^*x{b{7(s{KYTaR zH{|k08Ma&2CpzTL1G}7*MIOK5>HEZ+4kTk>U<4Ew_ZBFq$ixu7`Z9lL)|c?^&{U~F z3@0#-d;6@_H;bjDj1LE_J*MF=H1*tzSoM1_zeD#szZ)Uu8yNg?e1+{S_Yq%w;)5NZ z7QXw>iGC(~yH)p&buHE+jS?@Z)Ytq}N_DhX*JGaZf4M_uWu}>HiC45FoayPkw8Uu! z8q_YMUC}O!svuhKg@z5r%3@pyv1*Q$m7$+y?tL#_;=4+6Vs_Zal3n5O^hOKltsCr> zh&Yez91&NzdQ|AblIzwvWyEz{>%ZUM0eg!K|MaU5Cf*sHK)(|BHMIdxbHst6})FQ;aetOqWg*Pdb z?q?Z}Aj&z<*@OMR6TYyS{ksm+1$WO8>3w418JBM|tqT(QwWf59plUK18wk&~7FKbv zsmp5{`G8Dx?bj4!@^M=56kR&BgjK+9W zo|7j7w_=F8b?pKT3nEWmP=jl&D;^xD*8`{V^9-2KC{yXCloxzvbPMV0wisj`oGrE5Ees;4h07g}#C*i$HEN6Kt0^nDPg(PB53_np2k z^5iun59WSme*gNF;35Atp86PNd-ewrN;|1dQ5CM$CuyU=&&k;OAC0%O(A+#orXeER z|2|_x3dp#wKPnas*gUV_M@tiJafay8P|9JJMQoX3PqVxCDJ4IiuHn+)>m=e1{JZdp zB)YXiyXHAtZ<41gtvSD$zMs+Gku&-FE<#j4Xj-W;Ey<6dNj#j!Ve)eI#!sIO4g!C= zbwM6{OB8{0wYhXER8;e)m)SZ^^|lDLX*h|E4r4)(@hQ;F<3PdUl{?8-J+^>SUx(L| z-1%K}0WoYp+_Ci!1*di>4CHw~S{W*KJCZgu(O`MYoZkHQJ)q-lT)7>8T8|#l8(`o; z-AMTMYup2sKjKFOxle07VgOD4MPixfMsgSsC8GB2ErM#p^ zUTJz&ZPaFQN5k?AZ?ZpO?51g^skFOR*sgSFb%ej3C_Wkv-lFBFeL+q3-J*KID3mHR zfq2t@D#{lo+m^-PV=MD(CB)6ew2p@LMWzE@uQQJ%ZajP2Ub`uk9g{TeP@1o}WD17) zncGk9U+Z}`YIYv#V-(*0-6)cn(bw!c;+IkTxNh>~@9tS0tNKFO&-)9W2C+0w;JggA z!}ZLDbR5CKeurrhMya5O*Za-mP}j|%A@i&d5;~#9K3636v-GGn4@ar>r1=7NX0E`f z#CEM43A3oWiV<5%tk1e^WOKo#S4V+X$G&B8L-{9@v9Mc;2NA%Obo0C`eeBm?rH08f zGU_>}KHKzml_4kF4cULFhgorGynXccE~`$~D`jrpIav$HlTDNCE+2HckRxO&t7C0})hd6NUqottlZFh*+%dSTXtGv9; z($UvUQfVJ_uRC#8w@kEEi}4}}T9Y97j=vYLWbxvZyhY)__alC#Ot61YH-GXc+~_i; zkX$Q)9&6%<$9sh{dcu~$L*@`Qgs8Lz3nm7%JN~`1R8X@$1Fink zXm6mIulQq(&T_P>lrOA;SNk3kF7gZitc?Bxc}T6r^Bv1S%6GMc9^NQuesw+fumTuS zB5lbB$jLPhiUmKX#6~Rq{dk&wyqT^Z;J9)0AMet?oK2mq`FxP(VLXI!P@XJ+pZ;mp zKn2IxOS-0CWg}U;`Eh>aqMf%z}a|!@F>g z1d4gL7js+u{=TyU44-$3g4RB&Zu$OBw7Q z{Vw0;w+a3aYHgJIN1GE|Lt>|G3!awlSYwKZ<8Zs@DZ#FkUCvTT-JE8l@|n9}ZU@CLc7&sj;Z~0X<9hAo1mE6!?7yXY z+j+e3vqk2ej8n(T3W= zx#3%;Os^9pV>-I77MxytrJ+}&y~5!}{@y$I0#yGO{5_H5^cKSm7drrcp^K0W3VTTx zNIFfYk}}m*&_#Qtsq`5}%e}F8N_Td}d?79L^ecIB0MXw#&nV~)H#%f8Eg$tIq6~Ei z)WyqjH#Win}2y6-B*SNVd{rViB(|HaFAZ&&FRU9|xA))!PKr z@MWbVpYgdK$yvj<4^EqX| z=wIe@y*Z;V_4&h;T|r2fYt5u_9k+V_*rgb1F&DT&>mREjAp2V6oRXMiW8j?U^-6P0 zqs>qmj3C{>`X@@Qmg7P8v&lk?rvm{5v0~jz za+GUe|7NV^@5pC!`8`;wvUuxou3~@HH~Z1jwTen84pqyv$#MU!9X|2EKU-4NY%56m zJMA;x&t|J-1QN}T7r9nMD6J#B1xv4hLoX*qmxz<~Kk{%dxxPNWCM#%|Q}RhAvmYVu z&uXI24UGOa$*-b@Ll%_v5F?Hu?Iiv#nQW>+RnyF!i67A%>d1A#&bdlu^ zwV8%PkzE@d2d#AO?YnomAzA#a2~?R?6m_*AmhrsY3XnvojWOC9b7BCKFen^`@!zj+DXBb{@wQ*$Ngv5Dy< z5Vz$E<>4<09dOb(mbUj}EfeR=9occvyr}7yyNEzC5Y_om@=5g7hjoYZ6?1P|A&I%- zq1~-q%W_W|o^fBG&X->ifzzv(m?1^2{#{5nfd^Ss?xRQB&9@;QgYd1ZO@4(@wN zEG{zJn4$cyv$Cr{r6o9JP8m#8-&2j~%pXU8mS@^LaYU&o6Bf4#XGxim_b;u3c%G%h zE!22mLC3_HWiR>nPJu$5Ns6O+GpAMxI^(PpwiM1rk~VFjVD(!gX#@{3lN7DS=d-Nn z0}QXJ9^Oxe*H7(Mbz9smn!4Gf7=E2o_g^acaqO2PkxLR?!$wMPw6op0H&&)2YYy0> zqCnPD#Rkbpa4YQ>#wkJ->GUhI_)+jCx+A~xT|q_$JBkFB_zr=y-P!6TK{{a<$Mog; zkCCenmIBwzPO!Y1s`4hH9S93+s+HfgJ$(;nc~oIf&c_U0=@C~f8e>F!n-UrBq`79c zAk9)Ui;)^4drPN%4}PlG(rR{K>7Tu=h2GSk{L~Alk`N;06$gfg+bAJoCVSs84TY}} z=H-V`AS#JNh@>rZWX<*VfV*|BFE+9_3~T@7t&*Ze41&WOf=hF?i>Yr5GBOZp285-PK zmEq$NIU%hck>56OR6D5!a%Y_k?BT!VZNU@PA1F_-ooinSQ9SZ~&~#Sc$BgXP;zK%d zaU)8?>}#DiJ&il&_@F8qd9r@)%`BZvUO(9H?v1Q98(16O-C!n)SCP>u#!^o!U(9jV zH|0Yb^G2|2Kf7CwQ)VoH?}O$clTm+3rQ=3JNLz&Me2lf#XT}na_cLxaYn*b?v64qx zO$wQIN%d3PCsTLCe_p10oYq@jM4?J2Qz?MOMT9AXOM&#o!;Xf}lJhg?Lo(WDh^z!2 zc}q5j4iO<22TobfZ0j}s=Tm35v9RSN*gY%3=z%`I9yk4Z3#UhQ&Rmd=crBgvU5%p> zCJUaBEpY)>3Cs?}GHn@rbUewC)aq#)tH=-jlu`DO@MneA!T`H5mKftCH;@ohKi!PE z9o-)*>FIeQ=7~`=3EvC~xEn0-zWeF!8216Wq;&g$>hC9l=gnAH`}N}BYMY?>F+Not zc{fUmI6|5+Gi;Jn459X$Bjvnay6S)R@^7EI>$H4?aT3LPM(qrn1kNd#wHrclt*%_( z`<3E_dYX0_>e%A=@4-aBM_#YhhCc^mft#7$QIr|_g_-E|R}|a# zVN&T}Dp1K$@b{)Hu?3V_jeFK@?-A~e&{WH?Qoma(^`dg&{_c#)Ax)JbBTpz3i0evs zfN8QeSHmpmsHlJ874fYQW=k)*vtgpwdCwdcgvJ=Vvsti>y`uVh5YM*~SR=v`C6q?& zy-Qg%gfV%1k#B~(OFx!-d6EF?)seXSVa1Z7cdy?gZcb{$J8tJM&OhqlVfyD~$)|sv zk&R?^9{S6y`1I&Qo+Cwuh@+18!w){gE+oyq;2cuVorjntqO7!8F@3Sxjaz)lEuAzp zq)TQ~@JFf5L+6;b{bAnR%=?D}U9Q^urdDacH0M5jM6Ne@{`W^;co@t;>QKec7W|>L zPIpuoMXTWK*u}bj?cbX+m>57LCuF)& zRTWcFo1eIO_y~rTP|;~5l}fLXFQ!31?T=ZRMB|DQtVMMT3Q=55X5GIQV>M!aJ?|}4 z0fHFUZ%p;Pz074&D$Ea>4Wl5Wg2OW4JlXDRMlAodpCL@~q80Z_)(*wT*Cl!%XXrN{ z9!I71_VAlM8-)X$5M_kEeKZcDrUXK*9wt=&GpQTbSk`ZGN_OhPTfqF!k88ECHRiR_ zwc4@tkBxgjiLkk?5@y}miQtA2rH{wlYwU5>jDA8W(6>QX381F8t$nZ_!VrJ(NoD&@ zbmqzEhkVI#c2M&qc(qB&y{(#2fBy8HPg8XW4Pm(Sz)RS}!ihe>l?z@1Q(^~98_lH5 zqgB6{t2f8t3S?=2?}?n#%hGOpuG4&KHfd+`Q8)FMmc9Vw$AZ-t#)~4Ue_qQdG{?|`e@`43%o3ClWNQjb(EabhU5l+T3DN`Sx z)YXZ3{f5~$35T3(a*Zz>lTTdg;LycKA@b*0fyKVJP6{chp2+TBV7m)oL_VGUW7MPPL6`iuvA2+Uju^dapX_X)Ot$mEWFS*5+;9hzU@7m z@F`$2e?@(_K?xQ=8NYwtmI_u&=W&1F>px;Cnzs~xJ1G;r6BiV42iGoV7aBY$5u%2b z$=0GUJ3KCv#Q?&FR;;GXzyGbTgTDTea(JMTJ<^)4K11~ku>Sm=e1WSB7wz@lnpkg4 zB1(RB^z`%bnu9lwr4@?aXV=tB+X=tR>cdwyHXVD{!(Tw~hUB{*=(&AGE+|yXa^6jI z4q^vAl0vKlx$Zs(B{JPzd~hNH2qtG@y{An|qsx~it>_ME@1&B^?_#`RV=x$db@ z9Noco6p9EY*YNjvxm6!_@0T3X)Z90|zUl<-O_0fwF=t_Dn(|LENYiKEz$?2$W3kp! zx4}ykuYIoYUe7$gdyAU6GsTW%rQ|WDb{1QG7U`7Z+hBbtNVMJtBu6j4o~N9sh^UyapmL7ts^T(X!Yk~ zTRLyB)j^dBDLwYvN1esnL}5SA@?#C@hSqpcK2`i8H^RVx=Dpq>7CX&;y-ot^ot*M-KlZbnemJ74J01+S}lxO)Jks4ML5_r)*`-whg{g`rutor^lT2gf7$cWR0hs}JRhu; zr`t-+#03te3R~l)c;2iGkn~hS)XIsl<-g8W3$yVG2lv8I0*cu_g+tj!EF9X3#44aWMQJ9qL*tIIU<_IKy zIx*wXzK7*tY!f-7-6@WJi&`AAjDIm0Z`mdka%M$ymY11~9L}md@2yB4ymdP`MN8y2Z^_s_ zJxy`xRGtN zYO97kl?BduCg@*Oj`Slx*kV& zFSduK+)QY5#6IIRXYfR_`mD*P;6E4~@;E1MFz}vqV9|d3T@n=cO?& zEJF@pU#w#N-QXAuC>IKM-7m5ue<5*o1g1dIR zM+$q&5J9n!K0OMQfGdwa(0OUCfq0J`%*`R0{;|H3dzHl-z7p&x3G!{h?Hva3lZk1B zCb~X8Q<{8w;>eZX6S7OoE;U2~uNWscB8f+K}saFKBCd8?O^} zZ+58k8rWjw9*vs(vBV9W=?)l5%`}=_K0$Jw4y|eM+$9F#=}VbEOE~=``%Q&GbTII( zh8a}I8*}YB5u&V`$OrFwTuTCN`EX=qmrmg^F3k<{gMxqU6QXJIIN1z)6ev1!E-h0Gjv(aeNmnE~ zO!+q7?wDY!<-kg3Mt@RK2@z$HmrdC4y#a@iPsRos2xo!c1BZ*E&NZgIce0aU>0Vy z0TLr_mh?JFl~=b(F<~il=cH=0O07rTegb5rBlPQ|r-b0ObE3Z8>aLrPKkx1H;zjM8 zvK&Rj2jg1Gl{^9ekn%(Ryvq4QJ(?E=-06;ugl}NOIsyQLyb3nYpE6>-y}^BYiY*WyeR zBqx8dV~V8aVHW9?Dbu6`^XJbXNmMh_ zkLDvD^SS>VVNFxXClm;hivDewK=kVJ5WZTIcx>=DLO!+|d^cLS9jmg4Kg|&N?=wP3 zlG|O^t19ZeVE?Do2vOGcHOWv{6w{}Fx~g*v_%4_{sJs1j3-7OR)bkSG{X*Rn&t?{D zs^gE!rH4$%VqJqUXsi#gNv$>7^Alvg%uA%yOw(FJRnEk>r|CxVSiASi3?3+(B4Wup zvDA)D!I~fK-~L&38n{7VUl51ach5-Z!tS3nk+@O#x7v@UCfUsyJAsPLq!*pkYlob< z`Ql?_R8(JYZ;ts$U846WulL7XIJpR6-<(BG#sK3aZWArAJXponojjO^Z1G6lv4mc% zMHm!G8n6Rqd#Y1y9ch6x0G@zZ>fPw{m#)?BB18aI7wi+f*s#(33&rM!i!wAASO-zF zGI8jEDsmW5_i?v}bawfpus;+ARuLZT1jWWVegb?GITbHTB-)A!mumV5Aw(j1Z)%w@ zr*aaT?)Oaz62*SaZAm8x_SEv@sFEXc6BX9{`Dz-mBl>Bvy|4iH@0vs2gsyw-P>B4c zPCZpX?a?0+*I8a+uUYTq=)1(}vc%IR9wcRT&7>h`d*x<(^#bwAS<%Ybu*UTRRZZQ3 zMV{wBkEr|vL3+QgI$cW)T)CVUz0$0_f!4_)j~b#q_jhfa8zR>oS9X3m@fFYbklS0% zUgGaUzYus{NA!%ygf%La@v@If9y61gpQV%QHa6LFM$#h|B|hBT#pThK*J15#OH|Gx zK;&07^HKftXqZ$JsJbsB*T8SnbnEXXM!vL;i5e!MB7q_f>yAm_5Pa-3FKs>V*raY^ z*XmU)-iyNGx1-admSu2|{Z5b5Xt~4|TQC{FO|&Wcx0{Lv?zcO)<)0sRn?aSj!r0POJSn3(NgQ9x&oSPz-;dqn5bn-`g?kvC+}d8?N~D^ntamD9^p3g0G)d!p4sJ_Qng8&4J%O^d&?E zpBT5?^~p$UK*Vn0Ldz-h1Ns?b{GJECJvwTEJEQ{riv?%Y7A+_A^F6<#s3($N&iudc z)@|A>SCDk86c$J3(h35$Q2dzf`cz2?35oS-QB%`*X4M4bk|lezbImK|`Gv*r?d6yQ8LaB|Wd*d?k+L7hsi4=&X&|!_6t)+&A1+2VQ((A6_DE z8(ziFg?YKf^Z>ay-4|W)z)BMH+SXYcYI=I)MjR3rfx&3;WYa&c`)*VBkVU&eGmeOe zh|FKVA$4`Q`uh6d4^x)JQnIp$j*gDo7yhm-@uq1jD+d2_JS00?zkqN6Mny&C=JwY0 zdlk6v=&p;){#4l~zQ~-Mx0qO1K(t5DetQzPn(M!=lez{1A|if2Vk{T{gY52D9>SmV z!f`)l*#t=!7fv}jxw7x@da{9mf#Fe69n;g-gGBD=K$HVC+hzA({-;6OzZ}Vl2?_i| zn(!x=m+z>lLswQ-K-DZNA}WfKiK%Q{&>yC)t*x`CCwrP!GED1##&9Rqg_NflI;@Uj zqr@Sh;3HlAU_{&n2yO9lb8}O99Vt9LJ@Ezs6Rsv;CI;<@CKJhuj70vM$W~*}1`E!? z7x5G9i6wy()Ouaf`os_DfT7wx4-a5ZAK(j?7|9ZnQ&KYPio`iIJJ-X3{qFi$SzH`e-|sg6`WoB}s1=Etm{2K$ zeYloo_Vba@#V$8D9zb=#^KQ4G`Ksll9i_9oo871rF_xHb?eTHHqLrGQJYcEWyV`UB z_t+5#@ZfXX;K#?uH$7g>Z|9R7hmrZo`uGUW*V#%Swt;n$;K|7O_|mfd?)o6QhKA(E z-O=QnoX~Yf81?hx3Przug@TJ_0Z9n6k*t`ZDG&W)=Pt8qHpBLp3e;HCi4n}Yf@M4* z=z=#ZK}*|Zm6hlx(T^H>o*}8J_|nn%V>yt`NE`-PIk_L^BUz<-&3|+cgxWy+2*7j% zJi*Yf0b;OV^d`Uo4F)MOIk~$nh{oIBey%2>#rOVSnKn<$)1CG4F%Aw+G!aiMXh@d# zQKK8t0E2qzTUy#)@9f9NM<~xXhPcE1VLcWuZZ}keskpcpMp=E~@p@TVRTUdbEB@|X zR$VvHuK=XZm;?lUC#xNOeSMY!lwB-e!0@Okq_Inxn3+X(Md3w(8^{3mVHBgN`9oam z>2jRi-Cd)JLY3U6CY{1!dOeTTSB{sH8s4@U!oGhhKbIK++VHi#k_ucflIZd&%s9Yi za!X4UR8>{O$MR&NxU8qbQHi+22bdwyV>MAj%YOG|Gc}fpy#oVSfP}6omCHKWftT25 zdpOf*tuw-Cx?I=j_H2`anp%2ea}z17gB;9-x5+H}%yst5%-yjh46&p_^rh-0`0OU( z9*4EllIrTo4S-#}^S9~1T-O$m%7|E4(238?WC9X96zb(VbigA}L%(=+I8T$ztV<7M zZ|L63%S*}0MWk|CCd^bBhiO(Bh3qW1w$d^(VsmkE8I9(M838M!U|^8faUS9_0>to# zM#o4%^NJG81}3m7k`nMqOS!t%Hk|b{bb$w9gtieqU0o{q#^(}x#M=Gd!+YqvxbSedDJTu+;FKVTqHHM zF6)YB>R*cK)a)D_U4S2*3i>l6Zq!Vpb3rP6(6 z1f>gd+`w(jY1#C#Oc%i3_KdjLJQ zPLZcmG$4^xTpW42-V+6&L-l7tK~!HN4GI_oRW+RR?GZe{(}oFgJH%XFU2R`=02)p= zK+R zq}o~#nlL(0BEV?&y2NBo0b)s=fPtPCifwMS?neuaMu69DEs~)e9cq~1XCvTo+c%w{ zoeGHB|9jY{$9pLqoeV(Zjw_CM3I_GRo(ClMY#t{DhSjq`!;Vw>z60y;>7oCiCJc03 z%IcRef$TycdOHU<)Vf=4)=;W|41(hj*R)5^*+Qdp*8oc^BlPURprB^s+jRRD3_vbt zftRkF1BMoO%&rbJ5k`6j1}P7Z2407iFX-*(0gmTGJkW80vX)0kguMX*G7gP8MnFDp z4M5OZ_VYu52XI~?=%m|;z+3p{@QkpdqBKZP~T(!0+fbgOk|J z9};1(SyjYDMDie}lZhjJ$H+M7{oK*sKF1`Ok(k(VvAQFD zmc&Kn5_aZl8Gvu2jTAR9FbJyhx!6$wv8RNKi%U?Ij+WLeGk11QQ&R?1V+<%`d;l_N z1Dj{U{?v&`C6gegoS2%z#KS}Ic#3;?e5{(a0o^dx>hBNp8XgV+J($!@iZ=Tf*4Xet zFPim~6%|oeB5vJlbUd5&;@S)>PX4K4ztT!(OCQo?#63O+?YOzS!^Fm(SaAnh9_6>Y zxKSZck*3}80%stB0k?8|tPIHb^XmAB-`EQ-8&#nb6NBEea)`03hb+24e0+U@6o~l^ zfYtEG$hAog{jTZh`nKCLbp~N!;g_#o0b6S#LkDmIhJIyxTLz$oyLVW}m|X(Ft5>g@ zKnUXl?gKS@o5ep#B9FVuLvvd${EqyYdh@Wbu&ns6L4a`VsC+O@YP@8?$_j!VuZx|w z8q0Cu7+FCSU~#HhUR>O6!j6HB9Xx4u`D9n6iHMABSK!<;hBSC5B)MoJ|toHaW70R%M(RG!BL^M~CAtR5ui5!WOh z-Jxv;f0vhA+hz*E+W(P}3PqcHDc(qcBPWaQ%Z9a|>1b(BmPSzm&|!fb$f6z4v^@4V zva+HFp+J{aEwBs~8*ZYfrzcPusd78~T&m76J3C7(=<#)8LKT{{0xe5AM#i7Ob^x3J zjGkxa)=*bxx1M6WyWH)GJ`L(EG+y%KR(QV7c%T0?5#AS6^*C%?wrBlazc3 z#3PazG>ocep?JFswpBo|^^1z%tEu5A6(j;}7$;|EIa%4aTwKs)?-K&ay3BasD=*;S zD}g{C=s=lRVsZ|S#4I6ic2IHyaV{-AJye`8BZC;oZ!T_K!9t^PKo|-hadL7JHLLY< zfBKWQ_5eUItyVuFu!{qF0zl`pvol&277(2ZLF3DB->?td1m^33szh~_VFx_?Yy44W z?x5}F(_w*QRuJ|6<*1ee0|8WBfanE4ZqRnh&zjVNm6(?B6!r@ z+UvgoaNkl=KwvvXef3Czd<5D&>=J9vyHw7Am}2KKn0>=zB=1^ z_`l$OT9pQ3kQqUMsY^cRiqy(kz+fprS2j9tuQ@e(0AZZIfq{-)7j~Z;2e4l%POoAc z?6t>Z&?uKoHie4nfHOc|2Y@abNQ$EQ`}_O&_;`SHxyi7tZUZFR-FEeGSp@UOaYDc} zfMglz-(44@+Ru$!->p;GjNw6)z2H1j1r*wJnDKz<={kUTiDXk~V?YQS3mU`E|D7hw zW337CRPj4!1WmS20vK9oh70xl!RXN51P^J$mvd&o3jsd1E$Ntj4I* z@D*g8AjpU6|LlU{N}tyRgPXzUj4r<728oD^+a8l4%LfwzXyA+pB!jqm0Q9qxoE#F= z8>^|QX_l#j$gv&B&j4gF&+-ff?iR*jObQPwF;~;rymI>ms$E)GTr6HN&So>i3eA5e ztu`ZQvQ|K>415xE;|Au_@$(Z@#RkY^wtwfc{%V>ACJ=ZqBonQz*5^kSGQS&gKR-X< zV$Xm`CP;tBnccQGHdukWCg=$zBO?kJU>a-SqJK@;f6yYw37#Q>WMUm4^@97dZ|aa) zaY+eO7!InM1bnFA)r|4CZ{G~6XH(ftkvYr;EwJwWFk%5DN=W2A?p*w!`L70XCFP7w z2>lG@@*)3s#BA(;(_D-Hf3_CCuW4PVwDw0J{R$$BK9H0lAtJ6o^=?3_!>HGk3gSh` zr<&5qQ44Em5kw^nJrJM*77k7qh|hMI&>5JROhJD8u*K6#&dQ1|A|e7zhdX^pJHB*! z-;tLXR6qtc!Ir#-hli8XQ!zv_fJJuoL;#1Nb%H&ef*(IX>tgspXyJW*WC~(9Ajlh^ zkO2D^lmwKdrQuQVm^c2(vzUTBogr13=Cs;4mA_lR>jFmlyawmwY?4iY>NXL8KY_UP0Zib*?_5z(3zAD{Lauyhq4@l8Dut`F&|!vlrPuY*P~a<+1~AuH31fmoLxGa(U*GFR1W_+9eh}QR z-JGr?k~i$+MtOkEg8-FZA|QNHRRvX=i&rflQDdflM8H~EOaLiKEiJ8$tu5dQfuePe z|ML?#vD*Du&&kONFh%?X2R1e~98OlmfY>C^r~=qj1^gc9?H~lSZctfpSP{+5%j+8+ zrsm+lN*Rz67Z21B*OADp&Vf!A?zPKl{T@)(Gat@Cv5gFsPS5q7vaqPZpp=QVNlE@m eNQn3S8G+lF#HEQoloW_*!^lY~NtTNn1pYrL1;mvA diff --git a/tutorials/training/source_zh_cn/advanced_use/qnn_for_nlp.ipynb b/tutorials/training/source_zh_cn/advanced_use/qnn_for_nlp.ipynb index 8a56a3bd1c..65fd4cd557 100644 --- a/tutorials/training/source_zh_cn/advanced_use/qnn_for_nlp.ipynb +++ b/tutorials/training/source_zh_cn/advanced_use/qnn_for_nlp.ipynb @@ -530,7 +530,7 @@ "cell_type": "code", "execution_count": 16, "metadata": { - "scrolled": false, + "scrolled": true, "tags": [] }, "outputs": [ @@ -538,21 +538,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "epoch: 25 step: 20 time: 0.580, loss is 3.154\n", - "epoch: 50 step: 20 time: 0.532, loss is 2.945\n", - "epoch: 75 step: 20 time: 0.643, loss is 0.226\n", - "epoch: 100 step: 20 time: 0.562, loss is 0.016\n", - "epoch: 125 step: 20 time: 0.516, loss is 0.002\n", - "epoch: 150 step: 20 time: 0.658, loss is 0.004\n", - "epoch: 175 step: 20 time: 0.554, loss is 0.000\n", - "epoch: 200 step: 20 time: 0.504, loss is 5.146\n", - "epoch: 225 step: 20 time: 0.493, loss is 0.001\n", - "epoch: 250 step: 20 time: 0.549, loss is 0.091\n", - "epoch: 275 step: 20 time: 0.502, loss is 0.018\n", - "epoch: 300 step: 20 time: 0.616, loss is 0.000\n", - "epoch: 325 step: 20 time: 0.545, loss is 0.004\n", - "epoch: 350 step: 20 time: 0.499, loss is 0.003\n", - "Total time used: 211.59854197502136\n" + "epoch: 25 step: 20 time: 0.592, loss is 3.154\n", + "epoch: 50 step: 20 time: 0.614, loss is 2.944\n", + "epoch: 75 step: 20 time: 0.572, loss is 0.224\n", + "epoch: 100 step: 20 time: 0.562, loss is 0.015\n", + "epoch: 125 step: 20 time: 0.545, loss is 0.009\n", + "epoch: 150 step: 20 time: 0.599, loss is 0.003\n", + "epoch: 175 step: 20 time: 0.586, loss is 0.002\n", + "epoch: 200 step: 20 time: 0.552, loss is 0.045\n", + "epoch: 225 step: 20 time: 0.590, loss is 0.001\n", + "epoch: 250 step: 20 time: 0.643, loss is 0.001\n", + "epoch: 275 step: 20 time: 0.562, loss is 0.001\n", + "epoch: 300 step: 20 time: 0.584, loss is 0.001\n", + "epoch: 325 step: 20 time: 0.566, loss is 0.000\n", + "epoch: 350 step: 20 time: 0.578, loss is 0.000\n", + "Total time used: 206.29734826087952\n" ] } ], @@ -570,7 +570,7 @@ "\n", "ms.set_seed(42)\n", "window_size = 2\n", - "embeding_dim = 10\n", + "embedding_dim = 10\n", "hidden_dim = 128\n", "word_dict, sample = GenerateWordDictAndSample(corpus, window=window_size)\n", "train_x,train_y = GenerateTrainData(sample, word_dict)\n", @@ -579,12 +579,12 @@ " \"around\": train_x,\n", " \"center\": train_y\n", "},shuffle=False).batch(3)\n", - "net = CBOW(len(word_dict), embeding_dim, window_size, 3, 4, hidden_dim)\n", + "net = CBOW(len(word_dict), embedding_dim, window_size, 3, 4, hidden_dim)\n", "net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')\n", "net_opt = nn.Momentum(net.trainable_params(), 0.01, 0.9)\n", "loss_monitor = LossMonitorWithCollection(500)\n", "model = Model(net, net_loss, net_opt)\n", - "model.train(350, train_loader, callbacks=[loss_monitor])" + "model.train(350, train_loader, callbacks=[loss_monitor], dataset_sink_mode=False)" ] }, { @@ -631,24 +631,24 @@ { "data": { "text/plain": [ - "array([ 2.2985651e+00, -5.9529102e-01, -1.4730859e+00, -8.7775314e-01,\n", - " 1.5892730e+00, 1.2431808e+00, 4.6158323e-01, 1.4650096e-02,\n", - " -1.5554352e+00, 1.7425102e+00, 8.0435050e-01, 2.9033291e-01,\n", - " 4.5533547e-01, -3.3123956e+00, -5.0230217e-03, 1.4551424e+00,\n", - " -2.2800403e+00, 2.8021520e-01, -6.8450904e-01, 3.2497895e+00,\n", - " -6.8959081e-01, -1.9466689e+00, -9.2352051e-01, 1.0398046e+00,\n", - " -8.0794984e-01, 9.3039703e-01, 1.2520922e+00, 7.7605700e-01,\n", - " -2.2833204e-01, -6.5232110e-01, -8.0807763e-01, 3.1698236e+00,\n", - " -3.1225615e+00, 1.6280267e+00, -2.9284138e-02, -6.4399004e-01,\n", - " -8.4129974e-02, 1.6495787e-02, 6.7466281e-02, 4.9414963e-01,\n", - " -9.5305812e-01, 9.5651263e-01, -2.4311234e-01, -2.3619778e-01,\n", - " 1.6919808e+00, 1.3713958e+00, -1.8677666e+00, 2.2548558e-01,\n", - " -2.4450117e-01, 1.6238995e-01, -2.4916198e-02, -4.4683918e-01,\n", - " 1.2642978e+00, 2.4357845e-01, -7.0971340e-02, 1.9800837e-01,\n", - " -2.3628614e+00, 1.9120242e-02, 9.1549194e-01, 2.4992308e-01,\n", - " 4.3245099e-02, 6.1443973e-02, -2.5041349e+00, -2.1672893e-01,\n", - " 2.4449271e-01, 2.0587114e-03, 3.3346687e-02, 2.3458574e-02,\n", - " 1.0729489e-01, 6.5198225e-01, 4.1606693e-04, -9.2881303e-03],\n", + "array([ 1.52044818e-01, 1.71521559e-01, 2.35021308e-01, -3.95286232e-01,\n", + " -3.71680595e-03, 7.96886325e-01, -4.04954888e-02, 1.55393332e-01,\n", + " 4.11805660e-02, 7.79824018e-01, 2.96543002e-01, -2.21819162e-01,\n", + " -4.67430688e-02, 4.66759771e-01, 2.75283188e-01, 1.35858059e-01,\n", + " -3.23841363e-01, -2.31937021e-01, -4.68942285e-01, -1.96520030e-01,\n", + " 2.16065589e-02, 1.23866223e-01, -9.68078300e-02, 1.69127151e-01,\n", + " -8.90062153e-01, 2.56734312e-01, 8.37369189e-02, -1.15734830e-01,\n", + " -1.34410933e-01, -3.12207133e-01, -8.90189946e-01, 1.97006428e+00,\n", + " -2.49193460e-02, 2.25960299e-01, -3.90179232e-02, -3.03875893e-01,\n", + " 2.02030335e-02, -7.07065910e-02, -4.81521547e-01, 5.04257262e-01,\n", + " -1.32081115e+00, 2.83502758e-01, 2.80248702e-01, 1.63375765e-01,\n", + " -6.91465080e-01, 6.82975233e-01, -2.67829001e-01, 2.29658693e-01,\n", + " 2.78859794e-01, -1.04206935e-01, -5.57148576e-01, 4.41706657e-01,\n", + " -6.76973104e-01, 2.47751385e-01, -2.96468334e-03, -1.66827604e-01,\n", + " -3.47717047e-01, -9.04396921e-03, -7.69433856e-01, 4.33617719e-02,\n", + " -2.09145937e-02, -1.55236557e-01, -2.16777384e-01, -2.26556376e-01,\n", + " -6.16374731e-01, 2.05871137e-03, -3.08128931e-02, -1.63372140e-02,\n", + " 1.46710426e-01, 2.31793106e-01, 4.16066934e-04, -9.28813033e-03],\n", " dtype=float32)" ] }, @@ -661,6 +661,157 @@ "net.embedding.weight.asnumpy()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 经典版词向量嵌入层\n", + "\n", + "这里我们利用经典的词向量嵌入层来搭建一个经典的CBOW神经网络,并与量子版本进行对比。\n", + "\n", + "首先,搭建经典的CBOW神经网络,其中的参数跟量子版本的类似。" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "class CBOWClassical(nn.Cell):\n", + " def __init__(self, num_embedding, embedding_dim, window, hidden_dim):\n", + " super(CBOWClassical, self).__init__()\n", + " self.dim = 2 * window * embedding_dim\n", + " self.embedding = nn.Embedding(num_embedding, embedding_dim, True)\n", + " self.dense1 = nn.Dense(self.dim, hidden_dim)\n", + " self.dense2 = nn.Dense(hidden_dim, num_embedding)\n", + " self.relu = ops.ReLU()\n", + " self.reshape = ops.Reshape()\n", + "\n", + " def construct(self, x):\n", + " embed = self.embedding(x)\n", + " embed = self.reshape(embed, (-1, self.dim))\n", + " out = self.dense1(embed)\n", + " out = self.relu(out)\n", + " out = self.dense2(out)\n", + " return out" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "生成适用于经典CBOW神经网络的数据集。" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train_x shape: (58, 4)\n", + "train_y shape: (58,)\n" + ] + } + ], + "source": [ + "train_x = []\n", + "train_y = []\n", + "for i in sample:\n", + " around, center = i\n", + " train_y.append(word_dict[center])\n", + " train_x.append([])\n", + " for j in around:\n", + " train_x[-1].append(word_dict[j])\n", + "train_x = np.array(train_x).astype(np.int32)\n", + "train_y = np.array(train_y).astype(np.int32)\n", + "print(\"train_x shape: \", train_x.shape)\n", + "print(\"train_y shape: \", train_y.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "我们对经典CBOW网络进行训练。" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch: 25 step: 20 time: 0.008, loss is 3.155\n", + "epoch: 50 step: 20 time: 0.026, loss is 3.027\n", + "epoch: 75 step: 20 time: 0.010, loss is 3.010\n", + "epoch: 100 step: 20 time: 0.009, loss is 2.955\n", + "epoch: 125 step: 20 time: 0.008, loss is 0.630\n", + "epoch: 150 step: 20 time: 0.008, loss is 0.059\n", + "epoch: 175 step: 20 time: 0.009, loss is 0.008\n", + "epoch: 200 step: 20 time: 0.008, loss is 0.003\n", + "epoch: 225 step: 20 time: 0.017, loss is 0.001\n", + "epoch: 250 step: 20 time: 0.008, loss is 0.001\n", + "epoch: 275 step: 20 time: 0.016, loss is 0.000\n", + "epoch: 300 step: 20 time: 0.008, loss is 0.000\n", + "epoch: 325 step: 20 time: 0.016, loss is 0.000\n", + "epoch: 350 step: 20 time: 0.008, loss is 0.000\n", + "Total time used: 5.06074857711792\n" + ] + } + ], + "source": [ + "train_loader = ds.NumpySlicesDataset({\n", + " \"around\": train_x,\n", + " \"center\": train_y\n", + "},shuffle=False).batch(3)\n", + "net = CBOWClassical(len(word_dict), embedding_dim, window_size, hidden_dim)\n", + "net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')\n", + "net_opt = nn.Momentum(net.trainable_params(), 0.01, 0.9)\n", + "loss_monitor = LossMonitorWithCollection(500)\n", + "model = Model(net, net_loss, net_opt)\n", + "model.train(350, train_loader, callbacks=[loss_monitor], dataset_sink_mode=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "打印收敛过程中的损失函数值:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.plot(loss_monitor.loss,'.')\n", + "plt.xlabel('Steps')\n", + "plt.ylabel('Loss')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "得到收敛图为\n", + "\n", + "![classical nlp loss](https://gitee.com/mindspore/docs/raw/master/tutorials/training/source_zh_cn/advanced_use/images/classical_nlp_loss.png)\n", + "\n", + "由上可知,通过量子模拟得到的量子版词嵌入模型也能很好的完成嵌入任务。当数据集大到经典计算机算力难以承受时,量子计算机将能够轻松处理这类问题。" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -693,4 +844,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file -- Gitee