diff --git a/Number-Of-Conv-Structure/Eleven/logs/20230324-004442/train/events.out.tfevents.1679589903.WEIYUQING.27316.0.v2 b/Number-Of-Conv-Structure/Eleven/logs/20230324-004442/train/events.out.tfevents.1679589903.WEIYUQING.27316.0.v2 new file mode 100644 index 0000000..47056d3 Binary files /dev/null and b/Number-Of-Conv-Structure/Eleven/logs/20230324-004442/train/events.out.tfevents.1679589903.WEIYUQING.27316.0.v2 differ diff --git a/Number-Of-Conv-Structure/Eleven/logs/20230324-004442/validation/events.out.tfevents.1679589919.WEIYUQING.27316.1.v2 b/Number-Of-Conv-Structure/Eleven/logs/20230324-004442/validation/events.out.tfevents.1679589919.WEIYUQING.27316.1.v2 new file mode 100644 index 0000000..9b51829 Binary files /dev/null and b/Number-Of-Conv-Structure/Eleven/logs/20230324-004442/validation/events.out.tfevents.1679589919.WEIYUQING.27316.1.v2 differ diff --git a/Number-Of-Conv-Structure/Eleven/model/ecg_model_eleven_conv.h5 b/Number-Of-Conv-Structure/Eleven/model/ecg_model_eleven_conv.h5 new file mode 100644 index 0000000..f32374c Binary files /dev/null and b/Number-Of-Conv-Structure/Eleven/model/ecg_model_eleven_conv.h5 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 deleted file mode 100644 index e19ac06..0000000 Binary files a/Number-Of-Conv-Structure/Eleven/model/ecg_model_seven_conv.h5 and /dev/null differ diff --git a/Number-Of-Conv-Structure/Eleven/picture/accuracy.png b/Number-Of-Conv-Structure/Eleven/picture/accuracy.png index 52db8a6..cf59bda 100644 Binary files a/Number-Of-Conv-Structure/Eleven/picture/accuracy.png 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 index 9ad5ed0..b029310 100644 Binary files a/Number-Of-Conv-Structure/Eleven/picture/confusion_matrix.png 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 index 4efaeb9..482291b 100644 Binary files a/Number-Of-Conv-Structure/Eleven/picture/loss.png and b/Number-Of-Conv-Structure/Eleven/picture/loss.png differ diff --git a/Number-Of-Conv-Structure/Fifteen/logs/20230324-143442/train/events.out.tfevents.1679639688.WEIYUQING.19836.0.v2 b/Number-Of-Conv-Structure/Fifteen/logs/20230324-143442/train/events.out.tfevents.1679639688.WEIYUQING.19836.0.v2 new file mode 100644 index 0000000..fe17e53 Binary files /dev/null and b/Number-Of-Conv-Structure/Fifteen/logs/20230324-143442/train/events.out.tfevents.1679639688.WEIYUQING.19836.0.v2 differ diff --git a/Number-Of-Conv-Structure/Fifteen/logs/20230324-143442/validation/events.out.tfevents.1679639695.WEIYUQING.19836.1.v2 b/Number-Of-Conv-Structure/Fifteen/logs/20230324-143442/validation/events.out.tfevents.1679639695.WEIYUQING.19836.1.v2 new file mode 100644 index 0000000..0c0fb6d Binary files /dev/null and b/Number-Of-Conv-Structure/Fifteen/logs/20230324-143442/validation/events.out.tfevents.1679639695.WEIYUQING.19836.1.v2 differ diff --git a/Number-Of-Conv-Structure/Fifteen/model/ecg_model_fifteen_conv.h5 b/Number-Of-Conv-Structure/Fifteen/model/ecg_model_fifteen_conv.h5 new file mode 100644 index 0000000..a058574 Binary files /dev/null and b/Number-Of-Conv-Structure/Fifteen/model/ecg_model_fifteen_conv.h5 differ diff --git a/Number-Of-Conv-Structure/Fifteen/picture/accuracy.png b/Number-Of-Conv-Structure/Fifteen/picture/accuracy.png new file mode 100644 index 0000000..655a247 Binary files /dev/null and b/Number-Of-Conv-Structure/Fifteen/picture/accuracy.png differ diff --git a/Number-Of-Conv-Structure/Fifteen/picture/confusion_matrix.png b/Number-Of-Conv-Structure/Fifteen/picture/confusion_matrix.png new file mode 100644 index 0000000..73cef26 Binary files /dev/null and b/Number-Of-Conv-Structure/Fifteen/picture/confusion_matrix.png differ diff --git a/Number-Of-Conv-Structure/Fifteen/picture/loss.png b/Number-Of-Conv-Structure/Fifteen/picture/loss.png new file mode 100644 index 0000000..8e5e9e3 Binary files /dev/null and b/Number-Of-Conv-Structure/Fifteen/picture/loss.png differ diff --git a/Number-Of-Conv-Structure/Five/logs/20230324-004414/train/events.out.tfevents.1679589864.WEIYUQING.2208.0.v2 b/Number-Of-Conv-Structure/Five/logs/20230324-004414/train/events.out.tfevents.1679589864.WEIYUQING.2208.0.v2 new file mode 100644 index 0000000..b12ea82 Binary files /dev/null and b/Number-Of-Conv-Structure/Five/logs/20230324-004414/train/events.out.tfevents.1679589864.WEIYUQING.2208.0.v2 differ diff --git a/Number-Of-Conv-Structure/Five/logs/20230324-004414/validation/events.out.tfevents.1679589873.WEIYUQING.2208.1.v2 b/Number-Of-Conv-Structure/Five/logs/20230324-004414/validation/events.out.tfevents.1679589873.WEIYUQING.2208.1.v2 new file mode 100644 index 0000000..a0e2491 Binary files /dev/null and b/Number-Of-Conv-Structure/Five/logs/20230324-004414/validation/events.out.tfevents.1679589873.WEIYUQING.2208.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 83be024..9c424fe 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 f4745c5..e1d1245 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 374644b..8067a87 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 a341eb6..e8ee9e8 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/20230324-004432/train/events.out.tfevents.1679589888.WEIYUQING.14736.0.v2 b/Number-Of-Conv-Structure/Nine/logs/20230324-004432/train/events.out.tfevents.1679589888.WEIYUQING.14736.0.v2 new file mode 100644 index 0000000..0c9869d Binary files /dev/null and b/Number-Of-Conv-Structure/Nine/logs/20230324-004432/train/events.out.tfevents.1679589888.WEIYUQING.14736.0.v2 differ diff --git a/Number-Of-Conv-Structure/Nine/logs/20230324-004432/validation/events.out.tfevents.1679589903.WEIYUQING.14736.1.v2 b/Number-Of-Conv-Structure/Nine/logs/20230324-004432/validation/events.out.tfevents.1679589903.WEIYUQING.14736.1.v2 new file mode 100644 index 0000000..b764fb9 Binary files /dev/null and b/Number-Of-Conv-Structure/Nine/logs/20230324-004432/validation/events.out.tfevents.1679589903.WEIYUQING.14736.1.v2 differ diff --git a/Number-Of-Conv-Structure/Nine/model/ecg_model_nine_conv.h5 b/Number-Of-Conv-Structure/Nine/model/ecg_model_nine_conv.h5 new file mode 100644 index 0000000..8b5baf4 Binary files /dev/null and b/Number-Of-Conv-Structure/Nine/model/ecg_model_nine_conv.h5 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 deleted file mode 100644 index a2f4d3e..0000000 Binary files a/Number-Of-Conv-Structure/Nine/model/ecg_model_three_conv.h5 and /dev/null differ diff --git a/Number-Of-Conv-Structure/Nine/picture/accuracy.png b/Number-Of-Conv-Structure/Nine/picture/accuracy.png index cd46533..ff0701f 100644 Binary files a/Number-Of-Conv-Structure/Nine/picture/accuracy.png 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 index 68c27ae..1b8f0a8 100644 Binary files a/Number-Of-Conv-Structure/Nine/picture/confusion_matrix.png 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 index c4ef9d6..8e54cca 100644 Binary files a/Number-Of-Conv-Structure/Nine/picture/loss.png and b/Number-Of-Conv-Structure/Nine/picture/loss.png differ diff --git a/Number-Of-Conv-Structure/Nineteen/logs/20230324-143449/train/events.out.tfevents.1679639702.WEIYUQING.28584.0.v2 b/Number-Of-Conv-Structure/Nineteen/logs/20230324-143449/train/events.out.tfevents.1679639702.WEIYUQING.28584.0.v2 new file mode 100644 index 0000000..57ecf1f Binary files /dev/null and b/Number-Of-Conv-Structure/Nineteen/logs/20230324-143449/train/events.out.tfevents.1679639702.WEIYUQING.28584.0.v2 differ diff --git a/Number-Of-Conv-Structure/Nineteen/logs/20230324-143449/validation/events.out.tfevents.1679639714.WEIYUQING.28584.1.v2 b/Number-Of-Conv-Structure/Nineteen/logs/20230324-143449/validation/events.out.tfevents.1679639714.WEIYUQING.28584.1.v2 new file mode 100644 index 0000000..0406af4 Binary files /dev/null and b/Number-Of-Conv-Structure/Nineteen/logs/20230324-143449/validation/events.out.tfevents.1679639714.WEIYUQING.28584.1.v2 differ diff --git a/Number-Of-Conv-Structure/Nineteen/model/ecg_model_Nineteen_conv.h5 b/Number-Of-Conv-Structure/Nineteen/model/ecg_model_Nineteen_conv.h5 new file mode 100644 index 0000000..b3d45d3 Binary files /dev/null and b/Number-Of-Conv-Structure/Nineteen/model/ecg_model_Nineteen_conv.h5 differ diff --git a/Number-Of-Conv-Structure/Seven/logs/20230324-004421/train/events.out.tfevents.1679589874.WEIYUQING.13172.0.v2 b/Number-Of-Conv-Structure/Seven/logs/20230324-004421/train/events.out.tfevents.1679589874.WEIYUQING.13172.0.v2 new file mode 100644 index 0000000..6deaedf Binary files /dev/null and b/Number-Of-Conv-Structure/Seven/logs/20230324-004421/train/events.out.tfevents.1679589874.WEIYUQING.13172.0.v2 differ diff --git a/Number-Of-Conv-Structure/Seven/logs/20230324-004421/validation/events.out.tfevents.1679589886.WEIYUQING.13172.1.v2 b/Number-Of-Conv-Structure/Seven/logs/20230324-004421/validation/events.out.tfevents.1679589886.WEIYUQING.13172.1.v2 new file mode 100644 index 0000000..de97496 Binary files /dev/null and b/Number-Of-Conv-Structure/Seven/logs/20230324-004421/validation/events.out.tfevents.1679589886.WEIYUQING.13172.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 index 283bda0..dc286af 100644 Binary files a/Number-Of-Conv-Structure/Seven/model/ecg_model_seven_conv.h5 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 index 73b3b47..7b6d2a3 100644 Binary files a/Number-Of-Conv-Structure/Seven/picture/accuracy.png 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 index 371d172..2f362f9 100644 Binary files a/Number-Of-Conv-Structure/Seven/picture/confusion_matrix.png 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 index 79fea4e..d2c2649 100644 Binary files a/Number-Of-Conv-Structure/Seven/picture/loss.png and b/Number-Of-Conv-Structure/Seven/picture/loss.png differ diff --git a/Number-Of-Conv-Structure/Seventeen/logs/20230324-143446/train/events.out.tfevents.1679639694.WEIYUQING.32564.0.v2 b/Number-Of-Conv-Structure/Seventeen/logs/20230324-143446/train/events.out.tfevents.1679639694.WEIYUQING.32564.0.v2 new file mode 100644 index 0000000..1a1d4a9 Binary files /dev/null and b/Number-Of-Conv-Structure/Seventeen/logs/20230324-143446/train/events.out.tfevents.1679639694.WEIYUQING.32564.0.v2 differ diff --git a/Number-Of-Conv-Structure/Seventeen/logs/20230324-143446/validation/events.out.tfevents.1679639703.WEIYUQING.32564.1.v2 b/Number-Of-Conv-Structure/Seventeen/logs/20230324-143446/validation/events.out.tfevents.1679639703.WEIYUQING.32564.1.v2 new file mode 100644 index 0000000..9e498c0 Binary files /dev/null and b/Number-Of-Conv-Structure/Seventeen/logs/20230324-143446/validation/events.out.tfevents.1679639703.WEIYUQING.32564.1.v2 differ diff --git a/Number-Of-Conv-Structure/Seventeen/model/ecg_model_Seventeen_conv.h5 b/Number-Of-Conv-Structure/Seventeen/model/ecg_model_Seventeen_conv.h5 new file mode 100644 index 0000000..a3db45e Binary files /dev/null and b/Number-Of-Conv-Structure/Seventeen/model/ecg_model_Seventeen_conv.h5 differ diff --git a/Number-Of-Conv-Structure/Thirteen/logs/20230324-004448/train/events.out.tfevents.1679589912.WEIYUQING.19360.0.v2 b/Number-Of-Conv-Structure/Thirteen/logs/20230324-004448/train/events.out.tfevents.1679589912.WEIYUQING.19360.0.v2 new file mode 100644 index 0000000..179b680 Binary files /dev/null and b/Number-Of-Conv-Structure/Thirteen/logs/20230324-004448/train/events.out.tfevents.1679589912.WEIYUQING.19360.0.v2 differ diff --git a/Number-Of-Conv-Structure/Thirteen/logs/20230324-004448/validation/events.out.tfevents.1679589930.WEIYUQING.19360.1.v2 b/Number-Of-Conv-Structure/Thirteen/logs/20230324-004448/validation/events.out.tfevents.1679589930.WEIYUQING.19360.1.v2 new file mode 100644 index 0000000..734d5ff Binary files /dev/null and b/Number-Of-Conv-Structure/Thirteen/logs/20230324-004448/validation/events.out.tfevents.1679589930.WEIYUQING.19360.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 deleted file mode 100644 index 5f6a5f3..0000000 Binary files a/Number-Of-Conv-Structure/Thirteen/model/ecg_model_five_conv.h5 and /dev/null differ diff --git a/Number-Of-Conv-Structure/Thirteen/model/ecg_model_thirteen_conv.h5 b/Number-Of-Conv-Structure/Thirteen/model/ecg_model_thirteen_conv.h5 new file mode 100644 index 0000000..3fce565 Binary files /dev/null and b/Number-Of-Conv-Structure/Thirteen/model/ecg_model_thirteen_conv.h5 differ diff --git a/Number-Of-Conv-Structure/Thirteen/picture/accuracy.png b/Number-Of-Conv-Structure/Thirteen/picture/accuracy.png index 060ab8f..bc08662 100644 Binary files a/Number-Of-Conv-Structure/Thirteen/picture/accuracy.png 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 index b2e347d..3147417 100644 Binary files a/Number-Of-Conv-Structure/Thirteen/picture/confusion_matrix.png 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 index f4c6111..c5ece0d 100644 Binary files a/Number-Of-Conv-Structure/Thirteen/picture/loss.png and b/Number-Of-Conv-Structure/Thirteen/picture/loss.png differ diff --git a/Number-Of-Conv-Structure/Three/logs/20230324-004410/train/events.out.tfevents.1679589859.WEIYUQING.16916.0.v2 b/Number-Of-Conv-Structure/Three/logs/20230324-004410/train/events.out.tfevents.1679589859.WEIYUQING.16916.0.v2 new file mode 100644 index 0000000..44443ab Binary files /dev/null and b/Number-Of-Conv-Structure/Three/logs/20230324-004410/train/events.out.tfevents.1679589859.WEIYUQING.16916.0.v2 differ diff --git a/Number-Of-Conv-Structure/Three/logs/20230324-004410/validation/events.out.tfevents.1679589870.WEIYUQING.16916.1.v2 b/Number-Of-Conv-Structure/Three/logs/20230324-004410/validation/events.out.tfevents.1679589870.WEIYUQING.16916.1.v2 new file mode 100644 index 0000000..7a555d1 Binary files /dev/null and b/Number-Of-Conv-Structure/Three/logs/20230324-004410/validation/events.out.tfevents.1679589870.WEIYUQING.16916.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 7c9dcd3..08f858e 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 6dea2b0..a8a5849 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 01f31ee..0a39e06 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 007e56f..7cfcde8 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 index 9ac01b5..c5f1858 100644 --- a/Number-Of-Conv-Structure/_mian_tensorflow_Eleven_ConvCNN.py +++ b/Number-Of-Conv-Structure/_mian_tensorflow_Eleven_ConvCNN.py @@ -17,33 +17,31 @@ from utils_eleven_of_ConvCNN import loadData, plot_history_tf, plot_heat_map 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 + "model/ecg_model_eleven_conv.h5" #model_Path_one = Project_PATH + "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([ #take test for one CNN layers model + tf.keras.layers.InputLayer(input_shape=(300,)), + tf.keras.layers.Reshape(target_shape=(300, 1)), - 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.Conv1D(filters=15, kernel_size=11, strides=2, 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'), + 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-Conv-Structure/_mian_tensorflow_Fifteen_ConvCNN.py b/Number-Of-Conv-Structure/_mian_tensorflow_Fifteen_ConvCNN.py new file mode 100644 index 0000000..7b8eaa5 --- /dev/null +++ b/Number-Of-Conv-Structure/_mian_tensorflow_Fifteen_ConvCNN.py @@ -0,0 +1,79 @@ +import datetime +import os + +import numpy as np +import pywt +import wfdb +import tensorflow as tf +from tensorflow import keras +from utils_fifteen_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/Fifteen/" +#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_fifteen_conv.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 one 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=15, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), + + tf.keras.layers.Flatten(), + 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') + ]) + 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 f4176a1..bffd66a 100644 --- a/Number-Of-Conv-Structure/_mian_tensorflow_Five_ConvCNN.py +++ b/Number-Of-Conv-Structure/_mian_tensorflow_Five_ConvCNN.py @@ -20,26 +20,24 @@ 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([ #take test for one CNN layers model + tf.keras.layers.InputLayer(input_shape=(300,)), + tf.keras.layers.Reshape(target_shape=(300, 1)), - tf.keras.layers.InputLayer(input_shape=(300, 1)), - - tf.keras.layers.Conv1D(filters=1, kernel_size=5, strides=1, padding='same', activation='relu'), + tf.keras.layers.Conv1D(filters=15, kernel_size=5, strides=2, 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'), + 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-Conv-Structure/_mian_tensorflow_Nine_ConvCNN.py b/Number-Of-Conv-Structure/_mian_tensorflow_Nine_ConvCNN.py index 4c6d620..96bfca6 100644 --- a/Number-Of-Conv-Structure/_mian_tensorflow_Nine_ConvCNN.py +++ b/Number-Of-Conv-Structure/_mian_tensorflow_Nine_ConvCNN.py @@ -13,33 +13,31 @@ from utils_nine_of_ConvCNN import loadData, plot_history_tf, plot_heat_map 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 + "model/ecg_model_nine_conv.h5" #model_Path_one = Project_PATH + "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([ #take test for one CNN layers model + tf.keras.layers.InputLayer(input_shape=(300,)), + tf.keras.layers.Reshape(target_shape=(300, 1)), - 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.Conv1D(filters=15, kernel_size=9, strides=2, 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'), + 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-Conv-Structure/_mian_tensorflow_Nineteen_ConvCNN.py b/Number-Of-Conv-Structure/_mian_tensorflow_Nineteen_ConvCNN.py new file mode 100644 index 0000000..568e40d --- /dev/null +++ b/Number-Of-Conv-Structure/_mian_tensorflow_Nineteen_ConvCNN.py @@ -0,0 +1,79 @@ +import datetime +import os + +import numpy as np +import pywt +import wfdb +import tensorflow as tf +from tensorflow import keras +from utils_fifteen_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/Seventeen/" +#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_Seventeen_conv.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 one 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=17, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), + + tf.keras.layers.Flatten(), + 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') + ]) + 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 787002d..4c33ed9 100644 --- a/Number-Of-Conv-Structure/_mian_tensorflow_Seven_ConvCNN.py +++ b/Number-Of-Conv-Structure/_mian_tensorflow_Seven_ConvCNN.py @@ -20,26 +20,24 @@ 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([ #take test for one CNN layers model + tf.keras.layers.InputLayer(input_shape=(300,)), + tf.keras.layers.Reshape(target_shape=(300, 1)), - tf.keras.layers.InputLayer(input_shape=(300, 1)), - - tf.keras.layers.Conv1D(filters=1, kernel_size=7, strides=1, padding='same', activation='relu'), + tf.keras.layers.Conv1D(filters=15, kernel_size=7, strides=2, 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'), + 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-Conv-Structure/_mian_tensorflow_Seventeen_ConvCNN.py b/Number-Of-Conv-Structure/_mian_tensorflow_Seventeen_ConvCNN.py new file mode 100644 index 0000000..568e40d --- /dev/null +++ b/Number-Of-Conv-Structure/_mian_tensorflow_Seventeen_ConvCNN.py @@ -0,0 +1,79 @@ +import datetime +import os + +import numpy as np +import pywt +import wfdb +import tensorflow as tf +from tensorflow import keras +from utils_fifteen_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/Seventeen/" +#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_Seventeen_conv.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 one 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=17, strides=2, padding='same', activation='relu'), + tf.keras.layers.MaxPool1D(pool_size=1, strides=2, padding='same'), + + tf.keras.layers.Flatten(), + 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') + ]) + 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_Thirteen_ConvCNN.py b/Number-Of-Conv-Structure/_mian_tensorflow_Thirteen_ConvCNN.py index 264c329..01e99a8 100644 --- a/Number-Of-Conv-Structure/_mian_tensorflow_Thirteen_ConvCNN.py +++ b/Number-Of-Conv-Structure/_mian_tensorflow_Thirteen_ConvCNN.py @@ -13,33 +13,31 @@ from utils_thirteen_of_ConvCNN import loadData, plot_history_tf, plot_heat_map 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 + "model/ecg_model_thirteen_conv.h5" #model_Path_one = Project_PATH + "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([ #take test for one CNN layers model + tf.keras.layers.InputLayer(input_shape=(300,)), + tf.keras.layers.Reshape(target_shape=(300, 1)), - 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.Conv1D(filters=15, kernel_size=13, strides=2, 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'), + 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-Conv-Structure/_mian_tensorflow_Three_ConvCNN.py b/Number-Of-Conv-Structure/_mian_tensorflow_Three_ConvCNN.py index f88a119..36a1d8f 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 = 30 +NUM_EPOCHS = 10 def CNN_model_level_one(): @@ -28,18 +28,19 @@ def CNN_model_level_one(): #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)), - 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'), tf.keras.layers.MaxPool1D(pool_size=1, 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-Conv-Structure/utils_Nineteen_of_ConvCNN.py b/Number-Of-Conv-Structure/utils_Nineteen_of_ConvCNN.py new file mode 100644 index 0000000..7f9cdb3 --- /dev/null +++ b/Number-Of-Conv-Structure/utils_Nineteen_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/Nineteen/' + +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_Seventeen_of_ConvCNN.py b/Number-Of-Conv-Structure/utils_Seventeen_of_ConvCNN.py new file mode 100644 index 0000000..618900e --- /dev/null +++ b/Number-Of-Conv-Structure/utils_Seventeen_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/Seventeen/' + +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_fifteen_of_ConvCNN.py b/Number-Of-Conv-Structure/utils_fifteen_of_ConvCNN.py new file mode 100644 index 0000000..d4b33c7 --- /dev/null +++ b/Number-Of-Conv-Structure/utils_fifteen_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/Fifteen/' + +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()