{"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 -U efficientnet\nfrom efficientnet.tfkeras import EfficientNetB1\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\nimport tensorflow as tf\nfrom sklearn.model_selection import train_test_split\n\n####Spectrogram creators####\nfrom scipy import signal as sig\n!pip install nnAudio\nfrom nnAudio.Spectrogram import CQT1992v2\n############################\n \nimport matplotlib.pyplot as plt\nimport torch\nfrom glob import glob","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-01-29T01:50:40.051666Z","iopub.execute_input":"2022-01-29T01:50:40.052119Z","iopub.status.idle":"2022-01-29T01:51:11.490490Z","shell.execute_reply.started":"2022-01-29T01:50:40.052033Z","shell.execute_reply":"2022-01-29T01:51:11.489335Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"root = '../input/g2net-gravitational-wave-detection/'\nfiles_paths = glob(root + '/train/*/*/*/*')\ntrain_labels = pd.read_csv(root+'/training_labels.csv')\nids_from_files_paths = [path.split('/')[-1].split('.')[0] for path in files_paths]\nids_paths = pd.DataFrame({\n    'id':ids_from_files_paths,\n    'path':files_paths\n})\ntrain_desc = pd.merge(left = train_labels, right = ids_paths, on = 'id')\ndisplay(train_desc)","metadata":{"execution":{"iopub.status.busy":"2022-01-29T01:51:11.493210Z","iopub.execute_input":"2022-01-29T01:51:11.494241Z","iopub.status.idle":"2022-01-29T01:55:09.261529Z","shell.execute_reply.started":"2022-01-29T01:51:11.494172Z","shell.execute_reply":"2022-01-29T01:55:09.260295Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def cqt_1992(data_from_record):\n#     for i in range(3):\n#         data_from_record[i]=data_from_record[i]/np.max(data_from_record)\n    data_combined = np.hstack(data_from_record)\n    data_combined = np.hstack(data_from_record)/np.max(data_from_record)\n    spectrogram_creator = CQT1992v2(\n        sr=2048, hop_length=64, fmin=20, fmax=1024, verbose=False\n    )\n    img = spectrogram_creator(torch.from_numpy(data_combined).float())[0]\n    ret = np.stack([img,img,img],axis = -1)\n    return ret\nfunc = cqt_1992\ndata_from_record = np.load(train_desc.loc[0, 'path'])\nimg = cqt_1992(data_from_record)\ns_w, s_h, s_c = cqt_1992(data_from_record).shape\nprint('s_w:'+str(s_w))\nprint('s_h:'+str(s_h))\nprint('s_c:'+str(s_c))\nplt.imshow(img)","metadata":{"execution":{"iopub.status.busy":"2022-01-29T01:57:52.597184Z","iopub.execute_input":"2022-01-29T01:57:52.597471Z","iopub.status.idle":"2022-01-29T01:57:52.851866Z","shell.execute_reply.started":"2022-01-29T01:57:52.597441Z","shell.execute_reply":"2022-01-29T01:57:52.851240Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# def cqt_comb(data_from_record):\n#     spectrogram_creator = CQT1992v2(\n#         sr=2048, hop_length=64, fmin=20, fmax=1024, \n#         bins_per_octave=12, norm=1, window='hann', center=True, pad_mode='reflect', trainable=False, \n#         output_format='Magnitude', verbose=False\n#     )\n#     img_1 = spectrogram_creator(torch.from_numpy(data_from_record[0]).float())[0]\n#     print(img_1.shape)\n#     img_2 = spectrogram_creator(torch.from_numpy(data_from_record[1]).float())[0]\n#     img_3 = spectrogram_creator(torch.from_numpy(data_from_record[2]).float())[0]\n#     img = torch.stack((img_1, img_2, img_3),0)\n# #     ret = np.stack([img,img,img],axis = -1)\n#     ret = img\n#     return ret\n# func = cqt_comb\n# data_from_record = np.load(train_desc.loc[0, 'path'])\n# img = cqt_comb(data_from_record)\n# print(cqt_comb(data_from_record).shape)\n# print('s_w:'+str(s_w))\n# print('s_h:'+str(s_h))\n# print('s_c:'+str(s_c))\n# plt.figure(figsize=(10, 6), dpi=100)\n# plt.imshow(img)","metadata":{"execution":{"iopub.status.busy":"2022-01-29T01:55:09.887336Z","iopub.execute_input":"2022-01-29T01:55:09.887680Z","iopub.status.idle":"2022-01-29T01:55:09.893627Z","shell.execute_reply.started":"2022-01-29T01:55:09.887648Z","shell.execute_reply":"2022-01-29T01:55:09.892291Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class DataGenerator(tf.keras.utils.Sequence):\n    \n    def __init__(self, path, list_IDs, data, batch_size):\n            self.path = path\n            self.list_IDs = list_IDs\n            self.data = data\n            self.batch_size = batch_size\n            self.indexes = np.arange(len(self.list_IDs))\n    \n    def __len__(self):\n        len_ = int(len(self.list_IDs)/self.batch_size)\n        if len_ * self.batch_size < len(self.list_IDs):\n            len_ += 1\n        return len_\n    \n    def __data_generation(self, list_IDs_temp):\n        X = np.zeros((self.batch_size, s_w, s_h, s_c))\n        y = np.zeros((self.batch_size, 1))\n        for i, ID in enumerate(list_IDs_temp):\n            id_ = self.data.loc[ID, 'id']\n            file = id_+\".npy\"\n            path_in = '/'.join([self.path, id_[0], id_[1], id_[2]]) + '/'\n            data_array = np.load(path_in+file)\n            X[i, ] = func(data_array)\n            y[i, ] = self.data.loc[ID, 'target']\n        return X, y\n    \n    def __getitem__(self, index):\n        indexes = self.indexes[index * self.batch_size : (index+1) * self.batch_size]\n        list_IDs_temp = [self.list_IDs[k] for k in indexes]\n        X, y = self.__data_generation(list_IDs_temp)\n        return X, y","metadata":{"execution":{"iopub.status.busy":"2022-01-29T01:55:09.895883Z","iopub.execute_input":"2022-01-29T01:55:09.896405Z","iopub.status.idle":"2022-01-29T01:55:09.915349Z","shell.execute_reply.started":"2022-01-29T01:55:09.896357Z","shell.execute_reply":"2022-01-29T01:55:09.913976Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_submission = pd.read_csv(root+'/sample_submission.csv')\ntrain_ids = train_labels['id'].values\ny = train_labels['target'].values\ntrain_indices, validation_indices = train_test_split(list(train_labels.index))\nprint(len(train_indices))\nprint(len(validation_indices))\ntrain_gen = DataGenerator(root+'/train/', train_indices, train_labels, 64)\nvalid_gen = DataGenerator(root+'/train/', validation_indices, train_labels, 64)","metadata":{"execution":{"iopub.status.busy":"2022-01-29T01:55:09.917621Z","iopub.execute_input":"2022-01-29T01:55:09.918405Z","iopub.status.idle":"2022-01-29T01:55:10.531662Z","shell.execute_reply.started":"2022-01-29T01:55:09.918350Z","shell.execute_reply":"2022-01-29T01:55:10.530524Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = tf.keras.Sequential()\n# first pair\nmodel.add(tf.keras.layers.Conv2D(filters=16,\n                 kernel_size=3,\n                 input_shape=(s_w, s_h, s_c),\n                 activation='relu',\n))\nmodel.add(tf.keras.layers.MaxPooling2D(pool_size=2))\n# second pair\nmodel.add(tf.keras.layers.Conv2D(filters=32,\n                 kernel_size=3,\n                 input_shape=(s_w, s_h, s_c),\n                 activation='relu',\n))\nmodel.add(tf.keras.layers.MaxPooling2D(pool_size=2))\n# third pair\nmodel.add(tf.keras.layers.Conv2D(filters=64,\n                 kernel_size=3,\n                 input_shape=(s_w, s_h, s_c),\n                 activation='relu',\n))\nmodel.add(tf.keras.layers.MaxPooling2D(pool_size=2))\n\nmodel.add(tf.keras.layers.Flatten())\nmodel.add(tf.keras.layers.Dense(\n    512,\n    activation=\"relu\"\n))\nmodel.add(tf.keras.layers.Dense(\n    128,\n    activation=\"relu\"\n)) \nmodel.add(tf.keras.layers.Dense(\n    32,\n    activation=\"relu\"\n)) \n\nmodel.add(tf.keras.layers.Dense(\n    1,\n    activation=\"sigmoid\"\n))\nmodel.compile(\n    optimizer = tf.keras.optimizers.Adam(learning_rate=2e-4),\n    loss = 'binary_crossentropy',\n    metrics=['accuracy', tf.keras.metrics.TruePositives(), tf.keras.metrics.FalsePositives(), tf.keras.metrics.TrueNegatives(), tf.keras.metrics.FalseNegatives()]\n)\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2022-01-29T01:56:04.344859Z","iopub.execute_input":"2022-01-29T01:56:04.345134Z","iopub.status.idle":"2022-01-29T01:56:04.900090Z","shell.execute_reply.started":"2022-01-29T01:56:04.345104Z","shell.execute_reply":"2022-01-29T01:56:04.899195Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit_generator(generator=train_gen, validation_data=valid_gen, epochs = 1, workers=-1)","metadata":{"execution":{"iopub.status.busy":"2022-01-29T01:58:00.128657Z","iopub.execute_input":"2022-01-29T01:58:00.129453Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.save('/kaggle/working/trained_cnn_2.h5')","metadata":{"execution":{"iopub.status.busy":"2022-01-24T02:31:30.925223Z","iopub.status.idle":"2022-01-24T02:31:30.925572Z","shell.execute_reply.started":"2022-01-24T02:31:30.925398Z","shell.execute_reply":"2022-01-24T02:31:30.925417Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_indices = list(sample_submission.index)\ntest_gen = DataGenerator( root+'/test/', test_indices, sample_submission, 512)\npredicted_test_seq_keras = model.predict_generator(test_gen, verbose=1)\nsample_submission['target'] = predicted_test_seq_keras[:len(sample_submission)]\n\nsample_submission.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-01-24T02:31:30.928325Z","iopub.status.idle":"2022-01-24T02:31:30.932415Z","shell.execute_reply.started":"2022-01-24T02:31:30.932121Z","shell.execute_reply":"2022-01-24T02:31:30.932166Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_submission['target'] = predicted_test_seq_keras[:len(sample_submission)]\n\nsample_submission.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-01-20T03:59:24.634844Z","iopub.execute_input":"2022-01-20T03:59:24.635493Z","iopub.status.idle":"2022-01-20T03:59:25.537074Z","shell.execute_reply.started":"2022-01-20T03:59:24.635433Z","shell.execute_reply":"2022-01-20T03:59:25.536371Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}