{"metadata":{"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":59093,"databundleVersionId":7469972,"sourceType":"competition"},{"sourceId":8023050,"sourceType":"datasetVersion","datasetId":4727914}],"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.12"},"papermill":{"default_parameters":{},"duration":67.97028,"end_time":"2024-04-10T22:26:01.564753","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2024-04-10T22:24:53.594473","version":"2.4.0"},"widgets":{"application/vnd.jupyter.widget-state+json":{"state":{"0312c8fcd63c4ec5939620e20cf3f52d":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"04ce395cc4834e0aa53a9d1190fc933d":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_60dc2e0403d1453aba1e31c98719a61f","IPY_MODEL_bcc177358c684b4383f363513f5e534b","IPY_MODEL_146a0d95ba004deea05c894e898c5443"],"layout":"IPY_MODEL_0312c8fcd63c4ec5939620e20cf3f52d"}},"069adac5a2834a16ac043febf17f35b1":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"0af680dabc0c4296b3a502f386c00e6f":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_277601be7bce4c44a485f0f600f05a89","placeholder":"​","style":"IPY_MODEL_bada01d8b0944b0c90c00d77a7f5fce1","value":"100%"}},"146a0d95ba004deea05c894e898c5443":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_ad53353677714a078d8360593bda118e","placeholder":"​","style":"IPY_MODEL_371a84b9b5e44442a07aa19aecca55fe","value":" 1/1 [00:02&lt;00:00,  2.32s/it]"}},"19c97c3156cc4341bfd17b9cbfc41077":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_c11de325bfd64d598db874561fd73e9f","IPY_MODEL_8a4fa5525724435ca0f3e187241f6a42","IPY_MODEL_dac3cc7f574b42b1b2922b2fb447889e"],"layout":"IPY_MODEL_285797a7f7684ca799053ef112fae25c"}},"1b34b674dabb4d1f8f569e6e08f8a805":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"210c8c45a3824f998a979930a8c0046f":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_bfec0a5a42f04661b30e1eab61db2263","max":1,"min":0,"orientation":"horizontal","style":"IPY_MODEL_fd6bb4afa26d4c4fb47c1183b127b2ac","value":1}},"2280a00b3b3c4ec7b683018a70e7c669":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_1b34b674dabb4d1f8f569e6e08f8a805","placeholder":"​","style":"IPY_MODEL_f0cb2849021d424b922903a67965bf32","value":"100%"}},"277601be7bce4c44a485f0f600f05a89":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"285797a7f7684ca799053ef112fae25c":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"28ed4dba27a042e5bcccfe55cc2e453f":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"2b0b75e585be409a81317e05764a173c":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"317adc0e562c487a92904caf205ce468":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"3364bb44f0f54efa95320996aa19cc8e":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"33aa153675a341f0b79b843d6360fefb":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"371a84b9b5e44442a07aa19aecca55fe":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"38bd76d9e8564053b6660dae77c88d52":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_8034417fa7d843c784584427e0a0b3a8","placeholder":"​","style":"IPY_MODEL_5ff24d51407b4e8e95420e303355ab7e","value":" 1/1 [00:00&lt;00:00,  1.73it/s]"}},"47d4c63832da48678b610e1862a56c21":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"58bb5e0dd2304ad495e9e2fe7c1c952d":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"5ff24d51407b4e8e95420e303355ab7e":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"60dc2e0403d1453aba1e31c98719a61f":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_74d97326ea264a2b988359081d2d295c","placeholder":"​","style":"IPY_MODEL_317adc0e562c487a92904caf205ce468","value":"100%"}},"640f0668e59044cfad88a31b2bc5da27":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_069adac5a2834a16ac043febf17f35b1","placeholder":"​","style":"IPY_MODEL_58bb5e0dd2304ad495e9e2fe7c1c952d","value":" 1/1 [00:00&lt;00:00,  1.71it/s]"}},"73ede56e133548e3bd83096adad19638":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"74d97326ea264a2b988359081d2d295c":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"79c890e249034684b653cbcfb23083c7":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"7db3512501d744ca8b8d2e775aea63ab":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"8034417fa7d843c784584427e0a0b3a8":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"885c58275fc24162bf139e9bf15f4d23":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"89744d9cdb044716849875e073255ee4":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"8a4fa5525724435ca0f3e187241f6a42":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_e3300618ddfd4d45872c2c4498e544fb","max":1,"min":0,"orientation":"horizontal","style":"IPY_MODEL_73ede56e133548e3bd83096adad19638","value":1}},"90144606a3b7438aa43ad8bd961f5f59":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_0af680dabc0c4296b3a502f386c00e6f","IPY_MODEL_e7e0dfdeacdf4719b922a39775149f0f","IPY_MODEL_38bd76d9e8564053b6660dae77c88d52"],"layout":"IPY_MODEL_dadf2f79a67d4c88bcb07c4857661f70"}},"9156b8efc0d343c2b1b791889649dae3":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_b5b19944d4034793b3d960e4ef5db0c8","placeholder":"​","style":"IPY_MODEL_c972cf2d099f4df4a2ee144386096105","value":"100%"}},"9f111249f7084d8580e52c0d2a05c88d":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"a15e3dc00bee421c8d816948a4ba4f77":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"ad1e753bc823427e997f0cfda2db4578":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"ad53353677714a078d8360593bda118e":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"b5b19944d4034793b3d960e4ef5db0c8":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"bada01d8b0944b0c90c00d77a7f5fce1":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"bbff7a89d1b043f7ac734e2e36d41af0":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_d536f5b472c24ef0bfadfc44bdd8c68d","placeholder":"​","style":"IPY_MODEL_885c58275fc24162bf139e9bf15f4d23","value":" 1/1 [00:00&lt;00:00,  1.68it/s]"}},"bcc177358c684b4383f363513f5e534b":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_79c890e249034684b653cbcfb23083c7","max":1,"min":0,"orientation":"horizontal","style":"IPY_MODEL_28ed4dba27a042e5bcccfe55cc2e453f","value":1}},"bfec0a5a42f04661b30e1eab61db2263":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"c11de325bfd64d598db874561fd73e9f":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_ad1e753bc823427e997f0cfda2db4578","placeholder":"​","style":"IPY_MODEL_c7305c78c9924d1b8c3c88ab1fd928de","value":"100%"}},"c7305c78c9924d1b8c3c88ab1fd928de":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"c972cf2d099f4df4a2ee144386096105":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"cfe623c44cf8415092a309d9c6b0a076":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_2280a00b3b3c4ec7b683018a70e7c669","IPY_MODEL_ee68ae39bc6945c0a0636ee7477d380c","IPY_MODEL_bbff7a89d1b043f7ac734e2e36d41af0"],"layout":"IPY_MODEL_47d4c63832da48678b610e1862a56c21"}},"d426518871f8428fb5f92436f03fa8c4":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_9156b8efc0d343c2b1b791889649dae3","IPY_MODEL_210c8c45a3824f998a979930a8c0046f","IPY_MODEL_640f0668e59044cfad88a31b2bc5da27"],"layout":"IPY_MODEL_9f111249f7084d8580e52c0d2a05c88d"}},"d536f5b472c24ef0bfadfc44bdd8c68d":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"dac3cc7f574b42b1b2922b2fb447889e":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_33aa153675a341f0b79b843d6360fefb","placeholder":"​","style":"IPY_MODEL_89744d9cdb044716849875e073255ee4","value":" 1/1 [00:00&lt;00:00,  1.70it/s]"}},"dadf2f79a67d4c88bcb07c4857661f70":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"e3300618ddfd4d45872c2c4498e544fb":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"e7e0dfdeacdf4719b922a39775149f0f":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_2b0b75e585be409a81317e05764a173c","max":1,"min":0,"orientation":"horizontal","style":"IPY_MODEL_a15e3dc00bee421c8d816948a4ba4f77","value":1}},"ee68ae39bc6945c0a0636ee7477d380c":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_7db3512501d744ca8b8d2e775aea63ab","max":1,"min":0,"orientation":"horizontal","style":"IPY_MODEL_3364bb44f0f54efa95320996aa19cc8e","value":1}},"f0cb2849021d424b922903a67965bf32":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"fd6bb4afa26d4c4fb47c1183b127b2ac":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}}},"version_major":2,"version_minor":0}}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Single Model Gold Solution\nThis notebook is the inference for my `single model gold` solution in Kaggle's Brain comp. This **single** model achieves **14th place Gold** with:\n\n# 🎉 CV = 0.246, Public LB = 0.243, Private LB = 0.290 🎉\n\n.\n\nMy final solution is an ensemble of this model with some other models to achieve **8th place Gold** (with Private LB = 0.285). The discussion for this model is [here][1]. This inference code is based on Tawara PyTorch inference notebook [here][2]\n\n[1]: https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/492482\n[2]: https://www.kaggle.com/code/ttahara/hms-hbac-resnet34d-baseline-inference","metadata":{"papermill":{"duration":0.018344,"end_time":"2024-04-10T22:24:57.269074","exception":false,"start_time":"2024-04-10T22:24:57.250730","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"# Preprocess EEG Parquets with Filters\nThis code is based on the competition host's GitHub [here][1]\n\n[1]: https://github.com/bdsp-core/IIIC-SPaRCNet/blob/09081b1698dce8e15b7944283079a38e4bf38dd5/SPaRCNet/runSPaRCNet.py#L235","metadata":{"papermill":{"duration":0.017561,"end_time":"2024-04-10T22:24:57.304497","exception":false,"start_time":"2024-04-10T22:24:57.286936","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import pandas as pd, numpy as np\nimport matplotlib.pyplot as plt\nimport matplotlib\n\n# LOAD TEST DATA\ntest = pd.read_csv('/kaggle/input/hms-harmful-brain-activity-classification/test.csv')\nif len(test)>1: matplotlib.use('Agg') # PREVENT MEMORY ERROR FOR SUBMIT\nprint('Test shape',test.shape)\ntest.head()\n\n# WORKERS=0 USES GPU SPECTROGRAMS AND WORKERS>0 USES CPU SPECTROGRAMS\nWORKERS = 4","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:24:57.341473Z","iopub.status.busy":"2024-04-10T22:24:57.341159Z","iopub.status.idle":"2024-04-10T22:24:58.174697Z","shell.execute_reply":"2024-04-10T22:24:58.173720Z"},"papermill":{"duration":0.854239,"end_time":"2024-04-10T22:24:58.176842","exception":false,"start_time":"2024-04-10T22:24:57.322603","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import warnings\nwarnings.filterwarnings('ignore')\nfrom mne.filter import filter_data, notch_filter\n\nPATH = '/kaggle/input/hms-harmful-brain-activity-classification/test_eegs/'\nall_eegs = {}\nprint(f'Processing {test.eeg_id.nunique()} eeg id...')\n\nfor i,eeg_id in enumerate(test.eeg_id.unique()):\n    #if i%100==0: print(i,', ',end='')\n        \n    data = pd.read_parquet(f'{PATH}{eeg_id}.parquet').values[:,:19]\n    \n    sample = data.T[[0,4,5,6, 11,15,16,17, 0,1,2,3, 11,12,13,14]]\\\n             - data.T[[4,5,6,7, 15,16,17,18, 1,2,3,7, 12,13,14,18]]\n    sample = notch_filter(sample.astype('float64'), 200, 60, n_jobs=-1, verbose='ERROR')\n    sample = filter_data(sample.astype('float64'), 200, 0.5, 40, n_jobs=-1, verbose='ERROR') \n    sample = np.clip(sample,-500,500)\n    sample = np.nan_to_num(sample, nan=0)\n\n    if (i==0):\n        plt.figure(figsize=(20,10))\n        d = 0\n        for kk in range(16):\n            plt.plot(np.arange(10_000),sample[kk,]+d)\n            d += np.max(sample[kk,])\n        plt.title('Filtered 16 Montage Channels of Raw EEG',size=18)\n        plt.show()\n\n    all_eegs[eeg_id] = sample","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:24:58.215097Z","iopub.status.busy":"2024-04-10T22:24:58.214834Z","iopub.status.idle":"2024-04-10T22:25:02.991705Z","shell.execute_reply":"2024-04-10T22:25:02.990748Z"},"papermill":{"duration":4.804309,"end_time":"2024-04-10T22:25:02.999736","exception":false,"start_time":"2024-04-10T22:24:58.195427","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Read Test Data","metadata":{"papermill":{"duration":0.029001,"end_time":"2024-04-10T22:25:03.059347","exception":false,"start_time":"2024-04-10T22:25:03.030346","status":"completed"},"tags":[]}},{"cell_type":"code","source":"N_FOLDS=5\nCLASSES = [\"seizure_vote\", \"lpd_vote\", \"gpd_vote\", \"lrda_vote\", \"grda_vote\", \"other_vote\"]\ntest = pd.read_csv(\"/kaggle/input/hms-harmful-brain-activity-classification/test.csv\")\ntest.head()","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:25:03.119498Z","iopub.status.busy":"2024-04-10T22:25:03.119142Z","iopub.status.idle":"2024-04-10T22:25:03.134117Z","shell.execute_reply":"2024-04-10T22:25:03.133246Z"},"papermill":{"duration":0.047389,"end_time":"2024-04-10T22:25:03.136033","exception":false,"start_time":"2024-04-10T22:25:03.088644","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Define Models\nThe design of my `Mega Model` is motivated by what the annotators see to make their predictions. The annotators see 2D Spectrograms and 2D Plots of the EEG waveforms as described in hosts' paper [here][1]\n\n[1]: https://github.com/bdsp-core/IIIC-SPaRCNet/blob/main/IIIC_Classification-Supplemental.pdf","metadata":{"papermill":{"duration":0.028715,"end_time":"2024-04-10T22:25:03.194603","exception":false,"start_time":"2024-04-10T22:25:03.165888","status":"completed"},"tags":[]}},{"cell_type":"code","source":"from torch import nn\nimport timm\nprint('timm version',timm.__version__)","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:25:03.254685Z","iopub.status.busy":"2024-04-10T22:25:03.254334Z","iopub.status.idle":"2024-04-10T22:25:09.338796Z","shell.execute_reply":"2024-04-10T22:25:09.337802Z"},"papermill":{"duration":6.117117,"end_time":"2024-04-10T22:25:09.340973","exception":false,"start_time":"2024-04-10T22:25:03.223856","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 2D-Image Model\n\n![](https://raw.githubusercontent.com/cdeotte/Kaggle_Images/main/Apr-2024/single1.png)","metadata":{"papermill":{"duration":0.029718,"end_time":"2024-04-10T22:25:09.402187","exception":false,"start_time":"2024-04-10T22:25:09.372469","status":"completed"},"tags":[]}},{"cell_type":"code","source":"class HMSHBACSpecModel(nn.Module):\n\n    def __init__(\n            self,\n            model_name: str,\n            pretrained: bool,\n            in_channels: int,\n            num_classes: int,\n        ):\n        super().__init__()\n        self.model = timm.create_model(\n            model_name=model_name, pretrained=pretrained,\n            num_classes=num_classes, in_chans=in_channels)\n\n    def forward(self, x):\n        h = self.model(x)      \n\n        return h\n    \n    def reset_classifier(self):\n        self.model.reset_classifier(0)","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:25:09.464805Z","iopub.status.busy":"2024-04-10T22:25:09.463818Z","iopub.status.idle":"2024-04-10T22:25:09.470563Z","shell.execute_reply":"2024-04-10T22:25:09.469668Z"},"papermill":{"duration":0.040556,"end_time":"2024-04-10T22:25:09.472532","exception":false,"start_time":"2024-04-10T22:25:09.431976","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 1D-EegNet Model\nThis is Nischay's 1D-EegNet model from [here][1]\n\n![](https://raw.githubusercontent.com/cdeotte/Kaggle_Images/main/Apr-2024/single2.png)\n\n[1]: https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/471666","metadata":{"papermill":{"duration":0.029661,"end_time":"2024-04-10T22:25:09.573352","exception":false,"start_time":"2024-04-10T22:25:09.543691","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import torch\nimport torch.nn as nn\n\n\nclass ResNet_1D_Block(nn.Module):\n\n    def __init__(self, in_channels, out_channels, kernel_size, stride, padding, downsampling):\n        super(ResNet_1D_Block, self).__init__()\n        self.bn1 = nn.BatchNorm1d(num_features=in_channels)\n        self.relu = nn.ReLU(inplace=False)\n        self.dropout = nn.Dropout(p=0.0, inplace=False)\n        self.conv1 = nn.Conv1d(in_channels=in_channels, out_channels=out_channels, kernel_size=kernel_size,\n                               stride=stride, padding=padding, bias=False)\n        self.bn2 = nn.BatchNorm1d(num_features=out_channels)\n        self.conv2 = nn.Conv1d(in_channels=out_channels, out_channels=out_channels, kernel_size=kernel_size,\n                               stride=stride, padding=padding, bias=False)\n        self.maxpool = nn.MaxPool1d(kernel_size=2, stride=2, padding=0)\n        self.downsampling = downsampling\n\n    def forward(self, x):\n        identity = x\n\n        out = self.bn1(x)\n        out = self.relu(out)\n        out = self.dropout(out)\n        out = self.conv1(out)\n        out = self.bn2(out)\n        out = self.relu(out)\n        out = self.dropout(out)\n        out = self.conv2(out)\n\n        out = self.maxpool(out)\n        identity = self.downsampling(x)\n\n        out += identity\n        return out\n\n\nclass EEGNet(nn.Module):\n\n    def __init__(self, kernels, in_channels=20, fixed_kernel_size=17, num_classes=6):\n        super(EEGNet, self).__init__()\n        self.kernels = kernels\n        self.planes = 24\n        self.parallel_conv = nn.ModuleList()\n        self.in_channels = in_channels\n        self.is_reset = False\n        \n        for i, kernel_size in enumerate(list(self.kernels)):\n            sep_conv = nn.Conv1d(in_channels=in_channels, out_channels=self.planes, kernel_size=(kernel_size),\n                               stride=1, padding=0, bias=False,)\n            self.parallel_conv.append(sep_conv)\n\n        self.bn1 = nn.BatchNorm1d(num_features=self.planes)\n        self.relu = nn.ReLU(inplace=False)\n        self.conv1 = nn.Conv1d(in_channels=self.planes, out_channels=self.planes, kernel_size=fixed_kernel_size,\n                               stride=2, padding=2, bias=False)\n        self.block = self._make_resnet_layer(kernel_size=fixed_kernel_size, stride=1, padding=fixed_kernel_size//2)\n        self.bn2 = nn.BatchNorm1d(num_features=self.planes)\n        self.avgpool = nn.AvgPool1d(kernel_size=6, stride=6, padding=2)\n        self.rnn = nn.GRU(input_size=self.in_channels, hidden_size=128, num_layers=1, bidirectional=True)\n        self.fc = nn.Linear(in_features=424, out_features=num_classes)\n        self.rnn1 = nn.GRU(input_size=156, hidden_size=156, num_layers=1, bidirectional=True)\n\n    def _make_resnet_layer(self, kernel_size, stride, blocks=9, padding=0):\n        layers = []\n        downsample = None\n        base_width = self.planes\n\n        for i in range(blocks):\n            downsampling = nn.Sequential(\n                    nn.MaxPool1d(kernel_size=2, stride=2, padding=0)\n                )\n            layers.append(ResNet_1D_Block(in_channels=self.planes, out_channels=self.planes, kernel_size=kernel_size,\n                                       stride=stride, padding=padding, downsampling=downsampling))\n\n        return nn.Sequential(*layers)\n\n    def forward(self, x):\n        out_sep = []\n\n        for i in range(len(self.kernels)):\n            sep = self.parallel_conv[i](x)\n            out_sep.append(sep)\n\n        out = torch.cat(out_sep, dim=2)\n        out = self.bn1(out)\n        out = self.relu(out)\n        out = self.conv1(out)  \n\n        out = self.block(out)\n        out = self.bn2(out)\n        out = self.relu(out)\n        out = self.avgpool(out)  \n        \n        out = out.reshape(out.shape[0], -1)  \n\n        rnn_out, _ = self.rnn(x.permute(0,2, 1))\n        new_rnn_h = rnn_out[:, -1, :]  \n\n        new_out = torch.cat([out, new_rnn_h], dim=1)  \n        \n        if not self.is_reset:\n            result = self.fc(new_out)  \n        else:\n            result = new_out\n\n        return result\n    \n    def reset_classifier(self):\n        self.is_reset = True","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:25:09.633010Z","iopub.status.busy":"2024-04-10T22:25:09.632652Z","iopub.status.idle":"2024-04-10T22:25:09.655702Z","shell.execute_reply":"2024-04-10T22:25:09.654776Z"},"papermill":{"duration":0.055285,"end_time":"2024-04-10T22:25:09.657595","exception":false,"start_time":"2024-04-10T22:25:09.602310","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Mega Model\n\n![](https://raw.githubusercontent.com/cdeotte/Kaggle_Images/main/Apr-2024/mega_model.png)","metadata":{"papermill":{"duration":0.033189,"end_time":"2024-04-10T22:25:09.721116","exception":false,"start_time":"2024-04-10T22:25:09.687927","status":"completed"},"tags":[]}},{"cell_type":"code","source":"class MultiModel(nn.Module):\n\n    def __init__(\n            self\n        ):\n        super().__init__()\n        \n        self.model1 =  HMSHBACSpecModel(model_name=\"tiny_vit_21m_512\", pretrained=False, in_channels=1, num_classes=6)\n        self.model1.reset_classifier()\n        \n        self.model2 = EEGNet(kernels=[3,5,7,9], in_channels=16, fixed_kernel_size=5, num_classes=6)\n        self.model2.reset_classifier()\n        \n        self.model3 =  HMSHBACSpecModel(model_name=\"tiny_vit_21m_224\", pretrained=False, in_channels=3, num_classes=6)\n        self.model3.reset_classifier()\n        \n        self.fc = nn.Linear(in_features=1576, out_features=6)\n        \n    def forward(self, x):\n        o1 = self.model1(x['m1']) # batch x 576\n        o2 = self.model2(x['m2']) # batch x 424\n        o3 = self.model3(x['m3']) # batch x 576\n        x = torch.cat([o1,o2,o3],axis=-1)\n        h = self.fc(x)\n\n        return h","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:25:09.796256Z","iopub.status.busy":"2024-04-10T22:25:09.795802Z","iopub.status.idle":"2024-04-10T22:25:09.804016Z","shell.execute_reply":"2024-04-10T22:25:09.803124Z"},"papermill":{"duration":0.043914,"end_time":"2024-04-10T22:25:09.806056","exception":false,"start_time":"2024-04-10T22:25:09.762142","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Data Loader\nWe create spectrograms inside our data loader. This allows us to perform data augmentation on the raw waveforms **before** creating spectrograms. We can also perform data augmentation on the spectrograms **afterward** too.\n\nExamples of what the data loader outputs are shown below in the \"Infer Test Data\" section.","metadata":{"papermill":{"duration":0.037716,"end_time":"2024-04-10T22:25:09.875092","exception":false,"start_time":"2024-04-10T22:25:09.837376","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import torch, gc\nimport torchaudio.transforms as T\nimport numpy as np, cv2\nimport typing as tp\nfrom pathlib import Path\nfrom io import BytesIO\nimport albumentations as A\nfrom albumentations.pytorch import ToTensorV2\nfrom tqdm.notebook import tqdm","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:25:09.951358Z","iopub.status.busy":"2024-04-10T22:25:09.951051Z","iopub.status.idle":"2024-04-10T22:25:11.627348Z","shell.execute_reply":"2024-04-10T22:25:11.626244Z"},"papermill":{"duration":1.713078,"end_time":"2024-04-10T22:25:11.629827","exception":false,"start_time":"2024-04-10T22:25:09.916749","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# DEVICE FOR MODEL INFERENCE\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n\n# DEVICE FOR CREATING SPECTROGRAMS\ndevice2 = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\nif WORKERS>0: device2 = \"cpu\" # TO AVOID MULTIPROCESSING ERROR\nprint( device, device2 )","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:25:11.693174Z","iopub.status.busy":"2024-04-10T22:25:11.692238Z","iopub.status.idle":"2024-04-10T22:25:11.774315Z","shell.execute_reply":"2024-04-10T22:25:11.773422Z"},"papermill":{"duration":0.115043,"end_time":"2024-04-10T22:25:11.776335","exception":false,"start_time":"2024-04-10T22:25:11.661292","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"FilePath = tp.Union[str, Path]\nLabel = tp.Union[int, float, np.ndarray]\nlabel2eeg = test.set_index('spectrogram_id').eeg_id.to_dict()\n\nclass HMSHBACSpecDataset(torch.utils.data.Dataset):\n\n    def __init__(\n        self,\n        image_paths: tp.Sequence[FilePath],\n        labels: tp.Sequence[Label],\n        transform: A.Compose,\n        valid, cflip, flip, rflip, crop, freq_aug\n    ):\n        self.image_paths = image_paths\n        self.labels = labels\n        self.transform = transform\n        self.valid = valid\n        self.cflip = cflip\n        self.flip = flip\n        self.rflip = rflip\n        self.crop = crop\n        self.freq_aug = freq_aug\n\n    def __len__(self):\n        return len(self.image_paths)\n\n    def __getitem__(self, index: int):\n        img_path = self.image_paths[index]\n\n        label = self.labels[index]\n        eeg_id = label2eeg[ int( str(img_path).split('/')[-1].split('.')[0] ) ]\n        \n        img = all_eegs[eeg_id]\n        img0 = img.copy()\n                \n        ##################\n        ### WAVEFORM INVERT AUGMENTATION\n        FLIPS = [1,1,1,1]\n        if self.flip:\n            FLIPS = np.random.choice([1,-1],4,replace=True)\n            \n        # WAVEFORM BRAIN RIGHT LEFT FLIP AUGMENTAION\n        img = img0.copy()\n        if self.cflip & (np.random.uniform(0,1)<0.5):\n            for k in range(4):\n                img[0+k,] = FLIPS[0] * img0[4+k,]\n                img[4+k,] = FLIPS[1] * img0[0+k,]\n                img[8+k,] = FLIPS[2] * img0[12+k,]\n                img[12+k,] = FLIPS[3] * img0[8+k,]\n        else:\n            for k in range(4):\n                img[0+k,] = FLIPS[0] * img0[0+k,]\n                img[4+k,] = FLIPS[1] * img0[4+k,]\n                img[8+k,] = FLIPS[2] * img0[8+k,]\n                img[12+k,] = FLIPS[3] * img0[12+k,]\n                \n        # WAVEFORM BRAIN TEMPORAL PARASAGITTAL FLIP AUGMENTAION\n        img0 = img.copy()\n        if self.rflip & (np.random.uniform(0,1)<0.5):\n            for k in range(4):\n                img[0+k,] = img0[8+k,]\n                img[8+k,] = img0[0+k,]\n                img[4+k,] = img0[12+k,]\n                img[12+k,] = img0[4+k,]\n                \n        # WAVEFORM CROP AND SCALE AUGMENTATION\n        if self.crop:\n            r = int( np.random.normal(0,200) ) #40\n            if r>=0:\n                img = interpolate_2d_array(img[:,r:], 10_000).astype('float32')\n            else:\n                img = interpolate_2d_array(img[:,:r], 10_000).astype('float32')\n        img0 = img.copy()\n        ##################\n        \n        ##################\n        ### MATPLOTLIB 2D PLOT OF WAVEFORMS\n        image_size = (224, 224)\n        fig = plt.figure(figsize=(image_size[0] / 100, image_size[1] / 100), dpi=100)\n        for k in range(16):\n            plt.plot(range(2_000),img0[k,][4000:6000]+k*200,linewidth=0.5)\n        plt.axis('off')\n        plt.subplots_adjust(left=0, right=1, top=1, bottom=0)\n        buffer = BytesIO()\n        plt.savefig(buffer, format='png', bbox_inches='tight', pad_inches=0, transparent=False)\n        buffer.seek(0)\n        img9 = np.transpose( plt.imread(buffer)[:,:,:3], (2,0,1) )\n        buffer.close()\n        plt.clf()\n        plt.close('all')\n        ##################\n        \n        ###################\n        ### MAKE SPECTROGRAMS\n        make_spec1 = T.MelSpectrogram(n_fft=2048, win_length=1280, hop_length=19,\n                                        f_min=0,f_max=20,sample_rate=200,n_mels=64).to(device2)\n        make_spec2 = T.MelSpectrogram(n_fft=1024+256, win_length=32, hop_length=4,\n                                        f_min=0,f_max=20,sample_rate=200,n_mels=64).to(device2)\n        ###################\n        ### MAKE SPECTROGRAMS 50 SECONDS\n        specs2 = []\n        for j in range(4):\n            specs = []\n            for k in range(4):\n                waveform = torch.tensor(img0[4*j+k,][140:-140], dtype=torch.float32).to(device2)\n                specgram = make_spec1(waveform)\n                specs.append( specgram ) # SIZE 64x512\n            specs2.append( torch.mean(torch.stack(specs),dim=0) )\n        img = torch.cat(specs2,axis=0) # SIZE 256x512\n        #####################\n        ### NORMALIZE\n        img = torch.clamp(img, 1e-8, 1e8)\n        img = torch.log(img)\n        eps = 1e-6\n        img_mean = img.mean(dim=(0, 1))\n        img = img - img_mean\n        img_std = img.std(dim=(0, 1))\n        img = img / (img_std + eps)\n        ###################\n        ### MAKE SPECTROGRAMS 10 SECONDS\n        specs2 = []\n        for j in range(4):\n            specs = []\n            for k in range(4):\n                waveform = torch.tensor(img0[4*j+k,][3977:-3977], dtype=torch.float32).to(device2)\n                specgram = make_spec2(waveform)\n                specs.append( specgram ) # SIZE 64x512\n            specs2.append( torch.mean(torch.stack(specs),dim=0) )\n        img2 = torch.cat(specs2,axis=0) # SIZE 256x512\n        #####################\n        ### NORMALIZE\n        img2 = torch.clamp(img2, 1e-8, 1e8)\n        img2 = torch.log(img2)\n        eps = 1e-6\n        img_mean = img2.mean(dim=(0, 1))\n        img2 = img2 - img_mean\n        img_std = img2.std(dim=(0, 1))\n        img2 = img2 / (img_std + eps)\n        #####################\n        img = torch.cat([img,img2],axis=0) #512x512\n        img = img[..., None]\n        img_cpu = img.cpu().numpy()\n        \n        ###################\n        ### SPECTROGRAM FREQUENCY AUGMENTATION\n        if self.freq_aug:\n            rr = np.random.randint(1,4) \n            for j in range(rr):\n                r = np.random.randint(0,64)\n                d = np.random.randint(2,11) \n                a = np.max([0,r-d])\n                b = np.min([63,r+d])\n                for k in range(8):\n                    img_cpu[a+k*64:b+k*64,] = 0\n        \n        img = self._apply_transform( img_cpu )\n        return {\"data\": img, \"data2\": img0, \"target\": label, \"data3\": img9}\n\n    def _apply_transform(self, img: np.ndarray):\n        \"\"\"apply transform to image and mask\"\"\"\n        transformed = self.transform(image=img)\n        img = transformed[\"image\"]\n        return img","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:25:11.840136Z","iopub.status.busy":"2024-04-10T22:25:11.839828Z","iopub.status.idle":"2024-04-10T22:25:11.875520Z","shell.execute_reply":"2024-04-10T22:25:11.874641Z"},"papermill":{"duration":0.069322,"end_time":"2024-04-10T22:25:11.877587","exception":false,"start_time":"2024-04-10T22:25:11.808265","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Train Procedure\nNote that if you wish to train this model from scratch yourself, we need 2 stages as described in my discussion post [here][1]. This train procedure is similar (but not the same) as the train procedure that the competition host describes [here][2]\n\n![](https://raw.githubusercontent.com/cdeotte/Kaggle_Images/main/Apr-2024/3-stage-train.png)\n\n[1]: https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/492482\n[2]: https://github.com/bdsp-core/IIIC-SPaRCNet/tree/main","metadata":{"papermill":{"duration":0.029997,"end_time":"2024-04-10T22:25:11.937343","exception":false,"start_time":"2024-04-10T22:25:11.907346","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"# Infer Test Data","metadata":{"papermill":{"duration":0.031186,"end_time":"2024-04-10T22:25:11.998314","exception":false,"start_time":"2024-04-10T22:25:11.967128","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def to_device(\n    tensors: tp.Union[tp.Tuple[torch.Tensor], tp.Dict[str, torch.Tensor]],\n    device: torch.device, *args, **kwargs\n):\n    if isinstance(tensors, tuple):\n        return (t.to(device, *args, **kwargs) for t in tensors)\n    elif isinstance(tensors, dict):\n        return {\n            k: t.to(device, *args, **kwargs) for k, t in tensors.items()}\n    else:\n        return tensors.to(device, *args, **kwargs)\n\n    \ndef get_test_path_label(test: pd.DataFrame):\n    \"\"\"Get file path and dummy target info.\"\"\"\n    \n    img_paths = []\n    labels = np.full((len(test), 6), -1, dtype=\"float32\")\n    for spec_id in test[\"spectrogram_id\"].values:\n        img_path = f\"/kaggle/input/hms-harmful-brain-activity-classification/test_spectrograms/{spec_id}.npy\"\n        img_paths.append(img_path)\n        \n    test_data = {\n        \"image_paths\": img_paths,\n        \"labels\": [l for l in labels]}\n    \n    return test_data\n\ndef get_test_transforms():\n    test_transform = A.Compose([\n        #A.Resize(p=1.0, height=512, width=512),\n        ToTensorV2(p=1.0)\n    ])\n    return test_transform","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:25:12.060090Z","iopub.status.busy":"2024-04-10T22:25:12.059302Z","iopub.status.idle":"2024-04-10T22:25:12.068636Z","shell.execute_reply":"2024-04-10T22:25:12.067834Z"},"papermill":{"duration":0.042461,"end_time":"2024-04-10T22:25:12.070560","exception":false,"start_time":"2024-04-10T22:25:12.028099","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def run_inference_loop(model, loader, device, fold_id):\n    model.to(device)\n    model.eval()\n    pred_list = []\n    with torch.no_grad():\n        for i,batch in enumerate( tqdm(loader) ):\n            \n            if (i==0)&(fold_id==0):\n                \n                print('#'*25)\n                print('### EXAMPLE OF DATA LOADER OUTPUT')\n                print('#'*25)\n                \n                x2 = batch[\"data\"].cpu().numpy()\n                x3 = batch[\"data2\"].cpu().numpy()\n                x4 = batch[\"data3\"].cpu().numpy()\n\n                plt.figure(figsize=(15,5))\n                plt.subplot(1,3,1)\n                plt.imshow(x2[0,0,], aspect='auto', origin='lower', cmap='jet')\n                \n                plt.subplot(1,3,2)\n                d = 0\n                for k in range(16):\n                    plt.plot(np.arange(10_000),x3[0,k,]+d)\n                    d += np.max(x3[0,k,])\n                    \n                plt.subplot(1,3,3)\n                img = np.transpose( x4[0,], (1,2,0) )\n                plt.imshow(img, aspect='auto') \n                    \n                plt.show()\n                \n                del x2,x3, x4\n            \n            x = to_device(batch[\"data\"], device)\n            x2 = to_device(batch[\"data2\"].float(), device)\n            x3 = to_device(batch[\"data3\"], device)\n            xx = {\"m1\":x,\"m2\":x2,\"m3\":x3}\n            y = model(xx)\n            pred_list.append(y.softmax(dim=1).detach().cpu().numpy())\n        \n    pred_arr = np.concatenate(pred_list)\n    del pred_list\n    return pred_arr","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:25:12.132299Z","iopub.status.busy":"2024-04-10T22:25:12.131768Z","iopub.status.idle":"2024-04-10T22:25:12.143032Z","shell.execute_reply":"2024-04-10T22:25:12.142203Z"},"papermill":{"duration":0.044145,"end_time":"2024-04-10T22:25:12.144830","exception":false,"start_time":"2024-04-10T22:25:12.100685","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_preds_arr = np.zeros((N_FOLDS, len(test), 6))\n\ntest_path_label = get_test_path_label(test)\ntest_transform = get_test_transforms()\ntest_dataset = HMSHBACSpecDataset(**test_path_label, transform=test_transform, valid=True,\n                                      cflip=False, flip=False, rflip=False, crop=False,\n                                      freq_aug=False)\ntest_loader = torch.utils.data.DataLoader(\n    test_dataset, batch_size=32, num_workers=WORKERS, shuffle=False, drop_last=False)\n\nfor fold_id in range(N_FOLDS):\n    print(f\"\\n[fold {fold_id}]\")\n    \n    # # get model\n    model_path = f\"/kaggle/input/eegnet2-v712/best_model_v712_fold{fold_id}.pth\"\n    model = MultiModel()\n    model.load_state_dict(torch.load(model_path, map_location=device))\n    \n    # # inference\n    test_pred = run_inference_loop(model, test_loader, device, fold_id)\n    test_preds_arr[fold_id] = test_pred\n    \n    del model\n    torch.cuda.empty_cache()\n    gc.collect()","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:25:12.204340Z","iopub.status.busy":"2024-04-10T22:25:12.203828Z","iopub.status.idle":"2024-04-10T22:25:58.447663Z","shell.execute_reply":"2024-04-10T22:25:58.446597Z"},"papermill":{"duration":46.276036,"end_time":"2024-04-10T22:25:58.450036","exception":false,"start_time":"2024-04-10T22:25:12.174000","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Make Submission","metadata":{"papermill":{"duration":0.036759,"end_time":"2024-04-10T22:25:58.525085","exception":false,"start_time":"2024-04-10T22:25:58.488326","status":"completed"},"tags":[]}},{"cell_type":"code","source":"test_pred = test_preds_arr.mean(axis=0)\ntest_pred_df = pd.DataFrame(\n    test_pred, columns=CLASSES\n)\ntest_pred_df = pd.concat([test[[\"eeg_id\"]], test_pred_df], axis=1)","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:25:58.600984Z","iopub.status.busy":"2024-04-10T22:25:58.600616Z","iopub.status.idle":"2024-04-10T22:25:58.611279Z","shell.execute_reply":"2024-04-10T22:25:58.610433Z"},"papermill":{"duration":0.051149,"end_time":"2024-04-10T22:25:58.613159","exception":false,"start_time":"2024-04-10T22:25:58.562010","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"smpl_sub = pd.read_csv(\"/kaggle/input/hms-harmful-brain-activity-classification/sample_submission.csv\")\nsub = pd.merge(\n    smpl_sub[[\"eeg_id\"]], test_pred_df, on=\"eeg_id\", how=\"left\")\nsub.to_csv(\"submission.csv\", index=False)\nsub.head()","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:25:58.688841Z","iopub.status.busy":"2024-04-10T22:25:58.688497Z","iopub.status.idle":"2024-04-10T22:25:58.716957Z","shell.execute_reply":"2024-04-10T22:25:58.716121Z"},"papermill":{"duration":0.069137,"end_time":"2024-04-10T22:25:58.718941","exception":false,"start_time":"2024-04-10T22:25:58.649804","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# SANITY CHECK\nprint('Row of predictions sum to',sub.iloc[:,1:].values.sum())","metadata":{"execution":{"iopub.execute_input":"2024-04-10T22:25:58.796966Z","iopub.status.busy":"2024-04-10T22:25:58.796655Z","iopub.status.idle":"2024-04-10T22:25:58.802088Z","shell.execute_reply":"2024-04-10T22:25:58.801192Z"},"papermill":{"duration":0.046994,"end_time":"2024-04-10T22:25:58.804248","exception":false,"start_time":"2024-04-10T22:25:58.757254","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]}]}