{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":59093,"databundleVersionId":7469972,"sourceType":"competition"},{"sourceId":7392775,"sourceType":"datasetVersion","datasetId":4297782}],"dockerImageVersionId":30665,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd, numpy as np, os\nimport matplotlib.pyplot as plt\nimport tensorflow as tf\nprint('TensorFlow version =',tf.__version__)\n\ndf_train = pd.read_csv('/kaggle/input/hms-harmful-brain-activity-classification/train.csv')\nTARGETS = df_train.columns[-6:]\nprint('Train shape:', df_train.shape )\nprint('Targets', list(TARGETS))\ndf_train.head(5)\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-03-04T19:23:41.637315Z","iopub.execute_input":"2024-03-04T19:23:41.637646Z","iopub.status.idle":"2024-03-04T19:23:41.819449Z","shell.execute_reply.started":"2024-03-04T19:23:41.637622Z","shell.execute_reply":"2024-03-04T19:23:41.818573Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"os.environ[\"CUDA_VISIBLE_DEVICES\"]=\"0,1\"\n\n# USE MULTIPLE GPUS\ngpus = tf.config.list_physical_devices('GPU')\nif len(gpus)<=1: \n    strategy = tf.distribute.OneDeviceStrategy(device=\"/gpu:0\")\n    print(f'Using {len(gpus)} GPU')\nelse: \n    strategy = tf.distribute.MirroredStrategy()\n    print(f'Using {len(gpus)} GPUs')\n\nVER = 5\n\n\nLOAD_MODELS_FROM = '/kaggle/input/brain-efficientnet-models-v3-v4-v5/'\n\nUSE_KAGGLE_SPECTROGRAMS = True\nUSE_EEG_SPECTROGRAMS = True","metadata":{"execution":{"iopub.status.busy":"2024-03-04T19:23:45.577794Z","iopub.execute_input":"2024-03-04T19:23:45.578612Z","iopub.status.idle":"2024-03-04T19:23:45.870725Z","shell.execute_reply.started":"2024-03-04T19:23:45.578579Z","shell.execute_reply":"2024-03-04T19:23:45.869701Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\nREAD_SPEC_FILES = False\n\nPATH = '/kaggle/input/hms-harmful-brain-activity-classification/train_spectrograms/'\nfiles = os.listdir(PATH)\nprint(f'There are {len(files)} spectrogram parquets')\n\nif READ_SPEC_FILES:    \n    spectrograms = {}\n    for i,f in enumerate(files):\n        if i%100==0: print(i,', ',end='')\n        tmp = pd.read_parquet(f'{PATH}{f}')\n        name = int(f.split('.')[0])\n        spectrograms[name] = tmp.iloc[:,1:].values\nelse:\n    spectrograms = np.load('/kaggle/input/brain-spectrograms/specs.npy',allow_pickle=True).item()","metadata":{"execution":{"iopub.status.busy":"2024-03-04T19:24:08.097714Z","iopub.execute_input":"2024-03-04T19:24:08.098101Z","iopub.status.idle":"2024-03-04T19:25:07.662781Z","shell.execute_reply.started":"2024-03-04T19:24:08.098072Z","shell.execute_reply":"2024-03-04T19:25:07.661814Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for spectrogram_id, spectrogram_data in list(spectrograms.items())[:3]:\n    # Visualizar espectrogramas\n    plt.imshow(spectrogram_data, aspect='auto', cmap='jet')\n    plt.title(f'Spectrogram {spectrogram_id}')\n    plt.xlabel('Time')\n    plt.ylabel('Frequency')\n    plt.colorbar()\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2024-03-04T19:25:07.664702Z","iopub.execute_input":"2024-03-04T19:25:07.665381Z","iopub.status.idle":"2024-03-04T19:25:09.012718Z","shell.execute_reply.started":"2024-03-04T19:25:07.665345Z","shell.execute_reply":"2024-03-04T19:25:09.011706Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Verificando las dimenciones de los espectrogramas \n\nspectrogram_ids = list(spectrograms.keys())\n\n# Tamaños de los primeros n espectrogramas\nprint(\"Tamaños de los primeros 10 espectrogramas:\")\nfor spectrogram_id in spectrogram_ids[:10]:\n    height, width = spectrograms[spectrogram_id].shape\n    print(f\"Espectrograma {spectrogram_id}: Frequency = {height}, Time = {width}\")\n\n# Tamaños de los últimos n espectrogramas\nprint(\"\\nTamaños de los últimos 10 espectrogramas:\")\nfor spectrogram_id in spectrogram_ids[-10:]:\n    height, width = spectrograms[spectrogram_id].shape\n    print(f\"Espectrograma {spectrogram_id}: Frequency = {height}, Time = {width}\")\n","metadata":{"execution":{"iopub.status.busy":"2024-03-04T19:25:19.235769Z","iopub.execute_input":"2024-03-04T19:25:19.236133Z","iopub.status.idle":"2024-03-04T19:25:19.242894Z","shell.execute_reply.started":"2024-03-04T19:25:19.236104Z","shell.execute_reply":"2024-03-04T19:25:19.241945Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# datos crudos \nprimeros_dos_espectrogramas = list(spectrograms.items())[:2]\n\nfor spectrogram_id, spectrogram_data in primeros_dos_espectrogramas:\n\n    df_SPECTRO = pd.DataFrame(spectrogram_data)\n    \n    print(f'Spectrogram {spectrogram_id}:\\n')\n    print(df_SPECTRO)\n    print('\\n')","metadata":{"execution":{"iopub.status.busy":"2024-03-04T19:25:21.909176Z","iopub.execute_input":"2024-03-04T19:25:21.909595Z","iopub.status.idle":"2024-03-04T19:25:21.948459Z","shell.execute_reply.started":"2024-03-04T19:25:21.909567Z","shell.execute_reply":"2024-03-04T19:25:21.947485Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"max_filas = 0\nid_max_filas = None\n\nfor spectrogram_id, spectrogram_data in spectrograms.items():\n    filas_actuales = spectrogram_data.shape[0]\n    if filas_actuales > max_filas:\n        max_filas = filas_actuales\n        id_max_filas = spectrogram_id\n\nprint(\"espectrograma con el máximo número de filas tiene el ID:\", id_max_filas)\n","metadata":{"execution":{"iopub.status.busy":"2024-03-04T19:25:25.187149Z","iopub.execute_input":"2024-03-04T19:25:25.187498Z","iopub.status.idle":"2024-03-04T19:25:25.197973Z","shell.execute_reply.started":"2024-03-04T19:25:25.187472Z","shell.execute_reply":"2024-03-04T19:25:25.197083Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# datos del espectrograma con el máximo número de filas y guardarlo en un dataframe\nespectrograma_max_filas = spectrograms[id_max_filas]\ndf_espectrograma_max_filas = pd.DataFrame(espectrograma_max_filas)\n\nprint(\"Tabla de datos del espectrograma con el máximo número de filas:\")\nprint(df_espectrograma_max_filas)\n","metadata":{"execution":{"iopub.status.busy":"2024-03-04T19:25:28.881217Z","iopub.execute_input":"2024-03-04T19:25:28.881575Z","iopub.status.idle":"2024-03-04T19:25:28.902784Z","shell.execute_reply.started":"2024-03-04T19:25:28.881545Z","shell.execute_reply":"2024-03-04T19:25:28.901927Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"specific_spectrogram_id = 764146759\nspecific_spectrogram_data = spectrograms[specific_spectrogram_id]\n\n# visualizar el espectrograma específico\nplt.imshow(specific_spectrogram_data, aspect='auto', cmap='jet')\nplt.title(f'Spectrogram {specific_spectrogram_id}')\nplt.xlabel('Time')\nplt.ylabel('Frequency')\nplt.colorbar()\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2024-03-04T19:25:31.6689Z","iopub.execute_input":"2024-03-04T19:25:31.669944Z","iopub.status.idle":"2024-03-04T19:25:32.23174Z","shell.execute_reply.started":"2024-03-04T19:25:31.669913Z","shell.execute_reply":"2024-03-04T19:25:32.230851Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"valor_maximo = np.max(spectrograms[specific_spectrogram_id]);\nprint(valor_maximo);","metadata":{"execution":{"iopub.status.busy":"2024-03-04T19:25:34.740541Z","iopub.execute_input":"2024-03-04T19:25:34.740895Z","iopub.status.idle":"2024-03-04T19:25:34.747076Z","shell.execute_reply.started":"2024-03-04T19:25:34.740865Z","shell.execute_reply":"2024-03-04T19:25:34.746171Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Obtener los datos del espectrograma con el máximo número de filas\nespectrograma_max_filas = spectrograms[id_max_filas]\n\n# Encontrar la posición del valor máximo en el espectrograma específico\nfila_maxima, columna_maxima = np.unravel_index(np.argmax(espectrograma_max_filas), espectrograma_max_filas.shape)\n\n# Imprimir la posición del valor máximo\nprint(f\"El valor máximo {np.max(espectrograma_max_filas)} está en la fila {fila_maxima} y columna {columna_maxima}.\")\n","metadata":{"execution":{"iopub.status.busy":"2024-03-04T19:25:37.134402Z","iopub.execute_input":"2024-03-04T19:25:37.135081Z","iopub.status.idle":"2024-03-04T19:25:37.151913Z","shell.execute_reply.started":"2024-03-04T19:25:37.135038Z","shell.execute_reply":"2024-03-04T19:25:37.150991Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train.head()","metadata":{"execution":{"iopub.status.busy":"2024-03-04T19:25:38.515778Z","iopub.execute_input":"2024-03-04T19:25:38.51617Z","iopub.status.idle":"2024-03-04T19:25:38.532122Z","shell.execute_reply.started":"2024-03-04T19:25:38.51614Z","shell.execute_reply":"2024-03-04T19:25:38.531219Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from IPython.display import display\n\n#visualizamos las votaciones para ver si hay una relacion o votos que más se repitan para cortarlo y reducir el tamaño para la red\nspecific_spectrogram_data = df_train[df_train['spectrogram_id'] == 764146759]\ndisplay(specific_spectrogram_data.head(20))\nnum_filas, num_columnas = specific_spectrogram_data.shape\nprint(num_filas,num_columnas )","metadata":{"execution":{"iopub.status.busy":"2024-03-04T19:25:40.831823Z","iopub.execute_input":"2024-03-04T19:25:40.832195Z","iopub.status.idle":"2024-03-04T19:25:40.861809Z","shell.execute_reply.started":"2024-03-04T19:25:40.832166Z","shell.execute_reply":"2024-03-04T19:25:40.860915Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"num_filas, num_columnas = specific_spectrogram_data.shape\nprint(num_filas,num_columnas )","metadata":{"execution":{"iopub.status.busy":"2024-03-04T19:25:46.019296Z","iopub.execute_input":"2024-03-04T19:25:46.020102Z","iopub.status.idle":"2024-03-04T19:25:46.02495Z","shell.execute_reply.started":"2024-03-04T19:25:46.020061Z","shell.execute_reply":"2024-03-04T19:25:46.023961Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**RED CONVULOCIONAL **","metadata":{}},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense\n\n# Preprocesamiento de datos\nX = np.array(list(spectrograms.values()))\ny = df[TARGETS].values\n\n# División de datos\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# Definición del modelo CNN\nmodel = Sequential([\n    Conv2D(32, (3, 3), activation='relu', input_shape=(9116, 400, 4), padding='same'),\n    MaxPooling2D((2, 2)),\n    Conv2D(64, (3, 3), activation='relu', padding='same'),\n    MaxPooling2D((2, 2)),\n    Conv2D(64, (3, 3), activation='relu', padding='same'),\n    MaxPooling2D((2, 2)),\n    Flatten(),\n    Dense(64, activation='relu'),\n    Dense(len(TARGETS), activation='softmax')\n])\n\n# Compilación del modelo\nmodel.compile(optimizer='adam',\n              loss='categorical_crossentropy',\n              metrics=['accuracy'])\n\n# Entrenamiento del modelo\nhistory = model.fit(X_train, y_train, epochs=10, batch_size=32, validation_split=0.2)\n\n# Evaluación del modelo\ntest_loss, test_acc = model.evaluate(X_test, y_test)\nprint('Test accuracy:', test_acc)\n","metadata":{"execution":{"iopub.status.busy":"2024-03-04T19:26:08.675086Z","iopub.execute_input":"2024-03-04T19:26:08.675955Z","iopub.status.idle":"2024-03-04T19:26:09.214084Z","shell.execute_reply.started":"2024-03-04T19:26:08.675922Z","shell.execute_reply":"2024-03-04T19:26:09.212845Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}