{"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":"markdown","source":"# G2Net Gravitational Wave Detection with FastAI","metadata":{}},{"cell_type":"markdown","source":"## Initialize and Load Files","metadata":{}},{"cell_type":"code","source":"from fastai.vision.all import *","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"path = Path(\"./\")\npath.ls()\nPath.BASE_PATH = path","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"files = get_image_files(path/'traincqt')\nlen(files)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Data was pre-processed as CQT","metadata":{}},{"cell_type":"code","source":"labels = pd.read_csv(path/'training_labels.csv')\nlabels['id'] = labels['id'].map(lambda x : f'{path}/traincqt/{x}.png' )\nlabels.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Helper Functions for FastAI DataBlock","metadata":{}},{"cell_type":"code","source":"def getx(df):\n    return df['id']\n\ndef gety(df):\n    return df['target']","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def custom_splitter(train_pct):\n    def fn(name_list):\n        train_idx, valid_idx = RandomSplitter(valid_pct=0.3, seed=42)(name_list)\n        np.random.shuffle(train_idx)\n        train_len = int(len(train_idx) * train_pct)\n        np.random.shuffle(valid_idx)\n        valid_len = int(len(valid_idx) * train_pct)\n        return train_idx[0:train_len], valid_idx[0:valid_len]\n    return fn","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def build_data(df, bs=32, train_pct=.05):\n    grav = DataBlock(blocks = (ImageBlock,CategoryBlock),\n                 get_x  = getx,\n                 get_y  = gety,\n                 splitter = custom_splitter(train_pct),\n                 #item_tfms = Resize(460),\n                 batch_tfms = [*aug_transforms(do_flip=False, max_rotate=0),\n                               Normalize.from_stats(*imagenet_stats)]) #, \n                #splitter=RandomSplitter(valid_pct=0.3, seed=42))\n    grav.summary(df)\n    return grav.dataloaders(df, bs=bs)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Build DataBlock and show batch","metadata":{}},{"cell_type":"code","source":"dls = build_data(labels, train_pct=1)\ndls.show_batch()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Make Learner, Find Good Learning Rate","metadata":{}},{"cell_type":"code","source":"learn = cnn_learner(dls, resnet34, metrics=RocAucBinary(), cbs=[SaveModelCallback(with_opt=True)])\nlearn.lr_find()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Fine Tune","metadata":{}},{"cell_type":"code","source":"learn.fine_tune(4, base_lr=6e-5)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Save Model and Create Submission Output","metadata":{}},{"cell_type":"code","source":"save_model(path/'models/modelwithaug', learn, learn.opt)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample = pd.read_csv(path/'sample_submission.csv')\nsampledf = sample.copy()\nsampledf['id'] = sampledf['id'].map(lambda x: f'{path}/testcqt/{x}.png')\nsampledf","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_dl = dls.test_dl(sampledf)\npreds, _ = learn.get_preds(dl=test_dl)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample.target = np.array(preds[:,1])\nsample.to_csv('submission8.csv', index=False)\nsample.head()","metadata":{},"execution_count":null,"outputs":[]}]}