{"metadata":{"kernelspec":{"display_name":"tf_env","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.12.2"},"kaggle":{"accelerator":"tpu1vmV38","dataSources":[{"sourceId":59093,"databundleVersionId":7469972,"sourceType":"competition"}],"dockerImageVersionId":30675,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# **Harmful Brain Activity Classification - Creating Custom layers**\n\n## **Project done by:** [Aarish Asif Khan]()\n\n## **Date:** 2nd April 2024\n\n## **Dataset:** [HMS - Harmful Brain Activity Dataset]()","metadata":{}},{"cell_type":"code","source":"# Import neccessary libraries\nimport pandas as pd\nimport numpy as np\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler\n\nimport tensorflow as tf\nfrom tensorflow.keras.models import Sequential\n\nfrom tensorflow.keras.layers import LSTM, Dense, Dropout\nfrom tensorflow.keras.layers import SimpleRNN\n\nfrom tensorflow.keras.layers import BatchNormalization","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Load the training data\ntrain_data = pd.read_csv(\"/kaggle/input/hms-harmful-brain-activity-classification/train.csv\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Print the first 5 rows\ntrain_data.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Split data into features (X) and labels (y)\nX = train_data.drop(columns=['eeg_id', 'eeg_sub_id', 'spectrogram_id', 'spectrogram_sub_id', 'label_id', 'patient_id', 'expert_consensus'])\ny = train_data[['seizure_vote', 'lpd_vote', 'gpd_vote', 'lrda_vote', 'grda_vote', 'other_vote']]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Split data into training and validation sets\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Normalize the dataset \nscaler = StandardScaler()\n\nX_train_scaled = scaler.fit_transform(X_train)\nX_val_scaled = scaler.transform(X_val)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Reshape data for RNN input\nX_train_reshaped = X_train_scaled.reshape((X_train_scaled.shape[0], X_train_scaled.shape[1], 1))\nX_val_reshaped = X_val_scaled.reshape((X_val_scaled.shape[0], X_val_scaled.shape[1], 1))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"num_classes = 10","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Define the architecture of the model\ninputs = Input(shape=(X_train_reshaped.shape[1], X_train_reshaped.shape[2]))\nx = SimpleRNN(64, activation='relu', return_sequences=True)(inputs)\n\nx = Dropout(0.2)(x)\nx = BatchNormalization()(x)\n\n# Add custom layer\nx = Dense(64, activation='relu')(x)\n\n# Add more RNN layers\nx = SimpleRNN(64, activation='relu', return_sequences=True)(x)\nx = Dropout(0.2)(x)\nx = BatchNormalization()(x)\nx = SimpleRNN(64, activation='relu')(x)\n\n# Add output layer\noutputs = Dense(num_classes, activation='softmax')(x)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create the model\nmodel = Model(inputs=inputs, outputs=outputs)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Compile the model\nmodel.compile(optimizer='adam',\n              loss='sparse_categorical_crossentropy',\n              metrics=['accuracy'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Print model summary\nmodel.summary()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Define callbacks\ncheckpoint = ModelCheckpoint('my_custom_rnn_model.keras', save_best_only=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Save the model\nmodel.save('rnn_model.h5')","metadata":{},"execution_count":null,"outputs":[]}]}