From 5f757ad9397fe84c024ac9a849975fae05032e44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E9=81=87=E5=8D=BF?= <358614401@qq.com> Date: Sat, 18 Mar 2023 16:23:57 +0800 Subject: [PATCH] load two layer of cnn --- ...t.tfevents.1679127816.WEIYUQING.46432.0.v2 | Bin 0 -> 60775 bytes _mian_tensorflow_keras_.py | 92 -------------- _mian_tensorflow_twoLayerCNN.py | 113 ++++++++++++++++++ noise_take_ecg.py | 31 ----- requirements.txt | 11 ++ some-test/noise_take_ecg.py | 31 +++++ .../pytorch_gpu_test.py | 0 .../test_plt_show.py | 0 .../tf_run_in_gpu.py | 0 wfdb_use.py => some-test/wfdb_use.py | 4 +- utils.py | 2 +- 11 files changed, 158 insertions(+), 126 deletions(-) create mode 100644 Number-Of-CNN-Layers/Two/logs/20230318-162330/train/events.out.tfevents.1679127816.WEIYUQING.46432.0.v2 delete mode 100644 _mian_tensorflow_keras_.py create mode 100644 _mian_tensorflow_twoLayerCNN.py delete mode 100644 noise_take_ecg.py create mode 100644 requirements.txt create mode 100644 some-test/noise_take_ecg.py rename pytorch_gpu_test.py => some-test/pytorch_gpu_test.py (100%) rename test_plt_show.py => some-test/test_plt_show.py (100%) rename tf_run_in_gpu.py => some-test/tf_run_in_gpu.py (100%) rename wfdb_use.py => some-test/wfdb_use.py (90%) diff --git a/Number-Of-CNN-Layers/Two/logs/20230318-162330/train/events.out.tfevents.1679127816.WEIYUQING.46432.0.v2 b/Number-Of-CNN-Layers/Two/logs/20230318-162330/train/events.out.tfevents.1679127816.WEIYUQING.46432.0.v2 new file mode 100644 index 0000000000000000000000000000000000000000..d3f29c620f5d0deef2332f3b82ddb37527d128b8 GIT binary patch literal 60775 zcmeHw33OYu6j z^PfY`iS2JRn)&A2zgg>i+P^z4Ikll0{%k+5;;q^0u+^DpA~khhUp$p-4P89>@zkY5 zwR+3{UOB(I=8R#aUhuDD&|k)&inZ}fG~2#!Ow|y@*Z$I&jSU^iXf_*3MZ4n-t@RDd z;}`ZqLy2gzVM={NM>^G+=z{W%4Xi>|sE~|qh-b1;;T&^AC#QOPbBplDriNBWa~*3U z3H)&+yC&L$yFDk>n@morZ)s|pQr~foRd!VHP1ES#J&jQ?Q4$V4|ABP(bY-ZUoO*&yOZJ6 znMmd|0!)J%K-*M28ObItB7+K%p=5KJL@Z8dMBtuiES5-NqBdkP(Q(VsTr|>|&U8m} zxVU3YGzINsBfyy)`8<(~<`U^tBoob%mPtchnRIUtZnqhlh<4->eWVg@Arnvb;xG1Q zgD6T{YK~YSk5}3z;Xa+tr(`Z35ok{0brVD1iW z@k}}^HbcHjammEHdXv!%#YK|@ty$?OWTc7QhKTf2+9n_jbO#n2wmfWGgA%(e;rYTE~mPaMBRMf{xqJ1*V0Rc$5#>0OsTu@<=o0$d_XNrI@=Gb59~O zID$SO3}Y^y5{--Qt2&KOT?)FRC6;O0+;|Fnl4v5CH;J*&Tz1|IR+QND&~eb z^U94UWn+>v-6A*HbY~8H6_(I1g8>)8zYto=DhbFNesFCW>PA%w2q2@mbVeDvG#TxPuSq9k@l0?isvrWT1X_K;1~e)H+{;9= zJ@Jl2XCfXW@w$Q({oD8pBtTUHO{0Qi(C`R|yB=a^m2w0Pp*Q^KkdtYD3*xyY@%1^y zT%a0ljzKlF6&#Ldl}c0|3i!){Gte-x^&`;4Rz(?F^#%LqSIVmH53~*w%7WuiWrRfI z$_R9bGAxk48(oQIOH4Y9XdQYC(j`S6~zaO=ZC$$iD*q@CT<@ zsGy>{)-eJd32l`?l^%*c-6Ah1 zRg;BO6VUipRU{Qq$spI)&@302N17X##iOw^ASJ;G;AuULnRqtco9T!=w9gMbeOP@UbFluE3zp}DFXwNl-YCO8^Z z$LOp5!=>~R49ihY5)eS#G{B+fOR~s7)~z7Q z_OxNn!x{z18ZA<+wMdlGuiuZ_ECxr`DU^w^U&(^er~PO~VJKK!OR+=Y%~-yGRC74p z=oq)Smm(znnP0Hhng@`xOAx&R39Nbt=#6oRs7 zKb!*9J$^LK0XZX7b-`QJ!!Qj$Ya_&7-LEy@A)Z1HSe-^`Amgo9aTY)bGoW)L!r~|1 z3JzL#i@x5zH^JcAl10e$?Heo7#|shM-$e^y?sTy^c;#)Zxw1iAgLxJkiQ`lo@v^m% zBVb2J{_wTYlKUNo#i|-M36Sbq6Ss2pi2iZu{_yAlrd8~ zSHc_FZ^0mrW(KjQ9l-~V0QOe+l%C8g|0~clv z8E)*i$^N+?davWqm*c&ON(K34gO)+>;iw8$L?d{al&t4D`GXhzXr==xz#PQV-4R&Q z$Gh(uml2Te#Z!g}pd(ob;y5|PI}wyXoo-pmM2@+p7ycS9c} zZWtQcT21^Mgr^kvylw|~? z(a6>j<{-TSWl@ON4!o5Pcqk`$LGOStUw!0~gnwo`r@R2{S(%QT#Tb z4T#(BBTPMvFm0@AZB|WK$YyHG+-ig$UFk=Yv@;M9Y}LEcnM6l48R>w{^;tNw0ghoq zBj+_ZJUPcu=HM8r-Q#izY|$XcG3-$h;wPC9SorHDh=REO*nAk!WUMi(MRHo4csL7U z$Fz^4S-szWH<-Of`Vqu&N4Z2n(UW{v98|pxjcG`AP|W=&T5K(ByEE;{Ls$4wOTJNP zTS8)yEbR4&H)eCN2a<(!r6cDhXnFy7K=?to_`%sGZHwQq_Mtjs&3lfV_*ozVA!h_k zyXu?}*jkofrUh0gHOtB2qS$iG7}y%*MkUok*sT`Eo5H>p!d~&@R4l%p-y4bdH`Hd= zWD=>hk?8tFHqsrT#goZIPu3{(1#1yn9q&q{ST!H6mWrojKTD&(qxX znTgz*Md>a$_0cGJOSf)?VPB2K*ya3#A3YL4T_r&||FD#aF2)XVsaqj{RM=frMj3x_ z7#gx78C?y>DZ!Xj!`5~4Zr4eu!Q>NV>B##0UUFSL(X}QAd-IdPVR0$JI`QH2^}C!o zyF8HJ^oU*SlWBv+=KL;2M9?&2=PFKd;hiO&lrTJa$M2O7%X_<(GWe0-2#c8GdC#<%$#^&9A8^KG zIqZWgV6cX=n$4J^>=B`AHJ#o@szuGWC!LtxPIrUIh2gDu0;y#<&w{1uO#5!wqwu^2af>%JYw_j?|q zmO@s|P4q2EFNvnSB26fy7HgXfgJ?If(~!0>#nz|z$sS4-GSlNSC=8(U&`2Sy7qk4L zbL$AKXlkh{KZ%gfJDc>{DR;K%pmfPO?B*FJ48fFq(}hAA6=C&IHg}tiK}DnFyL75da``rbOp?`_O1<2XYz9gN&-tK^?V9 z(xxbV{{fO6i*`45WumbJPQ4n_DL9@_C&G)FY`Dsg7O++$IoJS`cS22!5Q#-*lUZ7t z4?9e0P}N=u^YRdR@`EW0+6SncVQ#HN$QX)RI6BV<(3!=f)1FC3V;!)qV*zE}>`Yfy z87(bVOT`PdbaZ5nwk#O3WES;kf_W-Uya58e>PL%;r(rD77fGez4vdsyMCvk?7=%dt z;Q*Rf{D^e#T2kt$10}CT8s-}UrBH0T-eN2al!gx_Q#z(8=CuX8oDMdGm0$!*;$2D^ z{3s}MHBh!g^6LS#qR6c`M%p~9sZ{vaql%p{eT3L%aPrER%+5Xb@73YCC$-7E`~ zTJq9TC6r&%9|)8r6f$Dl(vV0!t9bR31{udbQu}VOv6tVS<0W_x=*|Ed|B?x$Fn`%))ZK9N6 zcEqh(cJB6aKbl<(T}TSX5<@{=JY{0w^~1%Wu_BR-E3gomjH{(!vsye&@cy6`;Bj(^ zo+PBs!X0dO%zy(34;4JfD7M82IRZsgQO9mrMmwSSkCtw2}9W&n?r<&S_mY&$iO zac}Gc2qqDxd&7qsWy4JmjHIZAkjbEd7}>gJ5564LL=OF_kw(**Aa)LH0nDK*L+L>h z45)=s)Ii?mypz4tu0VhBqp5ijr-u@?U;073!musobRKsFsOwXpvik+z_oF6ngNC?- z-JFpB{9$2)5fL>VM$C71Qv5PLt>{OPwmY!abQD*J81o#5H3ZI!#kkgy=rVM0Zcgy> zaQ@Z{MsPjjN%mr3!bm#pWViI?k?yL4G@8&L^nksx`aY>b7P6l3qbaTjuE(DagQDj# z1v}w^X|9zSz3T;YeO=1aVAUdJ!sSGy&B}3|AHD5GQ7m57{aArKssm4Dg2%+pJag!t zfzNm`N+5b*1IV5o_ZmVe;&{D;DX(#l{tw{Tq`l@~HGm`L$=(InwO6sfJW!d8IPZlW z?(x0bk3xCyW#_}WKtzm6+z!|f4x2c{@uC~p(CZ+>CHp(fzSo^wff{HS!*I+#j$y zWFLZCKpgbVIz%q$;Ny4mbxm#wAfjXnF!J6iC4O6rFgC#*Shmu|&=evI7uSRtV&vYJ zm!VhSW{bS2crlh%cBn4LY79V3COlp7cAb-~m@k=gO=5N%ot}TXCviDC;N+LgC|OAD znmZ2G(%cCdw;j1XU;FoA0G((nLgub1CE>mn^4i`4lFM;`@YI3%%f|fL8V!6|M!;Vq)1A{3Qj6sSf#@m&syWp~0TY(pdO2pfUX9^&dU$f*Xo)xQb55n;lG~R8Ae?qTSVA9T@{ynL6+!`aPrhNc z+*{#1A%~5YxC=SVUlyf`*aHu&r_?Y8DcWXlPWv0)`JkVI{0cjZQP)0(-jP(+P%|1{ zr-Z9q$$#-|hP^i~Lw|6J_ssNT@m|P?_li?=&(!C3e2Ua}e*aE;B?Hz0>}OU?0?n@( z+ROc7E$J~t!oA#=qu)3MLLxer*uy^XwBuQ`>S^r8kVHDWia>-5^nVvXt+p0f93~~F zeJ;trttWofaJs^Lr&x)$?+}fN^_ff7X9?U|^}%~v=OmFWj+9&uzITc?>OoMhJ&Z;8p0ayEkik*Z|Cd=h*G@ z5O`U~V;V`*R2^X1EE52ng&BQ%!Z{PQ&epJOeS1Rz8E+KWKgsduuqDS0lHf4{)xBO@* z=@P36sJV8Xh>n)W?%?(!`kY3!!>#G|vK>Pc4P-(CC0%_;weQ6uWNt9x`E5TsxH$X} z(lOIlptqsB4mf$_f}TR#X|F)$mO&x2xfdrgo9pVg&lE~#I4jObu5x5H_fu*zf0e5D z()2o|41TC)?yJ1&mAdz@QOgD$gPh6w4-IJl7t{W;y{jA7)02B1$5_n0Jbje-&^^9| zYc(~Z1RMG{p^QhA^6J(FsG8{b@(barvvT}X)vPJ>T5aqP7r*qwUUnAmH*PI8f zt*5Os_dbK`-F)`PJZNwZk}XN@hTUiGcqZ4e{k#o1e#Rb_)AmsFbB^-OC;WS|7A_yh z^=nUVtzXB{I_?O!(D`_-TYJG~r|pE@;{1T~ouxwSP^~F9XySS<=$xM$23MecRcN@- z^Ae?+MaxU_E*i6`Jbih|aum`mj51MF?HQ_>3}crQ>nLP7xM=Q3F7*ymP*Rz7K+RUx z9H?d^C~83rcId~((tgPuIPvOPjSJ&W@Mtt5qR+smd$hN1M=8pj-fS-2jaT^aRiwvG zpFT4<7Wr2wqmUA+g-uGrzu*IY%dL^{qUKHh)*6^n9u5D=bf>muPcP%P@$s*8(+8fp z_bcU5^4KH7MJy1{$?hUR=hNr31efU{q^b0tDWfljbN&~0hb9Du8MaL;K zY!sXYeMKp?>(P}?tp{;*2g|IcS;jk=GV?DnQrx44k?y)75n$ny<{2t1E~dm{Ghdy>uSg^;k=%y#Kbb-drwG zWeHzps@!IARNlBDQCLaOjomKm4T@ri)R|Vrb~Wr0s`)@ji%jX^)T~wM@p9L|DgAt1 z=}$zh%5kiGUg=BFk6lPPzLOu6$=U81Ox-lPgGt2ZbL-J%{N zRcQH8OQ^)9k_4IJz9m!KX#=Xb?YiO~hh`|#%!(^aiWL=FyB=HVly=a@_D7k*O86#I z*hWra-B4SitdgFj$||cjD9SobJ&IRWhhdgbQA@#nnUcchbgOrrKA=iEM_1D0(M)B! zTuJ4Y&!cN~J-E_o>EI3S1DTpiI44unCX1Tpp|?a&C0$ANR90_L^mMv9*{Y}Vah6a~ zOCkU=O_k2(%otEj&6CNS)_;m}sIEs>I#nIS(Mjj3B)pU9DnD1{j^Yw!mGmW5R$0A4 zQPvsaT$STMOQ@}-kpY>y{!->xXAY>k&eI+13Fvrbrqr>*EP>nvdUUO>hgUj%9n9f< zB6F@1?#UE3WOlCkX)e)NNoP`xmDL**jh(3mE$-EJq$O0@5{ZFKXZy?0C}TOOE0gZ+ ziNxYPS*3hQ`m`Q(;ws}qyQN_D2umd(ie<7&R!uVPD61x!q>xpUq(`!9lIToUP2v}1 z)g;2`jq_*?-J(S(P1YvqrciY>M_7Y3!Gce$zzK%K41P*pU6sG%>Ud6v?o~99$M3mX z&ld4}Q>)QAs8(1uz^@0;$6Sklo&ok2^NkCyDU3K7Rzjn>bY?+3w+VP0s8TqLBOrs@rbleb9FN$z?rt#}qMtP+f2g#3V`16-$?X6LA%a8#qBFW5hBCEL{-Cm;jx671sW`bKCBZq7`kQ>BvuI2To^ zwXV?LDt{#!i?x=gJ9BV}fNH@+xR6;tGytpj>E2vVZ%*3_6lkgrx*BQ+6^Rf%pG8sP zgu!~=%1y(#fw|e-3V3+~%U#913wxtUMf;_i*cS>;Ky`^!N4mQwnoF!s#v^10P9&bm zq%-111UFry)pSfPbWB>W+>nq(zTLDd45w>2%TuGW1w0oh5j_8nK>ru@~5y&4@TQ>Yxbjawb#VSKKgFe7>P>FDM-kQL~K2I zo8=Hxy*3^P|BjUx_JSA|!tSJ*&4c10J#rQ{M`0UJgi68Ny0|lx_M5QImp>>Tk~<>l zgW?7<+JoXDzGpu?TwlIC0oIKCY4%GmsZud(Hc*j|y;+buTV&D*8Mttd;Mx;Pbwb_{V;f;Zvypy!lG~BaA(6ic zk$@z)cjTm$fSjJn2`CDWEdk+bvcn7tT99$ePfn)g=(s#i)r)F)Y&ec`Y_njgIu9W~ zOXeZOcKO4Ibq=cnGWnZ10}UY=2ehF%40Y%#qus(Y4I8UAO;@5~9mi_9Rh#C)su{?r zj0n66SEExn8uMq6Im)XQt8kv2pU?}rw)n$V2It(i^nMj0xjD_yCvZ8U#DIR8!3*2g zU1sp=SdFTZ%SY64#zzr6f5BTq;X^!YA$%xJjOC8a#=kb(l!t7}TWrdwskN(2nXsy^ zGVGWc^YQkd!7J1Jr&dchf%~rIQ~0*~4VwjS(e|{_q~L94?pNMiucdpLZ4}AK@>_bI zO_al60~#NRcElo`y{V2Iq}>tN51h-SlMyYs#mQhpS=D3J%a7~&QwXjn!v7|XJ>$>S zS3i3B{PQZ_nhld7M<5jMNq4M)t?b!sJAzXzzJ~I%Dz821l%c2^4aveqHPKAAGB~|) zhSq@Zv@Z|t5sckZaC7rnk)YqcuO;7yx0RjGm3^l}E@ymjl}KS{kp%SVM7+|bbQ-p;pP zrscjcgLmxM@p5+Vk7;>rn87VAEjwEt{7=1{!O!g4^}SEVzNoj)V8HA0otHmH%L$$Y zzG>^$w|@7lU9|jQ8-t;r9i5LpuD8!%Xm8{1u6$T8XE1zk>)vPY(c5Qm&$@N%ZhG?; zy_~`QP~Nz_UoYq3H+)yNY4jWw#=kNA&Vd65rro$rFK6&`yLO#0{f|3nxi8G%*Y@t+ zd-L}nq2&kL7!3ISQ+@dfT3#Dw@clb>1i$y`GkQ6L_wC(#|J8>)ueZZspy!@f?tGD! z`!L@L4DJ15SnH4Ub{IUZrR9^wul|_T_c0jyLD$6oORvx1Ngx3G{{9LrKiI}#=zsh- z7rdsIGZ^G+@=@2n&e{(%81S0*(l6g&Pppp zUFFr|CvDbr<(f+Ltx9w#)s@wWXg05=gewj_xEm;O&J}Opw_D@v!8Qi32T2(6^Sf!e z&&Obp=o>cu^bWn8!M{3i;JlIBzps}w_>7e+ZybHwclGuej3u%0xNG(L46Yq9V#Jzr zzowV#FqD71{)9FSPxwh;_}*Wmo@WT(M zemsR~me0pvp!aP}Q=irAGZ-vl^^=D_rMf)l8wyq|o2 zNcDys)s*Wi(Y2LmoTe!dvbgjs{f}S1Z#S0qjfd~utx4hdFoS_R+rv-)gqGKZ84Of< zs$%6!dO3q()O%n4Xb&x)9OmG6uD$97y*~6qU~HFG9KrlVFw9`EGd0utnV*;*W-xr- z^6X>GPfWt~2@L(8weU~OPlT|a)8V^j@1Xr28OGzoFxclsPu;(bmQM;ZxCaI}BeI#6 zH-#De9E|JW@3U?A`=CQ%244r-K5`P%x=CRU?*HrdyY%|-B?31AzVDv!AT6IBW-$ED zcCKMs5yIsJhHe-AGV~O!-w4QQHHtBJyEkX5R87(aRZJ-_Q_P^66E2 zIfKFSE&1&8>uLGHHU>j8xBTQ%CbK>tgTb=?@#czK^>!ExXpVn;&uw}+gMn8s-g<@M zK^P45xZs-$@7C)x7<;@Pq{mJ^4u0}K_6nYbz<}?n+1D^#A(ouLP#zdP`C+|%27`>A zQGKQ1aTpAt+`XUwVW(c7!Qe}$6%nxsW0v`JQRb0uD3qXXm}_F1D*bI-*rrT9Rbem;?Xt45ERC6h(+>gz%jWNozDny)$7YAXFtkl~ZDH;yjKfU= z1Ld{xwX^Mf?1l&oPIk%2uTb~2EfZ!i;I-wwrO(s)mxUP& z{crE^|4=Kh`hUdzVHo-i2BJ@B<(J)s`z0`l;se{Bqi*Qdd%_G}0}XvGOw*NfcZ3;? z(~7%?Dl(cIf21#?ySC@ivF^Du^T1uK?t7Kw(ru~KW=-N!4TZ8?7WbQRPx3!gW-E4 zzdM_{m4)BH?GRWQG2-=?MliRsF3ezP@0!ovrEcZ?7;c}ypkj-TeuSna&#fSC4#PM- zIs3AG8a}?`!wd$Ij?KIGHCjFir$YpW{$D(A1alwt7#{+Id^Pmx?t`Se1O~h=z2;rr zefT)|o$V*@r|nza%A#2#W{st)vL*WTi0a#qzD83O$m_4FL}N5napzMee)iOE5X5Jz z_fdfYpTc0AZ5+JgvE78>K3|x@K(PPazhNgWKZyN1fgu|G-VaZs0toFe82Hz_@YDzN z`V0n}v~%>|?xp3m#NT2VZ1czO-F}x|&R`JesSho=O)qCKjvM~*DHUX2Er}yAjI)y) z7j2>SgJA}PkGegwkom;cunxZiBiVoOByGG6VIPG*`|!imjI%Cn)5>eZ42JxBmv7}3 zT3&_oaR!GwKi^8r>%#Co0z+Q=-fx#NUsfAtF!+Zgb)*lsSFjmx4|9P+8FM~Hj z{`7TW%s16xMIkVJZ~w;|nGdSP27tg=A%||Kis-8%3X0*YHf_3T z(rawqz!zrlEij)m>mSV59BgASD8|`mPGUZ#7Ap#Yp9OmKEHQisgS$FAhtE5a`G~48 zgFzvmJ^ggUM=%)hOt0!RvK|huU%QdTl~$kf?sxvY`Y@^}XCK}(y!s!vP(|5Ni6FIC z*_5B#WM%9LKgW|`d!D&_|87kf$m9}%!6{UoKkBD?IfKFaFDkqAO$H3lvHBPWnf>X>XTPSGGZ@6Jq}K!Apxy@XXE4V9D{r!Zs*T`}VGzzo?Pb(H$0^@O&Jwb&K+F>xJ z-wzM$q4k0al_{iO41@LGa{4pO zt4zgSi@*@DFM8lK=2dEOGD=`9Uqj!2lj2i_qY?rGntQtXeoD*9)CYt6_f-Fkm0OaP zU)}q9hY*0xDZkblfVs_8&cEW0XLbYY7Ct(QiOxaXHG`Yp``J_YbM}wHb+wr%`EngT zsfPI{?JE@i{o3tJ1W7rAU)vgfly8T@Prmf_Beb00!{BXy%{|Q5XYi(phdjiWGx(j` zmoX71{WAEWe_gSIug~EAvv=Limos?j;~(A0movCtnRGi}&fs@`@zAY&IfMIe7|Z-0 z!H2>1r(SjgU!TGK75l%%moxae+}-_rxej0Vew;7&F?i?x&NhuB+D{7i&-zV2U(Vq0 zK4mj4C-i4<|AX6Z5b9I-oxjawew5T_a5(&`kt;&a3|>07<#xUu2KWE|U(94^^r7%W an_o6^Mfill?=*df<%(9na&bfZmj44p)t)Z^ literal 0 HcmV?d00001 diff --git a/_mian_tensorflow_keras_.py b/_mian_tensorflow_keras_.py deleted file mode 100644 index 6ac1ebc..0000000 --- a/_mian_tensorflow_keras_.py +++ /dev/null @@ -1,92 +0,0 @@ -import numpy as np -import pywt -import wfdb -import tensorflow as tf - -ECGDATAPATH= "mit-bih-arrhythmia-database-1.0.0/" - - -def denoise(date): - # Wavelet db5 level9 - coeffs = pywt.wavedec(data=date, wavelet='db5', level=9) - cA9, cD9, cD8, cD7, cD6, cD5, cD4, cD3, cD2, cD1 = coeffs - # noice del - threshold = (np.median(np.abs(cD1)) / 0.6745) * (np.sqrt(2 * np.log(len(cD1)))) - # take cD 1,2 turn 0 to denoise - cD1.fill(0) - cD2.fill(0) - for i in range(1, len(coeffs) - 2): - coeffs[i] = pywt.threshold(coeffs[i], threshold) - # get signal that before wavelet - rdata = pywt.waverec(coeffs=coeffs, wavelet='db5') - return rdata - - -# get ECG data,date type and denoise -# this function without return -# use append take return data to pass data -def getDataSet(number, X_data, Y_data): - ecgClassSet = ['N', 'A', 'V', 'l', 'R'] - print('get' + number + ' ECG data') - record = wfdb.rdrecord(ECGDATAPATH + number, channel_names=['MLII']) - data = record.p_signal.flatten() - # use def denoise - rdata = denoise(date=data) - - # get type of ECG data - annotation = wfdb.rdann(ECGDATAPATH + number, 'atr') - Rlocation = annotation.sample # annotation.sample:get R - Rclass = annotation.symbol - - # delete stable date near R - start = 10 - end = 5 - i = start - j = len(annotation.symbol) - end - - # get NAVLR type data - while i < j: - try: - lable = ecgClassSet.index(Rclass[i]) - x_train = rdata[Rlocation[i] - 99:Rlocation[i] + 201] - X_data.append(x_train) - Y_data.append(lable) - i += 1 - except ValueError: - i += 1 - return - - -# RATIO=The ratio of the training set to the test set,usually is 0.3 -def loadData(RATIO): - numberSet = [ - '100', '101', '103', '105', '106', '107', '108', '109', '111', '112', '113', '114', '115', '116', '117', '119', - '121', '122', '123', '124', '200', '201', '202', '203', '205', '208', '210', '212', '213', '214', '215', '217', - '219', '220', '221', '222', '223', '228', '230', '231', '232', '233', '234' - ] - dataSet = [] - labelSet = [] - for n in numberSet: - getDataSet(n, dataSet, labelSet) - - dataSet = np.array(dataSet).reshape(-1, 300) - labelSet = np.array(labelSet).reshape(-1, 1) - train_ds = np.hstack((dataSet, labelSet)) - np.random.shuffle(train_ds) - - X = train_ds[:, :300].reshape(-1, 300, 1) - Y = train_ds[:, 300] - # cut test and train data from ECG data - shuffle_index = np.random.permutation(len(X)) - test_length = int(RATIO * len(shuffle_index)) - test_index = shuffle_index[:test_length] - train_index = shuffle_index[test_index:] - X_test, Y_test = X[test_index:], Y[test_index] - X_train, Y_train = X[train_index], Y[train_index] - return X_train, Y_test, X_test, Y_train - - -class CNN_model_level_one(): - def __init__(self): - super().__init__() - self.conv1 = tf.layers.Conv1d(filter=4) diff --git a/_mian_tensorflow_twoLayerCNN.py b/_mian_tensorflow_twoLayerCNN.py new file mode 100644 index 0000000..7daaec7 --- /dev/null +++ b/_mian_tensorflow_twoLayerCNN.py @@ -0,0 +1,113 @@ +import datetime +import os + +import numpy as np +import pywt +import wfdb +import tensorflow as tf +from tensorflow import keras +from utils import loadData, plot_history_tf, plot_heat_map + +#from ECG_read_weiyuqing_without_wfdb import ECGDATAPATH +#PATH of this test +Project_PATH = "./Number-Of-CNN-Layers/Two/" +#PICTUREPATH= Project_PATH + "picture/" +log_dir = Project_PATH + "logs/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S") +model_Path_one = Project_PATH + "model/ecg_model_one_layer.h5" +#model_Path_one = Project_PATH + "ecg_model_one_layer.h5" + +RATIO = 0.3 +RANDOM_SEED = 42 +BATCH_SIZE = 128 +NUM_EPOCHS = 30 + + +def CNN_model_level_one(): + leavlOneModel = tf.keras.models.Sequential([ + + # #four CNN layers test + # tf.keras.layers.InputLayer(input_shape=(300,)), + # # reshape the tensor with shape (batch_size, 300) to (batch_size, 300, 1) + # tf.keras.layers.Reshape(target_shape=(300, 1)), + # # the first convolution layer, 4 21x1 convolution kernels, output shape (batch_size, 300, 4) + # tf.keras.layers.Conv1D(filters=4, kernel_size=21, strides=1, padding='SAME', activation='relu'), + # # the first pooling layer, max pooling, pooling size=3 , stride=2, output shape (batch_size, 150, 4) + # tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='SAME'), + # # the second convolution layer, 16 23x1 convolution kernels, output shape (batch_size, 150, 16) + # tf.keras.layers.Conv1D(filters=16, kernel_size=23, strides=1, padding='SAME', activation='relu'), + # # the second pooling layer, max pooling, pooling size=3, stride=2, output shape (batch_size, 75, 16) + # tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='SAME'), + # # the third convolution layer, 32 25x1 convolution kernels, output shape (batch_size, 75, 32) + # tf.keras.layers.Conv1D(filters=32, kernel_size=25, strides=1, padding='SAME', activation='relu'), + # # the third pooling layer, average pooling, pooling size=3, stride=2, output shape (batch_size, 38, 32) + # tf.keras.layers.AvgPool1D(pool_size=3, strides=2, padding='SAME'), + # # the fourth convolution layer, 64 27x1 convolution kernels, output shape (batch_size, 38, 64) + # tf.keras.layers.Conv1D(filters=64, kernel_size=27, strides=1, padding='SAME', activation='relu'), + # # flatten layer, for the next fully connected layer, output shape (batch_size, 38*64) + # tf.keras.layers.Flatten(), + # # fully connected layer, 128 nodes, output shape (batch_size, 128) + # tf.keras.layers.Dense(128, activation='relu'), + # # Dropout layer, dropout rate = 0.2 + # tf.keras.layers.Dropout(rate=0.2), + # # fully connected layer, 5 nodes (number of classes), output shape (batch_size, 5) + # tf.keras.layers.Dense(5, activation='softmax') + + #take test for one CNN layers model + + tf.keras.layers.InputLayer(input_shape=(300, 1)), + + # ECG data cant add 0 in edge, will broken data ,take false answer. So we need padding same data in edge. + + # take four 21*1 conv excitation function used RElu + tf.keras.layers.Conv1D(filters=4, kernel_size=21, strides=1, padding='same', activation='relu'), + # take four 3*1 pool,take strids 2. + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + + tf.keras.layers.Conv1D(filters=4, kernel_size=21, strides=1, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + # tf.keras.layers.Conv1D(filters=4, kernel_size=21, strides=1, padding='same', activation='relu'), + # tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + + tf.keras.layers.Flatten(), + tf.keras.layers.Dense(128, activation='relu'), + tf.keras.layers.Dropout(rate=0.2), + tf.keras.layers.Dense(5, activation='softmax') + ]) + return leavlOneModel + + +def main(): + # get traxin test + X_train, X_test, y_train, y_test = loadData(RATIO, RANDOM_SEED) + + # get model or create model + if os.path.exists(model_Path_one): + print(' get model in h5 file') + model = tf.keras.models.load_model(filepath=model_Path_one) + else: + # create new model(if model unexists) + model = CNN_model_level_one() + model.compile(optimizer='adam', + loss='sparse_categorical_crossentropy', + metrics=['accuracy']) + model.summary() + # TB make + tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, + histogram_freq=1, + ) + # Training and validation + history = model.fit(X_train, y_train, epochs=NUM_EPOCHS, + batch_size=BATCH_SIZE, + validation_data=(X_test, y_test), + callbacks=[tensorboard_callback]) + # validation_split=RATIO, + model.save(filepath=model_Path_one) + plot_history_tf(history) + + y_pred = np.argmax(model.predict(X_test), axis=-1) + plot_heat_map(y_test, y_pred) + + +if __name__ == '__main__': + os.environ["CUDA_VISIBLE_DEVICES"] = "-1" + main() diff --git a/noise_take_ecg.py b/noise_take_ecg.py deleted file mode 100644 index bd4f428..0000000 --- a/noise_take_ecg.py +++ /dev/null @@ -1,31 +0,0 @@ -import numpy as np -import pywt -import wfdb -from matplotlib import pyplot as plt - -#file error - -#use db5 ,level9 do deviose -from ECG_read_weiyuqing_without_wfdb import ECGDATAPATH - -#from ECG_read_weiyuqing_without_wfdb import PATH - -record=wfdb.rdrecord(ECGDATAPATH + 100, channel_names=['MLII']) -data=record.p_signal.flatten() - -coeffs=pywt.wavedec(data=data,wavelet='db5',level=9) -cA9,cD9, cD8, cD7, cD6, cD5, cD4, cD3, cD2, cD1 = coeffs - -threshold=(np.median(np.abs(cD1))/0.6745)*(np.sqrt(2*np.log(len(cD1)))) -cD1.fill(0) -cD2.fill(0) -for i in range(1,len(coeffs)-2): - coeffs[i]=pywt.threshold(coeffs[i],threshold) - -rdata=pywt.waverec(coeffs=coeffs,wavelet='db5') - -plt.figure(figsize=(20,4)) -plt.plot(data) -plt.show() -plt.plot(rdata) -plt.show() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..094b32d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,11 @@ +matplotlib==3.7.0 +numpy==1.23.5 +opencv_python==4.7.0.72 +Pillow==9.4.0 +PyWavelets==1.4.1 +scikit_learn==1.2.1 +seaborn==0.12.2 +tensorflow==2.10.0 +tensorflow_intel==2.11.0 +torch==2.0.0+cu117 +wfdb==4.1.0 diff --git a/some-test/noise_take_ecg.py b/some-test/noise_take_ecg.py new file mode 100644 index 0000000..a30bdf5 --- /dev/null +++ b/some-test/noise_take_ecg.py @@ -0,0 +1,31 @@ +import numpy as np +import pywt +import wfdb +from matplotlib import pyplot as plt + +# file error + +# use db5 ,level9 do deviose +ECGDATAPATH = './MIT-BIT/' + +# from ECG_read_weiyuqing_without_wfdb import PATH +# record = wfdb.rdrecord(ECGDATAPATH + number, channel_names=['MLII']) +record = wfdb.rdrecord(ECGDATAPATH + '100', channel_names=['MLII']) +data = record.p_signal.flatten() + +coeffs = pywt.wavedec(data=data, wavelet='db5', level=9) +cA9, cD9, cD8, cD7, cD6, cD5, cD4, cD3, cD2, cD1 = coeffs + +threshold = (np.median(np.abs(cD1)) / 0.6745) * (np.sqrt(2 * np.log(len(cD1)))) +cD1.fill(0) +cD2.fill(0) +for i in range(1, len(coeffs) - 2): + coeffs[i] = pywt.threshold(coeffs[i], threshold) + +rdata = pywt.waverec(coeffs=coeffs, wavelet='db5') + +plt.figure(figsize=(20, 4)) +plt.plot(data) +plt.show() +plt.plot(rdata) +plt.show() diff --git a/pytorch_gpu_test.py b/some-test/pytorch_gpu_test.py similarity index 100% rename from pytorch_gpu_test.py rename to some-test/pytorch_gpu_test.py diff --git a/test_plt_show.py b/some-test/test_plt_show.py similarity index 100% rename from test_plt_show.py rename to some-test/test_plt_show.py diff --git a/tf_run_in_gpu.py b/some-test/tf_run_in_gpu.py similarity index 100% rename from tf_run_in_gpu.py rename to some-test/tf_run_in_gpu.py diff --git a/wfdb_use.py b/some-test/wfdb_use.py similarity index 90% rename from wfdb_use.py rename to some-test/wfdb_use.py index 9da84a0..4a68aa6 100644 --- a/wfdb_use.py +++ b/some-test/wfdb_use.py @@ -4,14 +4,14 @@ import numpy as np import wfdb import matplotlib.pyplot -PATH = './mit-bih-arrhythmia-database-1.0.0/' +PATH = '../MIT-BIT/' # file error with read_ecg_data(data) parameter data false def read_ecg_data(data): # get the data from the ecg data file and set begin and end points - record = wfdb.rdrecord(PATH + data, sampfrom=0, sampto=1500) + record = wfdb.rdrecord(PATH + 'data', sampfrom=0, sampto=1500) # return type record print(type(record)) print(dir(record)) diff --git a/utils.py b/utils.py index 814fd91..12eac22 100644 --- a/utils.py +++ b/utils.py @@ -10,7 +10,7 @@ from sklearn.metrics import confusion_matrix from sklearn.model_selection import train_test_split # from _mian_tensorflow import Project_PATH -Project_PATH = "./Number-Of-CNN-Layers/One/" +Project_PATH = "./Number-Of-CNN-Layers/Two/" PICTUREPATH= Project_PATH +'picture/'