{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"%%time\nimport tensorflow as tf\n\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Dropout, Flatten\nfrom tensorflow.keras.layers import Conv2D, MaxPooling2D\n\nimport random\nimport numpy as np\n\nimport scipy.io\nfrom scipy.signal import spectrogram","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-07-19T19:11:33.252619Z","iopub.execute_input":"2023-07-19T19:11:33.252943Z","iopub.status.idle":"2023-07-19T19:11:44.032301Z","shell.execute_reply.started":"2023-07-19T19:11:33.252914Z","shell.execute_reply":"2023-07-19T19:11:44.029917Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Preproces the data","metadata":{}},{"cell_type":"code","source":"%%time\nbatch_size = 128\nnum_classes = 2\nepochs = 30\nimg_rows, img_cols = 256, 22","metadata":{"execution":{"iopub.status.busy":"2023-07-19T19:11:47.942232Z","iopub.execute_input":"2023-07-19T19:11:47.942938Z","iopub.status.idle":"2023-07-19T19:11:47.950198Z","shell.execute_reply.started":"2023-07-19T19:11:47.942904Z","shell.execute_reply":"2023-07-19T19:11:47.948545Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\n# CPU run numpy and scipy\n\nall_X_cpu = []\nall_Y_cpu = []\n\ntypes = ['Patient_1_interictal_segment', 'Patient_1_preictal_segment']\n\nfor i,typ in enumerate(types):\n    # Looking at 18 files for each event for a balanced dataset\n    for j in range(18):\n        fl = '/kaggle/input/seizure-prediction/Patient_1/Patient_1/{}_{}.mat'.format(typ, str(j + 1).zfill(4))\n        data = scipy.io.loadmat(fl)\n        k = typ.replace('Patient_1_', '') + '_'\n        d_array = data[k + str(j + 1)][0][0][0]\n        lst = list(range(3000000))  # 10 minutes\n        for m in lst[::5000]:\n            # Create a spectrogram every 1 second\n            p_secs = d_array[0][m:m+5000]\n            p_f, p_t, p_Sxx = spectrogram(p_secs, fs=5000, return_onesided=False)\n            p_SS = np.log1p(p_Sxx)\n            arr = p_SS[:] / np.max(p_SS)\n            all_X_cpu.append(arr)\n            all_Y_cpu.append(i)\n            \n# Shuffling the data\ndataset_cpu = list(zip(all_X_cpu, all_Y_cpu))\nrandom.shuffle(dataset_cpu)\nall_X_cpu,all_Y_cpu = zip(*dataset_cpu)\nprint(len(all_X_cpu))\n\n# Splitting data into train/test, leaving only 600 samples for testing\nx_train_cpu = np.array(all_X_cpu[:21000])\nx_test_cpu = np.array(all_X_cpu[21000:])\ny_train_cpu = np.array(all_Y_cpu[:21000])\ny_test_cpu = np.array(all_Y_cpu[21000:])\n# make hot map\ny_train_cpu = tf.keras.utils.to_categorical(y_train_cpu, num_classes) \ny_test_cpu = tf.keras.utils.to_categorical(y_test_cpu, num_classes)\n\nx_train_cpu = x_train_cpu.reshape(x_train_cpu.shape[0], img_rows, img_cols, 1)\nx_test_cpu = x_test_cpu.reshape(x_test_cpu.shape[0], img_rows, img_cols, 1)\ninput_shape_cpu = (img_rows, img_cols, 1)\nx_train_cpu = x_train_cpu.astype('float32')\nx_test_cpu = x_test_cpu.astype('float32')","metadata":{"execution":{"iopub.status.busy":"2023-07-19T19:11:50.687498Z","iopub.execute_input":"2023-07-19T19:11:50.687897Z","iopub.status.idle":"2023-07-19T19:12:46.143074Z","shell.execute_reply.started":"2023-07-19T19:11:50.687866Z","shell.execute_reply":"2023-07-19T19:12:46.140964Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Create and fit model","metadata":{}},{"cell_type":"code","source":"%%time\nmodel_cpu = Sequential()\n\nmodel_cpu.add(Conv2D(32, kernel_size=(5, 5),\n                 activation='relu',\n                 input_shape=input_shape_cpu))\nmodel_cpu.add(Conv2D(32, (3, 3), activation='relu'))\nmodel_cpu.add(MaxPooling2D(pool_size=(2, 2)))\nmodel_cpu.add(Dropout(0.25))\nmodel_cpu.add(Flatten())\nmodel_cpu.add(Dense(32, activation='relu'))\nmodel_cpu.add(Dropout(0.5))\nmodel_cpu.add(Dense(num_classes, activation='sigmoid'))\n\nmodel_cpu.compile(loss=tf.keras.losses.binary_crossentropy,\n              optimizer=tf.keras.optimizers.RMSprop(),\n              metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2023-07-19T19:12:50.122020Z","iopub.execute_input":"2023-07-19T19:12:50.122435Z","iopub.status.idle":"2023-07-19T19:12:53.441911Z","shell.execute_reply.started":"2023-07-19T19:12:50.122376Z","shell.execute_reply":"2023-07-19T19:12:53.440909Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\nmodel_cpu.fit(x_train_cpu, y_train_cpu,\n          batch_size=batch_size,\n          epochs=epochs,\n          verbose=1,\n          validation_data=(x_test_cpu, y_test_cpu))\nscore_cpu = model_cpu.evaluate(x_test_cpu, y_test_cpu, verbose=0)\nprint('Test loss:', score_cpu[0])\nprint('Test accuracy:', score_cpu[1])","metadata":{"execution":{"iopub.status.busy":"2023-07-19T19:13:09.318495Z","iopub.execute_input":"2023-07-19T19:13:09.318871Z","iopub.status.idle":"2023-07-19T19:14:47.782680Z","shell.execute_reply.started":"2023-07-19T19:13:09.318840Z","shell.execute_reply":"2023-07-19T19:14:47.781645Z"},"trusted":true},"execution_count":null,"outputs":[]}]}