From bd4310f0dc04c0ee8a8aa5cf3ce45f018997df0a Mon Sep 17 00:00:00 2001 From: whitekirin <113206109@gms.tcu.edu.tw> Date: Sun, 15 Dec 2024 03:55:05 +0800 Subject: [PATCH] Modification to pytorch not Finish --- .../__pycache__/LoadData.cpython-311.pyc | Bin 0 -> 2721 bytes .../Load_Indepentend.cpython-311.pyc | Bin 0 -> 5785 bytes .../__pycache__/Loading_Tools.cpython-311.pyc | Bin 0 -> 5637 bytes .../file_processing.cpython-311.pyc | Bin 3060 -> 3859 bytes Model_Loss/Loss.py | 15 ++ .../ReadAndProcess.cpython-311.pyc | Bin 9711 -> 3420 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 158 -> 181 bytes Training_Tools/Tools.py | 27 ++- .../ValidationTheEnterData.cpython-311.pyc | Bin 1081 -> 1104 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 152 -> 175 bytes .../all_model_tools.cpython-311.pyc | Bin 4519 -> 3292 bytes all_models_tools/all_model_tools.py | 64 +++++-- .../__pycache__/Grad_cam.cpython-311.pyc | Bin 0 -> 5455 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 146 -> 169 bytes draw_tools/__pycache__/draw.cpython-311.pyc | Bin 4041 -> 5585 bytes draw_tools/draw.py | 10 +- experiments/Model_All_Step.py | 131 ++++++++++++++ .../__pycache__/__init__.cpython-311.pyc | Bin 147 -> 170 bytes .../__pycache__/experiment.cpython-311.pyc | Bin 16356 -> 9086 bytes experiments/experiment.py | 169 +++++++----------- main.py | 14 +- merge_class/__pycache__/merge.cpython-311.pyc | Bin 4750 -> 4904 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 418 -> 441 bytes .../__pycache__/processing.cpython-311.pyc | Bin 2422 -> 1784 bytes 24 files changed, 284 insertions(+), 146 deletions(-) create mode 100644 Load_process/__pycache__/LoadData.cpython-311.pyc create mode 100644 Load_process/__pycache__/Load_Indepentend.cpython-311.pyc create mode 100644 Load_process/__pycache__/Loading_Tools.cpython-311.pyc create mode 100644 Model_Loss/Loss.py create mode 100644 draw_tools/__pycache__/Grad_cam.cpython-311.pyc create mode 100644 experiments/Model_All_Step.py diff --git a/Load_process/__pycache__/LoadData.cpython-311.pyc b/Load_process/__pycache__/LoadData.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56b80ce1378091db080aa61562c5adab5100c242 GIT binary patch literal 2721 zcma(TZ)h7;{9STMUc02ty3H=p){Lezf!fLbd{`~fxnZ4jW0IvgNj@ci7r9W z0~psri(bH5_8=qBI!9;~z%>^wcWQ7?yJ@Ij)95aD8cgh+mM$oHaXP0PPVWqnas`nZ z>hw)11%*h4MjE(JUs_a%gGDh{$Qhytth}z|7aTtmpgSSPOkYd+NeFa1J))S&OArWA zr$LXwTKW5BfKE)D*9}dTG8e^+RLCggJcKMuBsKP8Z2gPt>!1I8o&{*J5lDv6_>C`K zA^pIAHL}^W<1ND=+mL=3wtrSoEgCEFH~MSQ7uaWbti;>+*+)3^Vcfy@!Csiq{#N1Fn z{^r*D_tzhP{Atohs2`o(S;Y_;ktoyhArM-f1mUU?-~m=MqMXYZqM@-bu!bqC?-VU3 zr>`x62GALrYDsjpHWjez2)&-s3@P7n$}-B$pcvUr z_BW?54cXgnsD!%O3DZNG+~RSqU?>H{@#d9+v&%g`0o9Y!3KF?OyKbidCrt4!-cS}! z7SSofoza1{?%@bD+bXYX0~fQ=8B_&^Q!S8=R@ zW95M_(_ioY_IYdcs6Ber!V@;0F!2PtAF1Gx@>DfGQHf7j@ktvhFk4N{R#LN8>YSZA z_nYvxIe)>PS1qAn3k3^nHr7n6fzs&yYUEHQa_HV0lqFqBrLELiJ9XBao3GBPl{wX# z)9g9TiY(fZ#Zn(|gojN$#Hu-o>7Xk}sv?R`uPCaTyp*SKP!!);lJbokHi^g(jWJI< zAak1&YRg^WsQr_N?;pJ8T|rmFsWMq>K?x@R7cxv;T~VIj@<2; zkZ<@NUq|qHijBRBDLoBud#-b~jxWG}lEh}Wgaje9r#R6rlFr=GJMw*Jqy4iPKh9t_ zHkhKjsG*cL>wocN!-Xkw1W@V>eF?U@m*cn^I%0PJYUrf7-LHm5%ho5oRMF;%ogjjcqnT_>&6Ot6|XaUwT%u(nECRyAowuKu_b zU7&^p1ZcM?K(Kn7v7|#fs9T!3NCUWAR%BQMd6136@L}DKbiu zsBKD`Qs$@`x6MgQ${Mxeww}h4w56J&O(`l$k%WmjL9o`32-bGXL=d;(r|Q3HL>JJMAXchpti7PsI9C8 zY8%o$+QiyG*CwSKGd`JSxmhkPaG)lVJ7w1KM+-##r>|i4LQNd>Zo%(1{M3>om|By_ zk`AEhI&jxuR39upGpb4H3_AAPV!F`LOI3=|Q+nYV(ritRMgC9AZJr@2=$0`oG6 z<&j*!S+QifeE?LXs-7Jv|ZJbBW5%UG4eL{=7F9yq1rf3Zmp}yNLkg@R+r3Z8X9ype~+%( z3?px259?}aq$^8+4_G5}E>OZQa9M%DW}XE*pF>FY?VVpd{>$Y@zx~8M*A3nGW61=- zL?V-})6sKi_vkvMpHjNxoWN8KhXsdL!A7wl35rgRVx8p^X+be(1zs^HxwK-hi%{C? zZB-oDe=EpRoad0H2(K7ElM$4zpVjr!Mr)SO0}d04qiWMkDwaskKik-J^)y{DEBgsl zmxzkbU-lg<`HnqsO1^Q~H!e}nf(bV-3@#pfNVSSi`tyO$vrB_t9+URIDDQny@{Y*f z5y?4nFE2SyOVk;eIwMkNR)a(3;8-a*CZ2v<3dZDMOriq7$926+?g?NU~T4Gk!Pb_VHy3rqIYnnb;|fyPvSQ*Xshd25^iEt~Q- zmdsN*YnXWRM!q>`D%Rqt#u+sXF5GO?3N)%a8C92IjGK9zfV`ku^sC6}=CEeuMnZdy zZi8f-QL?eOwHxNlMI9W~dFM8)1i+dj^7bDvuc^Vj7C1KtoD>Q`n@Y}Z+!aiT+|tf)T9BcxQEqcsLNH&Mt$ z73YP7kmQt(44;T6(!df28I0PU#xWdt_)cJ!Mb-d0OTAzW=R06{et%==ZWwUfh}kdU z#4iyK-NTami0nQhQrlO1+y!UF<1KrRmOMwrmnJ07r0kg#shxOmq~sY9kDir06S8Ll z4bp?l=kA_=(0=zVnGTD`qvCl+K0htSFUsc=^6?qb^Da=W`t~k$EJO?Eaft5jd>}@gjjyyIc^{{deTR8R5(Y~-}asTz$ zVxTxIbv$=x@~@rC(XTvrJyL&2?hi>Fp$BKAjaIn0tTO9V)p)5B7+!oR{1e zWcLM$+Fq~}W-xhw$<@EaO0EIfHBhjux;hu4qRS&vp3Q*^!83BXr>EeszCUmY8a!>x z`yrs28i%Pkq0grP)U*&{gbO3s0EC)~2q`udJqMuCf{UK;7IbcF11xETR?J(=-83?2 z80SGiH5XAXys5y=28G)CN?>1f&~43G(d{O}dtj!&nMXSENTAX-38;p_Wi*4XT2*jD zQ9uJ0NpyYGhLxt;C9)ZNFuFe~ z-3CTXRUxIViarPd5%6TQNPQI!R4AaKKYySx6d<1Z+!L#S*c^sQ+223~aM0nEI(%}6 zuh8_c%PV#Hm%6@mOTHo5HzZNd%hdBC^?U`r_m(JcF?@4u z`I&O?WGQ%33XaLav6ZtDH7--*A~jy2_m=6Q5u&_@gAto7p0^Mq7wA5{*ZRJS_za~Lvxf|#kCR|2O_@3G3 zdID8%8E3zXW%DV$*ZprCjr<`M3}A29tRMDDD?enlIo&FZyh-Bf0r*Z}++p30jewkV z@&~R=H*c%GGD`nZE7Pr^&izNOOveMQEQh{{SX9)&`4Zm?qkb!oc3SklO}C{8YR@DTEig7Twp+F7`?eT6EBB|6d6eS7)IGN6-jdwBc(^ zI+o%XMzJ$YD#OmfcRWUMFwA>%v84KjN4FY&C#p~a#nY%l$MFS$*{J7(t{*(A5bR{% zf$Ea>w{EgqTh|G#+HSQ*$#p_kJ9k*=bwaCNXhvPF+SX$2S|>JFs(2(c;KZ9!BOp;`Uh=|6gLL3o|PlfP`#;4J&ut+p` W)-5MU685lh{VzQJ?=9ZqCHxnVTQZOU literal 0 HcmV?d00001 diff --git a/Load_process/__pycache__/Loading_Tools.cpython-311.pyc b/Load_process/__pycache__/Loading_Tools.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2cbc0d0883ad4b9c5a0545acc2d30e4ad7053474 GIT binary patch literal 5637 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 MkI}aJ9}fSxXYd?d3jhEB delta 781 zcmZ{h&ubGw6vuZqyOVC3#A*{uwf0A#>K4tmsp6qR50)U*CJ{Z^!?Nv8+n8h%-fl}Q z6pQpCUJP^TK@{x43W{JAFCP2@ESORh7KC1EJx1uoo_rHZFY2&-nD2Wt?|tVj@80i- zzKBFZ60WU-Rd$iqq7O)}RvU@2(A`!M7HdYfTUV4j;o8?+;vi*|9M51zCU?!qL3tLe zl5wMK*=7aG)68`ZK1n{2mm6Jj2RRK2ft7di z&a4T%-f~{kiLaC}k>Nz^8E(e{(CkdTvN`Q8=qhN!h&F@oF&(SKV4$hRouY}8;J3B3 zaSmfHAkcm6`sVOv_4CrV?9^6vs-CsCvvz%)ZI82hjD49a)MEuc86M=nwZ4!pgNnB@ zdW5GU1IcFlV;E=-vuOnSh13zgT(Ny^44<6FKg!?=Uyk&VXZ(32bzf0C8`2TNMD1xv zN1#L<67mo57<-!OGUXAvUQN9{YU+yPZ`)~XbvHgD}n*II&QR&#R diff --git a/Model_Loss/Loss.py b/Model_Loss/Loss.py new file mode 100644 index 0000000..3a09fe3 --- /dev/null +++ b/Model_Loss/Loss.py @@ -0,0 +1,15 @@ +from torch import nn +from torch.nn import functional + + +class Entropy_Loss(nn.Module): + def __init__(self): + super(Entropy_Loss, self).__init__() + + def forward(self, outputs, labels): + # 範例: 使用均方誤差作為損失計算 + # outputs = torch.argmax(outputs, 1) + # outputs = outputs.float() + labels = labels.float() + loss = functional.binary_cross_entropy(outputs, labels) + return loss \ No newline at end of file diff --git a/Read_and_process_image/__pycache__/ReadAndProcess.cpython-311.pyc b/Read_and_process_image/__pycache__/ReadAndProcess.cpython-311.pyc index 5efc188a48a64ea3b84d3c44c71d68177cb574ed..07744b3c0fd56e29b495467213c3b5851606481b 100644 GIT binary patch delta 846 zcmZ{i&rj1(9KhduTeo&(oq!7BmW{xIH5fghF)~Ro1P&yN2IbH|>SJxTY1=KY-2pFL zNIc^^@CRr#(L@hB%fW+ZFJ2n|0Om!AN{ko%emjXV>Pz~0-{0SFzwM{x4`ceXY&JvS z+?!sh?`3xM(Tz)>?Gl^V)Fo#BrY2)#iP&tL*omi%kQeaukD0LP3NeyBRI9aL*7!P( z`8)&aE^&xSZDKN8+j(Bhs@ud=Z3d~CC@gzIuE?ip+!j{Kt4Xeienj_Y3 zidJ24uXLfb|K#ERnfFKPh^^ed%jz$)E z$gTNK-E;hqhs~C6$(PD39qxWq-qIl)rS}6)F9DK~5_$P1J$0^tN-}O2C2gn>DK6h| z+_+tk1TXdwnjBQCbX?w5*Xe-VQ;){;;1UyvNkkcO7I9orzSl~yjU#Q28uD_c0eQEw zkM2Z@;C|hSV-2O>IORHiJ#0kjTFVb%`Y036V7bj8jA%1Zpe~L9bAS}(JbvG?euq4m zhObwUi+YYO%2oY_J^)b$6PQ*tH2H0!T){s~oIw;32I3;(3IdlYFe`2#@U>&05CpO@ zX{{^D*a7(){Va@wE#h~M6u;xOH$}XkxX_=)zpE9mWp`X>PRv3$#SW`-t6Z2rNG?$d PP5#Zp*#6}|-gu0k;5oZh literal 9711 zcmdT~Yj6`+mTtXeTekd^vB4m0@B?gvO*Rk*!aBT?0Zb+{`xrt>CDd(OAj?X(9Kew& zhes@fDa^!x0f#XOam>rGvyd@hljYCW?4K=}auuqsauvJdmaJcRD%q;k{Fy!HUcFip z&P>hz*;f1X?c3*ZAKyLq^l5*SnVHVO5h&ZweNf3Tf54l_p$-?m-w1_^49lI%uXL!|)O*zmM#=18Sk(!JRgWkc<`(?XW3Pr){DP^{gz&cMhCgiQzL1SH*zUvKcLzlS1YiwqgwXyA{u_}`%bQ>N%r zrZMigJ{^dbJqkBUgpUJJE%FKMQpu!IH#s~ikJ6)TRwi((o#kbWTOZ+Km=z3P)TMD} z#A-a65op7$Xgd_luK-A0nxh)0o?Z_r4l##SzhVw4JZczmRR<3L+*o(u=0NB$6q~BF zqRRGhy{NUf@i3{P;oaTuZ)@CY*|KNXp7(Jo1$!qarfoZH<6LfgyHnJ-c)QbGrR5Rq zqS|G3w~BguTZ@G->ab+xc`<`ZvgAg=324_$4jwxo>RULsg$3;X#C%2A(m+VSQSN45 z5GK|Fnr?mH<`!jjZ0Ne zHO9sw)zcyklx2v)xgv;J0yA=vX<@pQ9>rGXLwA=7(4&4OdQ^WAdNdy8a1=9ODSF6I z6>&6-N8?d@)QPA{#7o~Ez!-5`R2{*X)}0wu&UmzmGJr9rOM6t?*G8`~jJb_5xdTz; zdX#bvfJ0>ykE~T`d^TM893;6wM6K23;+!m>hc)>~aOg#)({u?#X!iirdTsmuoa?{v@~|Kv~fRRr=QNoGRNjUAAi~d-rtqZXY>+oXJ}PNX-PT5i*lq&~H7bAJF&5{laj~EP}%S z09b=pjRN)Q()TOW{!rNAVgJg#xPtpQvJ0Bk=TAl%q=_Lpu6r zawOslR~`COz?r%OCyV+!=}F(*rSrl5&!nLX!QLJMz|f!J2x0rcp)G}rsIv+LXMjY( zeZ<9yx@Jea)xEA>)PYB9wYoTd8M3Rx{tsQ4sBu{La}EMS0h^29qsS|unhw0Gh_MJ{PoT$WBs(T-mCT-^Uius zc?RDe){j=+Yn(E^K5cy6tDecu9ncRJoHGs>y&B-@{|E0U;NW;%@G@V9-5_}QPbkFs zvfT;0SPT~``Rx7;xWKtrbiy{#1v_JEgm@CHDVV;dzYHD3`-J`sy$Vk`zY@xPIg$z_ zB}n4u7`8?TbOccidz&Dtkjf`H)7j3qSsnIH;#xXaEjYO{-qm1BumAy9V$6YA%Y*f< zN-H76yJaRfe_++%FV3wQSo1u$@>y=>o!r~SQ@O8A=f39M;?FG@RGq7Wf+73t&Qm)F zRa1r~(}pEJa!LS?!-MMHqkTtx`Vum~A)G54Ha&7g7yW-j%|!->{UBM+d|C@E!Y^Ud zf~yLy8mE?3x4=EC0jh}~YIk&bGmJ+q2Z8(!w!)2FS{XltB_1uhaeBl`a>*{8he-`6 zj}DeUv^f?h!{XP(>%@q=Z<7aOXKfQ-4|i26G0o<%3WB})NL{R0A1kf{7Gs3PLRNQO zVnuyo#X9~qP|mNX7Bsxo*}{n`2j>)xZPtSvRbz431$UL6ZemryDrUIb-Bt&EDrydN zuppH|90su~@T-tZVHdTas>R(Z;Kqs`1`q0Gj5e#o*5RV;oTZ%!3fOcz#6 zggcy^Ro|4XzmcWVCMR=yY-IlxfYhX^nTgzhwFIlDcOlb@$50S5K8} zpDx+%-P&K!|Ixsr-X?F;3uB%)gSw@> zqDSJU0S;u5M+F#BbYR#q_toU=2_gKk1%9d)KQYfFzIC0fRH#b`hJaAID0&B ze!L;dfQ-$Y72bHcLw13)*Z>F|Z*DM4AgJ|IM%c$my z9(Xi2dM7wJ7CiQ7?aPV2P}U3vSjT+nS&UZ@0HQIIFWZbyq@{uFpOWcPKD=De&lm^t-XYsvD_nCX5>G z5gj{fP&)Z-)LLSPI&D@9=MwCWb|*A{@0Lb$@Y1BzcLByCQVoNSZG1d9ck>L4dmUHv zdMYi4TJ5l+AyiA4$iU!TsedHU(;FNZjpK!%dvS&yjX-_y?g?q=OrnxQcGlf$5nAodZc9|pgR#)#t3=hOv*X>tZ||V^gA)Po z1!_Wu7y?a~C!f^TR+% z$Ik}u4^uQJ8L6w;3SGp8U{~=vJAMaL(%woZkArAp_pou0NN6z6KKX2}=Vs`_=b_63 z=E|C+ZdaREC)HJ%XCIyh5wJn~4X~#zOl2lXd{cek(lH#0vv=o?PeP|)K&YM%YU--Z zYr$mQhwyyP+ha}^j^i;0uZ&CmeJ>}j%ysvrV6CfNYfd(01`V~uNbTDAp2Q|szVcf+ zdrPbP{|^+%3sjB6evtdy;gH;Sn4ILw_+cb#Z9zaJ%l|cqNFn`7NTlHXzrlpi%31kT ze&LwZdsFiENE5$IKJB40f`#^LlC2jJUBiU7<%@{{EV&D>U46BSFeI_Lqgq`L!W*Q?lo}s3b==8i)6~0?GA^ft)1n-H-AzJ;hW&L zI^Ct!=29mND<_a5&ow(Zo4eH9&YMdQ@m5!97rGtryV&c<4pI@8sDR4wK6UI=@O&SR z`*qxT&|wch#9jZvh%|W^5w*3SnKX;zdZv12oF z|BIj?x>3Ps!4?|0FcG4o_3(6bv|xnjUKBk4tvNPRo6NC^LZ_Mtkk)qI-U)#?yh}AZ z?5>23JG}AUyDvTb*Wh=L0UwF-A9K9h4zEV9mX@v_3tqXOS{gtDvWTZp&l$QHq$|VH zoqjMA#Y$7VlY{%{;=p?|3<*Ymv*TxI+((6Rcj_O3y&6JC*ir#LvkwO`-s8c%iADNoWQ3rTY@PR&pB{Iu6F;%?1V@&W)X-W<#HzrcrFXNNA{gZUjRYR6-(Y zSO9oC@c`0tu!V!i3Vw3~0*-ZNFx%A8<~m}AhoK&L(o2SEWOjT2nmKplx47JT9)*?l z_eu92Nq5H+q!MSDyjVA5zQ&CRAvWpw28JhKRe}j{2-MdImS#IoeL=Ja(gyC*I6n~M zB~Q$BZNuAQ@cJXFojL{DINEOLT_ug?g=#b1A*yNcP;HJFs)B~Zbklaol>da?V*Mdwl{huvD(o;ln4K3~4m-|I)NcUqc8p|e z&9mQq5j=k>>^p8;oV!EfXfls5^?|zsvrkR~h@{K+aYBbi*Gj+ctE16kiiN;pju#9C z2YwUq_J?EF$?rftDkJMIbnU8i^>ln=NfIf9>Ef2lm+*MFIb8UU&D%v?*aKJT#4P!X zfS8jMOp3Y55rUW=+Xh8rf?E?aWqwLbi#o^T9N0f~3Ve6Cz(Rh&$R-InUtT$%sVf9cKz=}ysEG)a`^zebz%qYnxqrz@XfetF0qbFz z>_Tr=a{33SjHG{#LP3`PG1H_kP5A;6)}iY6qUD6aEZB4TNR_RYO)Ec*%bNWQ7y5I@(&CNrhb`3fdE=R!;|&i9~O@Kq^QOVp`44!kMaFRP6y$CO_rWl2_9b}PrbIKe`4 z+!kj?o0!+u?mWmHakU?gtIW0Tr%9n$T|!P%%)u}85XV?r+ubyY-C4Wf(oEvN3yl+o zfyC#Z&41^k=lWefdN$d7^jyZmCk}tv1|K~e_W0=e^JX7COIv&fSQhJj^jyBdXISdb zEAy?~;A`0B%iHBM?20A2%hn8U9Nu_u3I4`C`1}1n{P{}vqLw^Nrp{{^gUQ=K))Hia zF$vmKrJ&yu4EV1nPHP)yv54swe5vSgVA)`?eAHoe&?meBMEJ!>mLtLMK71XLw~=68 znBRxQiUeni*do4<$IK=nSP;g5bVq;lN`)p9(!esJPS-4+XQE`0L9=q6iIOE+d>SR$ zI?Yn}avdQJ22DOP$CD)*P4PSvC0Xw&G==j_9A%Yy4J4yqL1GaS`ujRYT%{4mygJw^c(3gzs2J=23c%IXaxfQwxLk?ne=Y*^E0`=$mwS` Z_~hrj_9LYN+MJsHk<|b2il?MQ{|kg None: @@ -19,6 +20,10 @@ class Tool: self.__Normal_ImageGenerator_Data_Root = "" self.__Comprehensive_Generator_Root = "" + self.Training_Zip = "" + self.Validation_Zip = "" + self.Testing_Zip = "" + self.__Labels = [] self.__OneHot_Encording = [] pass @@ -43,12 +48,17 @@ class Tool: self.__Normal_ImageGenerator_Data_Root = "../Dataset/Training/Normal_ImageGenerator" self.__Comprehensive_Generator_Root = "../Dataset/Training/Comprehensive_ImageGenerator" - def Set_OneHotEncording(self, Content): - Array_To_DataFrame = pd.DataFrame(Content) - onehotencoder = OneHotEncoder() - onehot = onehotencoder.fit_transform(Array_To_DataFrame).toarray() - - self.__OneHot_Encording = onehot + def Set_OneHotEncording(self, content, Number_Of_Classes): + OneHot_labels = functional.one_hot(content, Number_Of_Classes) + return OneHot_labels + + def Set_Zips(self, Datas, Labels, Address_Name): + if Address_Name == "Training": + self.Training_Zip = zip(Datas, Labels) + if Address_Name == "Validation": + self.Validation_Zip = zip(Datas, Labels) + if Address_Name == "Testing": + self.Testing_Zip = zip(Datas, Labels) def Get_Data_Label(self): ''' @@ -80,4 +90,7 @@ class Tool: return self.__Comprehensive_Generator_Root def Get_OneHot_Encording_Label(self): - return self.__OneHot_Encording \ No newline at end of file + return self.__OneHot_Encording + + def Get_Zip(self): + return self.Training_Zip, self.Testing_Zip, self.Validation_Zip \ No newline at end of file diff --git a/_validation/__pycache__/ValidationTheEnterData.cpython-311.pyc b/_validation/__pycache__/ValidationTheEnterData.cpython-311.pyc index 75327b1d4dfac21940fa9cf41bd3545c66b5fe4d..f3a8bd9d87276abd2a2e8efaf7928c0925bc2e48 100644 GIT binary patch delta 64 zcmdnVae;$pIWI340}y2C1gB5rxvl=y1ITf)iYYG1&rM9uh)+(;OHM6{2`I`>FG|c+ S&{cS`r2WO>y&JzfF#`a78W$P> delta 42 wcmcb>v6F*mIWI340}yO`)Ri)k=eEEv6IZJkzX0c$fTH~LqQu delta 40 ucmZ3_ID?UAIWI340}w3JI*~k)$5`N(wyRZ)Ux0H=Kv8~rQDW}IG*1BDtqf5B diff --git a/all_models_tools/__pycache__/all_model_tools.cpython-311.pyc b/all_models_tools/__pycache__/all_model_tools.cpython-311.pyc index 31140773e4eb0c3af3aec4732db6cfb0f209ad2f..ee90445f0fcc8d3f122da482a1b0170ad05d7041 100644 GIT binary patch literal 3292 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 diff --git a/all_models_tools/all_model_tools.py b/all_models_tools/all_model_tools.py index 924c54f..6ae048e 100644 --- a/all_models_tools/all_model_tools.py +++ b/all_models_tools/all_model_tools.py @@ -1,40 +1,68 @@ -from keras.callbacks import EarlyStopping, ReduceLROnPlateau, ModelCheckpoint -from keras.layers import GlobalAveragePooling2D, Dense, Reshape, Multiply from Load_process.file_processing import Process_File import datetime +import torch -def attention_block(input): - channel = input.shape[-1] +# def attention_block(input): +# channel = input.shape[-1] - GAP = GlobalAveragePooling2D()(input) +# GAP = GlobalAveragePooling2D()(input) - block = Dense(units = channel // 16, activation = "relu")(GAP) - block = Dense(units = channel, activation = "sigmoid")(block) - block = Reshape((1, 1, channel))(block) +# block = Dense(units = channel // 16, activation = "relu")(GAP) +# block = Dense(units = channel, activation = "sigmoid")(block) +# block = Reshape((1, 1, channel))(block) - block = Multiply()([input, block]) +# block = Multiply()([input, block]) - return block +# return block -def call_back(model_name, index): +class EarlyStopping: + def __init__(self, patience=74, verbose=False, delta=0): + self.patience = patience + self.verbose = verbose + self.delta = delta + self.counter = 0 + self.best_loss = None + self.early_stop = False + + def __call__(self, val_loss, model, save_path): + if self.best_loss is None: + self.best_loss = val_loss + self.save_checkpoint(val_loss, model, save_path) + elif val_loss > self.best_loss + self.delta: + self.counter += 1 + if self.verbose: + print(f"EarlyStopping counter: {self.counter} out of {self.patience}") + if self.counter >= self.patience: + self.early_stop = True + else: + self.best_loss = val_loss + self.save_checkpoint(val_loss, model, save_path) + self.counter = 0 + + def save_checkpoint(self, val_loss, model, save_path): + torch.save(model.state_dict(), save_path) + if self.verbose: + print(f"Validation loss decreased ({self.best_loss:.6f} --> {val_loss:.6f}). Saving model to {save_path}") + + +def call_back(model_name, index, optimizer): File = Process_File() model_dir = '../Result/save_the_best_model/' + model_name File.JudgeRoot_MakeDir(model_dir) modelfiles = File.Make_Save_Root('best_model( ' + str(datetime.date.today()) + " )-" + str(index) + ".weights.h5", model_dir) - model_mckp = ModelCheckpoint(modelfiles, monitor='val_loss', save_best_only=True, save_weights_only = True, mode='auto') + # model_mckp = ModelCheckpoint(modelfiles, monitor='val_loss', save_best_only=True, save_weights_only = True, mode='auto') - earlystop = EarlyStopping(monitor='val_loss', patience=74, verbose=1) # 提早停止 + earlystop = EarlyStopping(patience=74, verbose=True) # 提早停止 - reduce_lr = ReduceLROnPlateau( - monitor = 'val_loss', + reduce_lr = torch.optim.lr_scheduler.ReduceLROnPlateau( + optimizer, factor = 0.94, # 學習率降低的量。 new_lr = lr * factor patience = 2, # 沒有改進的時期數,之後學習率將降低 verbose = 0, - mode = 'auto', + mode = 'min', min_lr = 0 # 學習率下限 ) - callbacks_list = [model_mckp, earlystop, reduce_lr] - return callbacks_list \ No newline at end of file + return modelfiles, earlystop, reduce_lr \ No newline at end of file diff --git a/draw_tools/__pycache__/Grad_cam.cpython-311.pyc b/draw_tools/__pycache__/Grad_cam.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ece66234c2a3f0a5ac991e9b64c6b06682a05828 GIT binary patch literal 5455 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 N+WkL0W7OW3{{na&!~y^S literal 0 HcmV?d00001 diff --git a/draw_tools/__pycache__/__init__.cpython-311.pyc b/draw_tools/__pycache__/__init__.cpython-311.pyc index 747e1cf244c17bc14498330912ce3afea35312a8..20957044eb5c62c0194d1041c6e303f6e887f1fe 100644 GIT binary patch delta 63 zcmbQlxRQ})IWI340}y2C1gB5rF;@R-3FNp~#T1w1=O!j+#3v`_C8rj}1Qg|`7bWH@ Q=qkKe(*9!c-iiLs04~rKJpcdz delta 40 ucmZ3pzJT8xnFPKo*GMtdc-l2+0Y7I5^<)4~~Sibt8Nm@5XUhdwsKO zNGwN+PDs#-Q*%ZHqCBy=xPANtL%cjI+P z3T>~G^|#;7d^6uSGrPavH~C9A9HO8+|2mQGuA``bkO#YXE6S^zp!|vADc&PeSx>_2 zA-Y%eC6IZi6SR3}vi^j>(iX@DQ(%`3CF;x?pIDy_C&HkkyHuiqr$ILI49E!Y9iig> zHR3GpF_`>pUX+w!Q0uQ@DJ95q@=`_=QgkI6a`VH_2ftTeArhJ5A(d8n1h>cb12so0 z#I91N?HR#Lo_HTYug6YL59P9SdhtFU@xDj!{Mf0hv4t3{qQDB;h4+;x-dBXjN8t6b zAkj5P1}DtuI~-UWo-96v*Q|&RW=Ln-_b7M*ai4t+RKNY)Vb$eGq0dyU%%tH z&U%}Bfc}Sj;QfjAz{|h=9)x#XgP(p68fyLXjY_k`&ZM__}wd%Y3+jEag zz63r(;rUb8jgF{$Y5&(E57j<{>e;Q&J=|;fk+iX@4$sdnXOje4>q$*Bx<#k2SXj6(*N{|S3M zPrayX`R&;UXXh_|kNkK07jCQQfQAm}=m01$plV>jvv6?XyoUDZXpf5akh&|M-B{>e zm|Xni^Jy)7P!At0_beTJ*r%aR9d)Xx^G$8~?-w=Hs-spFwUR#l_wQ(^MMo_vYB8S| z{EPK!V{GY+ih4EFtD{~}NXv(61BBVGqjnXwlgQsJ%)X_M9-h(A2_2nK(TUfGxz(os z{%zOv-y+QWqK4XZ)TW}gmyw@;JM!$Er~6m>2ABH=wZ37!Z&*8ZRX=rAi(FN&k7<#y z`43l7UhpeZ7L0fJ!-J1`mV)$@8l(;G^F$ zeet>Ah(Lr{wx%z0NO7owqNbgcq!t|K=n^Vdr&9KikgT|&YmQN>Kz`a89nu;Ee>BhV z{u1*f@CaHSJFNhCLB)YXfZ<(^18Uk#HOX_iDpA^O|F`rJB9J}jFZs$25pDJcFy8{w zU|BVXP21`SOCI;U`8wjoWl@tVl6JnHNbm@IvYFh?1xn28sm(QBt;aAK%N>OWsOk08 z$8RBQuylwD2677DxMfVbT(vijAyo?0TAH*KA+$xZMNIY=6Es_sK#Uq5!1g;+8Gv#B zwF1rqh{hR%kv}PLz!5Z;%K>crCbNnW6f-#?C5aL?P%6vi4KFvd(Y{GW79eLi1!ra~ zDq`PdF?ne=Je{}+?!_pZl5&#;8Mu$N42%1I)p-pId?ux^CgHHsBnynjnxhr>{rGCwqr3`LBs96p%|AafR9*BzXPHq$N43yV zJ#=*b!i#W353}XnS~#YMWAm3*gY~~}|6TjyZY{W95AL6T-$FX3+_a?p?HA84tK)(y z=2RqUNYar6%F9Uiw-=rTo`zR?2bOyWwB8}TcSt)qte+g#BE#xOH?+u&w?y6M?-EZF zTI}-kBU)&-bqfDB6E-@YBIR?p{cI-u{Pn^>B|C?a|O_9i3Lu=~cws z8~Sue-E~4k-8$-4QMXgosi7_%b*ZRpouTNu71XkfS{4Dp59{c#YG1e;*3E_3!+`BZBN9Cg(*PTQ8D|4~V!##APC`fH3G8ZYCoe4HiD8Zkfm} z8}uxx-WgOeIfUXE5l2A8{f2e6Ne+`dpRp!}2S~e#o8HN4s3b3T1u89|JmRbgoHvv~U7C_QFr@a6{<#!TJYn3uEPzOKCOOqXm2PV9)&f1W`;} zQln=zbWTU-RCLZko%K&R`HLoS#-nh!;uLZi5;GH+z?->$aE`OyIc&ZnEYus(O~WpW4lQnOud1KmQn%nR zDR)(rB;o6TU2D`;Rpawy(0zjv$0zgFKM!G8I1g4H;Keu3wC3Rq6NWVR_#4U$+b_Q~PIa4Wl{%%m euXXf}r+J-n#K|U4$2#SRW6hr6I<-}pbNCk&{Hopn literal 4041 zcmcInO>7&-72f5}F8}`|TY@dy-1wh$MMXAh8)<6TQKM9p?YfQO)QlZ!#a&TUmRw?X zsYnD>2tj}dMS-Y5i~7(53$&^O`Oss6ra&)2b4Y+)V*wKj2nbN*pql{Sbn2U3?()a7 zDg@|gIQ!6unfc!6Z_#Log7T+p{}6`*6!jm{af`1_Jf8>RkCaG>v`m%hoR227 zPiAt+{<1mN{&G3a{`$*-T%auzEQbmpUk>LYHiwa;Qhu%^OL=Ljq-s{6EW9t}#S*q+Hl+%SQXVUc zR$$tzCLa!dr2qUhA|7ZoVLD~Oqec3OZv%Rp9*6FgbmKsYjEF>L12k@WR{CT;euG*7 zn@$ngBQ8npYiaM<+yQ5^t`X6{uN4v%yNH2(<@}ypPz)7)V)#j917fl1#iP%6I6qDi zqxu&0^-!%^l`t<$a~eP# zBP)e^?3N-*GVe`BvZAV1fT$)^J>-nvB=mSDGX~Y>V z(YBF1cv+LIppEPm0rZ5*BpP{}4mvbJd52BJRFx>^N!fkn&DS2>zBBRQ4pxd-C_fOf z@IhWv6j`;&Ocl0>IF)ak!>_{BApF#S!*;GxTgd-Wc70JtCk%ALL??hCtm$=n{gw3_ z1{yNakdB53?`LZd&FIPIYi2ZKpfMAT>1eErf6a_uG|(jzUDDAdTkTriKu1k(@XBex?A9J(DRU3VKonqL8F%_8u089*#`TB z+W4ZXnbZ?Mf+XN?`IM_<3iFwxcP4NZZju4r~N ziIF`dyJFoX`NC7Cftp?t>BxZ}FFd;Jgc2hOg={<~`-jQaZ7a~+wfuK#xC(d%?^{-= zR0seU%0kuh2}|{h-8es?ROV_bWRHAV&~RyK%z;Ixa)0zLu1R|gr3dgaP-$_KPQGA-V$q5_oe80` zD5y7p5f(%-?`9H4t*DlNUJ^8L2%m=8_zY>zlI9#~$dT{L5J6Sa@=jg}5we|fY`UF> zB2`?fXz)J(Nm}WE#W`-_AA%-}EmcHm$zn*7;R^PmEZ>bKJW9-Dpi#-=)J_`E;4v~M zVrL6?kyF4rNd!;Wnc=%o;ooodopQL`1 zdNgPRkDI~ct8X}H#Wm66`=9+%N7oH>-9*=c_%`v=FV%0Ze*KeY)9*cPo!AJ8CCm$;$@1VxlWLy3#`2$G1Mbr4PJnpm7t8>uB6#jT$IpqKu9*I~>J^pP}KW zX!sET@F^3W(%p*3Ax`N*$jO36va4L0#RM!dK?g|ok}#{_3cf~IWZNyDqFTw0aK_m~ z=TxP-__IRceRyH0nKqFpCoSM|t#B6`|ClIFO_Kizt5_+(vjAQ~pt+~tcg*bckI7Dd zO4&}>2VpnxI$VL8EM3EI!w`ArsgI%AVQ89eQK$9Z+M*8YZf#NVRr{|+1y}9A7IjkZ itu1O)e@Sgo_w<+79W+cI-l4qa;vju`hkCKGJ^3%qCws5} diff --git a/draw_tools/draw.py b/draw_tools/draw.py index e72d0d3..07b3c2c 100644 --- a/draw_tools/draw.py +++ b/draw_tools/draw.py @@ -5,21 +5,21 @@ import matplotlib.figure as figure import matplotlib.backends.backend_agg as agg from Load_process.file_processing import Process_File -def plot_history(history_value, file_name, model_name): +def plot_history(Epochs, Losses, Accuracys, file_name, model_name): File = Process_File() plt.figure(figsize=(16,4)) plt.subplot(1,2,1) - plt.plot(history_value.history['accuracy']) - plt.plot(history_value.history['val_accuracy']) + plt.plot(range(1, Epochs + 1), Losses[0]) + plt.plot(range(1, Epochs + 1), Losses[1]) plt.ylabel('Accuracy') plt.xlabel('epoch') plt.legend(['Train','Validation'], loc='upper left') plt.title('Model Accuracy') plt.subplot(1,2,2) - plt.plot(history_value.history['loss']) - plt.plot(history_value.history['val_loss']) + plt.plot(range(1, Epochs + 1), Accuracys[0]) + plt.plot(range(1, Epochs + 1), Accuracys[1]) plt.ylabel('loss') plt.xlabel('epoch') plt.legend(['Train','Validation'], loc='upper left') diff --git a/experiments/Model_All_Step.py b/experiments/Model_All_Step.py new file mode 100644 index 0000000..527bb6a --- /dev/null +++ b/experiments/Model_All_Step.py @@ -0,0 +1,131 @@ +from tqdm import tqdm +from torch.nn import functional +import torch +from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score +from torchmetrics.functional import auroc +import torch.optim as optim + +from all_models_tools.all_model_tools import call_back +from Model_Loss.Loss import Entropy_Loss + + +class All_Step: + def __init__(self, Training_Data_And_Label, Test_Data_And_Label, Validation_Data_And_Label, Model, Epoch, Number_Of_Classes): + self.Training_Data_And_Label = Training_Data_And_Label + self.Test_Data_And_Label = Test_Data_And_Label + self.Validation_Data_And_Label = Validation_Data_And_Label + + self.Model = Model + self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + + self.Epoch = Epoch + self.Number_Of_Classes = Number_Of_Classes + + pass + + def Training_Step(self, model_name, counter): + # 定義優化器,並設定 weight_decay 參數來加入 L2 正則化 + Optimizer = optim.SGD(self.Model.parameters(), lr=0.045, momentum = 0.9, weight_decay=0.1) + model_path, early_stopping, scheduler = call_back(model_name, counter, Optimizer) + + criterion = Entropy_Loss() # 使用自定義的損失函數 + train_losses = [] + val_losses = [] + train_accuracies = [] + val_accuracies = [] + + for epoch in range(self.Epoch): + self.Model.train() + running_loss = 0.0 + all_train_preds = [] + all_train_labels = [] + + epoch_iterator = tqdm(self.Training_Data_And_Label, desc= "Training (Epoch %d)" % epoch) + + + for inputs, labels in epoch_iterator: + # labels = np.reshape(labels, (int(labels.shape[0]), 1)) + inputs, OneHot_labels = inputs.to(self.device), OneHot_labels.to(self.device) + # inputs, labels = inputs.cuda(), labels.cuda() + + Optimizer.zero_grad() + outputs = self.Model(inputs) + loss = criterion(outputs, OneHot_labels) + loss.backward() + Optimizer.step() + running_loss += loss.item() + + # 收集訓練預測和標籤 + _, preds = torch.max(outputs, 1) + all_train_preds.extend(preds.cpu().numpy()) + all_train_labels.extend(labels.cpu().numpy()) + + Training_Loss = running_loss/len(self.Training_Data_And_Label) + + # all_train_labels = torch.FloatTensor(all_train_labels) + # all_train_labels = torch.argmax(all_train_labels, 1) + train_accuracy = accuracy_score(all_train_labels, all_train_preds) + + train_losses.append(Training_Loss) + train_accuracies.append(train_accuracy) + + print(f"Epoch [{epoch+1}/{self.epoch}], Loss: {Training_Loss:.4f}, Accuracy: {train_accuracy:0.2f}", end = ' ') + + self.Model.eval() + val_loss = 0.0 + all_val_preds = [] + all_val_labels = [] + + with torch.no_grad(): + for inputs, labels in self.Validation_Data_And_Label: + inputs, OneHot_labels = inputs.to(self.device), labels.to(self.device) + + outputs = self.Model(inputs) + loss = criterion(outputs, OneHot_labels) + val_loss += loss.item() + + # 驗證預測與標籤 + _, preds = torch.max(outputs, 1) + all_val_preds.extend(preds.cpu().numpy()) + all_val_labels.extend(labels.cpu().numpy()) + + # 計算驗證損失與準確率 + val_loss /= len(list(self.Validation_Data_And_Label)) + val_accuracy = accuracy_score(all_val_labels, all_val_preds) + + val_losses.append(val_loss) + val_accuracies.append(val_accuracy) + print(f"Epoch [{epoch+1}/{self.epoch}], Loss: {val_loss:.4f}, Accuracy: {val_accuracy:0.2f}") + + early_stopping(val_loss, self.Model, model_path) + if early_stopping.early_stop: + print("Early stopping triggered. Training stopped.") + break + + # 學習率調整 + scheduler.step(val_loss) + + return train_losses, val_losses, train_accuracies, val_accuracies + + def Evaluate_Model(self, cnn_model): + # 測試模型 + cnn_model.eval() + True_Label, Predict_Label = [], [] + loss = 0.0 + with torch.no_grad(): + for images, labels in self.Test_Data_And_Label: + images, OneHot_labels = images.to(self.device), OneHot_labels.to(self.device) + + outputs = cnn_model(images) + _, predicted = torch.max(outputs, 1) + Predict_Label.extend(predicted.cpu().numpy()) + True_Label.extend(labels.cpu().numpy()) + + loss /= len(self.Test_Data_And_Label) + + accuracy = accuracy_score(True_Label, Predict_Label) + precision = precision_score(True_Label, Predict_Label) + recall = recall_score(True_Label, Predict_Label) + AUC = auroc(True_Label, Predict_Label, task = ["Stomatch_Cancer", "Normal"]) + f1 = f1_score(True_Label, Predict_Label) + return loss, accuracy, precision, recall, AUC, f1, True_Label, Predict_Label \ No newline at end of file diff --git a/experiments/__pycache__/__init__.cpython-311.pyc b/experiments/__pycache__/__init__.cpython-311.pyc index 7c47fb47d6517177c10d034a903442544f29f843..d2d209603266122c16834fcceb26343e40c8038e 100644 GIT binary patch delta 63 zcmbQtxQdZyIWI340}y2C1gB5rF;@R-1?0F`#T1w1=O!j+#3v`_C8rj}1Qg|`7bWH@ Q=qkKe(*9!c-iiJ$055hGK>z>% delta 40 ucmZ3*IGK@WIWI340}!xjpGcm_V=VAX&DAQ#FTgn_peR4RC^2_pnhOBT0t=o1 diff --git a/experiments/__pycache__/experiment.cpython-311.pyc b/experiments/__pycache__/experiment.cpython-311.pyc index b48f212fa4ae511b0e7dea0bb6aa235ea1964a53..df1dd2415f0aa60f1dad3b463e33364a8d9f0dcb 100644 GIT binary patch literal 9086 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 literal 16356 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 xm 1: + cnn_model = nn.DataParallel(cnn_model) + cnn_model = cnn_model.to(self.device) return cnn_model - def record_matrix_image(self, cnn_model : Model, model_name, index): + def record_matrix_image(self, True_Labels, Predict_Labels, model_name, index): '''劃出混淆矩陣(熱力圖)''' - result = cnn_model.predict(self.test) # 利用predict function來預測結果 - result = np.argmax(result, axis = 1) # 將預測出來的結果從one-hot encoding轉成label-encoding - y_test = np.argmax(self.test_label, axis = 1) - matrix = confusion_matrix(result, y_test, labels = [0, 1]) # 丟入confusion matrix的function中,以形成混淆矩陣 + # 計算混淆矩陣 + matrix = confusion_matrix(True_Labels, Predict_Labels) Confusion_Matrix_of_Two_Classification(model_name, matrix, index) # 呼叫畫出confusion matrix的function return matrix.real @@ -163,37 +147,4 @@ class experiments(): File.Save_CSV_File("train_result", Dataframe) # File.Save_TXT_File("Matrix_Result : " + str(Matrix), model_name + "_train" + str(indexs)) - return Dataframe - - def get_layer_name(self, model_name): - if(self.validation_obj.validation_string(model_name, "VGG19")): - return "block5_conv4" - if(self.validation_obj.validation_string(model_name, "ResNet50")): - return "conv5_block3_3_conv" - if(self.validation_obj.validation_string(model_name, "Xception")): - return "block14_sepconv2" - if(self.validation_obj.validation_string(model_name, "DenseNet121")): - return "conv5_block16_concat" - if(self.validation_obj.validation_string(model_name, "InceptionResNetV2")): - return "conv_7b" - if(self.validation_obj.validation_string(model_name, "InceptionV3")): - return "conv2d_93" - if(self.validation_obj.validation_string(model_name, "MobileNet")): - return "conv_pw_13" - if(self.validation_obj.validation_string(model_name, "MobileNetV2")): - return "Conv_1" - if(self.validation_obj.validation_string(model_name, "NASNetLarge")): - return "separable_conv_2_normal_left5_18" - if(self.validation_obj.validation_string(model_name, "ResNet101")): - return "conv5_block3_3_conv" - if(self.validation_obj.validation_string(model_name, "ResNet101V2")): - return "conv5_block3_3_conv" - if(self.validation_obj.validation_string(model_name, "ResNet152")): - return "conv5_block3_3_conv" - if(self.validation_obj.validation_string(model_name, "ResNet152V2")): - return "conv5_block3_out" - if(self.validation_obj.validation_string(model_name, "ResNet50v2")): - return "conv5_block3_out" - if(self.validation_obj.validation_string(model_name, "VGG16")): - return "block5_conv3" - + return Dataframe \ No newline at end of file diff --git a/main.py b/main.py index 0379c41..c54eefc 100644 --- a/main.py +++ b/main.py @@ -6,18 +6,17 @@ from model_data_processing.processing import shuffle_data from Load_process.LoadData import Load_Data_Prepare from Calculate_Process.Calculate import Calculate from merge_class.merge import merge -import tensorflow as tf import time +import torch import os if __name__ == "__main__": # 測試GPU是否可用 - print('TensorFlow version:', tf.__version__) - physical_devices = tf.config.experimental.list_physical_devices('GPU') - print(physical_devices) - assert len(physical_devices) > 0, "Not enough GPU hardware devices available" - tf.config.experimental.set_memory_growth(physical_devices[0], True) - os.environ["CUDA_VISIBLE_DEVICES"]='0' + flag = torch.cuda.is_available() + if not flag: + print("CUDA不可用\n") + else: + print(f"CUDA可用,數量為{torch.cuda.device_count()}\n") Status = 2 # 決定要使用什麼資料集 # 要換不同資料集就要改 @@ -86,6 +85,7 @@ if __name__ == "__main__": print(len(training_data)) training_data, train_label = image_processing.image_data_processing(training_data, train_label) # 將讀出來的檔做正規化。降label轉成numpy array 格式 + training_data = image_processing.normalization(training_data) end = time.time() print("\n\n\n讀取訓練資料(70000)執行時間:%f 秒\n\n" % (end - start)) diff --git a/merge_class/__pycache__/merge.cpython-311.pyc b/merge_class/__pycache__/merge.cpython-311.pyc index 83892d8e80c13946d2438bf3df97ac2b8815debb..be701db5e3114cdc155eead70fbfc2c67c791643 100644 GIT binary patch delta 999 zcmZ8fO-vI}5PoleO55$SZ7EP7Kx0KM6tSSis9?0!n2;a_4_GmE(=D~81$|3Qz^!t? z*aI=aci`foi3CYFNYb;3Cr=*G7$uDdFB(ipY$SMg-d6dWWWV{Jc{?-D+Ln*VuVmSd zfbIr|Qy1su=?0EzKwGx~7Elt!u!drs=A19IhODzFX4PDpeHO=Tz$M^z&5@MGI8B}v zVh*rXgG~mm0I#0koH@GP3zed0M)k>wteUtJPpIRGBpDqd6Dgu*eVx9I#ituD-xLk} zj-$15UG-_Rvw;mR#pQS!lD&@&Uc(x<#3Qr;xPkF+x*&!* zzrXlijNxYDgXHPjy&ZP`qp^6k>KDfC^t>%-2|^s{r1x!&I6&uYhrs;W_Pl;)EZ`R5 zWBS$~L`UqGuJLSq4PdBH3W3h;)ze%~F!(6CbulNx+{Im=!R^&x9~OSWYZH zT&wTNUs-q8BR#k9E?{vHjM`_9z4;6lboElU~D>v@B3!v&6}CGyVLWs+jwsn z8VB~eh2jTAV>u`=5A0|bV2g9OIKo_<#|_2p^Zh1P*HB!+Cf0yeY+=8nE$~=hlj44e z8W7ci1HeYHx@sPWCx>UJrpITe$x@QonbH>e#+MeQdk7uUeR-(#N4}4um4=K%l1>8K zPwYg-PGy%{yud(RxTUnD93m8^2`wgf!+fNN7PWR1qPtoMb<^+Kt2U7he`+!?+vn&e zqR;%3E21l66#SRvk{tMaoiEh-DIqVp;sp0_E-$+R<`#KYOqyKe%Ky)~e65${^FA!( zm29y7RH*itE7W>P0gA-DLIZjb`RFCRFQvSLW*@wUtf?!x@+k1;yerLcQE7^>6zK){ z?Ws;sQIUjMw2wg}g9wYN#Lx5~Kt;|x&pGLZif_(N+u3=C^wE!cr=&uziyr7B@&KsZ z7it-?M`hhCSev&BcdI_p)HcMb&NZK@a;kdGgN^ZWL+hK!i*#hAbX2NH#Lgxia*k!Z#l6~QFL|;v+lHL{DxfMTm6L$keWw@3=(Jh#v&SO} zKr}#AYpneu^Fs_SFu2NqJtc|J1*;SNpzBtG9$B%jCaJl~0qjh8R1dv$xbboObygW* Vz;-xRMl(zJY1$bhH|WH_4sSj7~V&oXV);-zL`*cDNP{GSN z4bL_&ZB{YK+W)00?g;%&WJi|oM99Ar#u?n6-vi0R~ zHx_^PT=ECUCoTjhNGwXi%X$vK#c%Wl=0_@Fr?D%d;zt;vXD}yc?5)y||asls%lMqy zm^NnEki(rmu|Aw8CBd~%F{~W*GHm()-QOM(_u6&2Mc1`j#OtDI{2%YB~F zKQo>NX0J`<^#I%4cV>NnzEkx|=b|Xd{U^GQMz2IG`Ek^DT2kgbI0LLpr zoYdJJzZoXsL?kpfe>hlq?)kcPT{1fbpFN>AQRt)_Ns+oL44<#FzG{z|q@8`VY) z{@=YJIl)IjQk#L8`XO9FZDiLYWqUKhji7H8!8Fj9l^IP__9j= zd@i~rbQFb-f;pga!CT-wX0ytexV&(0nInzxAq^Dh|3YLv!%Mcapwd2#PwTJvcE5yu S2C4-=>gzX<2YU|%Gtn