{"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":"!pip install -q nnAudio -qq\nimport torch\nfrom nnAudio.Spectrogram import CQT1992v2","metadata":{"id":"6LkC6ppugKta","execution":{"iopub.status.busy":"2021-08-18T01:57:41.225874Z","iopub.execute_input":"2021-08-18T01:57:41.22844Z","iopub.status.idle":"2021-08-18T01:57:50.34902Z","shell.execute_reply.started":"2021-08-18T01:57:41.22835Z","shell.execute_reply":"2021-08-18T01:57:50.348073Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install -U efficientnet","metadata":{"_kg_hide-output":true,"id":"1ivxPs3bgKtr","outputId":"0ac4361c-dfa6-42d3-aa09-b61b2e4e328a","execution":{"iopub.status.busy":"2021-08-18T01:57:55.331018Z","iopub.execute_input":"2021-08-18T01:57:55.331391Z","iopub.status.idle":"2021-08-18T01:58:01.865635Z","shell.execute_reply.started":"2021-08-18T01:57:55.331354Z","shell.execute_reply":"2021-08-18T01:58:01.86457Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import efficientnet.keras as efn","metadata":{"id":"xmACB4P6gKtr","execution":{"iopub.status.busy":"2021-08-18T01:58:04.373428Z","iopub.execute_input":"2021-08-18T01:58:04.373811Z","iopub.status.idle":"2021-08-18T01:58:06.288795Z","shell.execute_reply.started":"2021-08-18T01:58:04.373775Z","shell.execute_reply":"2021-08-18T01:58:06.287899Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport json\nimport random\nimport collections\nimport numpy as np\nimport pandas as pd\nimport cv2\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport math\nfrom random import shuffle\n\nimport keras\nimport tensorflow as tf\nfrom keras.models import Sequential\nfrom keras.utils import Sequence\nfrom keras.layers import Dense, Dropout, Activation\nfrom keras.optimizers import SGD\nfrom tensorflow.keras.optimizers import Adam\n\n\nfrom tensorflow.keras import models, layers\nfrom tensorflow.keras.layers import Dense, Dropout, Activation, Input, BatchNormalization, GlobalAveragePooling2D\n\n\nfrom tensorflow.keras.preprocessing import image\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping, ReduceLROnPlateau\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import roc_auc_score, roc_curve, auc\nfrom sklearn import model_selection as sk_model_selection","metadata":{"_kg_hide-input":true,"id":"irSgcCsGgKtY","execution":{"iopub.status.busy":"2021-08-18T01:58:06.434315Z","iopub.execute_input":"2021-08-18T01:58:06.434802Z","iopub.status.idle":"2021-08-18T01:58:06.520964Z","shell.execute_reply.started":"2021-08-18T01:58:06.43476Z","shell.execute_reply":"2021-08-18T01:58:06.520191Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('../input/g2net-gravitational-wave-detection/training_labels.csv')\ndatosValidacion = pd.read_csv('../input/g2net-gravitational-wave-detection/sample_submission.csv')\ntest = datosValidacion\n\ndisplay(train.head(3))\ndisplay(test.head(3))","metadata":{"id":"kfmObGPcgKtb","outputId":"faf075de-ebb3-49dd-fab8-768005b312a3","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def obtenerRutaDeImagenEntrenamiento(IDImagen):\n    return \"../input/g2net-gravitational-wave-detection/train/{}/{}/{}/{}.npy\".format(\n        IDImagen[0], IDImagen[1], IDImagen[2], IDImagen)\n\ndef obtenerRutaDeImagenDePrueba(IDImagen):\n    return \"../input/g2net-gravitational-wave-detection/test/{}/{}/{}/{}.npy\".format(\n        IDImagen[0], IDImagen[1], IDImagen[2], IDImagen)\n\ntrain['file_path'] = train['id'].apply(obtenerRutaDeImagenEntrenamiento)\ntest['file_path'] = test['id'].apply(obtenerRutaDeImagenDePrueba)\n\ndisplay(train.head(3))\ndisplay(test.head(3))","metadata":{"id":"kKQP4r5hgKtg","outputId":"a684d72b-acfc-4731-ce46-f0279f26884f","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train, x_val = sk_model_selection.train_test_split(\n    train, \n    test_size=0.05, \n    random_state=42\n)\nprint(len(x_train))\nprint(len(x_val))","metadata":{"id":"ydQqUiiBgKtl","outputId":"e560a514-b4e4-41d0-a42c-2a9764492e65","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Dataset(Sequence):\n    def __init__(self,df,esEntrenamiento=True,tamanoLote=32,shuffle=True):\n        self.id = df[\"id\"].values\n        self.ruta = df[\"file_path\"].values\n        self.y =  df[\"target\"].values\n        self.esEntrenamiento = esEntrenamiento\n        self.tamanoLote = tamanoLote\n        self.shuffle = shuffle\n        self.transformadaDeOnda = CQT1992v2(sr=2048, fmin=20, fmax=1024, hop_length=64)\n\n    def __len__(self):\n        return math.ceil(len(self.id)/self.tamanoLote)\n    \n    def aplicarTransformadaQ(self,pathx,transform): \n        ondas = np.load(pathx)\n        ondas = np.hstack(ondas)\n        ondas = ondas / np.max(ondas)\n        ondas = torch.from_numpy(ondas).float()\n        imagen = transform(ondas)\n        imagen = np.array(imagen)\n        imagen = np.transpose(imagen,(1,2,0))\n        return imagen \n    \n    def __getitem__(self,ids):\n        rutaDeLotes = self.ruta[ids * self.tamanoLote:(ids + 1) * self.tamanoLote]\n        \n        if self.y is not None:\n            loteY = self.y[ids * self.tamanoLote: (ids + 1) * self.tamanoLote]\n            \n        listaX = np.array([self.aplicarTransformadaQ(x,self.transformadaDeOnda) for x in rutaDeLotes])\n        loteX = np.stack(listaX)\n        if self.esEntrenamiento:\n            return loteX, loteY\n        else:\n            return loteX","metadata":{"id":"q9KAe7OUgKtm","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"DatasetDeEntrenamiento = Dataset(x_train) \nDatasetDeValidacion = Dataset(x_val) ","metadata":{"id":"541gCGCYgKtp","outputId":"3fa6d6b0-8fae-452f-a09e-8d2b7bbb347d","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def crearModelo(): \n    inputs = layers.Input(shape=(69,193,1))\n    capasEfficientnet = efn.EfficientNetB7(include_top=False,input_shape=(),weights='imagenet',pooling='avg')\n    modelo = Sequential()\n    \n    modelo.add(inputs)\n    modelo.add(keras.layers.Conv2D(3,3,activation='relu',padding='same'))\n    modelo.add(capasEfficientnet)\n\n    modelo.add(Dense(1, activation=\"sigmoid\"))\n    \n    modelo.compile(optimizer = Adam(lr = 0.00005),\n                loss = \"binary_crossentropy\",\n                metrics = [\"acc\"])\n    return modelo\n\nmodelo = crearModelo()\nmodelo.summary()","metadata":{"id":"Cdk1bAhmgKts","outputId":"391d9e2d-24df-4cb4-dff3-15bd45b37aec","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"unaPrueba = Dataset(x_train[:1000])","metadata":{"id":"RyQPLb_0gKtt","outputId":"8907cbba-ec6b-411e-c271-51c7305a640d","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ntrain_history = modelo.fit(\n    unaPrueba,\n    epochs = 1,\n    validation_data = DatasetDeValidacion\n)","metadata":{"id":"giaFsToggKtu","outputId":"30fc3f1e-fbb1-4da8-c01c-64ba75110133","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"DatasetAPredecir = Dataset(test,esEntrenamiento=False)","metadata":{"id":"4rvPuV6ugKtu","outputId":"6f90426d-763b-45bd-c6c2-ba1a6b7a761f","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predicciones = modelo.predict(DatasetAPredecir)\npredicciones = predicciones.reshape(-1)","metadata":{"id":"f6zEM-fbgKtv","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission = pd.DataFrame({'id':datosValidacion['id'],'target':predicciones})\n","metadata":{"id":"J_vyep26gKtv","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission","metadata":{"id":"gjeWGvQ3gKtv","outputId":"d16b26ba-0c13-4ce9-a2bf-34bd0d08b86e","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv('submission.csv',index=False)","metadata":{"id":"GqFsWfVMgKtw","trusted":true},"execution_count":null,"outputs":[]}]}