{"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 nnAudio --quiet","metadata":{"execution":{"iopub.status.busy":"2022-07-28T07:12:11.249683Z","iopub.execute_input":"2022-07-28T07:12:11.250111Z","iopub.status.idle":"2022-07-28T07:12:22.610314Z","shell.execute_reply.started":"2022-07-28T07:12:11.250026Z","shell.execute_reply":"2022-07-28T07:12:22.609020Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Importing library and load data","metadata":{}},{"cell_type":"code","source":"import warnings\nwarnings.filterwarnings('ignore')\n\nfrom glob import glob\nfrom random import shuffle\n\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport torch\n\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras.applications import EfficientNetB0\nfrom tensorflow.keras.layers import Dense, Dropout, Input, BatchNormalization, Flatten\nfrom tensorflow.keras.layers import Conv2D, MaxPooling2D, Reshape, concatenate, Lambda\nfrom tensorflow.keras.models import load_model, Model\nfrom tensorflow.keras.callbacks import ReduceLROnPlateau\nfrom tensorflow.keras.optimizers import SGD\nfrom tensorflow.keras.layers.experimental.preprocessing import Resizing\nfrom tensorflow.keras import regularizers\n\nfrom torch.utils import data as torch_data\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import accuracy_score, confusion_matrix\n\nfrom nnAudio.Spectrogram import CQT1992v2","metadata":{"execution":{"iopub.status.busy":"2022-07-28T07:13:37.281800Z","iopub.execute_input":"2022-07-28T07:13:37.282185Z","iopub.status.idle":"2022-07-28T07:13:44.864947Z","shell.execute_reply.started":"2022-07-28T07:13:37.282130Z","shell.execute_reply":"2022-07-28T07:13:44.863849Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Compile all function","metadata":{}},{"cell_type":"code","source":"#Hyperparameter\nbatch_size = 64\nepoch = 3\n\n#Fixed value\ninp_shape = (69, 129, 3)\nbatch_inp_shape = (batch_size, 69, 129, 3)","metadata":{"execution":{"iopub.status.busy":"2022-07-28T07:40:55.269859Z","iopub.execute_input":"2022-07-28T07:40:55.270692Z","iopub.status.idle":"2022-07-28T07:40:55.275044Z","shell.execute_reply.started":"2022-07-28T07:40:55.270648Z","shell.execute_reply":"2022-07-28T07:40:55.274294Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def merge_data_label(train_label_dataset, train_path):\n\n    ids = []\n    for files in train_path:\n        ids.append(files[files.rindex('/')+1:].replace('.npy',''))\n    df = pd.DataFrame({\"id\":ids,\"path\":train_path})\n    df = pd.merge(df, train_label_dataset, on='id')\n\n    return df\n\ndef get_npy_filepath(id_, is_train=True):\n   \n    if is_train:\n        return f'../input/g2net-gravitational-wave-detection/train/{id_[0]}/{id_[1]}/{id_[2]}/{id_}.npy'\n    else:\n        return f'../input/g2net-gravitational-wave-detection/test/{id_[0]}/{id_[1]}/{id_[2]}/{id_}.npy'\n\n# CQT\ndef transform(signal):\n    transform = CQT1992v2(  sr=2048,        # sample rate\n                            fmin=20,        # min freq\n                            fmax=1024,       # max freq\n                            hop_length=32,  # hop length\n                            verbose=False)\n    return transform(signal)\n\n# raw preprocess function\ndef preprocess_function_raw(path):\n    signal = np.load(path.numpy())\n    for i in range(3):\n        signal[i] = signal[i]/np.max(signal[i])\n    superpose=[]\n    for sample in signal:\n        superpose = np.add(sample, sample, sample)\n        \n    return superpose\n\n#NO STACKING\ndef preprocess_function_cqt(path):\n    signal = np.load(path.numpy())\n    images= []\n    for i in range(signal.shape[0]):               # there are 3 signal as explained before for each interferometers\n        wave = signal[i]/ np.max(signal[i])                # normalize signal   \n        wave = torch.from_numpy(wave).float()  # tensor conversion\n        image = transform(wave)                  # getting the image from CQT transform\n        image = np.array(image)                    # converting to array from tensor\n        images.append(image)\n    images = np.transpose(images,(1, 2, 3,0))        # transpose the image to get right orientation \n    return tf.convert_to_tensor(images[0])             # conver the image to tf.tensor and return\n\n\ndef preprocess_data(path, y=None):\n\n    [x] = tf.py_function(func=preprocess_function_cqt, inp=[path], Tout=[tf.float32])\n    x = tf.ensure_shape(x, inp_shape)\n    if y is None:\n        return x\n    else:\n        return x, y\n    ","metadata":{"execution":{"iopub.status.busy":"2022-07-28T07:37:57.962466Z","iopub.execute_input":"2022-07-28T07:37:57.963177Z","iopub.status.idle":"2022-07-28T07:37:57.978240Z","shell.execute_reply.started":"2022-07-28T07:37:57.963118Z","shell.execute_reply":"2022-07-28T07:37:57.975998Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def prepare_test_data(batch_size):\n    sub = pd.read_csv('../input/g2net-gravitational-wave-detection/sample_submission.csv')\n    test_id = sub[['id']]\n\n    # test dataset\n    test_dataset = tf.data.Dataset.from_tensor_slices((test_id['id'].apply(get_npy_filepath, is_train=False).values))\n    test_dataset = test_dataset.map(preprocess_data, num_parallel_calls=tf.data.AUTOTUNE)\n    test_dataset = test_dataset.batch(batch_size)\n    test_dataset = test_dataset.prefetch(tf.data.AUTOTUNE)\n    return test_dataset, test_id","metadata":{"execution":{"iopub.status.busy":"2022-07-28T07:38:48.828258Z","iopub.execute_input":"2022-07-28T07:38:48.828623Z","iopub.status.idle":"2022-07-28T07:38:48.835411Z","shell.execute_reply.started":"2022-07-28T07:38:48.828591Z","shell.execute_reply":"2022-07-28T07:38:48.834633Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = tf.keras.models.load_model('../input/model5-d1/EfficientNetB0_4.h5')\nmodel.summary()\nkeras.utils.plot_model(model, \"efn_stacked.png\")","metadata":{"execution":{"iopub.status.busy":"2022-07-28T07:39:27.576832Z","iopub.execute_input":"2022-07-28T07:39:27.577193Z","iopub.status.idle":"2022-07-28T07:39:37.658088Z","shell.execute_reply.started":"2022-07-28T07:39:27.577160Z","shell.execute_reply":"2022-07-28T07:39:37.657056Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Final test","metadata":{}},{"cell_type":"code","source":"final_test, test_label = prepare_test_data(batch_size)","metadata":{"execution":{"iopub.status.busy":"2022-07-28T08:03:05.265916Z","iopub.execute_input":"2022-07-28T08:03:05.266293Z","iopub.status.idle":"2022-07-28T08:03:05.778714Z","shell.execute_reply.started":"2022-07-28T08:03:05.266262Z","shell.execute_reply":"2022-07-28T08:03:05.777901Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"final_test","metadata":{"execution":{"iopub.status.busy":"2022-07-28T08:03:28.294232Z","iopub.execute_input":"2022-07-28T08:03:28.294596Z","iopub.status.idle":"2022-07-28T08:03:28.302384Z","shell.execute_reply.started":"2022-07-28T08:03:28.294566Z","shell.execute_reply":"2022-07-28T08:03:28.300553Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_label.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-28T08:03:30.864131Z","iopub.execute_input":"2022-07-28T08:03:30.864498Z","iopub.status.idle":"2022-07-28T08:03:30.877245Z","shell.execute_reply.started":"2022-07-28T08:03:30.864469Z","shell.execute_reply":"2022-07-28T08:03:30.876031Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction = model.predict(final_test)","metadata":{"execution":{"iopub.status.busy":"2022-07-28T08:04:14.719506Z","iopub.execute_input":"2022-07-28T08:04:14.720068Z","iopub.status.idle":"2022-07-28T08:04:47.112328Z","shell.execute_reply.started":"2022-07-28T08:04:14.720021Z","shell.execute_reply":"2022-07-28T08:04:47.102185Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction = prediction.flatten()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission = pd.DataFrame({'id': test_label.id, 'target': prediction})\nsubmission.to_csv('./submission_stacked.csv', index= False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(submission.shape)","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}