diff --git a/Number-Of-CNN-Layers/Five/logs/20230323-195504/train/events.out.tfevents.1679572507.WEIYUQING.17632.0.v2 b/Number-Of-CNN-Layers/Five/logs/20230323-195504/train/events.out.tfevents.1679572507.WEIYUQING.17632.0.v2 new file mode 100644 index 0000000..1092007 Binary files /dev/null and b/Number-Of-CNN-Layers/Five/logs/20230323-195504/train/events.out.tfevents.1679572507.WEIYUQING.17632.0.v2 differ diff --git a/Number-Of-CNN-Layers/Five/logs/20230323-195504/validation/events.out.tfevents.1679572514.WEIYUQING.17632.1.v2 b/Number-Of-CNN-Layers/Five/logs/20230323-195504/validation/events.out.tfevents.1679572514.WEIYUQING.17632.1.v2 new file mode 100644 index 0000000..13f9da0 Binary files /dev/null and b/Number-Of-CNN-Layers/Five/logs/20230323-195504/validation/events.out.tfevents.1679572514.WEIYUQING.17632.1.v2 differ diff --git a/Number-Of-CNN-Layers/Five/logs/20230323-200041/train/events.out.tfevents.1679572846.WEIYUQING.29348.0.v2 b/Number-Of-CNN-Layers/Five/logs/20230323-200041/train/events.out.tfevents.1679572846.WEIYUQING.29348.0.v2 new file mode 100644 index 0000000..519ec8b Binary files /dev/null and b/Number-Of-CNN-Layers/Five/logs/20230323-200041/train/events.out.tfevents.1679572846.WEIYUQING.29348.0.v2 differ diff --git a/Number-Of-CNN-Layers/Five/logs/20230323-200041/validation/events.out.tfevents.1679572855.WEIYUQING.29348.1.v2 b/Number-Of-CNN-Layers/Five/logs/20230323-200041/validation/events.out.tfevents.1679572855.WEIYUQING.29348.1.v2 new file mode 100644 index 0000000..6886949 Binary files /dev/null and b/Number-Of-CNN-Layers/Five/logs/20230323-200041/validation/events.out.tfevents.1679572855.WEIYUQING.29348.1.v2 differ diff --git a/Number-Of-CNN-Layers/Five/logs/20230323-200628/train/events.out.tfevents.1679573198.WEIYUQING.32224.0.v2 b/Number-Of-CNN-Layers/Five/logs/20230323-200628/train/events.out.tfevents.1679573198.WEIYUQING.32224.0.v2 new file mode 100644 index 0000000..bc28d9e Binary files /dev/null and b/Number-Of-CNN-Layers/Five/logs/20230323-200628/train/events.out.tfevents.1679573198.WEIYUQING.32224.0.v2 differ diff --git a/Number-Of-CNN-Layers/Five/logs/20230323-200628/validation/events.out.tfevents.1679573210.WEIYUQING.32224.1.v2 b/Number-Of-CNN-Layers/Five/logs/20230323-200628/validation/events.out.tfevents.1679573210.WEIYUQING.32224.1.v2 new file mode 100644 index 0000000..14c9692 Binary files /dev/null and b/Number-Of-CNN-Layers/Five/logs/20230323-200628/validation/events.out.tfevents.1679573210.WEIYUQING.32224.1.v2 differ diff --git a/Number-Of-CNN-Layers/Five/model/ecg_model_five_layer.h5 b/Number-Of-CNN-Layers/Five/model/ecg_model_five_layer.h5 index 7d075f4..72561ca 100644 Binary files a/Number-Of-CNN-Layers/Five/model/ecg_model_five_layer.h5 and b/Number-Of-CNN-Layers/Five/model/ecg_model_five_layer.h5 differ diff --git a/Number-Of-CNN-Layers/Five/picture/accuracy.png b/Number-Of-CNN-Layers/Five/picture/accuracy.png index 38e8196..6272da9 100644 Binary files a/Number-Of-CNN-Layers/Five/picture/accuracy.png and b/Number-Of-CNN-Layers/Five/picture/accuracy.png differ diff --git a/Number-Of-CNN-Layers/Five/picture/confusion_matrix.png b/Number-Of-CNN-Layers/Five/picture/confusion_matrix.png index 8d3ec4a..0251b28 100644 Binary files a/Number-Of-CNN-Layers/Five/picture/confusion_matrix.png and b/Number-Of-CNN-Layers/Five/picture/confusion_matrix.png differ diff --git a/Number-Of-CNN-Layers/Five/picture/loss.png b/Number-Of-CNN-Layers/Five/picture/loss.png index f2bc33f..58ce69e 100644 Binary files a/Number-Of-CNN-Layers/Five/picture/loss.png and b/Number-Of-CNN-Layers/Five/picture/loss.png differ diff --git a/Number-Of-CNN-Layers/Four/logs/20230323-192949/train/events.out.tfevents.1679570992.WEIYUQING.30672.0.v2 b/Number-Of-CNN-Layers/Four/logs/20230323-192949/train/events.out.tfevents.1679570992.WEIYUQING.30672.0.v2 new file mode 100644 index 0000000..eb718a3 Binary files /dev/null and b/Number-Of-CNN-Layers/Four/logs/20230323-192949/train/events.out.tfevents.1679570992.WEIYUQING.30672.0.v2 differ diff --git a/Number-Of-CNN-Layers/Four/logs/20230323-192949/validation/events.out.tfevents.1679570998.WEIYUQING.30672.1.v2 b/Number-Of-CNN-Layers/Four/logs/20230323-192949/validation/events.out.tfevents.1679570998.WEIYUQING.30672.1.v2 new file mode 100644 index 0000000..d2d6ba4 Binary files /dev/null and b/Number-Of-CNN-Layers/Four/logs/20230323-192949/validation/events.out.tfevents.1679570998.WEIYUQING.30672.1.v2 differ diff --git a/Number-Of-CNN-Layers/Four/logs/20230323-193148/train/events.out.tfevents.1679571112.WEIYUQING.34196.0.v2 b/Number-Of-CNN-Layers/Four/logs/20230323-193148/train/events.out.tfevents.1679571112.WEIYUQING.34196.0.v2 new file mode 100644 index 0000000..d9c6c3a Binary files /dev/null and b/Number-Of-CNN-Layers/Four/logs/20230323-193148/train/events.out.tfevents.1679571112.WEIYUQING.34196.0.v2 differ diff --git a/Number-Of-CNN-Layers/Four/logs/20230323-193148/validation/events.out.tfevents.1679571118.WEIYUQING.34196.1.v2 b/Number-Of-CNN-Layers/Four/logs/20230323-193148/validation/events.out.tfevents.1679571118.WEIYUQING.34196.1.v2 new file mode 100644 index 0000000..52d3163 Binary files /dev/null and b/Number-Of-CNN-Layers/Four/logs/20230323-193148/validation/events.out.tfevents.1679571118.WEIYUQING.34196.1.v2 differ diff --git a/Number-Of-CNN-Layers/Four/logs/20230323-200626/train/events.out.tfevents.1679573196.WEIYUQING.19724.0.v2 b/Number-Of-CNN-Layers/Four/logs/20230323-200626/train/events.out.tfevents.1679573196.WEIYUQING.19724.0.v2 new file mode 100644 index 0000000..3b3d82a Binary files /dev/null and b/Number-Of-CNN-Layers/Four/logs/20230323-200626/train/events.out.tfevents.1679573196.WEIYUQING.19724.0.v2 differ diff --git a/Number-Of-CNN-Layers/Four/logs/20230323-200626/validation/events.out.tfevents.1679573208.WEIYUQING.19724.1.v2 b/Number-Of-CNN-Layers/Four/logs/20230323-200626/validation/events.out.tfevents.1679573208.WEIYUQING.19724.1.v2 new file mode 100644 index 0000000..bd942d9 Binary files /dev/null and b/Number-Of-CNN-Layers/Four/logs/20230323-200626/validation/events.out.tfevents.1679573208.WEIYUQING.19724.1.v2 differ diff --git a/Number-Of-CNN-Layers/Four/model/ecg_model_four_layer.h5 b/Number-Of-CNN-Layers/Four/model/ecg_model_four_layer.h5 index d3bf871..c1f7b48 100644 Binary files a/Number-Of-CNN-Layers/Four/model/ecg_model_four_layer.h5 and b/Number-Of-CNN-Layers/Four/model/ecg_model_four_layer.h5 differ diff --git a/Number-Of-CNN-Layers/Four/picture/accuracy.png b/Number-Of-CNN-Layers/Four/picture/accuracy.png index c64f650..d1b893e 100644 Binary files a/Number-Of-CNN-Layers/Four/picture/accuracy.png and b/Number-Of-CNN-Layers/Four/picture/accuracy.png differ diff --git a/Number-Of-CNN-Layers/Four/picture/confusion_matrix.png b/Number-Of-CNN-Layers/Four/picture/confusion_matrix.png index d03000e..4e495bb 100644 Binary files a/Number-Of-CNN-Layers/Four/picture/confusion_matrix.png and b/Number-Of-CNN-Layers/Four/picture/confusion_matrix.png differ diff --git a/Number-Of-CNN-Layers/Four/picture/loss.png b/Number-Of-CNN-Layers/Four/picture/loss.png index 6d0f608..91a7959 100644 Binary files a/Number-Of-CNN-Layers/Four/picture/loss.png and b/Number-Of-CNN-Layers/Four/picture/loss.png differ diff --git a/Number-Of-CNN-Layers/One/logs/20230323-164734/train/events.out.tfevents.1679561258.WEIYUQING.35728.0.v2 b/Number-Of-CNN-Layers/One/logs/20230323-164734/train/events.out.tfevents.1679561258.WEIYUQING.35728.0.v2 new file mode 100644 index 0000000..995a0f6 Binary files /dev/null and b/Number-Of-CNN-Layers/One/logs/20230323-164734/train/events.out.tfevents.1679561258.WEIYUQING.35728.0.v2 differ diff --git a/Number-Of-CNN-Layers/One/logs/20230323-164734/validation/events.out.tfevents.1679561263.WEIYUQING.35728.1.v2 b/Number-Of-CNN-Layers/One/logs/20230323-164734/validation/events.out.tfevents.1679561263.WEIYUQING.35728.1.v2 new file mode 100644 index 0000000..5300c07 Binary files /dev/null and b/Number-Of-CNN-Layers/One/logs/20230323-164734/validation/events.out.tfevents.1679561263.WEIYUQING.35728.1.v2 differ diff --git a/Number-Of-CNN-Layers/One/logs/20230323-190310/train/events.out.tfevents.1679569395.WEIYUQING.33724.0.v2 b/Number-Of-CNN-Layers/One/logs/20230323-190310/train/events.out.tfevents.1679569395.WEIYUQING.33724.0.v2 new file mode 100644 index 0000000..2513eb7 Binary files /dev/null and b/Number-Of-CNN-Layers/One/logs/20230323-190310/train/events.out.tfevents.1679569395.WEIYUQING.33724.0.v2 differ diff --git a/Number-Of-CNN-Layers/One/logs/20230323-190310/validation/events.out.tfevents.1679569402.WEIYUQING.33724.1.v2 b/Number-Of-CNN-Layers/One/logs/20230323-190310/validation/events.out.tfevents.1679569402.WEIYUQING.33724.1.v2 new file mode 100644 index 0000000..b9407f5 Binary files /dev/null and b/Number-Of-CNN-Layers/One/logs/20230323-190310/validation/events.out.tfevents.1679569402.WEIYUQING.33724.1.v2 differ diff --git a/Number-Of-CNN-Layers/One/logs/20230323-192211/train/events.out.tfevents.1679570535.WEIYUQING.31656.0.v2 b/Number-Of-CNN-Layers/One/logs/20230323-192211/train/events.out.tfevents.1679570535.WEIYUQING.31656.0.v2 new file mode 100644 index 0000000..81953fe Binary files /dev/null and b/Number-Of-CNN-Layers/One/logs/20230323-192211/train/events.out.tfevents.1679570535.WEIYUQING.31656.0.v2 differ diff --git a/Number-Of-CNN-Layers/One/logs/20230323-192211/validation/events.out.tfevents.1679570539.WEIYUQING.31656.1.v2 b/Number-Of-CNN-Layers/One/logs/20230323-192211/validation/events.out.tfevents.1679570539.WEIYUQING.31656.1.v2 new file mode 100644 index 0000000..b251dd5 Binary files /dev/null and b/Number-Of-CNN-Layers/One/logs/20230323-192211/validation/events.out.tfevents.1679570539.WEIYUQING.31656.1.v2 differ diff --git a/Number-Of-CNN-Layers/One/logs/20230323-200429/train/events.out.tfevents.1679573076.WEIYUQING.27904.0.v2 b/Number-Of-CNN-Layers/One/logs/20230323-200429/train/events.out.tfevents.1679573076.WEIYUQING.27904.0.v2 new file mode 100644 index 0000000..29bf980 Binary files /dev/null and b/Number-Of-CNN-Layers/One/logs/20230323-200429/train/events.out.tfevents.1679573076.WEIYUQING.27904.0.v2 differ diff --git a/Number-Of-CNN-Layers/One/logs/20230323-200429/validation/events.out.tfevents.1679573082.WEIYUQING.27904.1.v2 b/Number-Of-CNN-Layers/One/logs/20230323-200429/validation/events.out.tfevents.1679573082.WEIYUQING.27904.1.v2 new file mode 100644 index 0000000..57d2502 Binary files /dev/null and b/Number-Of-CNN-Layers/One/logs/20230323-200429/validation/events.out.tfevents.1679573082.WEIYUQING.27904.1.v2 differ diff --git a/Number-Of-CNN-Layers/One/model/ecg_model_one_layer.h5 b/Number-Of-CNN-Layers/One/model/ecg_model_one_layer.h5 index 4f23fea..fdfdca9 100644 Binary files a/Number-Of-CNN-Layers/One/model/ecg_model_one_layer.h5 and b/Number-Of-CNN-Layers/One/model/ecg_model_one_layer.h5 differ diff --git a/Number-Of-CNN-Layers/One/picture/accuracy.png b/Number-Of-CNN-Layers/One/picture/accuracy.png index 9e224f4..c848403 100644 Binary files a/Number-Of-CNN-Layers/One/picture/accuracy.png and b/Number-Of-CNN-Layers/One/picture/accuracy.png differ diff --git a/Number-Of-CNN-Layers/One/picture/confusion_matrix.png b/Number-Of-CNN-Layers/One/picture/confusion_matrix.png index e51a28d..6610200 100644 Binary files a/Number-Of-CNN-Layers/One/picture/confusion_matrix.png and b/Number-Of-CNN-Layers/One/picture/confusion_matrix.png differ diff --git a/Number-Of-CNN-Layers/One/picture/loss.png b/Number-Of-CNN-Layers/One/picture/loss.png index e8ef0e9..1c8b7e8 100644 Binary files a/Number-Of-CNN-Layers/One/picture/loss.png and b/Number-Of-CNN-Layers/One/picture/loss.png differ diff --git a/Number-Of-CNN-Layers/Seven/logs/20230323-203151/train/events.out.tfevents.1679574716.WEIYUQING.31388.0.v2 b/Number-Of-CNN-Layers/Seven/logs/20230323-203151/train/events.out.tfevents.1679574716.WEIYUQING.31388.0.v2 new file mode 100644 index 0000000..6ba8846 Binary files /dev/null and b/Number-Of-CNN-Layers/Seven/logs/20230323-203151/train/events.out.tfevents.1679574716.WEIYUQING.31388.0.v2 differ diff --git a/Number-Of-CNN-Layers/Seven/logs/20230323-203151/validation/events.out.tfevents.1679574725.WEIYUQING.31388.1.v2 b/Number-Of-CNN-Layers/Seven/logs/20230323-203151/validation/events.out.tfevents.1679574725.WEIYUQING.31388.1.v2 new file mode 100644 index 0000000..765e988 Binary files /dev/null and b/Number-Of-CNN-Layers/Seven/logs/20230323-203151/validation/events.out.tfevents.1679574725.WEIYUQING.31388.1.v2 differ diff --git a/Number-Of-CNN-Layers/Seven/model/ecg_model_seven_layer.h5 b/Number-Of-CNN-Layers/Seven/model/ecg_model_seven_layer.h5 new file mode 100644 index 0000000..717f411 Binary files /dev/null and b/Number-Of-CNN-Layers/Seven/model/ecg_model_seven_layer.h5 differ diff --git a/Number-Of-CNN-Layers/Seven/picture/accuracy.png b/Number-Of-CNN-Layers/Seven/picture/accuracy.png new file mode 100644 index 0000000..67b0e2f Binary files /dev/null and b/Number-Of-CNN-Layers/Seven/picture/accuracy.png differ diff --git a/Number-Of-CNN-Layers/Seven/picture/confusion_matrix.png b/Number-Of-CNN-Layers/Seven/picture/confusion_matrix.png new file mode 100644 index 0000000..7d85238 Binary files /dev/null and b/Number-Of-CNN-Layers/Seven/picture/confusion_matrix.png differ diff --git a/Number-Of-CNN-Layers/Seven/picture/loss.png b/Number-Of-CNN-Layers/Seven/picture/loss.png new file mode 100644 index 0000000..caf0d9e Binary files /dev/null and b/Number-Of-CNN-Layers/Seven/picture/loss.png differ diff --git a/Number-Of-CNN-Layers/Six/logs/20230323-202206/train/events.out.tfevents.1679574130.WEIYUQING.30276.0.v2 b/Number-Of-CNN-Layers/Six/logs/20230323-202206/train/events.out.tfevents.1679574130.WEIYUQING.30276.0.v2 new file mode 100644 index 0000000..47e989c Binary files /dev/null and b/Number-Of-CNN-Layers/Six/logs/20230323-202206/train/events.out.tfevents.1679574130.WEIYUQING.30276.0.v2 differ diff --git a/Number-Of-CNN-Layers/Six/logs/20230323-202206/validation/events.out.tfevents.1679574136.WEIYUQING.30276.1.v2 b/Number-Of-CNN-Layers/Six/logs/20230323-202206/validation/events.out.tfevents.1679574136.WEIYUQING.30276.1.v2 new file mode 100644 index 0000000..577a24d Binary files /dev/null and b/Number-Of-CNN-Layers/Six/logs/20230323-202206/validation/events.out.tfevents.1679574136.WEIYUQING.30276.1.v2 differ diff --git a/Number-Of-CNN-Layers/Six/model/ecg_model_six_layer.h5 b/Number-Of-CNN-Layers/Six/model/ecg_model_six_layer.h5 new file mode 100644 index 0000000..026903f Binary files /dev/null and b/Number-Of-CNN-Layers/Six/model/ecg_model_six_layer.h5 differ diff --git a/Number-Of-CNN-Layers/Six/picture/accuracy.png b/Number-Of-CNN-Layers/Six/picture/accuracy.png new file mode 100644 index 0000000..5f922ca Binary files /dev/null and b/Number-Of-CNN-Layers/Six/picture/accuracy.png differ diff --git a/Number-Of-CNN-Layers/Six/picture/confusion_matrix.png b/Number-Of-CNN-Layers/Six/picture/confusion_matrix.png new file mode 100644 index 0000000..ec8add2 Binary files /dev/null and b/Number-Of-CNN-Layers/Six/picture/confusion_matrix.png differ diff --git a/Number-Of-CNN-Layers/Six/picture/loss.png b/Number-Of-CNN-Layers/Six/picture/loss.png new file mode 100644 index 0000000..c1af477 Binary files /dev/null and b/Number-Of-CNN-Layers/Six/picture/loss.png differ diff --git a/Number-Of-CNN-Layers/Three/logs/20230323-191851/train/events.out.tfevents.1679570335.WEIYUQING.11440.0.v2 b/Number-Of-CNN-Layers/Three/logs/20230323-191851/train/events.out.tfevents.1679570335.WEIYUQING.11440.0.v2 new file mode 100644 index 0000000..31ae027 Binary files /dev/null and b/Number-Of-CNN-Layers/Three/logs/20230323-191851/train/events.out.tfevents.1679570335.WEIYUQING.11440.0.v2 differ diff --git a/Number-Of-CNN-Layers/Three/logs/20230323-191851/validation/events.out.tfevents.1679570339.WEIYUQING.11440.1.v2 b/Number-Of-CNN-Layers/Three/logs/20230323-191851/validation/events.out.tfevents.1679570339.WEIYUQING.11440.1.v2 new file mode 100644 index 0000000..70f20eb Binary files /dev/null and b/Number-Of-CNN-Layers/Three/logs/20230323-191851/validation/events.out.tfevents.1679570339.WEIYUQING.11440.1.v2 differ diff --git a/Number-Of-CNN-Layers/Three/logs/20230323-191922/train/events.out.tfevents.1679570365.WEIYUQING.7672.0.v2 b/Number-Of-CNN-Layers/Three/logs/20230323-191922/train/events.out.tfevents.1679570365.WEIYUQING.7672.0.v2 new file mode 100644 index 0000000..64916d3 Binary files /dev/null and b/Number-Of-CNN-Layers/Three/logs/20230323-191922/train/events.out.tfevents.1679570365.WEIYUQING.7672.0.v2 differ diff --git a/Number-Of-CNN-Layers/Three/logs/20230323-191922/validation/events.out.tfevents.1679570369.WEIYUQING.7672.1.v2 b/Number-Of-CNN-Layers/Three/logs/20230323-191922/validation/events.out.tfevents.1679570369.WEIYUQING.7672.1.v2 new file mode 100644 index 0000000..7610c8a Binary files /dev/null and b/Number-Of-CNN-Layers/Three/logs/20230323-191922/validation/events.out.tfevents.1679570369.WEIYUQING.7672.1.v2 differ diff --git a/Number-Of-CNN-Layers/Three/logs/20230323-192557/train/events.out.tfevents.1679570760.WEIYUQING.19268.0.v2 b/Number-Of-CNN-Layers/Three/logs/20230323-192557/train/events.out.tfevents.1679570760.WEIYUQING.19268.0.v2 new file mode 100644 index 0000000..e5ecbd5 Binary files /dev/null and b/Number-Of-CNN-Layers/Three/logs/20230323-192557/train/events.out.tfevents.1679570760.WEIYUQING.19268.0.v2 differ diff --git a/Number-Of-CNN-Layers/Three/logs/20230323-192557/validation/events.out.tfevents.1679570765.WEIYUQING.19268.1.v2 b/Number-Of-CNN-Layers/Three/logs/20230323-192557/validation/events.out.tfevents.1679570765.WEIYUQING.19268.1.v2 new file mode 100644 index 0000000..707d0e3 Binary files /dev/null and b/Number-Of-CNN-Layers/Three/logs/20230323-192557/validation/events.out.tfevents.1679570765.WEIYUQING.19268.1.v2 differ diff --git a/Number-Of-CNN-Layers/Three/logs/20230323-200440/train/events.out.tfevents.1679573092.WEIYUQING.17240.0.v2 b/Number-Of-CNN-Layers/Three/logs/20230323-200440/train/events.out.tfevents.1679573092.WEIYUQING.17240.0.v2 new file mode 100644 index 0000000..a2e84e9 Binary files /dev/null and b/Number-Of-CNN-Layers/Three/logs/20230323-200440/train/events.out.tfevents.1679573092.WEIYUQING.17240.0.v2 differ diff --git a/Number-Of-CNN-Layers/Three/logs/20230323-200440/validation/events.out.tfevents.1679573106.WEIYUQING.17240.1.v2 b/Number-Of-CNN-Layers/Three/logs/20230323-200440/validation/events.out.tfevents.1679573106.WEIYUQING.17240.1.v2 new file mode 100644 index 0000000..419150c Binary files /dev/null and b/Number-Of-CNN-Layers/Three/logs/20230323-200440/validation/events.out.tfevents.1679573106.WEIYUQING.17240.1.v2 differ diff --git a/Number-Of-CNN-Layers/Three/model/ecg_model_three_layer.h5 b/Number-Of-CNN-Layers/Three/model/ecg_model_three_layer.h5 index c4c0519..296a2b7 100644 Binary files a/Number-Of-CNN-Layers/Three/model/ecg_model_three_layer.h5 and b/Number-Of-CNN-Layers/Three/model/ecg_model_three_layer.h5 differ diff --git a/Number-Of-CNN-Layers/Three/picture/accuracy.png b/Number-Of-CNN-Layers/Three/picture/accuracy.png index f4801c9..4476169 100644 Binary files a/Number-Of-CNN-Layers/Three/picture/accuracy.png and b/Number-Of-CNN-Layers/Three/picture/accuracy.png differ diff --git a/Number-Of-CNN-Layers/Three/picture/confusion_matrix.png b/Number-Of-CNN-Layers/Three/picture/confusion_matrix.png index bdea210..ade40e3 100644 Binary files a/Number-Of-CNN-Layers/Three/picture/confusion_matrix.png and b/Number-Of-CNN-Layers/Three/picture/confusion_matrix.png differ diff --git a/Number-Of-CNN-Layers/Three/picture/loss.png b/Number-Of-CNN-Layers/Three/picture/loss.png index b7c4f65..d6b4ba9 100644 Binary files a/Number-Of-CNN-Layers/Three/picture/loss.png and b/Number-Of-CNN-Layers/Three/picture/loss.png differ diff --git a/Number-Of-CNN-Layers/Two/logs/20230323-165006/train/events.out.tfevents.1679561410.WEIYUQING.34032.0.v2 b/Number-Of-CNN-Layers/Two/logs/20230323-165006/train/events.out.tfevents.1679561410.WEIYUQING.34032.0.v2 new file mode 100644 index 0000000..e85714f Binary files /dev/null and b/Number-Of-CNN-Layers/Two/logs/20230323-165006/train/events.out.tfevents.1679561410.WEIYUQING.34032.0.v2 differ diff --git a/Number-Of-CNN-Layers/Two/logs/20230323-165006/validation/events.out.tfevents.1679561415.WEIYUQING.34032.1.v2 b/Number-Of-CNN-Layers/Two/logs/20230323-165006/validation/events.out.tfevents.1679561415.WEIYUQING.34032.1.v2 new file mode 100644 index 0000000..dab7a1e Binary files /dev/null and b/Number-Of-CNN-Layers/Two/logs/20230323-165006/validation/events.out.tfevents.1679561415.WEIYUQING.34032.1.v2 differ diff --git a/Number-Of-CNN-Layers/Two/logs/20230323-165949/train/events.out.tfevents.1679561992.WEIYUQING.9224.0.v2 b/Number-Of-CNN-Layers/Two/logs/20230323-165949/train/events.out.tfevents.1679561992.WEIYUQING.9224.0.v2 new file mode 100644 index 0000000..cde40b1 Binary files /dev/null and b/Number-Of-CNN-Layers/Two/logs/20230323-165949/train/events.out.tfevents.1679561992.WEIYUQING.9224.0.v2 differ diff --git a/Number-Of-CNN-Layers/Two/logs/20230323-165949/validation/events.out.tfevents.1679561998.WEIYUQING.9224.1.v2 b/Number-Of-CNN-Layers/Two/logs/20230323-165949/validation/events.out.tfevents.1679561998.WEIYUQING.9224.1.v2 new file mode 100644 index 0000000..b4f1bb1 Binary files /dev/null and b/Number-Of-CNN-Layers/Two/logs/20230323-165949/validation/events.out.tfevents.1679561998.WEIYUQING.9224.1.v2 differ diff --git a/Number-Of-CNN-Layers/Two/logs/20230323-190053/train/events.out.tfevents.1679569256.WEIYUQING.21292.0.v2 b/Number-Of-CNN-Layers/Two/logs/20230323-190053/train/events.out.tfevents.1679569256.WEIYUQING.21292.0.v2 new file mode 100644 index 0000000..ac301ae Binary files /dev/null and b/Number-Of-CNN-Layers/Two/logs/20230323-190053/train/events.out.tfevents.1679569256.WEIYUQING.21292.0.v2 differ diff --git a/Number-Of-CNN-Layers/Two/logs/20230323-190053/validation/events.out.tfevents.1679569263.WEIYUQING.21292.1.v2 b/Number-Of-CNN-Layers/Two/logs/20230323-190053/validation/events.out.tfevents.1679569263.WEIYUQING.21292.1.v2 new file mode 100644 index 0000000..f6e09e6 Binary files /dev/null and b/Number-Of-CNN-Layers/Two/logs/20230323-190053/validation/events.out.tfevents.1679569263.WEIYUQING.21292.1.v2 differ diff --git a/Number-Of-CNN-Layers/Two/logs/20230323-192357/train/events.out.tfevents.1679570640.WEIYUQING.33868.0.v2 b/Number-Of-CNN-Layers/Two/logs/20230323-192357/train/events.out.tfevents.1679570640.WEIYUQING.33868.0.v2 new file mode 100644 index 0000000..c928557 Binary files /dev/null and b/Number-Of-CNN-Layers/Two/logs/20230323-192357/train/events.out.tfevents.1679570640.WEIYUQING.33868.0.v2 differ diff --git a/Number-Of-CNN-Layers/Two/logs/20230323-192357/validation/events.out.tfevents.1679570645.WEIYUQING.33868.1.v2 b/Number-Of-CNN-Layers/Two/logs/20230323-192357/validation/events.out.tfevents.1679570645.WEIYUQING.33868.1.v2 new file mode 100644 index 0000000..21f10e0 Binary files /dev/null and b/Number-Of-CNN-Layers/Two/logs/20230323-192357/validation/events.out.tfevents.1679570645.WEIYUQING.33868.1.v2 differ diff --git a/Number-Of-CNN-Layers/Two/logs/20230323-200434/train/events.out.tfevents.1679573082.WEIYUQING.9244.0.v2 b/Number-Of-CNN-Layers/Two/logs/20230323-200434/train/events.out.tfevents.1679573082.WEIYUQING.9244.0.v2 new file mode 100644 index 0000000..f06041f Binary files /dev/null and b/Number-Of-CNN-Layers/Two/logs/20230323-200434/train/events.out.tfevents.1679573082.WEIYUQING.9244.0.v2 differ diff --git a/Number-Of-CNN-Layers/Two/logs/20230323-200434/validation/events.out.tfevents.1679573091.WEIYUQING.9244.1.v2 b/Number-Of-CNN-Layers/Two/logs/20230323-200434/validation/events.out.tfevents.1679573091.WEIYUQING.9244.1.v2 new file mode 100644 index 0000000..e65a0a9 Binary files /dev/null and b/Number-Of-CNN-Layers/Two/logs/20230323-200434/validation/events.out.tfevents.1679573091.WEIYUQING.9244.1.v2 differ diff --git a/Number-Of-CNN-Layers/Two/model/ecg_model_two_layer.h5 b/Number-Of-CNN-Layers/Two/model/ecg_model_two_layer.h5 index b57a42a..6008a3f 100644 Binary files a/Number-Of-CNN-Layers/Two/model/ecg_model_two_layer.h5 and b/Number-Of-CNN-Layers/Two/model/ecg_model_two_layer.h5 differ diff --git a/Number-Of-CNN-Layers/Two/picture/accuracy.png b/Number-Of-CNN-Layers/Two/picture/accuracy.png index 93b26ee..0ce2b4d 100644 Binary files a/Number-Of-CNN-Layers/Two/picture/accuracy.png and b/Number-Of-CNN-Layers/Two/picture/accuracy.png differ diff --git a/Number-Of-CNN-Layers/Two/picture/confusion_matrix.png b/Number-Of-CNN-Layers/Two/picture/confusion_matrix.png index 8488702..4ef2008 100644 Binary files a/Number-Of-CNN-Layers/Two/picture/confusion_matrix.png and b/Number-Of-CNN-Layers/Two/picture/confusion_matrix.png differ diff --git a/Number-Of-CNN-Layers/Two/picture/loss.png b/Number-Of-CNN-Layers/Two/picture/loss.png index 9c136f9..f47ef3f 100644 Binary files a/Number-Of-CNN-Layers/Two/picture/loss.png and b/Number-Of-CNN-Layers/Two/picture/loss.png differ diff --git a/Number-Of-CNN-Layers/_mian_tensorflow_fiveLayerCNN.py b/Number-Of-CNN-Layers/_mian_tensorflow_fiveLayerCNN.py index 9db5c22..046ae31 100644 --- a/Number-Of-CNN-Layers/_mian_tensorflow_fiveLayerCNN.py +++ b/Number-Of-CNN-Layers/_mian_tensorflow_fiveLayerCNN.py @@ -19,7 +19,7 @@ model_Path_one = Project_PATH + "model/ecg_model_five_layer.h5" RATIO = 0.3 RANDOM_SEED = 42 BATCH_SIZE = 128 -NUM_EPOCHS = 30 +NUM_EPOCHS = 10 def CNN_model_level_one(): @@ -28,23 +28,24 @@ def CNN_model_level_one(): #take test for two CNN layers model - tf.keras.layers.InputLayer(input_shape=(300, 1)), + tf.keras.layers.InputLayer(input_shape=(300, )), + tf.keras.layers.Reshape(target_shape=(300, 1)), - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, 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') + tf.keras.layers.Dense(5, activation='softmax'), + # tf.keras.layers.Dropout(rate=0.2), + # tf.keras.layers.Dense(5, activation='softmax') ]) return leavlOneModel diff --git a/Number-Of-CNN-Layers/_mian_tensorflow_fourLayerCNN.py b/Number-Of-CNN-Layers/_mian_tensorflow_fourLayerCNN.py index 12bd1cd..2d8dd29 100644 --- a/Number-Of-CNN-Layers/_mian_tensorflow_fourLayerCNN.py +++ b/Number-Of-CNN-Layers/_mian_tensorflow_fourLayerCNN.py @@ -19,7 +19,7 @@ model_Path_one = Project_PATH + "model/ecg_model_four_layer.h5" RATIO = 0.3 RANDOM_SEED = 42 BATCH_SIZE = 128 -NUM_EPOCHS = 30 +NUM_EPOCHS = 10 def CNN_model_level_one(): @@ -28,21 +28,22 @@ def CNN_model_level_one(): #take test for two CNN layers model - tf.keras.layers.InputLayer(input_shape=(300, 1)), + tf.keras.layers.InputLayer(input_shape=(300,)), + tf.keras.layers.Reshape(target_shape=(300, 1)), - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, 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') + tf.keras.layers.Dense(5, activation='softmax'), + # tf.keras.layers.Dropout(rate=0.2), + # tf.keras.layers.Dense(5, activation='softmax') ]) return leavlOneModel diff --git a/Number-Of-CNN-Layers/_mian_tensorflow_oneLayerCNN.py b/Number-Of-CNN-Layers/_mian_tensorflow_oneLayerCNN.py index b6a622d..8652d7d 100644 --- a/Number-Of-CNN-Layers/_mian_tensorflow_oneLayerCNN.py +++ b/Number-Of-CNN-Layers/_mian_tensorflow_oneLayerCNN.py @@ -19,58 +19,33 @@ model_Path_one = Project_PATH + "model/ecg_model_one_layer.h5" RATIO = 0.3 RANDOM_SEED = 42 BATCH_SIZE = 128 -NUM_EPOCHS = 30 +NUM_EPOCHS = 10 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)), + tf.keras.layers.InputLayer(input_shape=(300,)), + tf.keras.layers.Reshape(target_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 conv excitation function used RElu - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), # take four pool,take strids 2. - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), + 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.Dense(5, activation='softmax'), # add dropout layer, dropout rate = 0.2 - tf.keras.layers.Dropout(rate=0.2), - tf.keras.layers.Dense(5, activation='softmax') + # tf.keras.layers.Dropout(rate=0.2), + # tf.keras.layers.Dense(5, activation='softmax') ]) return leavlOneModel diff --git a/Number-Of-CNN-Layers/_mian_tensorflow_sevenLayerCNN.py b/Number-Of-CNN-Layers/_mian_tensorflow_sevenLayerCNN.py new file mode 100644 index 0000000..848594f --- /dev/null +++ b/Number-Of-CNN-Layers/_mian_tensorflow_sevenLayerCNN.py @@ -0,0 +1,91 @@ +import datetime +import os + +import numpy as np +import pywt +import wfdb +import tensorflow as tf +from tensorflow import keras +from utils_sevenLayerCNN 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/Seven/" +#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_seven_layer.h5" +#model_Path_one = Project_PATH + "ecg_model_one_layer.h5" + +RATIO = 0.3 +RANDOM_SEED = 42 +BATCH_SIZE = 128 +NUM_EPOCHS = 10 + + +def CNN_model_level_one(): + leavlOneModel = tf.keras.models.Sequential([ + + + #take test for two CNN layers model + + tf.keras.layers.InputLayer(input_shape=(300,)), + tf.keras.layers.Reshape(target_shape=(300, 1)), + + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + + tf.keras.layers.Flatten(), + tf.keras.layers.Dense(5, activation='softmax'), + # 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/Number-Of-CNN-Layers/_mian_tensorflow_sixLayerCNN.py b/Number-Of-CNN-Layers/_mian_tensorflow_sixLayerCNN.py new file mode 100644 index 0000000..04d7465 --- /dev/null +++ b/Number-Of-CNN-Layers/_mian_tensorflow_sixLayerCNN.py @@ -0,0 +1,89 @@ +import datetime +import os + +import numpy as np +import pywt +import wfdb +import tensorflow as tf +from tensorflow import keras +from utils_sixLayerCNN 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/Six/" +#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_six_layer.h5" +#model_Path_one = Project_PATH + "ecg_model_one_layer.h5" + +RATIO = 0.3 +RANDOM_SEED = 42 +BATCH_SIZE = 128 +NUM_EPOCHS = 10 + + +def CNN_model_level_one(): + leavlOneModel = tf.keras.models.Sequential([ + + + #take test for two CNN layers model + + tf.keras.layers.InputLayer(input_shape=(300,)), + tf.keras.layers.Reshape(target_shape=(300, 1)), + + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + + tf.keras.layers.Flatten(), + tf.keras.layers.Dense(5, activation='softmax') + # 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/Number-Of-CNN-Layers/_mian_tensorflow_threeLayerCNN.py b/Number-Of-CNN-Layers/_mian_tensorflow_threeLayerCNN.py index 1092846..e9e9ede 100644 --- a/Number-Of-CNN-Layers/_mian_tensorflow_threeLayerCNN.py +++ b/Number-Of-CNN-Layers/_mian_tensorflow_threeLayerCNN.py @@ -19,7 +19,7 @@ model_Path_one = Project_PATH + "model/ecg_model_three_layer.h5" RATIO = 0.3 RANDOM_SEED = 42 BATCH_SIZE = 128 -NUM_EPOCHS = 30 +NUM_EPOCHS = 10 def CNN_model_level_one(): @@ -28,19 +28,20 @@ def CNN_model_level_one(): #take test for two CNN layers model - tf.keras.layers.InputLayer(input_shape=(300, 1)), + tf.keras.layers.InputLayer(input_shape=(300,)), + tf.keras.layers.Reshape(target_shape=(300, 1)), - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, 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') + tf.keras.layers.Dense(5, activation='softmax'), + # tf.keras.layers.Dropout(rate=0.2), + # tf.keras.layers.Dense(5, activation='softmax') ]) return leavlOneModel diff --git a/Number-Of-CNN-Layers/_mian_tensorflow_twoLayerCNN.py b/Number-Of-CNN-Layers/_mian_tensorflow_twoLayerCNN.py index 50f883d..f53a7b2 100644 --- a/Number-Of-CNN-Layers/_mian_tensorflow_twoLayerCNN.py +++ b/Number-Of-CNN-Layers/_mian_tensorflow_twoLayerCNN.py @@ -19,7 +19,7 @@ model_Path_one = Project_PATH + "model/ecg_model_two_layer.h5" RATIO = 0.3 RANDOM_SEED = 42 BATCH_SIZE = 128 -NUM_EPOCHS = 30 +NUM_EPOCHS = 10 def CNN_model_level_one(): @@ -28,17 +28,18 @@ def CNN_model_level_one(): #take test for two CNN layers model - tf.keras.layers.InputLayer(input_shape=(300, 1)), + tf.keras.layers.InputLayer(input_shape=(300,)), + tf.keras.layers.Reshape(target_shape=(300, 1)), - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), - tf.keras.layers.Conv1D(filters=1, kernel_size=3, strides=1, padding='same', activation='relu'), - tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=3, strides=2, padding='same'), + tf.keras.layers.Conv1D(filters=15, kernel_size=3, strides=2, 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') + # tf.keras.layers.Dropout(rate=0.2), + # tf.keras.layers.Dense(5, activation='softmax') ]) return leavlOneModel diff --git a/Number-Of-CNN-Layers/utils_sevenLayerCNN.py b/Number-Of-CNN-Layers/utils_sevenLayerCNN.py new file mode 100644 index 0000000..46f6e28 --- /dev/null +++ b/Number-Of-CNN-Layers/utils_sevenLayerCNN.py @@ -0,0 +1,172 @@ +# this file give +import os + +import wfdb +import pywt +import seaborn +import numpy as np +import matplotlib.pyplot as plt +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/Seven/' + +PICTUREPATH = Project_PATH + 'picture/' + +# from ECG_read_weiyuqing_without_wfdb import ECGDATAPATH +MITBITECGDATAPATH = '../MIT-BIT/' + + +# wavelet denoise preprocess using mallat algorithm + +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(MITBITECGDATAPATH + number, channel_names=['MLII']) + data = record.p_signal.flatten() + # use def denoise + rdata = denoise(date=data) + + # get type of ECG data + annotation = wfdb.rdann(MITBITECGDATAPATH + 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, random_seed): + 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) + + # reshape the data and split the dataset + dataSet = np.array(dataSet).reshape(-1, 300) + lableSet = np.array(labelSet).reshape(-1) + X_train, X_test, y_train, y_test = train_test_split(dataSet, lableSet, test_size=ratio, random_state=random_seed) + # print(X_train, X_test, y_train, y_test) + return X_train, X_test, y_train, y_test + + # 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 + + +# confusion matrix +def plot_heat_map(y_test, y_pred): + con_mat = confusion_matrix(y_test, y_pred) + # normalize + # con_mat_norm = con_mat.astype('float') / con_mat.sum(axis=1)[:, np.newaxis] + # con_mat_norm = np.around(con_mat_norm, decimals=2) + # os.remove(PICTUREPATH+'confusion_matrix.png') + # plot + plt.figure(figsize=(8, 8)) + seaborn.heatmap(con_mat, annot=True, fmt='.20g', cmap='Blues') + plt.ylim(0, 5) + plt.xlabel('Predicted labels') + plt.ylabel('True labels') + plt.title('Confusion Matrix') + plt.savefig(PICTUREPATH + 'confusion_matrix.png') + plt.show() + + +def plot_history_tf(history): + # os.remove(PICTUREPATH+'accuracy.png') + # os.remove(PICTUREPATH+'loss.png') + + plt.figure(figsize=(8, 8)) + plt.plot(history.history['accuracy']) + plt.plot(history.history['val_accuracy']) + plt.title('Model Accuracy') + plt.ylabel('Accuracy') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'accuracy.png') + plt.show() + + plt.figure(figsize=(8, 8)) + plt.plot(history.history['loss']) + plt.plot(history.history['val_loss']) + plt.title('Model Loss') + plt.ylabel('Loss') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'loss.png') + plt.show() + + +def plot_history_torch(history): + plt.figure(figsize=(8, 8)) + plt.plot(history['train_acc']) + plt.plot(history['test_acc']) + plt.title('Model Accuracy') + plt.ylabel('Accuracy') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'accuracy.png') + plt.show() + + plt.figure(figsize=(8, 8)) + plt.plot(history['train_loss']) + plt.plot(history['test_loss']) + plt.title('Model Loss') + plt.ylabel('Loss') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'loss.png') + plt.show() diff --git a/Number-Of-CNN-Layers/utils_sixLayerCNN.py b/Number-Of-CNN-Layers/utils_sixLayerCNN.py new file mode 100644 index 0000000..349707a --- /dev/null +++ b/Number-Of-CNN-Layers/utils_sixLayerCNN.py @@ -0,0 +1,172 @@ +# this file give +import os + +import wfdb +import pywt +import seaborn +import numpy as np +import matplotlib.pyplot as plt +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/Six/' + +PICTUREPATH = Project_PATH + 'picture/' + +# from ECG_read_weiyuqing_without_wfdb import ECGDATAPATH +MITBITECGDATAPATH = '../MIT-BIT/' + + +# wavelet denoise preprocess using mallat algorithm + +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(MITBITECGDATAPATH + number, channel_names=['MLII']) + data = record.p_signal.flatten() + # use def denoise + rdata = denoise(date=data) + + # get type of ECG data + annotation = wfdb.rdann(MITBITECGDATAPATH + 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, random_seed): + 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) + + # reshape the data and split the dataset + dataSet = np.array(dataSet).reshape(-1, 300) + lableSet = np.array(labelSet).reshape(-1) + X_train, X_test, y_train, y_test = train_test_split(dataSet, lableSet, test_size=ratio, random_state=random_seed) + # print(X_train, X_test, y_train, y_test) + return X_train, X_test, y_train, y_test + + # 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 + + +# confusion matrix +def plot_heat_map(y_test, y_pred): + con_mat = confusion_matrix(y_test, y_pred) + # normalize + # con_mat_norm = con_mat.astype('float') / con_mat.sum(axis=1)[:, np.newaxis] + # con_mat_norm = np.around(con_mat_norm, decimals=2) + # os.remove(PICTUREPATH+'confusion_matrix.png') + # plot + plt.figure(figsize=(8, 8)) + seaborn.heatmap(con_mat, annot=True, fmt='.20g', cmap='Blues') + plt.ylim(0, 5) + plt.xlabel('Predicted labels') + plt.ylabel('True labels') + plt.title('Confusion Matrix') + plt.savefig(PICTUREPATH + 'confusion_matrix.png') + plt.show() + + +def plot_history_tf(history): + # os.remove(PICTUREPATH+'accuracy.png') + # os.remove(PICTUREPATH+'loss.png') + + plt.figure(figsize=(8, 8)) + plt.plot(history.history['accuracy']) + plt.plot(history.history['val_accuracy']) + plt.title('Model Accuracy') + plt.ylabel('Accuracy') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'accuracy.png') + plt.show() + + plt.figure(figsize=(8, 8)) + plt.plot(history.history['loss']) + plt.plot(history.history['val_loss']) + plt.title('Model Loss') + plt.ylabel('Loss') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'loss.png') + plt.show() + + +def plot_history_torch(history): + plt.figure(figsize=(8, 8)) + plt.plot(history['train_acc']) + plt.plot(history['test_acc']) + plt.title('Model Accuracy') + plt.ylabel('Accuracy') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'accuracy.png') + plt.show() + + plt.figure(figsize=(8, 8)) + plt.plot(history['train_loss']) + plt.plot(history['test_loss']) + plt.title('Model Loss') + plt.ylabel('Loss') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'loss.png') + plt.show() diff --git a/Number-Of-Conv-Structure/Eleven/logs/20230323-145408/train/events.out.tfevents.1679554451.WEIYUQING.29708.0.v2 b/Number-Of-Conv-Structure/Eleven/logs/20230323-145408/train/events.out.tfevents.1679554451.WEIYUQING.29708.0.v2 new file mode 100644 index 0000000..c92a658 Binary files /dev/null and b/Number-Of-Conv-Structure/Eleven/logs/20230323-145408/train/events.out.tfevents.1679554451.WEIYUQING.29708.0.v2 differ diff --git a/Number-Of-Conv-Structure/Eleven/logs/20230323-145408/validation/events.out.tfevents.1679554455.WEIYUQING.29708.1.v2 b/Number-Of-Conv-Structure/Eleven/logs/20230323-145408/validation/events.out.tfevents.1679554455.WEIYUQING.29708.1.v2 new file mode 100644 index 0000000..33ac610 Binary files /dev/null and b/Number-Of-Conv-Structure/Eleven/logs/20230323-145408/validation/events.out.tfevents.1679554455.WEIYUQING.29708.1.v2 differ diff --git a/Number-Of-Conv-Structure/Eleven/logs/20230323-145712/train/events.out.tfevents.1679554636.WEIYUQING.3640.0.v2 b/Number-Of-Conv-Structure/Eleven/logs/20230323-145712/train/events.out.tfevents.1679554636.WEIYUQING.3640.0.v2 new file mode 100644 index 0000000..82e7128 Binary files /dev/null and b/Number-Of-Conv-Structure/Eleven/logs/20230323-145712/train/events.out.tfevents.1679554636.WEIYUQING.3640.0.v2 differ diff --git a/Number-Of-Conv-Structure/Eleven/logs/20230323-145712/validation/events.out.tfevents.1679554640.WEIYUQING.3640.1.v2 b/Number-Of-Conv-Structure/Eleven/logs/20230323-145712/validation/events.out.tfevents.1679554640.WEIYUQING.3640.1.v2 new file mode 100644 index 0000000..c0fc3ee Binary files /dev/null and b/Number-Of-Conv-Structure/Eleven/logs/20230323-145712/validation/events.out.tfevents.1679554640.WEIYUQING.3640.1.v2 differ diff --git a/Number-Of-Conv-Structure/Eleven/logs/20230323-152012/train/events.out.tfevents.1679556015.WEIYUQING.31892.0.v2 b/Number-Of-Conv-Structure/Eleven/logs/20230323-152012/train/events.out.tfevents.1679556015.WEIYUQING.31892.0.v2 new file mode 100644 index 0000000..a210229 Binary files /dev/null and b/Number-Of-Conv-Structure/Eleven/logs/20230323-152012/train/events.out.tfevents.1679556015.WEIYUQING.31892.0.v2 differ diff --git a/Number-Of-Conv-Structure/Eleven/logs/20230323-152012/validation/events.out.tfevents.1679556018.WEIYUQING.31892.1.v2 b/Number-Of-Conv-Structure/Eleven/logs/20230323-152012/validation/events.out.tfevents.1679556018.WEIYUQING.31892.1.v2 new file mode 100644 index 0000000..e114b29 Binary files /dev/null and b/Number-Of-Conv-Structure/Eleven/logs/20230323-152012/validation/events.out.tfevents.1679556018.WEIYUQING.31892.1.v2 differ diff --git a/Number-Of-Conv-Structure/Eleven/model/ecg_model_seven_conv.h5 b/Number-Of-Conv-Structure/Eleven/model/ecg_model_seven_conv.h5 new file mode 100644 index 0000000..e19ac06 Binary files /dev/null and b/Number-Of-Conv-Structure/Eleven/model/ecg_model_seven_conv.h5 differ diff --git a/Number-Of-Conv-Structure/Eleven/picture/accuracy.png b/Number-Of-Conv-Structure/Eleven/picture/accuracy.png new file mode 100644 index 0000000..52db8a6 Binary files /dev/null and b/Number-Of-Conv-Structure/Eleven/picture/accuracy.png differ diff --git a/Number-Of-Conv-Structure/Eleven/picture/confusion_matrix.png b/Number-Of-Conv-Structure/Eleven/picture/confusion_matrix.png new file mode 100644 index 0000000..9ad5ed0 Binary files /dev/null and b/Number-Of-Conv-Structure/Eleven/picture/confusion_matrix.png differ diff --git a/Number-Of-Conv-Structure/Eleven/picture/loss.png b/Number-Of-Conv-Structure/Eleven/picture/loss.png new file mode 100644 index 0000000..4efaeb9 Binary files /dev/null and b/Number-Of-Conv-Structure/Eleven/picture/loss.png differ diff --git a/Number-Of-Conv-Structure/Five/logs/20230323-143248/train/events.out.tfevents.1679553171.WEIYUQING.11548.0.v2 b/Number-Of-Conv-Structure/Five/logs/20230323-143248/train/events.out.tfevents.1679553171.WEIYUQING.11548.0.v2 new file mode 100644 index 0000000..5862c42 Binary files /dev/null and b/Number-Of-Conv-Structure/Five/logs/20230323-143248/train/events.out.tfevents.1679553171.WEIYUQING.11548.0.v2 differ diff --git a/Number-Of-Conv-Structure/Five/logs/20230323-143248/validation/events.out.tfevents.1679553174.WEIYUQING.11548.1.v2 b/Number-Of-Conv-Structure/Five/logs/20230323-143248/validation/events.out.tfevents.1679553174.WEIYUQING.11548.1.v2 new file mode 100644 index 0000000..89a5af2 Binary files /dev/null and b/Number-Of-Conv-Structure/Five/logs/20230323-143248/validation/events.out.tfevents.1679553174.WEIYUQING.11548.1.v2 differ diff --git a/Number-Of-Conv-Structure/Five/model/ecg_model_five_conv.h5 b/Number-Of-Conv-Structure/Five/model/ecg_model_five_conv.h5 index 30b3b19..83be024 100644 Binary files a/Number-Of-Conv-Structure/Five/model/ecg_model_five_conv.h5 and b/Number-Of-Conv-Structure/Five/model/ecg_model_five_conv.h5 differ diff --git a/Number-Of-Conv-Structure/Five/picture/accuracy.png b/Number-Of-Conv-Structure/Five/picture/accuracy.png index c096f9a..f4745c5 100644 Binary files a/Number-Of-Conv-Structure/Five/picture/accuracy.png and b/Number-Of-Conv-Structure/Five/picture/accuracy.png differ diff --git a/Number-Of-Conv-Structure/Five/picture/confusion_matrix.png b/Number-Of-Conv-Structure/Five/picture/confusion_matrix.png index 7c7fd64..374644b 100644 Binary files a/Number-Of-Conv-Structure/Five/picture/confusion_matrix.png and b/Number-Of-Conv-Structure/Five/picture/confusion_matrix.png differ diff --git a/Number-Of-Conv-Structure/Five/picture/loss.png b/Number-Of-Conv-Structure/Five/picture/loss.png index b4aafd4..a341eb6 100644 Binary files a/Number-Of-Conv-Structure/Five/picture/loss.png and b/Number-Of-Conv-Structure/Five/picture/loss.png differ diff --git a/Number-Of-Conv-Structure/Nine/logs/20230323-144958/train/events.out.tfevents.1679554202.WEIYUQING.28572.0.v2 b/Number-Of-Conv-Structure/Nine/logs/20230323-144958/train/events.out.tfevents.1679554202.WEIYUQING.28572.0.v2 new file mode 100644 index 0000000..f5e631a Binary files /dev/null and b/Number-Of-Conv-Structure/Nine/logs/20230323-144958/train/events.out.tfevents.1679554202.WEIYUQING.28572.0.v2 differ diff --git a/Number-Of-Conv-Structure/Nine/logs/20230323-144958/validation/events.out.tfevents.1679554206.WEIYUQING.28572.1.v2 b/Number-Of-Conv-Structure/Nine/logs/20230323-144958/validation/events.out.tfevents.1679554206.WEIYUQING.28572.1.v2 new file mode 100644 index 0000000..fcb51aa Binary files /dev/null and b/Number-Of-Conv-Structure/Nine/logs/20230323-144958/validation/events.out.tfevents.1679554206.WEIYUQING.28572.1.v2 differ diff --git a/Number-Of-Conv-Structure/Nine/logs/20230323-151649/train/events.out.tfevents.1679555813.WEIYUQING.32324.0.v2 b/Number-Of-Conv-Structure/Nine/logs/20230323-151649/train/events.out.tfevents.1679555813.WEIYUQING.32324.0.v2 new file mode 100644 index 0000000..dd9b2f5 Binary files /dev/null and b/Number-Of-Conv-Structure/Nine/logs/20230323-151649/train/events.out.tfevents.1679555813.WEIYUQING.32324.0.v2 differ diff --git a/Number-Of-Conv-Structure/Nine/logs/20230323-151649/validation/events.out.tfevents.1679555816.WEIYUQING.32324.1.v2 b/Number-Of-Conv-Structure/Nine/logs/20230323-151649/validation/events.out.tfevents.1679555816.WEIYUQING.32324.1.v2 new file mode 100644 index 0000000..8aede3a Binary files /dev/null and b/Number-Of-Conv-Structure/Nine/logs/20230323-151649/validation/events.out.tfevents.1679555816.WEIYUQING.32324.1.v2 differ diff --git a/Number-Of-Conv-Structure/Nine/model/ecg_model_three_conv.h5 b/Number-Of-Conv-Structure/Nine/model/ecg_model_three_conv.h5 new file mode 100644 index 0000000..a2f4d3e Binary files /dev/null and b/Number-Of-Conv-Structure/Nine/model/ecg_model_three_conv.h5 differ diff --git a/Number-Of-Conv-Structure/Nine/picture/accuracy.png b/Number-Of-Conv-Structure/Nine/picture/accuracy.png new file mode 100644 index 0000000..cd46533 Binary files /dev/null and b/Number-Of-Conv-Structure/Nine/picture/accuracy.png differ diff --git a/Number-Of-Conv-Structure/Nine/picture/confusion_matrix.png b/Number-Of-Conv-Structure/Nine/picture/confusion_matrix.png new file mode 100644 index 0000000..68c27ae Binary files /dev/null and b/Number-Of-Conv-Structure/Nine/picture/confusion_matrix.png differ diff --git a/Number-Of-Conv-Structure/Nine/picture/loss.png b/Number-Of-Conv-Structure/Nine/picture/loss.png new file mode 100644 index 0000000..c4ef9d6 Binary files /dev/null and b/Number-Of-Conv-Structure/Nine/picture/loss.png differ diff --git a/Number-Of-Conv-Structure/Seven/logs/20230323-142218/train/events.out.tfevents.1679552541.WEIYUQING.2548.0.v2 b/Number-Of-Conv-Structure/Seven/logs/20230323-142218/train/events.out.tfevents.1679552541.WEIYUQING.2548.0.v2 new file mode 100644 index 0000000..60ee71e Binary files /dev/null and b/Number-Of-Conv-Structure/Seven/logs/20230323-142218/train/events.out.tfevents.1679552541.WEIYUQING.2548.0.v2 differ diff --git a/Number-Of-Conv-Structure/Seven/logs/20230323-142218/validation/events.out.tfevents.1679552545.WEIYUQING.2548.1.v2 b/Number-Of-Conv-Structure/Seven/logs/20230323-142218/validation/events.out.tfevents.1679552545.WEIYUQING.2548.1.v2 new file mode 100644 index 0000000..7a2237d Binary files /dev/null and b/Number-Of-Conv-Structure/Seven/logs/20230323-142218/validation/events.out.tfevents.1679552545.WEIYUQING.2548.1.v2 differ diff --git a/Number-Of-Conv-Structure/Seven/logs/20230323-143530/train/events.out.tfevents.1679553333.WEIYUQING.19896.0.v2 b/Number-Of-Conv-Structure/Seven/logs/20230323-143530/train/events.out.tfevents.1679553333.WEIYUQING.19896.0.v2 new file mode 100644 index 0000000..962beac Binary files /dev/null and b/Number-Of-Conv-Structure/Seven/logs/20230323-143530/train/events.out.tfevents.1679553333.WEIYUQING.19896.0.v2 differ diff --git a/Number-Of-Conv-Structure/Seven/logs/20230323-143530/validation/events.out.tfevents.1679553337.WEIYUQING.19896.1.v2 b/Number-Of-Conv-Structure/Seven/logs/20230323-143530/validation/events.out.tfevents.1679553337.WEIYUQING.19896.1.v2 new file mode 100644 index 0000000..bbcbfd5 Binary files /dev/null and b/Number-Of-Conv-Structure/Seven/logs/20230323-143530/validation/events.out.tfevents.1679553337.WEIYUQING.19896.1.v2 differ diff --git a/Number-Of-Conv-Structure/Seven/logs/20230323-144447/train/events.out.tfevents.1679553890.WEIYUQING.29672.0.v2 b/Number-Of-Conv-Structure/Seven/logs/20230323-144447/train/events.out.tfevents.1679553890.WEIYUQING.29672.0.v2 new file mode 100644 index 0000000..9d2d306 Binary files /dev/null and b/Number-Of-Conv-Structure/Seven/logs/20230323-144447/train/events.out.tfevents.1679553890.WEIYUQING.29672.0.v2 differ diff --git a/Number-Of-Conv-Structure/Seven/logs/20230323-144447/validation/events.out.tfevents.1679553894.WEIYUQING.29672.1.v2 b/Number-Of-Conv-Structure/Seven/logs/20230323-144447/validation/events.out.tfevents.1679553894.WEIYUQING.29672.1.v2 new file mode 100644 index 0000000..1aa7ef9 Binary files /dev/null and b/Number-Of-Conv-Structure/Seven/logs/20230323-144447/validation/events.out.tfevents.1679553894.WEIYUQING.29672.1.v2 differ diff --git a/Number-Of-Conv-Structure/Seven/model/ecg_model_seven_conv.h5 b/Number-Of-Conv-Structure/Seven/model/ecg_model_seven_conv.h5 new file mode 100644 index 0000000..283bda0 Binary files /dev/null and b/Number-Of-Conv-Structure/Seven/model/ecg_model_seven_conv.h5 differ diff --git a/Number-Of-Conv-Structure/Seven/picture/accuracy.png b/Number-Of-Conv-Structure/Seven/picture/accuracy.png new file mode 100644 index 0000000..73b3b47 Binary files /dev/null and b/Number-Of-Conv-Structure/Seven/picture/accuracy.png differ diff --git a/Number-Of-Conv-Structure/Seven/picture/confusion_matrix.png b/Number-Of-Conv-Structure/Seven/picture/confusion_matrix.png new file mode 100644 index 0000000..371d172 Binary files /dev/null and b/Number-Of-Conv-Structure/Seven/picture/confusion_matrix.png differ diff --git a/Number-Of-Conv-Structure/Seven/picture/loss.png b/Number-Of-Conv-Structure/Seven/picture/loss.png new file mode 100644 index 0000000..79fea4e Binary files /dev/null and b/Number-Of-Conv-Structure/Seven/picture/loss.png differ diff --git a/Number-Of-Conv-Structure/Thirteen/logs/20230323-150810/train/events.out.tfevents.1679555293.WEIYUQING.30812.0.v2 b/Number-Of-Conv-Structure/Thirteen/logs/20230323-150810/train/events.out.tfevents.1679555293.WEIYUQING.30812.0.v2 new file mode 100644 index 0000000..0fa754b Binary files /dev/null and b/Number-Of-Conv-Structure/Thirteen/logs/20230323-150810/train/events.out.tfevents.1679555293.WEIYUQING.30812.0.v2 differ diff --git a/Number-Of-Conv-Structure/Thirteen/logs/20230323-150810/validation/events.out.tfevents.1679555297.WEIYUQING.30812.1.v2 b/Number-Of-Conv-Structure/Thirteen/logs/20230323-150810/validation/events.out.tfevents.1679555297.WEIYUQING.30812.1.v2 new file mode 100644 index 0000000..3422b82 Binary files /dev/null and b/Number-Of-Conv-Structure/Thirteen/logs/20230323-150810/validation/events.out.tfevents.1679555297.WEIYUQING.30812.1.v2 differ diff --git a/Number-Of-Conv-Structure/Thirteen/model/ecg_model_five_conv.h5 b/Number-Of-Conv-Structure/Thirteen/model/ecg_model_five_conv.h5 new file mode 100644 index 0000000..5f6a5f3 Binary files /dev/null and b/Number-Of-Conv-Structure/Thirteen/model/ecg_model_five_conv.h5 differ diff --git a/Number-Of-Conv-Structure/Thirteen/picture/accuracy.png b/Number-Of-Conv-Structure/Thirteen/picture/accuracy.png new file mode 100644 index 0000000..060ab8f Binary files /dev/null and b/Number-Of-Conv-Structure/Thirteen/picture/accuracy.png differ diff --git a/Number-Of-Conv-Structure/Thirteen/picture/confusion_matrix.png b/Number-Of-Conv-Structure/Thirteen/picture/confusion_matrix.png new file mode 100644 index 0000000..b2e347d Binary files /dev/null and b/Number-Of-Conv-Structure/Thirteen/picture/confusion_matrix.png differ diff --git a/Number-Of-Conv-Structure/Thirteen/picture/loss.png b/Number-Of-Conv-Structure/Thirteen/picture/loss.png new file mode 100644 index 0000000..f4c6111 Binary files /dev/null and b/Number-Of-Conv-Structure/Thirteen/picture/loss.png differ diff --git a/Number-Of-Conv-Structure/Three/logs/20230323-143042/train/events.out.tfevents.1679553045.WEIYUQING.28620.0.v2 b/Number-Of-Conv-Structure/Three/logs/20230323-143042/train/events.out.tfevents.1679553045.WEIYUQING.28620.0.v2 new file mode 100644 index 0000000..8d09414 Binary files /dev/null and b/Number-Of-Conv-Structure/Three/logs/20230323-143042/train/events.out.tfevents.1679553045.WEIYUQING.28620.0.v2 differ diff --git a/Number-Of-Conv-Structure/Three/logs/20230323-143042/validation/events.out.tfevents.1679553048.WEIYUQING.28620.1.v2 b/Number-Of-Conv-Structure/Three/logs/20230323-143042/validation/events.out.tfevents.1679553048.WEIYUQING.28620.1.v2 new file mode 100644 index 0000000..6c64e8c Binary files /dev/null and b/Number-Of-Conv-Structure/Three/logs/20230323-143042/validation/events.out.tfevents.1679553048.WEIYUQING.28620.1.v2 differ diff --git a/Number-Of-Conv-Structure/Three/model/ecg_model_three_conv.h5 b/Number-Of-Conv-Structure/Three/model/ecg_model_three_conv.h5 index 1530989..7c9dcd3 100644 Binary files a/Number-Of-Conv-Structure/Three/model/ecg_model_three_conv.h5 and b/Number-Of-Conv-Structure/Three/model/ecg_model_three_conv.h5 differ diff --git a/Number-Of-Conv-Structure/Three/picture/accuracy.png b/Number-Of-Conv-Structure/Three/picture/accuracy.png index 90e6132..6dea2b0 100644 Binary files a/Number-Of-Conv-Structure/Three/picture/accuracy.png and b/Number-Of-Conv-Structure/Three/picture/accuracy.png differ diff --git a/Number-Of-Conv-Structure/Three/picture/confusion_matrix.png b/Number-Of-Conv-Structure/Three/picture/confusion_matrix.png index 6987380..01f31ee 100644 Binary files a/Number-Of-Conv-Structure/Three/picture/confusion_matrix.png and b/Number-Of-Conv-Structure/Three/picture/confusion_matrix.png differ diff --git a/Number-Of-Conv-Structure/Three/picture/loss.png b/Number-Of-Conv-Structure/Three/picture/loss.png index c68e6d0..007e56f 100644 Binary files a/Number-Of-Conv-Structure/Three/picture/loss.png and b/Number-Of-Conv-Structure/Three/picture/loss.png differ diff --git a/Number-Of-Conv-Structure/_mian_tensorflow_Eleven_ConvCNN.py b/Number-Of-Conv-Structure/_mian_tensorflow_Eleven_ConvCNN.py new file mode 100644 index 0000000..9ac01b5 --- /dev/null +++ b/Number-Of-Conv-Structure/_mian_tensorflow_Eleven_ConvCNN.py @@ -0,0 +1,85 @@ +import datetime +import os + +import numpy as np +import pywt +import wfdb +import tensorflow as tf +from tensorflow import keras + + + + +from utils_eleven_of_ConvCNN import loadData, plot_history_tf, plot_heat_map + +#from ECG_read_weiyuqing_without_wfdb import ECGDATAPATH +#PATH of this test +Project_PATH = "../Number-Of-Conv-Structure/Eleven/" +#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_seven_conv.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([ + + #take test for one CNN layers model + + tf.keras.layers.InputLayer(input_shape=(300, 1)), + + tf.keras.layers.Conv1D(filters=1, kernel_size=11, strides=1, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), + + + + tf.keras.layers.Flatten(), + tf.keras.layers.Dense(128, activation='relu'), + # add dropout layer, dropout rate = 0.2 + 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/Number-Of-Conv-Structure/_mian_tensorflow_Five_ConvCNN.py b/Number-Of-Conv-Structure/_mian_tensorflow_Five_ConvCNN.py index b0097d3..f4176a1 100644 --- a/Number-Of-Conv-Structure/_mian_tensorflow_Five_ConvCNN.py +++ b/Number-Of-Conv-Structure/_mian_tensorflow_Five_ConvCNN.py @@ -20,7 +20,7 @@ RATIO = 0.3 RANDOM_SEED = 42 BATCH_SIZE = 128 #迭代次数 -NUM_EPOCHS = 10 +NUM_EPOCHS = 30 def CNN_model_level_one(): diff --git a/Number-Of-Conv-Structure/_mian_tensorflow_Nine_ConvCNN.py b/Number-Of-Conv-Structure/_mian_tensorflow_Nine_ConvCNN.py new file mode 100644 index 0000000..4c6d620 --- /dev/null +++ b/Number-Of-Conv-Structure/_mian_tensorflow_Nine_ConvCNN.py @@ -0,0 +1,81 @@ +import datetime +import os + +import numpy as np +import pywt +import wfdb +import tensorflow as tf +from tensorflow import keras +from utils_nine_of_ConvCNN import loadData, plot_history_tf, plot_heat_map + +#from ECG_read_weiyuqing_without_wfdb import ECGDATAPATH +#PATH of this test +Project_PATH = "../Number-Of-Conv-Structure/Nine/" +#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_three_conv.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([ + + #take test for one CNN layers model + + tf.keras.layers.InputLayer(input_shape=(300, 1)), + + tf.keras.layers.Conv1D(filters=1, kernel_size=9, strides=1, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), + + + + tf.keras.layers.Flatten(), + tf.keras.layers.Dense(128, activation='relu'), + # add dropout layer, dropout rate = 0.2 + 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/Number-Of-Conv-Structure/_mian_tensorflow_Seven_ConvCNN.py b/Number-Of-Conv-Structure/_mian_tensorflow_Seven_ConvCNN.py index f944efd..787002d 100644 --- a/Number-Of-Conv-Structure/_mian_tensorflow_Seven_ConvCNN.py +++ b/Number-Of-Conv-Structure/_mian_tensorflow_Seven_ConvCNN.py @@ -6,7 +6,7 @@ import pywt import wfdb import tensorflow as tf from tensorflow import keras -from utils_three_of_ConvCNN import loadData, plot_history_tf, plot_heat_map +from utils_seven_of_ConvCNN import loadData, plot_history_tf, plot_heat_map #from ECG_read_weiyuqing_without_wfdb import ECGDATAPATH #PATH of this test @@ -20,7 +20,7 @@ RATIO = 0.3 RANDOM_SEED = 42 BATCH_SIZE = 128 #迭代次数 -NUM_EPOCHS = 10 +NUM_EPOCHS = 30 def CNN_model_level_one(): diff --git a/Number-Of-Conv-Structure/_mian_tensorflow_Thirteen_ConvCNN.py b/Number-Of-Conv-Structure/_mian_tensorflow_Thirteen_ConvCNN.py new file mode 100644 index 0000000..264c329 --- /dev/null +++ b/Number-Of-Conv-Structure/_mian_tensorflow_Thirteen_ConvCNN.py @@ -0,0 +1,81 @@ +import datetime +import os + +import numpy as np +import pywt +import wfdb +import tensorflow as tf +from tensorflow import keras +from utils_thirteen_of_ConvCNN import loadData, plot_history_tf, plot_heat_map + +#from ECG_read_weiyuqing_without_wfdb import ECGDATAPATH +#PATH of this test +Project_PATH = "../Number-Of-Conv-Structure/Thirteen/" +#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_five_conv.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([ + + #take test for one CNN layers model + + tf.keras.layers.InputLayer(input_shape=(300, 1)), + + tf.keras.layers.Conv1D(filters=1, kernel_size=13, strides=1, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), + + + + tf.keras.layers.Flatten(), + tf.keras.layers.Dense(128, activation='relu'), + # add dropout layer, dropout rate = 0.2 + 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/Number-Of-Conv-Structure/_mian_tensorflow_Three_ConvCNN.py b/Number-Of-Conv-Structure/_mian_tensorflow_Three_ConvCNN.py index 1b76280..f88a119 100644 --- a/Number-Of-Conv-Structure/_mian_tensorflow_Three_ConvCNN.py +++ b/Number-Of-Conv-Structure/_mian_tensorflow_Three_ConvCNN.py @@ -20,7 +20,7 @@ RATIO = 0.3 RANDOM_SEED = 42 BATCH_SIZE = 128 #迭代次数 -NUM_EPOCHS = 10 +NUM_EPOCHS = 30 def CNN_model_level_one(): diff --git a/Number-Of-Conv-Structure/utils_eleven_of_ConvCNN.py b/Number-Of-Conv-Structure/utils_eleven_of_ConvCNN.py new file mode 100644 index 0000000..f84c591 --- /dev/null +++ b/Number-Of-Conv-Structure/utils_eleven_of_ConvCNN.py @@ -0,0 +1,172 @@ +# this file give +import os + +import wfdb +import pywt +import seaborn +import numpy as np +import matplotlib.pyplot as plt +from sklearn.metrics import confusion_matrix +from sklearn.model_selection import train_test_split + +# from _mian_tensorflow import Project_PATH +Project_PATH = '../Number-Of-Conv-Structure/Eleven/' + +PICTUREPATH = Project_PATH + 'picture/' + +# from ECG_read_weiyuqing_without_wfdb import ECGDATAPATH +MITBITECGDATAPATH = '../MIT-BIT/' + + +# wavelet denoise preprocess using mallat algorithm + +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(MITBITECGDATAPATH + number, channel_names=['MLII']) + data = record.p_signal.flatten() + # use def denoise + rdata = denoise(date=data) + + # get type of ECG data + annotation = wfdb.rdann(MITBITECGDATAPATH + 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, random_seed): + 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) + + # reshape the data and split the dataset + dataSet = np.array(dataSet).reshape(-1, 300) + lableSet = np.array(labelSet).reshape(-1) + X_train, X_test, y_train, y_test = train_test_split(dataSet, lableSet, test_size=ratio, random_state=random_seed) + # print(X_train, X_test, y_train, y_test) + return X_train, X_test, y_train, y_test + + # 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 + + +# confusion matrix +def plot_heat_map(y_test, y_pred): + con_mat = confusion_matrix(y_test, y_pred) + # normalize + # con_mat_norm = con_mat.astype('float') / con_mat.sum(axis=1)[:, np.newaxis] + # con_mat_norm = np.around(con_mat_norm, decimals=2) + # os.remove(PICTUREPATH+'confusion_matrix.png') + # plot + plt.figure(figsize=(8, 8)) + seaborn.heatmap(con_mat, annot=True, fmt='.20g', cmap='Blues') + plt.ylim(0, 5) + plt.xlabel('Predicted labels') + plt.ylabel('True labels') + plt.title('Confusion Matrix') + plt.savefig(PICTUREPATH + 'confusion_matrix.png') + plt.show() + + +def plot_history_tf(history): + # os.remove(PICTUREPATH+'accuracy.png') + # os.remove(PICTUREPATH+'loss.png') + + plt.figure(figsize=(8, 8)) + plt.plot(history.history['accuracy']) + plt.plot(history.history['val_accuracy']) + plt.title('Model Accuracy') + plt.ylabel('Accuracy') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'accuracy.png') + plt.show() + + plt.figure(figsize=(8, 8)) + plt.plot(history.history['loss']) + plt.plot(history.history['val_loss']) + plt.title('Model Loss') + plt.ylabel('Loss') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'loss.png') + plt.show() + + +def plot_history_torch(history): + plt.figure(figsize=(8, 8)) + plt.plot(history['train_acc']) + plt.plot(history['test_acc']) + plt.title('Model Accuracy') + plt.ylabel('Accuracy') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'accuracy.png') + plt.show() + + plt.figure(figsize=(8, 8)) + plt.plot(history['train_loss']) + plt.plot(history['test_loss']) + plt.title('Model Loss') + plt.ylabel('Loss') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'loss.png') + plt.show() diff --git a/Number-Of-Conv-Structure/utils_nine_of_ConvCNN.py b/Number-Of-Conv-Structure/utils_nine_of_ConvCNN.py new file mode 100644 index 0000000..4d9f002 --- /dev/null +++ b/Number-Of-Conv-Structure/utils_nine_of_ConvCNN.py @@ -0,0 +1,172 @@ +# this file give +import os + +import wfdb +import pywt +import seaborn +import numpy as np +import matplotlib.pyplot as plt +from sklearn.metrics import confusion_matrix +from sklearn.model_selection import train_test_split + +# from _mian_tensorflow import Project_PATH +Project_PATH = '../Number-Of-Conv-Structure/Nine/' + +PICTUREPATH = Project_PATH + 'picture/' + +# from ECG_read_weiyuqing_without_wfdb import ECGDATAPATH +MITBITECGDATAPATH = '../MIT-BIT/' + + +# wavelet denoise preprocess using mallat algorithm + +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(MITBITECGDATAPATH + number, channel_names=['MLII']) + data = record.p_signal.flatten() + # use def denoise + rdata = denoise(date=data) + + # get type of ECG data + annotation = wfdb.rdann(MITBITECGDATAPATH + 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, random_seed): + 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) + + # reshape the data and split the dataset + dataSet = np.array(dataSet).reshape(-1, 300) + lableSet = np.array(labelSet).reshape(-1) + X_train, X_test, y_train, y_test = train_test_split(dataSet, lableSet, test_size=ratio, random_state=random_seed) + # print(X_train, X_test, y_train, y_test) + return X_train, X_test, y_train, y_test + + # 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 + + +# confusion matrix +def plot_heat_map(y_test, y_pred): + con_mat = confusion_matrix(y_test, y_pred) + # normalize + # con_mat_norm = con_mat.astype('float') / con_mat.sum(axis=1)[:, np.newaxis] + # con_mat_norm = np.around(con_mat_norm, decimals=2) + # os.remove(PICTUREPATH+'confusion_matrix.png') + # plot + plt.figure(figsize=(8, 8)) + seaborn.heatmap(con_mat, annot=True, fmt='.20g', cmap='Blues') + plt.ylim(0, 5) + plt.xlabel('Predicted labels') + plt.ylabel('True labels') + plt.title('Confusion Matrix') + plt.savefig(PICTUREPATH + 'confusion_matrix.png') + plt.show() + + +def plot_history_tf(history): + # os.remove(PICTUREPATH+'accuracy.png') + # os.remove(PICTUREPATH+'loss.png') + + plt.figure(figsize=(8, 8)) + plt.plot(history.history['accuracy']) + plt.plot(history.history['val_accuracy']) + plt.title('Model Accuracy') + plt.ylabel('Accuracy') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'accuracy.png') + plt.show() + + plt.figure(figsize=(8, 8)) + plt.plot(history.history['loss']) + plt.plot(history.history['val_loss']) + plt.title('Model Loss') + plt.ylabel('Loss') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'loss.png') + plt.show() + + +def plot_history_torch(history): + plt.figure(figsize=(8, 8)) + plt.plot(history['train_acc']) + plt.plot(history['test_acc']) + plt.title('Model Accuracy') + plt.ylabel('Accuracy') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'accuracy.png') + plt.show() + + plt.figure(figsize=(8, 8)) + plt.plot(history['train_loss']) + plt.plot(history['test_loss']) + plt.title('Model Loss') + plt.ylabel('Loss') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'loss.png') + plt.show() diff --git a/Number-Of-Conv-Structure/utils_thirteen_of_ConvCNN.py b/Number-Of-Conv-Structure/utils_thirteen_of_ConvCNN.py new file mode 100644 index 0000000..b43777e --- /dev/null +++ b/Number-Of-Conv-Structure/utils_thirteen_of_ConvCNN.py @@ -0,0 +1,172 @@ +# this file give +import os + +import wfdb +import pywt +import seaborn +import numpy as np +import matplotlib.pyplot as plt +from sklearn.metrics import confusion_matrix +from sklearn.model_selection import train_test_split + +# from _mian_tensorflow import Project_PATH +Project_PATH = '../Number-Of-Conv-Structure/Thirteen/' + +PICTUREPATH = Project_PATH + 'picture/' + +# from ECG_read_weiyuqing_without_wfdb import ECGDATAPATH +MITBITECGDATAPATH = '../MIT-BIT/' + + +# wavelet denoise preprocess using mallat algorithm + +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(MITBITECGDATAPATH + number, channel_names=['MLII']) + data = record.p_signal.flatten() + # use def denoise + rdata = denoise(date=data) + + # get type of ECG data + annotation = wfdb.rdann(MITBITECGDATAPATH + 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, random_seed): + 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) + + # reshape the data and split the dataset + dataSet = np.array(dataSet).reshape(-1, 300) + lableSet = np.array(labelSet).reshape(-1) + X_train, X_test, y_train, y_test = train_test_split(dataSet, lableSet, test_size=ratio, random_state=random_seed) + # print(X_train, X_test, y_train, y_test) + return X_train, X_test, y_train, y_test + + # 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 + + +# confusion matrix +def plot_heat_map(y_test, y_pred): + con_mat = confusion_matrix(y_test, y_pred) + # normalize + # con_mat_norm = con_mat.astype('float') / con_mat.sum(axis=1)[:, np.newaxis] + # con_mat_norm = np.around(con_mat_norm, decimals=2) + # os.remove(PICTUREPATH+'confusion_matrix.png') + # plot + plt.figure(figsize=(8, 8)) + seaborn.heatmap(con_mat, annot=True, fmt='.20g', cmap='Blues') + plt.ylim(0, 5) + plt.xlabel('Predicted labels') + plt.ylabel('True labels') + plt.title('Confusion Matrix') + plt.savefig(PICTUREPATH + 'confusion_matrix.png') + plt.show() + + +def plot_history_tf(history): + # os.remove(PICTUREPATH+'accuracy.png') + # os.remove(PICTUREPATH+'loss.png') + + plt.figure(figsize=(8, 8)) + plt.plot(history.history['accuracy']) + plt.plot(history.history['val_accuracy']) + plt.title('Model Accuracy') + plt.ylabel('Accuracy') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'accuracy.png') + plt.show() + + plt.figure(figsize=(8, 8)) + plt.plot(history.history['loss']) + plt.plot(history.history['val_loss']) + plt.title('Model Loss') + plt.ylabel('Loss') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'loss.png') + plt.show() + + +def plot_history_torch(history): + plt.figure(figsize=(8, 8)) + plt.plot(history['train_acc']) + plt.plot(history['test_acc']) + plt.title('Model Accuracy') + plt.ylabel('Accuracy') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'accuracy.png') + plt.show() + + plt.figure(figsize=(8, 8)) + plt.plot(history['train_loss']) + plt.plot(history['test_loss']) + plt.title('Model Loss') + plt.ylabel('Loss') + plt.xlabel('Epoch') + plt.legend(['Train', 'Test'], loc='upper left') + plt.savefig(PICTUREPATH + 'loss.png') + plt.show()