{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"!pip uninstall typing -y\n!pip install neptune-client \n!git clone https://github.com/ryanwongsa/kaggle-birdsong-recognition.git\n!pip install audiomentations==0.11.0","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"%load_ext autoreload\n%autoreload 2","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%cd kaggle-birdsong-recognition/src","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Environment Variables\n\nSet these environment variables if you plan on adding slack notifications at the end of training loops or plan on using neptune for logging\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"# %env SLACK_URL=\"\"\n# %env NEPTUNE_API_TOKEN=\"\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%%writefile config_params/example_config.py\nfrom pathlib import Path\nimport torch\nfrom config_params.configs import get_dict_value, BIRD_CODE, INV_EBIRD_LABEL\nimport os\n\nclass Parameters(object):\n    def __init__(self, hparams=None):\n        self.fold = 0\n        self.name = os.path.basename(__file__).replace(\".py\",\"\")\n        \n        self.aug_name = \"secondary_default\"\n        self.apply_mixup = False\n        self.model_name = \"sed_dense121att\"\n\n        self.model_config =  {\n            \"sample_rate\": 32000,\n            \"window_size\": 1024,\n            \"hop_size\": 320,\n            \"mel_bins\": 64,\n            \"fmin\": 50,\n            \"fmax\": 14000,\n            \"classes_num\": 264,\n            \"apply_aug\": True,\n            \"top_db\": None\n        }\n        self.pretrained_path = None\n\n        self.bckgrd_aug_dir = \"../../../input/pinknoise\" \n        self.secondary_bckgrd_aug_dir = \"../../../input/pinknoise\"\n\n        self.optimizer_name = \"adamw\"\n        self.weight_decay = 0.01\n\n        self.criterion_name = \"sed_scaled_pos_neg_focal_loss\"\n        self.criterion_params = {\n            \"gamma\" : 0.0,\n            \"alpha_0\" : 1.0,\n            \"alpha_1\": 1.0,\n            \"secondary_factor\": 1.0\n        }\n        \n\n        self.scheduler_name = \"warmup_with_cosine\"\n        self.lr_scale_factor = 0.01\n        self.lr = 0.001\n\n        self.logger_name = \"print\" # set to \"neptune\" if using neptune logger instead\n        \n        self.PERIOD = 30\n\n        self.train_ds_params = {\n            \"root_dir\": get_dict_value(Path(\"../../../input/\")), # Set to Path(\"data/\") if not using Kaggle Kernel if the data is in data/\n            \"csv_dir\": Path(f\"../../../input/birds5folds/fold_{self.fold}_train.csv\"),\n            \"period\": self.PERIOD,\n            \"bird_code\": BIRD_CODE,\n            \"inv_ebird_label\":INV_EBIRD_LABEL,\n            \"isTraining\": True,\n            \"num_test_samples\": 1,\n        }\n        \n        self.valid_ds_params = {\n            \"root_dir\": get_dict_value(Path(\"../../../input/\")), # Set to Path(\"data/\") if not using Kaggle Kernel if the data is in data/\n            \"csv_dir\": Path(f\"../../../input/birds5folds/fold_{self.fold}_test.csv\"),\n            \"period\": self.PERIOD,\n            \"bird_code\": BIRD_CODE,\n            \"inv_ebird_label\":INV_EBIRD_LABEL,\n            \"background_audio_dir\": None,\n            \"isTraining\": False,\n            \"num_test_samples\": 2,\n        }\n\n        self.test_ds_params = {\n            \"root_dir\": get_dict_value(Path(\"../../../input/\")), # Set to Path(\"data/\") if not using Kaggle Kernel if the data is in data/\n            \"csv_dir\": Path(f\"../../../input/birds5folds/fold_{self.fold}_test.csv\"),\n            \"background_audio_dir\":  None,\n            \"period\": self.PERIOD,\n            \"bird_code\": BIRD_CODE,\n            \"inv_ebird_label\":INV_EBIRD_LABEL,\n            \"isTraining\": False,\n            \"num_test_samples\": 2,\n        }\n\n        self.checkpoint_params = {\n            \"save_dir\":f\"../../saved_models/{self.name}\", # Path to save the checkpoints\n            \"n_saved\":2,\n            \"prefix_name\":self.name,\n        }\n        \n        self.train_bs = 28\n        self.train_num_workers = 2 # changed to 2 workers\n        self.valid_bs = 32\n        self.valid_num_workers = 1 # changed to 1 workers\n        self.metrics = [\"lraps\", \"f1score_clip\", \"f1score_frame\"]\n        \n        self.track_metric = \"f1score_clip\"\n        self.metric_factor = 1\n        \n        self.checkpoint_dir = None\n        self.add_pbar = True\n        \n        self.run_params = {\n            \"max_epochs\": 50,\n            \"epoch_length\": None\n        }\n        \n        self.logger_params = {\n            \"project_name\": \"bird-song\",\n            \"log_every\": 10,\n            \"name\": self.name,\n            \"prefix_name\": f\"{self.name}_best\",\n            \"tags\": [self.fold, self.name, self.model_name, self.criterion_name],\n            \"params\": {\n                \"bs\": self.train_bs,\n                \"lr\": self.lr,\n                \"name\": self.name,\n                \"aug_name\": self.aug_name,\n                \"model_name\": self.model_name,\n                \"weight_decay\": self.weight_decay,\n                \"apply_mixup\": self.apply_mixup,\n                \"optimizer_name\": self.optimizer_name,\n                \"criterion_name\": self.criterion_name,\n                \"scheduler_name\": self.scheduler_name,\n                \"fold\": self.fold,\n                \"lr_scale_factor\": self.lr_scale_factor,\n                \"period\": self.PERIOD,\n                **self.model_config,\n                **self.criterion_params\n            }\n        }\n        \n        self.dist_params = {\n        }\n\n        self.val_length = None \n        self.eval_every = 2 # Validates every 2 epochs\n        self.load_model_only = True\n        self.accumulation_steps = 1\n        self.gradient_clip_val = 0","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!python sed_train.py --config \"config_params.example_config\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!ls ../../saved_models/example_config","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}