diff --git a/exercises/Exercise_1_Initial.ipynb b/exercises/Exercise_1_Initial.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..465eea16a7271650bce19358a335eac19c72b659 --- /dev/null +++ b/exercises/Exercise_1_Initial.ipynb @@ -0,0 +1,5794 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "accelerator": "GPU", + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "6a28f10e148340b385b1501b4c7c5c8b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_a0092803564548558d24a623f5ac957d", + "IPY_MODEL_ff2ab652945c4ed789a93e6c3a897892", + "IPY_MODEL_6f60ca3c85484e8fbbd215ea9051437e" + ], + "layout": "IPY_MODEL_2363cc7cff144a828b82bed2aa1e5235" + } + }, + "a0092803564548558d24a623f5ac957d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_7eeb68cb1f1d417b922754fcda6d875b", + "placeholder": "", + "style": "IPY_MODEL_0d630a7389e1474daa7d7c2e9998df3a", + "value": "Sanity Checking DataLoader 0: 100%" + } + }, + "ff2ab652945c4ed789a93e6c3a897892": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3ac3079b2dc54e31810816f80fb685de", + "max": 2, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_352d79e35d344a92bbe2afcd1cf7274d", + "value": 2 + } + }, + "6f60ca3c85484e8fbbd215ea9051437e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_9c4e5a7d610544e893e00bda642d29e3", + "placeholder": "", + "style": "IPY_MODEL_05b4a9e4cb4142c780ed833a68f6f4c1", + "value": " 2/2 [00:00<00:00, 12.50it/s]" + } + }, + "2363cc7cff144a828b82bed2aa1e5235": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "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": "hidden", + "width": "100%" + } + }, + "7eeb68cb1f1d417b922754fcda6d875b": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "0d630a7389e1474daa7d7c2e9998df3a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "3ac3079b2dc54e31810816f80fb685de": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "2", + "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 + } + }, + "352d79e35d344a92bbe2afcd1cf7274d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "9c4e5a7d610544e893e00bda642d29e3": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "05b4a9e4cb4142c780ed833a68f6f4c1": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "c182a1b5da3d45f7bea034c82554d79c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_b4540bbfc3594e63bea60933f5da3606", + "IPY_MODEL_716f28154eea45cf9e3c691061bddfe5", + "IPY_MODEL_deb7aa1914e5421daa9817b5470c08a8" + ], + "layout": "IPY_MODEL_932c87617bf641d1a93f6d8eb5e2b8bc" + } + }, + "b4540bbfc3594e63bea60933f5da3606": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_4d92f08d8b984c5ea0f471ab8eaea400", + "placeholder": "", + "style": "IPY_MODEL_0da798fad479463da66cb8602ea1489a", + "value": "Epoch 9: 100%" + } + }, + "716f28154eea45cf9e3c691061bddfe5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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_22b684c9ee3440f38cdac9001b23c152", + "max": 750, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_17237af680e94051894ad9af000ed52e", + "value": 750 + } + }, + "deb7aa1914e5421daa9817b5470c08a8": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_44b74e7186eb4f02a460c473ebc641d7", + "placeholder": "", + "style": "IPY_MODEL_c7f962883dd845a39ceea55555bbcebd", + "value": " 750/750 [02:33<00:00, 4.87it/s, v_num=3, val_loss=0.267, val_accuracy=0.928]" + } + }, + "932c87617bf641d1a93f6d8eb5e2b8bc": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "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": "100%" + } + }, + "4d92f08d8b984c5ea0f471ab8eaea400": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "0da798fad479463da66cb8602ea1489a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "22b684c9ee3440f38cdac9001b23c152": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "2", + "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 + } + }, + "17237af680e94051894ad9af000ed52e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "44b74e7186eb4f02a460c473ebc641d7": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "c7f962883dd845a39ceea55555bbcebd": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "aac2f389c77245038e5b8e25a10825ad": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_f2ab2a0fe6bd41c28007e3ee6e6d2e79", + "IPY_MODEL_7bdc557f191c42e382911d6966e9ca51", + "IPY_MODEL_5920f74fad104a4a9d95da8b47dda595" + ], + "layout": "IPY_MODEL_6d3e23731e78498f9be802ba53979064" + } + }, + "f2ab2a0fe6bd41c28007e3ee6e6d2e79": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_b08537a196ae449e8edc438a5827df9d", + "placeholder": "", + "style": "IPY_MODEL_80d5049be9774d8a8cdac1f1c081416e", + "value": "Validation DataLoader 0: 100%" + } + }, + "7bdc557f191c42e382911d6966e9ca51": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_eea5e6866a9f4e1699ccc9e722e46180", + "max": 188, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_1a2d749eaa0c4f79a49901c734a29c01", + "value": 188 + } + }, + "5920f74fad104a4a9d95da8b47dda595": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_de1bc3a54d1d428f8f9c0fa1286f5246", + "placeholder": "", + "style": "IPY_MODEL_5050684651cc45b28bfff15d1b8f6606", + "value": " 188/188 [00:14<00:00, 13.30it/s]" + } + }, + "6d3e23731e78498f9be802ba53979064": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "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": "hidden", + "width": "100%" + } + }, + "b08537a196ae449e8edc438a5827df9d": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "80d5049be9774d8a8cdac1f1c081416e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "eea5e6866a9f4e1699ccc9e722e46180": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "2", + "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 + } + }, + "1a2d749eaa0c4f79a49901c734a29c01": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "de1bc3a54d1d428f8f9c0fa1286f5246": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "5050684651cc45b28bfff15d1b8f6606": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "7af0427555d44d43b6dbadf3ea22ca56": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_de88b98f53684644b839902ed88201c9", + "IPY_MODEL_facf683e25864ba98a1671a9eb11d076", + "IPY_MODEL_c81889efaab043c5a00366902d7e960a" + ], + "layout": "IPY_MODEL_dbb74f4d86334d898cbfaaae2947a504" + } + }, + "de88b98f53684644b839902ed88201c9": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_e51b690aa5af462591de5ab717024e8a", + "placeholder": "", + "style": "IPY_MODEL_6f88abc3b2d2456a8011e10d404d04f1", + "value": "Validation DataLoader 0: 100%" + } + }, + "facf683e25864ba98a1671a9eb11d076": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7dd59f135d164edba3bdfa23b7bc0f00", + "max": 188, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_63597defe26145cab6264b4d1a9cc3b8", + "value": 188 + } + }, + "c81889efaab043c5a00366902d7e960a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_7c41cdd6ff34451db64d7b3cc56c2a11", + "placeholder": "", + "style": "IPY_MODEL_94adc2c3fd0247228ccb36f3170d13d5", + "value": " 188/188 [00:13<00:00, 13.92it/s]" + } + }, + "dbb74f4d86334d898cbfaaae2947a504": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "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": "hidden", + "width": "100%" + } + }, + "e51b690aa5af462591de5ab717024e8a": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "6f88abc3b2d2456a8011e10d404d04f1": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "7dd59f135d164edba3bdfa23b7bc0f00": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "2", + "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 + } + }, + "63597defe26145cab6264b4d1a9cc3b8": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "7c41cdd6ff34451db64d7b3cc56c2a11": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "94adc2c3fd0247228ccb36f3170d13d5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "2a199648e69d4930b2410572a7f317ad": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_345dcd7a4ad34900ab6d7f891ba11990", + "IPY_MODEL_1c58da62c2e94d3298718d1914fbce55", + "IPY_MODEL_31abf3479661481a95a19384e1856f7a" + ], + "layout": "IPY_MODEL_855bc2a29c464adb8d3b5c3c4503fa35" + } + }, + "345dcd7a4ad34900ab6d7f891ba11990": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_90751d1b80f74d80936e4cec425f30f8", + "placeholder": "", + "style": "IPY_MODEL_18c95d4c020842119f09c031459e87f3", + "value": "Validation DataLoader 0: 100%" + } + }, + "1c58da62c2e94d3298718d1914fbce55": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c8a768ef58e74092a7985b818138bcdd", + "max": 188, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_6086ef172a07406b982e796c3728b34f", + "value": 188 + } + }, + "31abf3479661481a95a19384e1856f7a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_e15583359cd54aeaa2a9fa9889b1f163", + "placeholder": "", + "style": "IPY_MODEL_07a3365f5b344806867574891f3cbaf3", + "value": " 188/188 [00:14<00:00, 13.38it/s]" + } + }, + "855bc2a29c464adb8d3b5c3c4503fa35": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "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": "hidden", + "width": "100%" + } + }, + "90751d1b80f74d80936e4cec425f30f8": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "18c95d4c020842119f09c031459e87f3": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "c8a768ef58e74092a7985b818138bcdd": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "2", + "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 + } + }, + "6086ef172a07406b982e796c3728b34f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "e15583359cd54aeaa2a9fa9889b1f163": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "07a3365f5b344806867574891f3cbaf3": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "0983a0530d9f4b358ba76992d2c2721f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_dd5aa409e37b456787cd12e12813faca", + "IPY_MODEL_cb34ac09b8164fa4826bc7ee943f3af2", + "IPY_MODEL_d98fd2b815e8412ca6bfab50fbb972f4" + ], + "layout": "IPY_MODEL_77fb615a9596470c9b179d2e0187d5d1" + } + }, + "dd5aa409e37b456787cd12e12813faca": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_01b7d430fa90431081cb3b3ba946948e", + "placeholder": "", + "style": "IPY_MODEL_7aa93d09bc9e4493bb235a90207c2271", + "value": "Validation DataLoader 0: 100%" + } + }, + "cb34ac09b8164fa4826bc7ee943f3af2": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_700e56597c1b440696ae68e41d9b3e7d", + "max": 188, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_8cd2af74899949c4a75c0398bdb3b184", + "value": 188 + } + }, + "d98fd2b815e8412ca6bfab50fbb972f4": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_34bb2b2fcf044d12b4cecd69611281f4", + "placeholder": "", + "style": "IPY_MODEL_83acd8ab0082490da966dc8a5f085d59", + "value": " 188/188 [00:13<00:00, 13.82it/s]" + } + }, + "77fb615a9596470c9b179d2e0187d5d1": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "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": "hidden", + "width": "100%" + } + }, + "01b7d430fa90431081cb3b3ba946948e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "7aa93d09bc9e4493bb235a90207c2271": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "700e56597c1b440696ae68e41d9b3e7d": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "2", + "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 + } + }, + "8cd2af74899949c4a75c0398bdb3b184": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "34bb2b2fcf044d12b4cecd69611281f4": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "83acd8ab0082490da966dc8a5f085d59": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "72acf212e0ea4185866c12ea47e10a51": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_569e987d5ec74f8381e4c04a7d8f346c", + "IPY_MODEL_3affebeb03d544618ec207c5bb09a5d1", + "IPY_MODEL_2acb5f5003c34e4ba3e68b3d61df2107" + ], + "layout": "IPY_MODEL_d1a7d2bd95de47bfaa5a9150c1a064d6" + } + }, + "569e987d5ec74f8381e4c04a7d8f346c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_bad49b78183a43d1801cdcae6c800fc3", + "placeholder": "", + "style": "IPY_MODEL_3d2287b86e5f454b89ea03d413357d7f", + "value": "Validation DataLoader 0: 100%" + } + }, + "3affebeb03d544618ec207c5bb09a5d1": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_bd1bc914d0314163bbfdf3f6a5507b65", + "max": 188, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_d4138a821ac141e38fbb860e5471dd90", + "value": 188 + } + }, + "2acb5f5003c34e4ba3e68b3d61df2107": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_56b477d21fb942989ea62e4572753d2a", + "placeholder": "", + "style": "IPY_MODEL_54c7d79558774ed595e7c9518f576fbb", + "value": " 188/188 [00:13<00:00, 13.63it/s]" + } + }, + "d1a7d2bd95de47bfaa5a9150c1a064d6": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "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": "hidden", + "width": "100%" + } + }, + "bad49b78183a43d1801cdcae6c800fc3": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "3d2287b86e5f454b89ea03d413357d7f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "bd1bc914d0314163bbfdf3f6a5507b65": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "2", + "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 + } + }, + "d4138a821ac141e38fbb860e5471dd90": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "56b477d21fb942989ea62e4572753d2a": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "54c7d79558774ed595e7c9518f576fbb": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "0ef53f80700d4548a25962cf6cf6d6ff": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_bff1822c2e114cf380410334310a07ee", + "IPY_MODEL_7fc0e4eaaf734f0f8f8409230bade48e", + "IPY_MODEL_c7363abf26454f508a0c767572d067fa" + ], + "layout": "IPY_MODEL_9b8667b96f7147f2bfbae4f46e84ddeb" + } + }, + "bff1822c2e114cf380410334310a07ee": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_7fc97953eff54de9b9a268e4c42c707f", + "placeholder": "", + "style": "IPY_MODEL_848726ca60ae47009bbca647083ec8df", + "value": "Validation DataLoader 0: 100%" + } + }, + "7fc0e4eaaf734f0f8f8409230bade48e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_023cde92392d468dbde436d745fdb8c9", + "max": 188, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_5b83cad1b5804386a82895853502a26a", + "value": 188 + } + }, + "c7363abf26454f508a0c767572d067fa": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_fa856adf628a4ca28569c93c61db7e52", + "placeholder": "", + "style": "IPY_MODEL_ee29cdfe85dc478491a94684a5f67378", + "value": " 188/188 [00:13<00:00, 13.74it/s]" + } + }, + "9b8667b96f7147f2bfbae4f46e84ddeb": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "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": "hidden", + "width": "100%" + } + }, + "7fc97953eff54de9b9a268e4c42c707f": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "848726ca60ae47009bbca647083ec8df": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "023cde92392d468dbde436d745fdb8c9": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "2", + "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 + } + }, + "5b83cad1b5804386a82895853502a26a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "fa856adf628a4ca28569c93c61db7e52": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "ee29cdfe85dc478491a94684a5f67378": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "f3873a33f8584ef7bc1bc6d8c66db4bb": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_8688e88ebd8b41a0b6aa32a0494908dd", + "IPY_MODEL_2483badf200c414d922dd94d8a068fb8", + "IPY_MODEL_0ddac912834846a9aea8eb1290111211" + ], + "layout": "IPY_MODEL_160548e0c6da4822b94dd8e9aabe208b" + } + }, + "8688e88ebd8b41a0b6aa32a0494908dd": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_d60d26afb978418081fe1d416ac4b8df", + "placeholder": "", + "style": "IPY_MODEL_eb6c1f3a637c4eca88258e0f08711aae", + "value": "Validation DataLoader 0: 100%" + } + }, + "2483badf200c414d922dd94d8a068fb8": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a4d89389ed0446b394ee972c032600c0", + "max": 188, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_92fa7c54a5224b8b8cb284c537245936", + "value": 188 + } + }, + "0ddac912834846a9aea8eb1290111211": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_c471022af44d4f1789c6f8e2cce91c00", + "placeholder": "", + "style": "IPY_MODEL_d965f127200f4653b5d78114e06a65ee", + "value": " 188/188 [00:13<00:00, 13.67it/s]" + } + }, + "160548e0c6da4822b94dd8e9aabe208b": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "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": "hidden", + "width": "100%" + } + }, + "d60d26afb978418081fe1d416ac4b8df": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "eb6c1f3a637c4eca88258e0f08711aae": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "a4d89389ed0446b394ee972c032600c0": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "2", + "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 + } + }, + "92fa7c54a5224b8b8cb284c537245936": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "c471022af44d4f1789c6f8e2cce91c00": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "d965f127200f4653b5d78114e06a65ee": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "436956c5a4264f0d9388e161fc62cd76": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_6ad63f0bf93b4e7d916207b3e29ca1ce", + "IPY_MODEL_33a95edb6934463289ff14300fd91217", + "IPY_MODEL_a6c5d0ce0d07485ea315697b4754a251" + ], + "layout": "IPY_MODEL_754347749e9c4776a6edf6b7882e8912" + } + }, + "6ad63f0bf93b4e7d916207b3e29ca1ce": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_45ded6944d9540098283eec55384a08f", + "placeholder": "", + "style": "IPY_MODEL_53268adbe652437f9da01bb13259ece9", + "value": "Validation DataLoader 0: 100%" + } + }, + "33a95edb6934463289ff14300fd91217": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a259be453fde4d8da250c09c7e2a13dc", + "max": 188, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_772dad8b267c4d128c9e59356cbdecd6", + "value": 188 + } + }, + "a6c5d0ce0d07485ea315697b4754a251": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_7e14f0bf06e74688be8ce83b4f588e40", + "placeholder": "", + "style": "IPY_MODEL_b49b0db9ba4b44d5959e43fea042c889", + "value": " 188/188 [00:13<00:00, 13.93it/s]" + } + }, + "754347749e9c4776a6edf6b7882e8912": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "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": "hidden", + "width": "100%" + } + }, + "45ded6944d9540098283eec55384a08f": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "53268adbe652437f9da01bb13259ece9": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "a259be453fde4d8da250c09c7e2a13dc": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "2", + "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 + } + }, + "772dad8b267c4d128c9e59356cbdecd6": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "7e14f0bf06e74688be8ce83b4f588e40": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "b49b0db9ba4b44d5959e43fea042c889": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "9a17ae69160c4d56a489393ac26b7989": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_b757149a44094b85b43a1c33b850f59b", + "IPY_MODEL_836603c0b95e42dfb049b439d33374d9", + "IPY_MODEL_76f3268fd7404e4ba3e4d3163478570d" + ], + "layout": "IPY_MODEL_8f92f98ad229498c84de693c4cab8e8e" + } + }, + "b757149a44094b85b43a1c33b850f59b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_67fbaadcc77f40d3bfd4ea4ad577a892", + "placeholder": "", + "style": "IPY_MODEL_ea7fb53e1d1c43aabed90dd57fa7912f", + "value": "Validation DataLoader 0: 100%" + } + }, + "836603c0b95e42dfb049b439d33374d9": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_46bb4d1e170f4110b65c15cd4ae76d9c", + "max": 188, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_b933861766994e6792b5bcbd27c3c497", + "value": 188 + } + }, + "76f3268fd7404e4ba3e4d3163478570d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_4e861ea318cf43d0b216a7dfcccdb67d", + "placeholder": "", + "style": "IPY_MODEL_b51a924ed2f84a108c1f3974a6a34458", + "value": " 188/188 [00:13<00:00, 13.51it/s]" + } + }, + "8f92f98ad229498c84de693c4cab8e8e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "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": "hidden", + "width": "100%" + } + }, + "67fbaadcc77f40d3bfd4ea4ad577a892": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "ea7fb53e1d1c43aabed90dd57fa7912f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "46bb4d1e170f4110b65c15cd4ae76d9c": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "2", + "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 + } + }, + "b933861766994e6792b5bcbd27c3c497": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "4e861ea318cf43d0b216a7dfcccdb67d": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "b51a924ed2f84a108c1f3974a6a34458": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "a536bcb4c67d485db7e232f41c63060b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_41f622b68065474c98fbf0fd012de213", + "IPY_MODEL_225dc77b4e264b19a00e934360e5e17d", + "IPY_MODEL_709b24584af84c2eaaa1d64efbd210f5" + ], + "layout": "IPY_MODEL_b6c5db85d4d44ad2a30f154fc647935c" + } + }, + "41f622b68065474c98fbf0fd012de213": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_4fc37f9e4e6946f9b2956c8dd05f0aee", + "placeholder": "", + "style": "IPY_MODEL_23a8b1d55016454fbe206b68c8a57aff", + "value": "Validation DataLoader 0: 100%" + } + }, + "225dc77b4e264b19a00e934360e5e17d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_b4754635995d494d937607cf69d40f88", + "max": 188, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_bb2e47b378504afc8a36796e18704221", + "value": 188 + } + }, + "709b24584af84c2eaaa1d64efbd210f5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_4e3412294f94431bb42466f6f2de693f", + "placeholder": "", + "style": "IPY_MODEL_19c59252dbfb4e72bc7d440f92ecc8ea", + "value": " 188/188 [00:13<00:00, 13.66it/s]" + } + }, + "b6c5db85d4d44ad2a30f154fc647935c": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "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": "hidden", + "width": "100%" + } + }, + "4fc37f9e4e6946f9b2956c8dd05f0aee": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "23a8b1d55016454fbe206b68c8a57aff": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "b4754635995d494d937607cf69d40f88": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "2", + "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 + } + }, + "bb2e47b378504afc8a36796e18704221": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "4e3412294f94431bb42466f6f2de693f": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "19c59252dbfb4e72bc7d440f92ecc8ea": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "b7ee6504c6f84b83979ebc8ae1903b60": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "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_7500e56ff597449ea821970c12f2b2fc", + "IPY_MODEL_525d994e14c149c5a27349715c57b215", + "IPY_MODEL_e6422a68a5024306ab8a064afdd8e3b0" + ], + "layout": "IPY_MODEL_d8cf9edf34504ec9b7eebb36c7d2fef5" + } + }, + "7500e56ff597449ea821970c12f2b2fc": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_dbeb4cbea219435182755b2180021d46", + "placeholder": "", + "style": "IPY_MODEL_71233d05ec8149cd9edd57e8f0206b6e", + "value": "Testing DataLoader 0: 100%" + } + }, + "525d994e14c149c5a27349715c57b215": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "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_a1138ca08de046709a798ec0229051bb", + "max": 157, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_d3fb1523dcb34cf0bf07572467b3b27e", + "value": 157 + } + }, + "e6422a68a5024306ab8a064afdd8e3b0": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "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_3dc162ecb4444de788cc9c7d8e97b9f2", + "placeholder": "", + "style": "IPY_MODEL_fe78347050c0411482f8e5a08f7265f7", + "value": " 157/157 [00:15<00:00, 10.43it/s]" + } + }, + "d8cf9edf34504ec9b7eebb36c7d2fef5": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "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": "100%" + } + }, + "dbeb4cbea219435182755b2180021d46": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "71233d05ec8149cd9edd57e8f0206b6e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "a1138ca08de046709a798ec0229051bb": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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": "2", + "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 + } + }, + "d3fb1523dcb34cf0bf07572467b3b27e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + }, + "3dc162ecb4444de788cc9c7d8e97b9f2": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "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 + } + }, + "fe78347050c0411482f8e5a08f7265f7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "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": "" + } + } + } + } + }, + "cells": [ + { + "metadata": { + "id": "MHvuWIUHdIpt" + }, + "cell_type": "markdown", + "source": [ + "# Programming Exercise 1: Introduction to Deep Learning with PyTorch\n", + "\n", + "## Very Deep Learning (VDL) - Winter Semester 2023/24\n", + "\n", + "---\n", + "\n", + "### Group Details:\n", + "\n", + "- **Group Name:** \\[Enter OLAT Group Name Here\\]\n", + "\n", + "### Members:\n", + "\n", + "- \\[Participant 1 Name\\], \\[Matrikel-Nr 1\\]\n", + "- \\[Participant 2 Name\\], \\[Matrikel-Nr 1\\]\n", + "- ...\n", + "\n", + "---\n", + "\n", + "**Instructions**: The tasks in this notebook are a part of Sheet 1. Look for `TODO` tags throughout the notebook and complete the sections with missing code. Once done, ensure all outputs are visible and correctly displayed. Save your notebook and submit the `.ipynb` file together with the exercise sheet PDF in a single ZIP file." + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Introduction:\n", + "\n", + "Welcome to the first programming exercise of the Very Deep Learning course. In this exercise, you will be introduced to PyTorch, one of the most widely used deep learning frameworks in academia and industry. With its dynamic computation graph and vast ecosystem, PyTorch provides an intuitive and versatile platform for building various deep learning models.\n", + "\n", + "The aim of this task is to familiarize you with the basics of [PyTorch](https://pytorch.org/) and [PyTorch Lightning](https://lightning.ai/docs/pytorch/stable/starter/introduction.html), guiding you in building, training, and evaluating a simple neural network model. You'll be working with the [FashionMNIST dataset](https://pytorch.org/vision/stable/generated/torchvision.datasets.FashionMNIST.html), a collection of grayscale images representing ten fashion categories. By the end of this exercise, you should have a foundational understanding of neural networks, how they are trained, and how to evaluate their performance." + ], + "metadata": { + "id": "QlLRHLb6gl_i" + } + }, + { + "cell_type": "code", + "source": [ + "# Install dependencies.\n", + "# Note: You can execute bash commands inside Google Colab!\n", + "!pip install pytorch-lightning # reduces boilerplate in vanilla PyTorch\n", + "!pip install torchmetrics # simplifies metric computation\n", + "!pip install pandas # for reading training logs from CSV\n", + "# We also need `torch` and `torchvision`, but they come pre-installed inside Colab" + ], + "metadata": { + "id": "aGDCwSofQuPt", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "79deb3e1-b7bc-45e7-8d68-fa5c7762f229" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: pytorch-lightning in /usr/local/lib/python3.10/dist-packages (2.1.0)\n", + "Requirement already satisfied: numpy>=1.17.2 in /usr/local/lib/python3.10/dist-packages (from pytorch-lightning) (1.23.5)\n", + "Requirement already satisfied: torch>=1.12.0 in /usr/local/lib/python3.10/dist-packages (from pytorch-lightning) (2.1.0+cu118)\n", + "Requirement already satisfied: tqdm>=4.57.0 in /usr/local/lib/python3.10/dist-packages (from pytorch-lightning) (4.66.1)\n", + "Requirement already satisfied: PyYAML>=5.4 in /usr/local/lib/python3.10/dist-packages (from pytorch-lightning) (6.0.1)\n", + "Requirement already satisfied: fsspec[http]>2021.06.0 in /usr/local/lib/python3.10/dist-packages (from pytorch-lightning) (2023.6.0)\n", + "Requirement already satisfied: torchmetrics>=0.7.0 in /usr/local/lib/python3.10/dist-packages (from pytorch-lightning) (1.2.0)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from pytorch-lightning) (23.2)\n", + "Requirement already satisfied: typing-extensions>=4.0.0 in /usr/local/lib/python3.10/dist-packages (from pytorch-lightning) (4.5.0)\n", + "Requirement already satisfied: lightning-utilities>=0.8.0 in /usr/local/lib/python3.10/dist-packages (from pytorch-lightning) (0.9.0)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from fsspec[http]>2021.06.0->pytorch-lightning) (2.31.0)\n", + "Requirement already satisfied: aiohttp!=4.0.0a0,!=4.0.0a1 in /usr/local/lib/python3.10/dist-packages (from fsspec[http]>2021.06.0->pytorch-lightning) (3.8.6)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch>=1.12.0->pytorch-lightning) (3.12.4)\n", + "Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch>=1.12.0->pytorch-lightning) (1.12)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch>=1.12.0->pytorch-lightning) (3.2)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.12.0->pytorch-lightning) (3.1.2)\n", + "Requirement already satisfied: triton==2.1.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.12.0->pytorch-lightning) (2.1.0)\n", + "Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning) (23.1.0)\n", + "Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning) (3.3.1)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning) (6.0.4)\n", + "Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /usr/local/lib/python3.10/dist-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning) (4.0.3)\n", + "Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning) (1.9.2)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning) (1.4.0)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning) (1.3.1)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.12.0->pytorch-lightning) (2.1.3)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->fsspec[http]>2021.06.0->pytorch-lightning) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->fsspec[http]>2021.06.0->pytorch-lightning) (2.0.7)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->fsspec[http]>2021.06.0->pytorch-lightning) (2023.7.22)\n", + "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch>=1.12.0->pytorch-lightning) (1.3.0)\n", + "Requirement already satisfied: torchmetrics in /usr/local/lib/python3.10/dist-packages (1.2.0)\n", + "Requirement already satisfied: numpy>1.20.0 in /usr/local/lib/python3.10/dist-packages (from torchmetrics) (1.23.5)\n", + "Requirement already satisfied: torch>=1.8.1 in /usr/local/lib/python3.10/dist-packages (from torchmetrics) (2.1.0+cu118)\n", + "Requirement already satisfied: lightning-utilities>=0.8.0 in /usr/local/lib/python3.10/dist-packages (from torchmetrics) (0.9.0)\n", + "Requirement already satisfied: packaging>=17.1 in /usr/local/lib/python3.10/dist-packages (from lightning-utilities>=0.8.0->torchmetrics) (23.2)\n", + "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from lightning-utilities>=0.8.0->torchmetrics) (4.5.0)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.1->torchmetrics) (3.12.4)\n", + "Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.1->torchmetrics) (1.12)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.1->torchmetrics) (3.2)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.1->torchmetrics) (3.1.2)\n", + "Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.1->torchmetrics) (2023.6.0)\n", + "Requirement already satisfied: triton==2.1.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.1->torchmetrics) (2.1.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.8.1->torchmetrics) (2.1.3)\n", + "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch>=1.8.1->torchmetrics) (1.3.0)\n", + "Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (1.5.3)\n", + "Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas) (2.8.2)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas) (2023.3.post1)\n", + "Requirement already satisfied: numpy>=1.21.0 in /usr/local/lib/python3.10/dist-packages (from pandas) (1.23.5)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.1->pandas) (1.16.0)\n" + ] + } + ] + }, + { + "metadata": { + "id": "uLdtrS4zaeEs" + }, + "cell_type": "markdown", + "source": [ + "## Step 1: Data Preparation\n", + "\n", + "The first step in any deep learning pipeline is data preparation. Here, we will download the ImageNet dataset and prepare it for training and validation." + ] + }, + { + "cell_type": "code", + "source": [ + "import pytorch_lightning as pl\n", + "pl.seed_everything(42) # seed to make randomness deterministic\n", + "\n", + "from matplotlib.image import NonUniformImage\n", + "import torchvision.transforms as transforms\n", + "from torch.utils.data import DataLoader\n", + "from torchvision.datasets import FashionMNIST\n", + "\n", + "\n", + "# Define data transformations\n", + "transform = transforms.Compose([\n", + " transforms.Resize(256),\n", + " transforms.CenterCrop(224),\n", + " transforms.ToTensor(),\n", + " transforms.Normalize((0.5,), (0.5,)),\n", + "])\n", + "\n", + "# Download and load the FashionMNIST dataset\n", + "train_dataset = FashionMNIST(root='./data', train=True, download=True, transform=transform)\n", + "test_dataset = FashionMNIST(root='./data', train=False, download=True, transform=transform)\n", + "\n", + "# TODO: Split train dataset into train and val sets using an 80/20 ratio\n", + "# HINT: Use torch.utils.data.random_split\n", + "from torch.utils.data import random_split as r_s\n", + "train_frac = 0.799999 #Did this because train/val split was coming as 48001 and 11999 for 0.8 0.2\n", + "val_frac = 1 - train_frac\n", + "\n", + "#train_size = int(len(train_dataset)) * train_frac\n", + "#val_size = int(len(train_dataset)) - train_size\n", + "\n", + "#print(train_size)\n", + "#print(val_size)\n", + "\n", + "train_dataset, val_dataset = r_s(train_dataset, [train_frac,val_frac])\n", + "print(len(train_dataset))\n", + "print(len(val_dataset))\n", + "\n", + "# TODO: Create train, val and test DataLoaders\n", + "# HINT: Set `shuffle=True` for the train set.\n", + "batch_size = 64\n", + "num_workers = 2\n", + "train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers = num_workers,pin_memory=True)\n", + "val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False, num_workers = num_workers,pin_memory=True)\n", + "test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False, num_workers = num_workers,pin_memory=True)\n", + "\n", + "# By this we are using FMNIST as Iterable-Style Dataset by using the dataloader.\n", + "# Also I have kept memory pinning as true as this is a CUDA enabled GPU as I was facing trouble during Training. Source: Pytorch documentation" + ], + "metadata": { + "id": "O2YVG6DPOyui", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "5c4399b4-8921-42ed-aba6-57c6db2c2f0b" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "INFO:lightning_fabric.utilities.seed:Seed set to 42\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "48000\n", + "12000\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Step 2: Model Definition\n", + "\n", + "For this tutorial, we'll use a pre-trained ResNet-18 model, which is a popular model for image classification tasks." + ], + "metadata": { + "id": "UbgrhUjDQ7Xh" + } + }, + { + "metadata": { + "id": "sZD2NGz2Ak6w", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "50897a2e-141e-4af0-9d0b-15148777cf47" + }, + "cell_type": "code", + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "from torchvision.models import resnet18, ResNet18_Weights\n", + "\n", + "\n", + "class FashionMNISTClassifier(nn.Module):\n", + " def __init__(self, num_classes=10):\n", + " super(FashionMNISTClassifier, self).__init__()\n", + "\n", + " # Create a pre-trained ResNet-18 model from `torchvision` instead of writing\n", + " # our own model. This model was trained on the ImageNet dataset, which has\n", + " # RGB images with 1000 different classes.\n", + " self.model = resnet18(weights=ResNet18_Weights.DEFAULT)\n", + " # HINT: Use print(self.model) to see the architecture\n", + " print(\"Original\\n\",self.model)\n", + "\n", + " # The FashionMNIST dataset has grayscale images with and 10 classes.\n", + " # TODO: Modify the first layer to accept grayscale images\n", + " self.model.conv1 = nn.Conv2d(1, 64, kernel_size=(7,7), stride=(2,2), padding=(3,3), bias = False) #Keeping the kernel_size, stride, padding and bias as the one of ResNet18 architecture\n", + "\n", + " # TODO: Modify the last layer to fit the number of classes in FashionMNIST\n", + " print(\"Final\\n\",self.model)\n", + " self.model.fc = nn.Linear(in_features = 512, out_features=num_classes, bias=True)\n", + "\n", + " self.number_of_classes = num_classes\n", + "\n", + "\n", + "\n", + "\n", + " def forward(self, x):\n", + " return self.model(x)\n", + "\n", + "model = FashionMNISTClassifier()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Original\n", + " ResNet(\n", + " (conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", + " (layer1): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer2): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(64, 128, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer3): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(128, 256, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer4): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (avgpool): AdaptiveAvgPool2d(output_size=(1, 1))\n", + " (fc): Linear(in_features=512, out_features=1000, bias=True)\n", + ")\n", + "Final\n", + " ResNet(\n", + " (conv1): Conv2d(1, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", + " (layer1): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer2): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(64, 128, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer3): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(128, 256, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer4): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (avgpool): AdaptiveAvgPool2d(output_size=(1, 1))\n", + " (fc): Linear(in_features=512, out_features=1000, bias=True)\n", + ")\n" + ] + } + ] + }, + { + "metadata": { + "id": "GcAfrn2falkK" + }, + "cell_type": "markdown", + "source": [ + "## Step 3: Training with PyTorch Lightning\n", + "\n", + "PyTorch Lightning simplifies the training loop. Let's create a Lightning module for our classification task." + ] + }, + { + "metadata": { + "id": "xOjlOyjcCezX" + }, + "cell_type": "code", + "source": [ + "import pytorch_lightning as pl\n", + "import torch.optim as optim\n", + "from torchmetrics import Accuracy\n", + "\n", + "\n", + "class ClassificationModule(pl.LightningModule):\n", + " \"\"\" A PyTorch Lightning module for contains both the network and the\n", + " training logic, unlike simple PyTorch code we saw in the first tutorial. \"\"\"\n", + " def __init__(self, learning_rate=0.001, num_classes=10):\n", + " super(ClassificationModule, self).__init__()\n", + " self.save_hyperparameters() # allows access to constructor args with self.hparams.*\n", + "\n", + " self.model = FashionMNISTClassifier(num_classes=num_classes)\n", + "\n", + " # TODO: Define a loss function\n", + " # HINT: This is a classification task with multiple classes.\n", + " self.loss_fn = nn.CrossEntropyLoss()\n", + "\n", + " # TODO: Create an appropriate metric from torchmetrics\n", + " self.metric = Accuracy(task=\"multiclass\", num_classes=num_classes)\n", + "\n", + " def forward(self, x):\n", + " return self.model(x)\n", + "\n", + " def training_step(self, batch, batch_idx):\n", + " images, labels = batch\n", + " outputs = self(images) # Forward pass\n", + " loss = self.loss_fn(outputs, labels)\n", + " self.log('train_loss', loss)\n", + "\n", + " # Note: We do not need to manually call loss.backward() or optim.step()\n", + " # when using PyTorch Lightning\n", + " return loss\n", + "\n", + " def on_validation_epoch_start(self):\n", + " self.metric.reset()\n", + "\n", + " def validation_step(self, batch, batch_idx):\n", + " images, labels = batch\n", + " outputs = self(images)\n", + " loss = self.loss_fn(outputs, labels)\n", + " self.log('val_loss', loss, prog_bar=True)\n", + "\n", + " # Update accuracy for current batch\n", + " _, preds = torch.max(outputs, 1)\n", + " self.metric.update(preds, labels)\n", + " return loss\n", + "\n", + " def on_validation_epoch_end(self):\n", + " avg_accuracy = self.metric.compute()\n", + " self.log('val_accuracy', avg_accuracy, prog_bar=True)\n", + "\n", + " def on_test_epoch_start(self):\n", + " self.metric.reset()\n", + "\n", + " def test_step(self, batch, batch_idx):\n", + " images, labels = batch\n", + " outputs = self(images)\n", + "\n", + " # Note: We do not need to calculate loss when evaluating\n", + " # on the test dataset, only the performance metric!\n", + "\n", + " # Update accuracy for current batch\n", + " _, preds = torch.max(outputs, 1)\n", + " self.metric.update(preds, labels)\n", + " return {\"test_accuracy\": self.metric}\n", + "\n", + " def on_test_epoch_end(self):\n", + " avg_accuracy = self.metric.compute()\n", + " self.log('test_accuracy', avg_accuracy, prog_bar=True)\n", + "\n", + " def configure_optimizers(self):\n", + " optimizer = optim.Adam(self.parameters(), lr=self.hparams.learning_rate)\n", + " return optimizer" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## Step 4: Training the Model\n", + "\n", + "Now that our Lightning module is defined, we can easily train our model." + ], + "metadata": { + "id": "Ms333UK1RKyb" + } + }, + { + "metadata": { + "id": "EuBvOWmGDHOq", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "6a28f10e148340b385b1501b4c7c5c8b", + "a0092803564548558d24a623f5ac957d", + "ff2ab652945c4ed789a93e6c3a897892", + "6f60ca3c85484e8fbbd215ea9051437e", + "2363cc7cff144a828b82bed2aa1e5235", + "7eeb68cb1f1d417b922754fcda6d875b", + "0d630a7389e1474daa7d7c2e9998df3a", + "3ac3079b2dc54e31810816f80fb685de", + "352d79e35d344a92bbe2afcd1cf7274d", + "9c4e5a7d610544e893e00bda642d29e3", + "05b4a9e4cb4142c780ed833a68f6f4c1", + "c182a1b5da3d45f7bea034c82554d79c", + "b4540bbfc3594e63bea60933f5da3606", + "716f28154eea45cf9e3c691061bddfe5", + "deb7aa1914e5421daa9817b5470c08a8", + "932c87617bf641d1a93f6d8eb5e2b8bc", + "4d92f08d8b984c5ea0f471ab8eaea400", + "0da798fad479463da66cb8602ea1489a", + "22b684c9ee3440f38cdac9001b23c152", + "17237af680e94051894ad9af000ed52e", + "44b74e7186eb4f02a460c473ebc641d7", + "c7f962883dd845a39ceea55555bbcebd", + "aac2f389c77245038e5b8e25a10825ad", + "f2ab2a0fe6bd41c28007e3ee6e6d2e79", + "7bdc557f191c42e382911d6966e9ca51", + "5920f74fad104a4a9d95da8b47dda595", + "6d3e23731e78498f9be802ba53979064", + "b08537a196ae449e8edc438a5827df9d", + "80d5049be9774d8a8cdac1f1c081416e", + "eea5e6866a9f4e1699ccc9e722e46180", + "1a2d749eaa0c4f79a49901c734a29c01", + "de1bc3a54d1d428f8f9c0fa1286f5246", + "5050684651cc45b28bfff15d1b8f6606", + "7af0427555d44d43b6dbadf3ea22ca56", + "de88b98f53684644b839902ed88201c9", + "facf683e25864ba98a1671a9eb11d076", + "c81889efaab043c5a00366902d7e960a", + "dbb74f4d86334d898cbfaaae2947a504", + "e51b690aa5af462591de5ab717024e8a", + "6f88abc3b2d2456a8011e10d404d04f1", + "7dd59f135d164edba3bdfa23b7bc0f00", + "63597defe26145cab6264b4d1a9cc3b8", + "7c41cdd6ff34451db64d7b3cc56c2a11", + "94adc2c3fd0247228ccb36f3170d13d5", + "2a199648e69d4930b2410572a7f317ad", + "345dcd7a4ad34900ab6d7f891ba11990", + "1c58da62c2e94d3298718d1914fbce55", + "31abf3479661481a95a19384e1856f7a", + "855bc2a29c464adb8d3b5c3c4503fa35", + "90751d1b80f74d80936e4cec425f30f8", + "18c95d4c020842119f09c031459e87f3", + "c8a768ef58e74092a7985b818138bcdd", + "6086ef172a07406b982e796c3728b34f", + "e15583359cd54aeaa2a9fa9889b1f163", + "07a3365f5b344806867574891f3cbaf3", + "0983a0530d9f4b358ba76992d2c2721f", + "dd5aa409e37b456787cd12e12813faca", + "cb34ac09b8164fa4826bc7ee943f3af2", + "d98fd2b815e8412ca6bfab50fbb972f4", + "77fb615a9596470c9b179d2e0187d5d1", + "01b7d430fa90431081cb3b3ba946948e", + "7aa93d09bc9e4493bb235a90207c2271", + "700e56597c1b440696ae68e41d9b3e7d", + "8cd2af74899949c4a75c0398bdb3b184", + "34bb2b2fcf044d12b4cecd69611281f4", + "83acd8ab0082490da966dc8a5f085d59", + "72acf212e0ea4185866c12ea47e10a51", + "569e987d5ec74f8381e4c04a7d8f346c", + "3affebeb03d544618ec207c5bb09a5d1", + "2acb5f5003c34e4ba3e68b3d61df2107", + "d1a7d2bd95de47bfaa5a9150c1a064d6", + "bad49b78183a43d1801cdcae6c800fc3", + "3d2287b86e5f454b89ea03d413357d7f", + "bd1bc914d0314163bbfdf3f6a5507b65", + "d4138a821ac141e38fbb860e5471dd90", + "56b477d21fb942989ea62e4572753d2a", + "54c7d79558774ed595e7c9518f576fbb", + "0ef53f80700d4548a25962cf6cf6d6ff", + "bff1822c2e114cf380410334310a07ee", + "7fc0e4eaaf734f0f8f8409230bade48e", + "c7363abf26454f508a0c767572d067fa", + "9b8667b96f7147f2bfbae4f46e84ddeb", + "7fc97953eff54de9b9a268e4c42c707f", + "848726ca60ae47009bbca647083ec8df", + "023cde92392d468dbde436d745fdb8c9", + "5b83cad1b5804386a82895853502a26a", + "fa856adf628a4ca28569c93c61db7e52", + "ee29cdfe85dc478491a94684a5f67378", + "f3873a33f8584ef7bc1bc6d8c66db4bb", + "8688e88ebd8b41a0b6aa32a0494908dd", + "2483badf200c414d922dd94d8a068fb8", + "0ddac912834846a9aea8eb1290111211", + "160548e0c6da4822b94dd8e9aabe208b", + "d60d26afb978418081fe1d416ac4b8df", + "eb6c1f3a637c4eca88258e0f08711aae", + "a4d89389ed0446b394ee972c032600c0", + "92fa7c54a5224b8b8cb284c537245936", + "c471022af44d4f1789c6f8e2cce91c00", + "d965f127200f4653b5d78114e06a65ee", + "436956c5a4264f0d9388e161fc62cd76", + "6ad63f0bf93b4e7d916207b3e29ca1ce", + "33a95edb6934463289ff14300fd91217", + "a6c5d0ce0d07485ea315697b4754a251", + "754347749e9c4776a6edf6b7882e8912", + "45ded6944d9540098283eec55384a08f", + "53268adbe652437f9da01bb13259ece9", + "a259be453fde4d8da250c09c7e2a13dc", + "772dad8b267c4d128c9e59356cbdecd6", + "7e14f0bf06e74688be8ce83b4f588e40", + "b49b0db9ba4b44d5959e43fea042c889", + "9a17ae69160c4d56a489393ac26b7989", + "b757149a44094b85b43a1c33b850f59b", + "836603c0b95e42dfb049b439d33374d9", + "76f3268fd7404e4ba3e4d3163478570d", + "8f92f98ad229498c84de693c4cab8e8e", + "67fbaadcc77f40d3bfd4ea4ad577a892", + "ea7fb53e1d1c43aabed90dd57fa7912f", + "46bb4d1e170f4110b65c15cd4ae76d9c", + "b933861766994e6792b5bcbd27c3c497", + "4e861ea318cf43d0b216a7dfcccdb67d", + "b51a924ed2f84a108c1f3974a6a34458", + "a536bcb4c67d485db7e232f41c63060b", + "41f622b68065474c98fbf0fd012de213", + "225dc77b4e264b19a00e934360e5e17d", + "709b24584af84c2eaaa1d64efbd210f5", + "b6c5db85d4d44ad2a30f154fc647935c", + "4fc37f9e4e6946f9b2956c8dd05f0aee", + "23a8b1d55016454fbe206b68c8a57aff", + "b4754635995d494d937607cf69d40f88", + "bb2e47b378504afc8a36796e18704221", + "4e3412294f94431bb42466f6f2de693f", + "19c59252dbfb4e72bc7d440f92ecc8ea" + ] + }, + "outputId": "3e9745bd-abc5-484d-a607-ab5c0321ab4e" + }, + "cell_type": "code", + "source": [ + "# Initialize the classifier\n", + "classifier = ClassificationModule()\n", + "\n", + "# Create a logger\n", + "# HINT: Lightning has many different kinds of loggers, such\n", + "# as Tensorboard, WandB, Comet, etc.\n", + "# https://lightning.ai/docs/pytorch/stable/api_references.html#loggers\n", + "logger = pl.loggers.CSVLogger('./logs')\n", + "\n", + "# Initialize a trainer\n", + "trainer = pl.Trainer(\n", + " deterministic=True,\n", + " accelerator='gpu' if torch.cuda.is_available() else 'cpu',\n", + " logger=logger,\n", + " max_epochs=10,\n", + ")\n", + "\n", + "# Train the model\n", + "trainer.fit(classifier, train_loader, val_loader)" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "INFO:pytorch_lightning.utilities.rank_zero:GPU available: True (cuda), used: True\n", + "INFO:pytorch_lightning.utilities.rank_zero:TPU available: False, using: 0 TPU cores\n", + "INFO:pytorch_lightning.utilities.rank_zero:IPU available: False, using: 0 IPUs\n", + "INFO:pytorch_lightning.utilities.rank_zero:HPU available: False, using: 0 HPUs\n", + "INFO:pytorch_lightning.accelerators.cuda:LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n", + "INFO:pytorch_lightning.callbacks.model_summary:\n", + " | Name | Type | Params\n", + "---------------------------------------------------\n", + "0 | model | FashionMNISTClassifier | 11.2 M\n", + "1 | loss_fn | CrossEntropyLoss | 0 \n", + "2 | metric | MulticlassAccuracy | 0 \n", + "---------------------------------------------------\n", + "11.2 M Trainable params\n", + "0 Non-trainable params\n", + "11.2 M Total params\n", + "44.701 Total estimated model params size (MB)\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Original\n", + " ResNet(\n", + " (conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", + " (layer1): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer2): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(64, 128, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer3): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(128, 256, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer4): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (avgpool): AdaptiveAvgPool2d(output_size=(1, 1))\n", + " (fc): Linear(in_features=512, out_features=1000, bias=True)\n", + ")\n", + "Final\n", + " ResNet(\n", + " (conv1): Conv2d(1, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", + " (layer1): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer2): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(64, 128, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer3): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(128, 256, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer4): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (avgpool): AdaptiveAvgPool2d(output_size=(1, 1))\n", + " (fc): Linear(in_features=512, out_features=1000, bias=True)\n", + ")\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Sanity Checking: | | 0/? [00:00<?, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "6a28f10e148340b385b1501b4c7c5c8b" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Training: | | 0/? [00:00<?, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "c182a1b5da3d45f7bea034c82554d79c" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: | | 0/? [00:00<?, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "aac2f389c77245038e5b8e25a10825ad" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: | | 0/? [00:00<?, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "7af0427555d44d43b6dbadf3ea22ca56" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: | | 0/? [00:00<?, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "2a199648e69d4930b2410572a7f317ad" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: | | 0/? [00:00<?, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "0983a0530d9f4b358ba76992d2c2721f" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: | | 0/? [00:00<?, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "72acf212e0ea4185866c12ea47e10a51" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: | | 0/? [00:00<?, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "0ef53f80700d4548a25962cf6cf6d6ff" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: | | 0/? [00:00<?, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "f3873a33f8584ef7bc1bc6d8c66db4bb" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: | | 0/? [00:00<?, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "436956c5a4264f0d9388e161fc62cd76" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: | | 0/? [00:00<?, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "9a17ae69160c4d56a489393ac26b7989" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: | | 0/? [00:00<?, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "a536bcb4c67d485db7e232f41c63060b" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "INFO:pytorch_lightning.utilities.rank_zero:`Trainer.fit` stopped: `max_epochs=10` reached.\n" + ] + } + ] + }, + { + "metadata": { + "id": "lGyau0mOaP2m" + }, + "cell_type": "markdown", + "source": [ + "## Step 5: Testing the Model\n", + "\n", + "Let's write a simple loop to test the model's predictions." + ] + }, + { + "metadata": { + "id": "F9CppCcqDLtB", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 165, + "referenced_widgets": [ + "b7ee6504c6f84b83979ebc8ae1903b60", + "7500e56ff597449ea821970c12f2b2fc", + "525d994e14c149c5a27349715c57b215", + "e6422a68a5024306ab8a064afdd8e3b0", + "d8cf9edf34504ec9b7eebb36c7d2fef5", + "dbeb4cbea219435182755b2180021d46", + "71233d05ec8149cd9edd57e8f0206b6e", + "a1138ca08de046709a798ec0229051bb", + "d3fb1523dcb34cf0bf07572467b3b27e", + "3dc162ecb4444de788cc9c7d8e97b9f2", + "fe78347050c0411482f8e5a08f7265f7" + ] + }, + "outputId": "25b021e1-ffca-4b13-f13a-d616b3101ea7" + }, + "cell_type": "code", + "source": [ + "# TODO: Test the network performance with test_loader\n", + "acc = trainer.test(classifier, test_loader)\n", + "print(f\"Accuracy: {(acc[0]['test_accuracy'] * 100):.2f}%\")" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "INFO:pytorch_lightning.accelerators.cuda:LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Testing: | | 0/? [00:00<?, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "b7ee6504c6f84b83979ebc8ae1903b60" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1m Test metric \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m DataLoader 0 \u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", + "│\u001b[36m \u001b[0m\u001b[36m test_accuracy \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m 0.9196000099182129 \u001b[0m\u001b[35m \u001b[0m│\n", + "└───────────────────────────┴───────────────────────────┘\n" + ], + "text/html": [ + "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", + "┃<span style=\"font-weight: bold\"> Test metric </span>┃<span style=\"font-weight: bold\"> DataLoader 0 </span>┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", + "│<span style=\"color: #008080; text-decoration-color: #008080\"> test_accuracy </span>│<span style=\"color: #800080; text-decoration-color: #800080\"> 0.9196000099182129 </span>│\n", + "└───────────────────────────┴───────────────────────────┘\n", + "</pre>\n" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Accuracy: 91.96%\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "\n", + "log_file = './logs/lightning_logs/version_0/metrics.csv'\n", + "logs = pd.read_csv(log_file)\n", + "print(logs.head())" + ], + "metadata": { + "id": "M_uV1-nWq3W0", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "92099186-80fb-4c15-a758-564d54fc60b0" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " epoch step train_loss val_accuracy val_loss\n", + "0 0 49 0.312611 NaN NaN\n", + "1 0 99 0.391128 NaN NaN\n", + "2 0 149 0.359755 NaN NaN\n", + "3 0 199 0.360132 NaN NaN\n", + "4 0 249 0.268124 NaN NaN\n" + ] + } + ] + }, + { + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "def plot_metrics(df):\n", + " df_train = df[['epoch', 'step', 'train_loss']].dropna()\n", + " df_train = df_train.groupby('epoch').apply(lambda x: x.loc[x['step'].idxmax()])[['epoch', 'step', 'train_loss']]\n", + " df_val = df[['epoch', 'step', 'val_loss', 'val_accuracy']].dropna()\n", + " df_test = df[['epoch', 'step', 'test_accuracy']].dropna()\n", + "\n", + " # Set up the figure and axes\n", + " fig, axs = plt.subplots(1, 2, figsize=(14, 5))\n", + "\n", + " # Plot train_loss and val_loss on the first subplot\n", + " axs[0].plot(df_train['epoch'], df_train['train_loss'], label='Train Loss', color='blue')\n", + " axs[0].plot(df_val['epoch'], df_val['val_accuracy'], label='Validation Loss', color='red', linestyle='dashed')\n", + " axs[0].set_title('Train Loss vs Validation Loss')\n", + " axs[0].set_xlabel('Step')\n", + " axs[0].set_ylabel('Loss')\n", + " axs[0].legend()\n", + "\n", + " # Plot val_acc and test_accuracy on the second subplot\n", + " axs[1].plot(df_val['epoch'], df_val['val_acc'], label='Validation Accuracy', color='green')\n", + " axs[1].plot(df_test['epoch'], df_test['test_accuracy'], label='Test Accuracy', color='orange', linestyle='dashed')\n", + " axs[1].set_title('Validation Accuracy vs Test Accuracy')\n", + " axs[1].set_xlabel('Step')\n", + " axs[1].set_ylabel('Accuracy')\n", + " axs[1].legend()\n", + "\n", + " plt.tight_layout()\n", + " plt.show()\n", + "\n", + "plot_metrics(logs)\n" + ], + "cell_type": "code", + "metadata": { + "id": "_oUjtgnnrLa3", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "ffd15d39-fd01-4913-ce78-cd4292f5a421" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "error", + "ename": "KeyError", + "evalue": "ignored", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3801\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3802\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcasted_key\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3803\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", + "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", + "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mKeyError\u001b[0m: 'val_acc'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-45-3f681427a29d>\u001b[0m in \u001b[0;36m<cell line: 32>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 30\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 31\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 32\u001b[0;31m \u001b[0mplot_metrics\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlogs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m<ipython-input-45-3f681427a29d>\u001b[0m in \u001b[0;36mplot_metrics\u001b[0;34m(df)\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;31m# Plot val_acc and test_accuracy on the second subplot\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0maxs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf_val\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'epoch'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdf_val\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'val_acc'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'Validation Accuracy'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'green'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 23\u001b[0m \u001b[0maxs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf_test\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'epoch'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdf_test\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'test_accuracy'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'Test Accuracy'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'orange'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlinestyle\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'dashed'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0maxs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_title\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Validation Accuracy vs Test Accuracy'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3805\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnlevels\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3806\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3807\u001b[0;31m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3808\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_integer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3809\u001b[0m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3802\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcasted_key\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3803\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3804\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3805\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3806\u001b[0m \u001b[0;31m# If we have a listlike key, _check_indexing_error will raise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyError\u001b[0m: 'val_acc'" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 1400x500 with 2 Axes>" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJgAAAHWCAYAAAA7PjMLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACJMUlEQVR4nOzdd3gVZd6H8fskmISW0ANINCAioBSliQVdjQRFBBQFFqWIsouKJaKCBcSGBV0LrKwogu4i2EDXQjErVhQVsWKnqYSmJBQhkJz3j3kJRooBkpwk3J/rmos5c5555jeZoyd8eeaZUDgcDiNJkiRJkiTto6hIFyBJkiRJkqTSzYBJkiRJkiRJ+8WASZIkSZIkSfvFgEmSJEmSJEn7xYBJkiRJkiRJ+8WASZIkSZIkSfvFgEmSJEmSJEn7xYBJkiRJkiRJ+8WASZIkSZIkSfvFgEmKsP79+5OcnBzpMvQn5s6dSygUYu7cuXnbCnrtlixZQigUYtKkSYVaU3JyMv379y/UPiVJkiRpXxgwSbsRCoUKtPw+cCgJtgchzz77bKRLiZjmzZtzyCGHEA6Hd9vm+OOPJzExkW3bthVjZXvv3Xff5eabb2bdunWRLiXPpEmTCIVCfPjhh5EuRZIkSVIJUS7SBUgl1ZNPPpnv9RNPPMGcOXN22t6kSZP9Os6ECRPIzc3drz6UX58+fRg2bBhvvfUWHTp02On9JUuWMG/ePC677DLKldv3/w0Wx7V79913GTVqFP3796dKlSr53vv666+JivLfCSRJkiRFngGTtBvnn39+vtfvvfcec+bM2Wn7H23atIkKFSoU+DgHHXTQPtWn3fvrX//K8OHDmTJlyi4DpqeeeopwOEyfPn326ziRvnaxsbERPb4kSZIkbec/fUv74eSTT+aoo47io48+okOHDlSoUIHrr78egBdeeIHOnTtTt25dYmNjOeyww7j11lvJycnJ18cf5/HZPl/PmDFjeOSRRzjssMOIjY2lTZs2fPDBB4VW+w8//MC5555LtWrVqFChAsceeywvv/zyTu0eeughjjzySCpUqEDVqlVp3bo1U6ZMyXt//fr1XHnllSQnJxMbG0utWrU47bTTWLBgwW6P/eyzzxIKhXjjjTd2eu9f//oXoVCIzz//HICMjAwGDBhAvXr1iI2NpU6dOnTt2pUlS5bstv+kpCQ6dOjAs88+y9atW3d6f8qUKRx22GG0a9eOpUuXcskll3DEEUdQvnx5qlevzrnnnrvH/rfb1RxM69ato3///iQkJFClShX69eu3y9vbPv30U/r370+DBg2Ii4ujdu3aXHjhhaxduzavzc0338w111wDQP369fNuy9xe267mYCrIdd1+G+XTTz/N7bffTr169YiLi+PUU0/lu++++9PzLqiPP/6Y008/nfj4eCpVqsSpp57Ke++9l6/N1q1bGTVqFIcffjhxcXFUr16dE044gTlz5uS12ZfPgCRJkqTi5QgmaT+tXbuW008/nV69enH++eeTmJgIBPPUVKpUibS0NCpVqsT//vc/RowYQVZWFvfcc8+f9jtlyhTWr1/P3/72N0KhEHfffTdnn302P/zww36PnFm5ciXHHXccmzZt4vLLL6d69epMnjyZs846i2effZbu3bsDwS1gl19+OT169OCKK65g8+bNfPrpp7z//vv89a9/BeDvf/87zz77LJdddhlNmzZl7dq1vP322yxatIhjjjlml8fv3LkzlSpV4umnn+akk07K9960adM48sgjOeqoowA455xz+OKLLxgyZAjJycmsWrWKOXPmsGzZsj1OsN2nTx8GDRrErFmzOPPMM/O2f/bZZ3z++eeMGDECgA8++IB3332XXr16Ua9ePZYsWcLDDz/MySefzJdffrlXo9HC4TBdu3bl7bff5u9//ztNmjRh+vTp9OvXb6e2c+bM4YcffmDAgAHUrl2bL774gkceeYQvvviC9957j1AoxNlnn80333zDU089xT/+8Q9q1KgBQM2aNXd5/IJe1+3uvPNOoqKiGDp0KJmZmdx999306dOH999/v8DnvDtffPEFJ554IvHx8Vx77bUcdNBB/Otf/+Lkk0/mjTfeoF27dkAQoo0ePZqLLrqItm3bkpWVxYcffsiCBQs47bTTgH3/DEiSJEkqRmFJBXLppZeG//ifzEknnRQGwuPHj9+p/aZNm3ba9re//S1coUKF8ObNm/O29evXL3zooYfmvV68eHEYCFevXj38yy+/5G1/4YUXwkD4v//97x7rfP3118NA+JlnntltmyuvvDIMhN966628bevXrw/Xr18/nJycHM7JyQmHw+Fw165dw0ceeeQej5eQkBC+9NJL99hmV3r37h2uVatWeNu2bXnbVqxYEY6Kigrfcsst4XA4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d+zYkdq1a3P88ceTmJjIokWLGDt2LJ07d6Zy5cqsW7eOevXq0aNHD1q0aEGlSpV47bXX+OCDDwo0uuSggw7i7LPPZurUqWzcuJExY8bke/+bb77h1FNP5bzzzqNp06aUK1eO6dOns3Llyny3ue3JSSedRL169XjhhRcoX748Z599dr73zzzzTJ588kkSEhJo2rQp8+bN47XXXqN69eoF6v/3unTpwvHHH8+wYcNYsmQJTZs25fnnn98phIuPj8+bS2jr1q0cfPDBzJ49m8WLF+/UZ6tWrQC44YYb6NWrFwcddBBdunTJC55+r6DXtbBMnDgx77a+37viiiu47bbbmDNnDieccAKXXHIJ5cqV41//+hdbtmzh7rvvzmvbtGlTTj75ZFq1akW1atX48MMPefbZZ7nsssuAwvkMSJIkSSoGEXt+nVTKXHrppeE//idz0kknhY888shdtn/nnXfCxx57bLh8+fLhunXrhq+99trwrFmz/vRR94sXL97tY9mB8MiRI/dY5/ZH0O9u2f4I+++//z7co0ePcJUqVcJxcXHhtm3bhl966aV8ff3rX/8Kd+jQIVy9evVwbGxs+LDDDgtfc8014czMzHA4HA5v2bIlfM0114RbtGgRrly5crhixYrhFi1ahP/5z3/uscbfmzNnThgIh0Kh8PLly/O9t2bNmvCll14abty4cbhixYrhhISEcLt27cJPP/10gfsPh8Pha665JgyEzzvvvJ3e+/XXX8MDBgwI16hRI1ypUqVwampq+Kuvvgofeuih4X79+uW12/5z3dO1C4fD4bVr14YvuOCCcHx8fDghISF8wQUXhD/++OMwEH788cfz2v3444/h7t27h6tUqRJOSEgIn3vuueGff/55l9f41ltvDR988MHhqKioMBBevHhxOBwO71RjOFyw67r9XJ555pl827d/9n5f5648/vjje/yMbb+OCxYsCKempoYrVaoUrlChQvgvf/lL+N13383X12233RZu27ZtuEqVKuHy5cuHGzduHL799tvD2dnZ4XC48D4DkiRJkopWKBwuxiEVkiRJkiRJKnOcg0mSJEmSJEn7xYBJkiRJkiRJ+8WASZIkSZIkSfvFgEmSJKmMefPNN+nSpQt169YlFAoxY8aMP91n7ty5HHPMMcTGxtKwYUMmTZpU5HVKkqSyw4BJkiSpjNm4cSMtWrRg3LhxBWq/ePFiOnfuzF/+8hcWLlzIlVdeyUUXXcSsWbOKuFJJklRW+BQ5SZKkMiwUCjF9+nS6deu22zbXXXcdL7/8Mp9//nnetl69erFu3TpmzpxZDFVKkqTSrlykCyiJcnNz+fnnn6lcuTKhUCjS5UiSpN0Ih8OsX7+eunXrEhXlwOx9NW/ePFJSUvJtS01N5corr9ztPlu2bGHLli15r3Nzc/nll1+oXr26vz9JklSCFdXvTwZMu/Dzzz+TlJQU6TIkSVIBLV++nHr16kW6jFIrIyODxMTEfNsSExPJysrit99+o3z58jvtM3r0aEaNGlVcJUqSpEJW2L8/GTDtQuXKlYHghx0fHx/haiRJ0u5kZWWRlJSU992t4jN8+HDS0tLyXmdmZnLIIYf4+5MkSSVcUf3+ZMC0C9uHdcfHx/sLkiRJpYC3ZO2f2rVrs3LlynzbVq5cSXx8/C5HLwHExsYSGxu703Z/f5IkqXQo7N+fnKxAkiTpANe+fXvS09PzbZszZw7t27ePUEWSJKm0MWCSJEkqYzZs2MDChQtZuHAhAIsXL2bhwoUsW7YMCG5v69u3b177v//97/zwww9ce+21fPXVV/zzn//k6aef5qqrropE+ZIkqRQyYJIkSSpjPvzwQ44++miOPvpoANLS0jj66KMZMWIEACtWrMgLmwDq16/Pyy+/zJw5c2jRogX33nsvjz76KKmpqRGpX5IklT6hcDgcjnQRJU1WVhYJCQlkZmY6h4AkFVA4HGbbtm3k5OREuhSVIdHR0ZQrV263cwT4nV1yeC0kSSodiuo720m+JUn7LTs7mxUrVrBp06ZIl6IyqEKFCtSpU4eYmJhIlyJJkqTdMGCSJO2X3NxcFi9eTHR0NHXr1iUmJsYneqlQhMNhsrOzWb16NYsXL+bwww8nKsq7+yVJkkoiAyZJ0n7Jzs4mNzeXpKQkKlSoEOlyVMaUL1+egw46iKVLl5KdnU1cXFykS5IkSdIu+M+AkqRC4cgSFRU/W5IkSSWfv7FJkiRJkiRpvxgwSZIkSZIkab8YMEmSVEiSk5O5//77I12GJEmSVOwMmCRJB5xQKLTH5eabb96nfj/44AMGDRq0X7WdfPLJXHnllfvVhyRJklTcfIqcJOmAs2LFirz1adOmMWLECL7++uu8bZUqVcpbD4fD5OTkUK7cn39l1qxZs3ALlSRJkkoJRzAVt+xs+O67SFchSUUmHIaNGyOzhMMFq7F27dp5S0JCAqFQKO/1V199ReXKlXn11Vdp1aoVsbGxvP3223z//fd07dqVxMREKlWqRJs2bXjttdfy9fvHW+RCoRCPPvoo3bt3p0KFChx++OG8+OKL+/Xzfe655zjyyCOJjY0lOTmZe++9N9/7//znPzn88MOJi4sjMTGRHj165L337LPP0qxZM8qXL0/16tVJSUlh48aN+1WPJEmSBI5gKl7Ll0P37rBmDSxcCFWqRLoiSSp0mzbB7wYAFasNG6BixcLpa9iwYYwZM4YGDRpQtWpVli9fzhlnnMHtt99ObGwsTzzxBF26dOHrr7/mkEMO2W0/o0aN4u677+aee+7hoYceok+fPixdupRq1artdU0fffQR5513HjfffDM9e/bk3Xff5ZJLLqF69er079+fDz/8kMsvv5wnn3yS4447jl9++YW33noLCEZt9e7dm7vvvpvu3buzfv163nrrLcIFTeUkSZKkPTBgKk4JCbBuHSxdChdfDE8/DaFQpKuSJO3CLbfcwmmnnZb3ulq1arRo0SLv9a233sr06dN58cUXueyyy3bbT//+/enduzcAd9xxBw8++CDz58+nU6dOe13Tfffdx6mnnspNN90EQKNGjfjyyy+555576N+/P8uWLaNixYqceeaZVK5cmUMPPZSjjz4aCAKmbdu2cfbZZ3PooYcC0KxZs72uQZIkSdoVb5ErTvHx8NRTUK4cPPssTJgQ6YokqdBVqBCMJIrEUqFC4Z1H69at873esGEDQ4cOpUmTJlSpUoVKlSqxaNEili1btsd+mjdvnrdesWJF4uPjWbVq1T7VtGjRIo4//vh8244//ni+/fZbcnJyOO200zj00ENp0KABF1xwAf/5z3/YtGkTAC1atODUU0+lWbNmnHvuuUyYMIFff/11n+qQJEmS/siAqbi1aQOjRwfrV1wBX3wR2XokqZCFQsFtapFYCnNQaMU/3Gs3dOhQpk+fzh133MFbb73FwoULadasGdnZ2Xvs56CDDvrDzydEbm5u4RX6O5UrV2bBggU89dRT1KlThxEjRtCiRQvWrVtHdHQ0c+bM4dVXX6Vp06Y89NBDHHHEESxevLhIapEkSdKBxYApEtLSIDUVNm+Gnj3ht98iXZEk6U+888479O/fn+7du9OsWTNq167N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9rnuuuto1KgRFSpUoEGDBtx0001s3boVCEYQjRo1ik8++YRQKEQoFMqr+Y+3yH322WeccsoplC9fnurVqzNo0CA2bNiQ937//v3p1q0bY8aMoU6dOlSvXp1LL70071j7YtmyZXTt2pVKlSoRHx/Peeedl29exU8++YS//OUvVK5cmfj4eFq1asWHH34IwNKlS+nSpQtVq1alYsWKHHnkkbzyyiv7XIskSZIiK+IjmFQA9erBxInQrRvcey+ceioU8W0RkrTfKlXa/XtnnAEvv7zjda1asGnTrtuedBLMnbvjdXJyMDfdH4XDBS6tXLly9O3bl0mTJnHDDTcQCoUAeOaZZ8jJyaF3795s2LCBVq1acd111xEfH8/LL7/MBRdcwGGHHUbbtm3/9Bi5ubmcffbZJCYm8v7775OZmZlvvqbtKleuzKRJk6hbty6fffYZF198MZUrV+baa6+lZ8+efP7558ycOZPXXnsNgISEhJ362LhxI6mpqbRv354PPviAVatWcdFFF3HZZZflC9Fef/116tSpw+uvv853331Hz549admyJRdffHGBf3a/P7/t4dIbb7zBtm3buPTSS+nZsydz//969enTh6OPPpqHH36Y6OhoFi5cyEEHHQTApZdeSnZ2Nm+++SYVK1bkyy+/pNKePjOSJEkq0QyYSouuXeHSS2HcOOjXDz75BErrpOWSVAJceOGF3HPPPbzxxht5TyF9/PHHOeecc0hISCAhIYGhQ4fmtR8yZAizZs3i6aefLlDA9Nprr/HVV18xa9Ys6tatC8Add9yx07xJN954Y956cnIyQ4cOZerUqVx77bWUL1+eSpUqUa5cuT3eEjdlyhQ2b97ME088QcWKFQEYO3YsXbp04a677sobxVu1alXGjh1LdHQ0jRs3pnPnzqSnp+9TwJSens5nn33G4sWLSUpKAuCJJ57gyCOP5IMPPqBNmzYsW7aMa665hsaNGwNw+OGH5+2/bNkyzjnnHJo1awYET3yVJElS6VUibpFTAY0ZA82bw+rV3ionqeTbsGH3y3PP5W+7atXu2776av62S5bsut1eaty4MccddxwTJ04E4LvvvuOtt95i4MCBAOTk5HDrrbfSrFkzqlWrRqVKlZg1axbLli0rUP+LFi0iKSkpL1wCdvmE1GnTpnH88cdTu3ZtKlWqxI033ljgY/z+WC1atMgLlwCOP/54cnNz+frrr/O2HXnkkURHR+e9rlOnDqtWrdqrY/3+mElJSXnhEkDTpk2pUqUKixYtAoIHeVx00UWkpKRw55138v333+e1vfzyy7nttts4/vjjGTly5D5Nqi5JkqSSw4CpNImLg6lTgxFMf/IYbEmKuIoVd7/ExRW8bfnyBWu7DwYOHMhzzz3H+vXrefzxxznssMM46aSTALjnnnt44IEHuO6663j99ddZuHAhqampZGdn79OxdmXevHn06dOHM844g5deeomPP/6YG264oVCP8Xvbb0/bLhQKkZubWyTHguAJeF988QWdO3fmf//7H02bNmX69OkAXHTRRfzwww9ccMEFfPbZZ7Ru3ZqHHnqoyGqRJElS0TJgKm2aNIFJk2AXc3BIkvbOeeedR1RUFFOmTOGJJ57gwgsvzJuP6Z133qFr166cf/75tGjRggYNGvDNN98UuO8mTZqwfPlyVqxYkbftvffey9fm3Xff5dBDD+WGG26gdevWHH744SxdujRfm5iYGHJycv70WJ988gkbfzfZ+TvvvENUVBRHHHFEgWveG9vPb/ny5XnbvvzyS9atW0fTpk3ztjVq1IirrrqK2bNnc/bZZ/P444/nvZeUlMTf//53nn/+ea6++momTJhQJLVKkiSp6BkwlWbhcBA2ZWZGuhJJKpUqVapEz549GT58OCtWrKB///557x1++OHMmTOHd999l0WLFvG3v/0t3xPS/kxKSgqNGjWiX79+fPLJJ7z11lvccMMN+docfvjhLFu2jKlTp/L999/z4IMP5o3w2S45OZnFixezcOFC1qxZw5YtW3Y6Vp8+fYiLi6Nfv358/vnnvP766wwZMoQLLrhgv5+impOTw8KFC/MtixYtIiUlhWbNmtGnTx8WLFjA/Pnz6du3LyeddBKtW7fmt99+47LLLmPu3LksXbqUd955hw8++IAmTZoAcOWVVzJr1iwWL17MggULeP311/PekyRJUuljwFSaXXUVDBgAf/vbXj09SZK0w8CBA/n1119JTU3NN1/SjTfeyDHHHENqaionn3wytWvXplu3bgXuNyoqiunTp/Pbb7/Rtm1bLrroIm6//fZ8bc466yyuuuoqLrvsMlq2bMm7777LTTfdlK/NOeecQ6dOnfjLX/5CzZo1eeqpp3Y6VoUKFZg1axa//PILbdq0oUePHpx66qmMHTt2734Yu7BhwwaOPvrofEuXLl0IhUK88MILVK1alQ4dOpCSkkKDBg2YNm0aANHR0axdu5a+ffvSqFEjzjvvPE4//XRGjRoFBMHVpZdeSpMmTejUqRONGjXin//8537XK0mSpMgIhcMmE3+UlZVFQkICmZmZxMfHR7qc3Xv/fTjhBNi2DR59FP5/YlpJKk6bN29m8eLF1K9fn7g/zq0kFYI9fcZKzXf2AcBrIUlS6VBU39mOYCrN2rWD224L1ocMgf9/ao8kSZIkSVJxMmAq7a65Bk47DX77DXr2DP6UJEmSJEkqRgZMpV1UFDzxBNSqBZ99BkOHRroiSZIkSZJ0gDFgKgtq1w5CJoB//Qu+/Tay9UiSJEmSpANKuUgXoEKSmgp33QXHHQeHHx7paiQdgHxmhIqKny1JkqSSz4CpmG3ZArGxRdT5tdcWUceStHsHHXQQAJs2baJ8+fIRrkZl0aZNm4AdnzVJkiSVPAZMxWjOHBg4EF5+GZo1K+KDLVoEb70FgwYV8YEkHeiio6OpUqUKq1atAqBChQqEQqEIV6WyIBwOs2nTJlatWkWVKlWIjo6OdEmSJEnaDQOmYhIOwz33wPLlcOaZ8P77wdRJRWLxYmjVKhgudcQRcNJJRXQgSQrU/v//oW0PmaTCVKVKlbzPmCRJkkomA6ZiEgrB1KnQvj188w107Qpz50KR3E1Svz6cdx5Mngx9+sAnn0D16kVwIEkKhEIh6tSpQ61atdi6dWuky1EZctBBBzlySZIkqRQwYCpG1aoFt8e1awfz50O/fkHoFFUUz/IbOxbmzQvSrAsvhBkzgpRLkopQdHS0YYAkSZJ0ACqKaEN70LAhTJ8OBx0EzzwDN91URAeqVClIr2Ji4MUXYdy4IjqQJEmSJEk60BkwRUCHDvDoo8H6HXfApElFdKCjjw4mfgIYOjS4VU6SJEmSJKmQGTBFSN++cOONwfqgQcF8TEViyBDo0iWY8Pv++4voIJIkSZIk6UBmwBRBo0ZBz56wdSucfXYwXVKhC4Vg4kS4806YMKEIDiBJkiRJkg50BkwRFBUFjz8Oxx4Lv/4KnTvD2rVFcKAaNeC666Ccc7pLkiRJkqTCZ8AUYeXLBw94S06G774LRjJt2VKEB9yyBYYNgx9+KMKDSJIkSZKkA4kBUwmQmAgvvQTx8fDmm/C3v0E4XEQHu+IKuOsu6N07uDdPkiRJkiRpPxkwlRBHHgnPPAPR0TB5MoweXUQHuv56qFoV5s/fMcu4JEmSJEnSfjBgKkE6doSxY4P1G26Ap58ugoMccgg89liwfvfdMHt2ERxEkiRJkiQdSAyYSpi//x2uuipY79sX3nuvCA7SvTsMHrzjICtXFsFBJEmSJEnSgcKAqQS65x7o0iWYj7trV1iypAgOcu+90KxZEC717Qu5uUVwEEmSJEmSdCAwYCqBoqNhyhRo2RJWrYIzz4TMzEI+SPnyMHVq8Od778HXXxfyASRJkiRJ0oHCgKmEqlQJ/vtfqFsXvvgCzjsPtm0r5IM0bQpPPQULF0KTJoXcuSRJkiRJOlAYMJVg9eoFIVOFCsFc3EOGQDhcyAfp2hXq1y/kTiVJkiRJ0oHEgKmEO+aY4Ha5UAjGj4cHHijCg82eDZdfXgQpliRJkiRJKssMmEqBrl2Dib8B0tKCUU2F7scfg8meHnoIHn+8CA4gSZIkSZLKKgOmUiItDQYNCgYX9e4dTJtUqOrVg1GjgvUhQ2DRokI+gCRJkiRJKqsMmEqJUAjGjoWUFNi4MRhs9PPPhXyQ666DU0+FTZugVy/YvLmQDyBJkorLuHHjSE5OJi4ujnbt2jF//vw9tr///vs54ogjKF++PElJSVx11VVs9ncBSZJUQAZMpchBB8EzzwQPfPvpJ+jSJQibCk1UFDz5JNSoAZ9+CtdeW4idS5Kk4jJt2jTS0tIYOXIkCxYsoEWLFqSmprJq1apdtp8yZQrDhg1j5MiRLFq0iMcee4xp06Zx/fXXF3PlkiSptDJgKmWqVIGXX4aaNWHBAujTB3JyCvEAderA5MnB+kMPwYsvFmLnkiSpONx3331cfPHFDBgwgKZNmzJ+/HgqVKjAxIkTd9n+3Xff5fjjj+evf/0rycnJdOzYkd69e//pqCdJkqTtDJhKofr1YcYMiI2FF16AYcMK+QBnnAFXXRWsp6cXcueSJKkoZWdn89FHH5GSkpK3LSoqipSUFObNm7fLfY477jg++uijvEDphx9+4JVXXuGMM87Y7XG2bNlCVlZWvkWSJB24DJhKqeOO2/GwtzFj4JFHCvkAo0fD9OnwwAOF3LEkSSpKa9asIScnh8TExHzbExMTycjI2OU+f/3rX7nllls44YQTOOiggzjssMM4+eST93iL3OjRo0lISMhbkpKSCvU8JElS6WLAVIr17g233BKsX3IJvPZaIXYeGwvduhVih5IkqaSaO3cud9xxB//85z9ZsGABzz//PC+//DK33nrrbvcZPnw4mZmZecvy5cuLsWJJklTSGDCVcjfeCOefH8zD1KMHLFpUBAdZvToIm956qwg6lyRJhalGjRpER0ezcuXKfNtXrlxJ7dq1d7nPTTfdxAUXXMBFF11Es2bN6N69O3fccQejR48mNzd3l/vExsYSHx+fb5EkSQcuA6ZSLhSCRx+FE06AzEzo3DnIgwrV7bcHkz316QO//FLInUuSpMIUExNDq1atSP/dPIq5ubmkp6fTvn37Xe6zadMmoqLy/1oYHR0NQDgcLrpiJUlSmWHAVAbExgbTJTVoAIsXB4ONNm8uxAPceis0bAjLl8PAgeAvmpIklWhpaWlMmDCByZMns2jRIgYPHszGjRsZMGAAAH379mX48OF57bt06cLDDz/M1KlTWbx4MXPmzOGmm26iS5cueUGTJEnSnpSLdAEqHDVqwMsvQ/v28O67cOGF8J//BCOc9lvlyjB1atD5jBnw8MPBpE+SJKlE6tmzJ6tXr2bEiBFkZGTQsmVLZs6cmTfx97Jly/KNWLrxxhsJhULceOON/PTTT9SsWZMuXbpw++23R+oUJElSKRMKO+55J1lZWSQkJJCZmVnq5hP43/8gNRW2bYORI+Hmmwux83/8A9LSgiFT8+dD8+aF2LkkSXuvNH9nlzVeC0mSSoei+s4uEbfIjRs3juTkZOLi4mjXrh3z58/fbdvnn3+e1q1bU6VKFSpWrEjLli158skn87UJh8OMGDGCOnXqUL58eVJSUvj222+L+jRKhFNOgfHjg/VRo4JRTIXmyivhjDNgyxbo1Qs2bizEziVJkiRJUmkV8YBp2rRppKWlMXLkSBYsWECLFi1ITU1l1apVu2xfrVo1brjhBubNm8enn37KgAEDGDBgALNmzcprc/fdd/Pggw8yfvx43n//fSpWrEhqaiqbC3ViopJr4EC47rpg/cIL4e23C6njUAgmTYI6dYJJnn76qZA6liRJkiRJpVnEb5Fr164dbdq0YezYsUDwlJOkpCSGDBnCsGHDCtTHMcccQ+fOnbn11lsJh8PUrVuXq6++mqFDhwKQmZlJYmIikyZNolevXn/aX1kY4p2bC+eeC88/D9Wrw/vvw2GHFVLnn3wCycmQkFBIHUqStG/Kwnd2WeG1kCSpdCiTt8hlZ2fz0UcfkZKSkrctKiqKlJQU5s2b96f7h8Nh0tPT+frrr+nQoQMAixcvJiMjI1+fCQkJtGvXbrd9btmyhaysrHxLaRcVBU8+Ca1bw9q1cOaZ8OuvhdR5ixb5wyWn8ZIkSZIk6YAW0YBpzZo15OTk5D3RZLvExEQyMjJ2u19mZiaVKlUiJiaGzp0789BDD3HaaacB5O23N32OHj2ahISEvCUpKWl/TqvEqFABXnwR6tWDr76CHj1g69ZCPEA4DOPGBRM/FWrHkiRJkiSpNIn4HEz7onLlyixcuJAPPviA22+/nbS0NObOnbvP/Q0fPpzMzMy8Zfny5YVXbITVqQMvvQSVKgVPmBs8uBAHHK1cCTfcAHPnwogRhdSpJEmSJEkqbSIaMNWoUYPo6GhWrlyZb/vKlSupXbv2bveLioqiYcOGtGzZkquvvpoePXowevRogLz99qbP2NhY4uPj8y1lSYsWMHVqcNvcY4/BmDGF1HHt2vDoo8H6XXfBa68VUseSJEmSJKk0iWjAFBMTQ6tWrUhPT8/blpubS3p6Ou3bty9wP7m5uWzZsgWA+vXrU7t27Xx9ZmVl8f777+9Vn2VN585w//3B+nXXBZN/F4oePWDQoGBY1AUXwG6e/idJkiRJksquiN8il5aWxoQJE5g8eTKLFi1i8ODBbNy4kQEDBgDQt29fhg8fntd+9OjRzJkzhx9++IFFixZx77338uSTT3L++ecDEAqFuPLKK7ntttt48cUX+eyzz+jbty9169alW7dukTjFEmPIELjssiALOv98+PDDQur4H/+AI4+EjAzo1y94hJ0kSZIkSTpglIt0AT179mT16tWMGDGCjIwMWrZsycyZM/Mm6V62bBlRUTtysI0bN3LJJZfw448/Ur58eRo3bsy///1vevbsmdfm2muvZePGjQwaNIh169ZxwgknMHPmTOLi4or9/Eqaf/wDvv8eXn0VunSB+fNhv+c0r1AhuAevTRuYOTM4yNVXF0q9kiRJkiSp5AuFwz5j/o+ysrJISEggMzOzzM3HBJCVBSecAJ99Bs2bw9tvQ+XKhdDx+PHBEKk77oBrry2EDiVJ2rOy/p1dmngtJEkqHYrqOzvit8ip+MXHB0+WS0yETz+F3r0hJ6cQOv7b34IODZckSZIkSTqgGDAdoA45BF58EeLi4OWXC+mOtlAImjbd8To7O5jwSZIkSZIklWkGTAewtm3hySeD9QcegHHjCrHzL7+EVq12HECSJEmSJJVZBkwHuB49YPToYP3yy4M5ugvFjBnw+edwySXwzTeF1KkkSZIkSSqJDJjEddfBgAGQmwvnnRdM/l0onf7lL7BxI/TqBVu2FEKnkiRJkiSpJDJgEqFQ8AC4k0+G9evhzDMhI2M/O42Ohn//G2rUgI8/hmHDCqNUSZIkSZJUAhkwCYCYGHjuOWjUCJYtg65dYdOm/ey0bl2YNClYv//+YDZxSZIkSZJU5hgwKU+1akEGVK0azJ8P/foFt83tl86d4corg/X+/eHnn/ezQ0mSJEmSVNIYMCmfhg1h+nQ46CB49lm48cZC6PTOO+Hoo6Fx40JIrCRJkiRJUkljwKSddOgAjz4arI8eveMut30WGwuvvgqvvw716u1veZIkSZIkqYQxYNIu9e27Y/TSoEEwd+5+dpiYCOXK7XidlbWfHUqSJEmSpJLCgEm7NWoU9OwJW7fC2WfDN98UQqdbtgRzMjVrBr/+WggdSpIkSZKkSDNg0m5FRcHjj8OxxwZZUOfOsHbtfnaanQ0vvRQ8qu6iiyAcLpRaJUmSJElS5BgwaY/Kl4cZMyA5Gb77Drp3DwYh7bPKlWHq1GAW8eefh3/9q5AqlSRJkiRJkWLApD+VmBgMOoqPh7feCuZk2q+BR61bB7OHA1x1FXz+eaHUKUmSJEmSIsOASQVy5JHwzDMQHQ1PPAF33LGfHV51FXTqBJs3Q69esGlTodQpSZIkSZKKnwGTCqxjR3jooWD9xhvh6af3o7OoKJg8GWrXhi++gLS0QqlRkiRJkiQVPwMm7ZXBg4PBRwB9+8J77+1HZ7VqwZNPQtWqcOqphVKfJEmSJEkqfgZM2mv33ANdugSTfXftCkuW7EdnKSlBB+eeW0jVSZIkSZKk4mbApL0WHQ1TpkDLlrBqFZx5JmRm7keH8fE71letgm3b9rdESZIkSZJUjAyYtE8qVYL//hfq1g2mUDrvvELIhWbPhmbN4OabC6NESZIkSZJUTAyYtM/q1QtCpgoVgmxoyBAIh/ejw3XrghFMd9wB//tfYZUpSZIkSZKKmAGT9ssxxwS3y4VCMH48PPDAfnR23nlw0UVBSnX++bB6daHVKUmSJEmSio4Bk/Zb167BxN8AaWnBqKZ99sAD0KQJrFgBAwbs55AoSZIkSZJUHAyYVCjS0mDQoCAP6t0bFi7cx44qVIBp0yA2Fl5+eT+HREmSJEmSpOJgwKRCEQrB2LGQkgIbNwZPlvv5533srFkzuO++YP3aa+HjjwutTkmSJEmSVPgMmFRoDjoInnkmuMPtp5+gS5cgbNongwdDt27Qpw8cfnhhlilJkiRJkgqZAZMKVZUqwZ1tNWvCggVBPpSTsw8dhULBrXKPPw6VKhV2mZIkSZIkqRAZMKnQ1a8PM2YE0yi98AIMG7aPHcXE7FjPzYVFiwqjPEmSJEmSVMgMmFQkjjsuGHwEMGYMPPLIfnSWlRVM6tS2LXz7baHUJ0mSJEmSCo8Bk4pM794walSwfskl8Npr+9hRxYrBZE4bNgSdZmcXWo2SJEmSJGn/GTCpSN10E5x/fjAPU48e8OWX+9BJdDT85z9QrRp89BEMH17odUqSJEmSpH1nwKQiFQrBo4/CCSdAZmZwp9uqVfvQUb16MHFisH7fffDqq4VapyRJkiRJ2ncGTCpysbEwfTo0aACLF0O3brB58z501LUrXHZZsN6vH6xYUZhlSpIkSZKkfWTApGJRowa8/DJUqQLz5sGFF0I4vA8d3XMPtGgBq1cHnUiSJEmSpIgzYFKxadwYnnsOypWDp57aMQH4XomLg6lToXlzuOWWQq9RkiRJkiTtPQMmFatTToHx44P1UaOCubv3WuPGsHAhtGlTmKVJkiRJkqR9ZMCkYjdwIFx3XbB+4YXw9tv70EkotGP9009h3brCKE2SJEmSJO0DAyZFxB13wNlnQ3Z2MOn399/vY0f//ncwkmnQoH2c1EmSJEmSJO0vAyZFRFQUPPkktG4Na9dC587w66/70FGjRpCbC888A48+Wuh1SpIkSZKkP2fApIipUAFefBHq1YOvv4ZzzglGNO2Vtm3h9tuD9SuugC+/LPQ6JUmSJEnSnhkwKaLq1IGXXoJKleD11+GSS/bhTrehQ6FjR/jtN+jZM/hTkiRJkiQVGwMmRVyLFjB1anDb3GOPwZgxe9lBVBRMngy1asHnn8PVVxdJnZIkSZIkadcMmFQidO4M998frF93HTz//F52ULt2MKkTwMMPB8OhJEmSJElSsSgX6QKk7YYMgW++gbFj4fzz4c03g0nAC6xjR7j++uB+uw4diqxOSZIkSZKUnwGTSpR//AO+/x5efRW6dIH58yEpaS862D7htyRJkiRJKjYl4ha5cePGkZycTFxcHO3atWP+/Pm7bTthwgROPPFEqlatStWqVUlJSdmpff/+/QmFQvmWTp06FfVpqBCUKxfMx3TUUZCRAWeeCevX72Nnv/0G//1vodYnSZIkSZJ2FvGAadq0aaSlpTFy5EgWLFhAixYtSE1NZdWqVbtsP3fuXHr37s3rr7/OvHnzSEpKomPHjvz000/52nXq1IkVK1bkLU899VRxnI4KQXx88GS5xET49FPo1Qu2bdvLTtavhzZtoGtXmDu3KMqUJEmSJEn/L+IB03333cfFF1/MgAEDaNq0KePHj6dChQpMnDhxl+3/85//cMkll9CyZUsaN27Mo48+Sm5uLunp6fnaxcbGUrt27bylatWqxXE6KiSHHgovvghxcfDKK/vwYLjKlaFdOwiHoU8fWLOmSOqUJEmSJEkRDpiys7P56KOPSElJydsWFRVFSkoK8+bNK1AfmzZtYuvWrVSrVi3f9rlz51KrVi2OOOIIBg8ezNq1a3fbx5YtW8jKysq3KPLatt3xYLgHH4Rx4/aygwcfhCOOgJ9/hgsvDMImSZIkSZJU6CIaMK1Zs4acnBwSExPzbU9MTCQjI6NAfVx33XXUrVs3X0jVqVMnnnjiCdLT07nrrrt44403OP3008nJydllH6NHjyYhISFvSdqrWaVVlHr0gNGjg/XLL4eZM/di54oVgwmdYmKCuZjGji2SGiVJkiRJOtBF/Ba5/XHnnXcydepUpk+fTlxcXN72Xr16cdZZZ9GsWTO6devGSy+9xAcffMDc3czFM3z4cDIzM/OW5cuXF9MZqCCuuw4GDIDcXDjvPPjss73YuWVLGDMmWB86FBYuLIIKJUmSJEk6sEU0YKpRowbR0dGsXLky3/aVK1dSu3btPe47ZswY7rzzTmbPnk3z5s332LZBgwbUqFGD7777bpfvx8bGEh8fn29RyREKwfjxcPLJwdzdZ54ZPGGuwC67DM46C7Kz4dJLvVVOkiRJkqRCFtGAKSYmhlatWuWboHv7hN3t27ff7X533303t956KzNnzqR169Z/epwff/yRtWvXUqdOnUKpW8UvJgaeew4aNYJly4KHw23aVMCdQyGYOBF69oRp04LXkiRJkiSp0ET8Frm0tDQmTJjA5MmTWbRoEYMHD2bjxo0MGDAAgL59+zJ8+PC89nfddRc33XQTEydOJDk5mYyMDDIyMtiwYQMAGzZs4JprruG9995jyZIlpKen07VrVxo2bEhqampEzlGFo1o1ePnl4M/586Ffv+C2uQKpXj2Yj6levSKtUZIkSZKkA1HEA6aePXsyZswYRowYQcuWLVm4cCEzZ87Mm/h72bJlrFixIq/9ww8/THZ2Nj169KBOnTp5y5j/n2cnOjqaTz/9lLPOOotGjRoxcOBAWrVqxVtvvUVsbGxEzlGFp2FDmD4dDjoInn0WbrxxHzv673/h++8LtTZJkkqScePGkZycTFxcHO3atWP+/Pl7bL9u3TouvfRS6tSpQ2xsLI0aNeKVV14ppmolSVJpFwqHnZDmj7KyskhISCAzM9P5mEqoJ54IRjBBcPfb/w94K5hx44J5mVq3hnfeCe6/kySVSn5n79q0adPo27cv48ePp127dtx///0888wzfP3119SqVWun9tnZ2Rx//PHUqlWL66+/noMPPpilS5dSpUoVWrRoUaBjei0kSSodiuo7O+IjmKR90bfvjtFLgwbBbh4QuGtnnQVVq8KHH8INNxRFeZIkRdR9993HxRdfzIABA2jatCnjx4+nQoUKTJw4cZftJ06cyC+//MKMGTM4/vjjSU5O5qSTTipwuCRJkmTApFJr1Khg3u5t2+Dss+Gbbwq4Y1JSMOwJYMwYmDmzyGqUJKm4ZWdn89FHH5GSkpK3LSoqipSUFObNm7fLfV588UXat2/PpZdeSmJiIkcddRR33HEHOTk5uz3Oli1byMrKyrdIkqQDlwGTSq2oKHj8cTj2WPj1V+jcGdauLeDO3brBJZcE6/36QUZGUZUpSVKxWrNmDTk5OXnzWW6XmJhIxm6+73744QeeffZZcnJyeOWVV7jpppu49957ue2223Z7nNGjR5OQkJC3JCUlFep5SJKk0sWASaVa+fIwYwYkJ8N330H37rBlSwF3HjMGmjWDVavgggv24pF0kiSVLbm5udSqVYtHHnmEVq1a0bNnT2644QbGjx+/232GDx9OZmZm3rJ8+fJirFiSJJU0Bkwq9RIT4aWXID4e3normJOpQFPXly8P06YFf772GsyeXeS1SpJU1GrUqEF0dDQrV67Mt33lypXUrl17l/vUqVOHRo0aER0dnbetSZMmZGRkkJ2dvct9YmNjiY+Pz7dIkqQDlwGTyoQjj4Snn4bo6OAJc3fcUcAdmzSBf/0r2LlTpyKtUZKk4hATE0OrVq1IT0/P25abm0t6ejrt27ff5T7HH3883333Hbm/G837zTffUKdOHWJ82qokSSoAAyaVGamp8NBDwfqNNwaDkwrkggvg3HOLrC5JkopbWloaEyZMYPLkySxatIjBgwezceNGBgwYAEDfvn0ZPnx4XvvBgwfzyy+/cMUVV/DNN9/w8ssvc8cdd3DppZdG6hQkSVIpUy7SBUiFafBg+PZb+Mc/grm7DzkEdvOPtbu2YgU8+SRccw2EQkVWpyRJRalnz56sXr2aESNGkJGRQcuWLZk5c2bexN/Lli0jKmrHvzMmJSUxa9YsrrrqKpo3b87BBx/MFVdcwXXXXRepU5AkSaVMKBwu0Gw1B5SsrCwSEhLIzMx0PoFSKCcnmOz7v/+FmjXh/fehfv0C7LhxIzRqBD//DI89BhdeWOS1SpL2j9/ZJYfXQpKk0qGovrO9RU5lTnQ0TJkCLVvC6tVw5pmQmVmAHStWhCFDgvUhQ2DRoqIsU5IkSZKkMsOASWVSpUrBCKa6deHLL+G882DbtgLseO21kJICmzZBr16weXOR1ypJkiRJUmlnwKQyq169IGSqUAFmzw4GJf3pDaFRUcFj6GrWhE8/haFDi6VWSZIkSZJKMwMmlWnHHBPcLhcKwfjx8MADBdipTp0gZAIYNw5mzCjKEiVJkiRJKvUMmFTmde0K99wTrKelBaOa/lSnTnD11cH6PfcUYOiTJEmSJEkHLgMmHRDS0mDQoCAn6t0bPv64ADvdcQfccktwf10oVOQ1SpIkSZJUWhkw6YAQCsHYscH83Rs3Qpcu8NNPf7JTTAzcdFPwdDlJkiRJkrRb5SJdgFRcDjoInnkGjjsOFi0KQqY33wyeOPencnPhH/+ANm2gQ4cir7XIhMOQkwPR0TtGZW3cGDw1LycnWLZty7/esGHwwwNYsgR+/nlHmz+2PfXUHT/QhQvhk092brP9z759oVatoO0bbwQjxXbVNicHrrkmqAPglVdg0qSda9j+5913B9cJ4Pnng1Fo298Ph+GQQ6BJE2jcGE4/HZKTi+dnL0mSJEllmAGTDihVqsDLL0O7dsFtcuefD889F+Qte/TAA8ET5erV2xFYbF9iY2HgwB1tJ0+GpUt3HYDExAQByHZjxgRBzK7CGgiK3W7YMPjf/3bdNicHvvoq6B/g73+HadN2Pn5ubvD+2rVQrVqwftVVMGHC7s99+fLgvLf/HO6/f/dtv/oKjjgiWH/2Wbj99t23PeWUHQHTu+8GtyTuzvnn7wiYvvsuSAp3Z+3aHeu//hqEXL/39dcwZ06w/vzzOwKmN9+Exx7bET41bgyHHbYjXJMkSZIk7ZYBkw449esHD4Y75RR44YUgt9k+CfhuXXxx8Bi6b76BCy/M/16tWvkDpkcfhbff3nU/lSrlD5jS02HmzIIV/u238MEHu38/J2fH+m+/wbp1BWu7PV0LhaBcueB1dPSO9d9PcF6zZhC6/LHN9j+3B1wQBE2nn75z2+3rVavuaNu6NVx++a77LFcuGHW03cknw0MP7brWcuWgRYsdbVNTYdasHe/l5sLixcEQtq++gmbNdrR9990dTw/crly5INhq3DgIFre3D4edl0uSJEmSficUDvt4rD/KysoiISGBzMxM4uPjI12OishTT8Ff/xqs/+tfwSTge/TllzB8OGzdmj/UqFIlCJW2GzMmGGWzqwAkLg5GjtzR9vnng9vOdtU2OhouuGBHkPHBB5CRsesAJjo6uC1se1j088+wfv2ug53o6CDcifr/KdhycoJjRB3gU7J98EEQRn311Y5l48Yd73/66Y6A6d57g+X3o50aNw5eH3yw4ZNUjPzOLjm8FpIklQ5F9Z1twLQL/oJ04LjlliDviY4OBhKlpES6IpUYubnBTPBffRWMeBo0KAgIIRjR9vtQ8fcqVYL584OwCeD772Hz5mAkVGxs8dQuHUD8zi45vBaSJJUOBkzFyF+QDhzhcDDX9L//DQkJwV1STZtGuiqVeJmZ+Uc6bQ+hvvsuGBG2fv2Oyc4vuQQefjhIMRs02HnEU6tW+W8tlLRX/M4uObwWkiSVDkX1ne0cTDqghULBQJQlS4Jpk848E957b8fc09IuJSQEM8W3a5d/e3Z28GH6/aMJQyGIj4esrGAerW+/hf/+d8f7v/66I2B6+ung9sbtAdQhh3jroiRJkqRSwYBJB7zYWJg+PcgKfvgBunULHta2/W4oqcBiYqBRo/zbxo2DsWOD+bO2Ty6+fcTTL78Ec3ht99hjMHv2jtflyweTpW8f7XT99cE8WpIkSZJUwvg3FQmoUQNefhnat4d582DAAJgyxbmaVUhCIahTJ1hOOWX37VJToXLlIID65pvgaYALFwZL9eowYsSOtn/7G/z4447wafuopxo1ivpsJEmSJGknBkzS/2vcGJ57Lvg7/tSpwUCUUaMiXZUOKGlpwQKwbRssXrxjtNPWrfnbvvZaMOTulVfyb69eHdq2zb991apg+/anDEqSJElSITNgkn7nlFNg/Hi46KLgCXONGkGfPpGuSgekcuXg8MODpUuXnd+fNAm+/DL/LXdLl8LatcHyeyedFIRVjRrtPOKpUSOoWLFYTkmSJElS2WXAJP3BwIHBPMx33QUXXgiHHgonnBDpqqQ/OPHEYPm9TZuCW+s2b96xLScHfvoJtmyBzz4Llt87+mhYsGDH62nToHbtIHyqVcv7RCVJkiQViAGTtAt33BGETM8/H0z6/f77cNhhka5K+hMVKkDLlvm3RUcHT6pbtmznSca/+ioIkrbLyYF+/YIwCoIJyLePdGrSJLj17uSTi+lkJEmSJJUm+xQwLV++nFAoRL169QCYP38+U6ZMoWnTpgwaNKhQC5QiISoKnnwy+Dv5hx9C587B5N9Vq0a6MmkfREdD/frBcsYZ+d/bHiYBZGVBSkoQPC1eDOvWwXvvBQtAjx47AqbcXPjrX4Pkdfstd0ccEUxSLkmSJOmAs08B01//+lcGDRrEBRdcQEZGBqeddhpHHnkk//nPf8jIyGDE7590JJVSFSrAiy8Ggza+/hrOOQdmzgyeRC+VGbGxO9arVoWXXgrWN28OhvH9fsRThw472v74Y3A73R8dfHAQNp13Hmz/B4dwOPjT2+0kSZKkMmufAqbPP/+ctm3bAvD0009z1FFH8c477zB79mz+/ve/GzCpzKhTJ/j79gknwOuvwyWXwIQJ/j1ZB4C4OGjWLFh2pUIFuP/+/LfdrVwZzPf000/QqtWOtitX7phg/Pe33DVuHIyAMrWVJEmSSr19Cpi2bt1K7P//q/drr73GWWedBUDjxo1ZsWJF4VUnlQAtWsDUqXDWWfDYY5CRAdddF4ROBk06YNWoAVdckX/br78Gw/2++gqOOmrH9q++gvXr4YMPguX3oqODRzZef33wetOmYCLyI44I5oCSJEmSVCrsU8B05JFHMn78eDp37sycOXO49dZbAfj555+pXr16oRYolQSdO8NDD8Fll8HLLwdL27YwdCh07x48UV464FWtCsceGyy/d9xx8MUXO08w/tVXsGED1Ky5o+3HH+94bOP2p9ltX44+Ov9tepIkSZJKjH36a/Fdd91F9+7dueeee+jXrx8tWrQA4MUXX8y7dU4qay65BE45Bf7xD5g8GebPD6aZqV8frroKLrwQKlaMdJVSCRQTA02bBsvvhcPw88/5/8NZtw7q1g22Z2QEy9y5wXsdOsAbbxRX1ZIkSZL2Qigc3j776t7JyckhKyuLqr97rNaSJUuoUKECtWrVKrQCIyErK4uEhAQyMzOJj4+PdDkqgVatgnHjgmXt2mBb1apBCHXZZcHAC0n7IStrx+1220c8tWwJzvGnP/A7u+TwWkiSVDoU1Xf2PgVMv/32G+FwmAoVKgCwdOlSpk+fTpMmTUhNTS204iLFX5BUUJs2BaOZ7rsPvvsu2BYTAxdcAGlpOw/YkCQVLr+zSw6vhSRJpUNRfWdH7ctOXbt25YknngBg3bp1tGvXjnvvvZdu3brx8MMPF1pxUklXoQIMHhwMrnj++WCqmezsYDLwI4+EM88M7u7Zt3GCkiRJkiSVDvsUMC1YsIATTzwRgGeffZbExESWLl3KE088wYMPPlioBUqlQXR0MNn3O+8Ey9lnB0+Ye/ll+MtfoE2b4El027ZFulJJkiRJkgrfPgVMmzZtonLlygDMnj2bs88+m6ioKI499liWLl1aqAVKpc1xx8Fzz8E33wRzMpUvDx99BL17w2GHwf33B09slyRJkiSprNingKlhw4bMmDGD5cuXM2vWLDp27AjAqlWrvOde+n8NGwaTgC9bBrfcEjyJfdmy4IlzSUkwbBj89FOkq5QkSZIkaf/tU8A0YsQIhg4dSnJyMm3btqV9+/ZAMJrp6KOPLtQCpdKuRg246SZYuhQeeQSOOAIyM+Guu6B+fejfHz77LNJVSpIkSZK07/bpKXIAGRkZrFixghYtWhAVFeRU8+fPJz4+nsaNGxdqkcXNp6CoKOXmBnMzjRkDb765Y3tqKgwdCqeeGszfJEn6c35nlxxeC0mSSocS9RQ5gNq1a3P00Ufz888/8+OPPwLQtm3bUh8uSUUtKgq6dIE33oD334fzzgu2zZoFp50GRx8N//43bN0a6UolSZIkSSqYfQqYcnNzueWWW0hISODQQw/l0EMPpUqVKtx6663k5uYWdo1SmdW2LUybBt99B5dfDhUqwCefwAUXQIMGwSinzMxIVylJkiRJ0p7tU8B0ww03MHbsWO68804+/vhjPv74Y+644w4eeughbrrppsKuUSrz6teHBx6A5cvhjjugdm348Ue45ppgQvChQ4P3JEmSJEkqifYpYJo8eTKPPvoogwcPpnnz5jRv3pxLLrmECRMmMGnSpL3ub9y4cSQnJxMXF0e7du2YP3/+bttOmDCBE088kapVq1K1alVSUlJ2ah8OhxkxYgR16tShfPnypKSk8O233+51XVJxq1YNhg+HJUtg4kRo2hTWr4d77w1GNJ1/Pnz8caSrlCRJkiQpv30KmH755ZddzrXUuHFjfvnll73qa9q0aaSlpTFy5EgWLFhAixYtSE1NZdWqVbtsP3fuXHr37s3rr7/OvHnzSEpKomPHjvz0u+e933333Tz44IOMHz+e999/n4oVK5KamsrmzZv37kSlCImNhQEDgqfLvfIKnHIKbNsG//kPHHMMpKTAzJmwb1P0S5IkSZJUuPbpKXLt2rWjXbt2PPjgg/m2DxkyhPnz5/P+++/vVV9t2rRh7NixQDC/U1JSEkOGDGHYsGF/un9OTg5Vq1Zl7Nix9O3bl3A4TN26dbn66qsZOnQoAJmZmSQmJjJp0iR69er1p336FBSVRAsWBCOZpk2DnJxg21FHwdVXQ+/eQSglSQcav7NLDq+FJEmlQ4l6itzdd9/NxIkTadq0KQMHDmTgwIE0bdqUSZMmMWbMmAL3k52dzUcffURKSsqOgqKiSElJYd68eQXqY9OmTWzdupVq1aoBsHjxYjIyMvL1mZCQQLt27Xbb55YtW8jKysq3SCXNMccEI5h++AHS0qBSJfj882CkU/36cOed8Ouvka5SkiRJknQg2qeA6aSTTuKbb76he/furFu3jnXr1nH22WfzxRdf8OSTTxa4nzVr1pCTk0NiYmK+7YmJiWRkZBSoj+uuu466devmBUrb99ubPkePHk1CQkLekpSUVOBzkIrbIYcEI5mWL4e774aDD4YVK4K5m5KS4MorgzmcJEmSJEkqLvsUMAHUrVuX22+/neeee47nnnuO2267jV9//ZXHHnusMOvbozvvvJOpU6cyffp04uLi9rmf4cOHk5mZmbcs93FdKgWqVAmeMvfDDzB5MjRrBhs3Bk+jO+ww6NULPvww0lVKkiRJkg4E+xwwFYYaNWoQHR3NypUr821fuXIltWvX3uO+Y8aM4c4772T27Nk0b948b/v2/famz9jYWOLj4/MtUmkREwN9+8Inn8CsWXDaaZCbG8zV1KYNnHwyvPRSsE2SJEmSpKIQ0YApJiaGVq1akZ6enrctNzeX9PR02rdvv9v97r77bm699VZmzpxJ69at871Xv359ateuna/PrKws3n///T32KZV2oRB07AizZ8PChXDBBVCuHLzxBnTpAkceCY8+Cj5MUZIkSZJU2CIaMAGkpaUxYcIEJk+ezKJFixg8eDAbN25kwIABAPTt25fhw4fntb/rrru46aabmDhxIsnJyWRkZJCRkcGGDRsACIVCXHnlldx22228+OKLfPbZZ/Tt25e6devSrVu3SJyiVOxatIAnnoDFi4Pb6OLj4auv4OKL4dBD4bbbYO3aSFcpSZIkSSoryu1N47PPPnuP769bt26vC+jZsyerV69mxIgRZGRk0LJlS2bOnJk3SfeyZcuIitqRgz388MNkZ2fTo0ePfP2MHDmSm2++GYBrr72WjRs3MmjQINatW8cJJ5zAzJkz92ueJqk0qlcvmAj8xhuD0Uv33x9MDn7TTXDHHXDhhXDVVcGcTZIkSZIk7atQOBwOF7Tx9lFFf+bxxx/f54JKgqysLBISEsjMzHQ+JpUpW7fCM8/AmDHw8cfBtlAIzj4bhg6FY4+NbH2StLf8zi45vBaSJJUORfWdvVcB04HCX5BU1oXD8PrrQdD06qs7th9/fBA0dekC0dGRq0+SCsrv7JLDayFJUulQVN/ZEZ+DSVLxC4XglFPglVfgs89gwAA46CB45x3o3h2aNIHx4+G33yJdqSRJkiSpNDBgkg5wRx0FEyfC0qUwfDhUqQLffguDB8Mhh8DNN8Pq1ZGuUpIkSZJUkhkwSQKgTp1g4u/ly+GBByA5GdasgVGjgqBp8GD45ptIVylJkiRJKokMmCTlU6kSXH55MIpp2jRo3Ro2bw5umWvcOLiF7p13gnmcJEmSJEkCAyZJu1GuHJx3HsyfD2+8EUz8HQ7DjBlwwglw3HHw3HOQkxPpSiVJkiRJkWbAJGmPQiHo0AFefBEWLYKLL4bYWHjvPejRAxo1gnHjYOPGSFcqSZIkSYoUAyZJBda4MTzySDAh+E03QbVq8MMPcNllwTxNN90EK1dGukpJkiRJUnEzYJK01xIT4ZZbYNmyYPTSYYfBL7/AbbcFQdPFFwejnSRJkiRJBwYDJkn7rGJFuOQS+PrrYD6mY4+F7Gx49FFo2jSYt+mNN5wQXJIkSZLKOgMmSfstOhrOPhvmzQueMNe9ezB300svwcknQ9u2wRPptm2LdKWSJEmSpKJgwCSpUB13HDz/fDCqafBgiIuDDz+EXr2gYUN44AFYvz7SVUqSJEmSCpMBk6Qicfjh8M9/BvM0jRoFNWsGk4NfeWUwT9Pw4fDzz5GuUpIkSZJUGAyYJBWpmjVhxIggXPrXv6BRI1i3Du68E5KTYcAA+PzzSFcpSZIkSdofBkySikX58jBoUPB0uRdegBNPhK1bYdIkaNYMTj8d0tOdEFySJEmSSiMDJknFKioKzjoL3nwT3nsPzj032DZzJqSkwDHHwH/+E4RPkiRJkqTSwYBJUsS0awdPPw3ffgtDhkCFCrBwIZx/PjRoAPfeC1lZka5SkiRJkvRnDJgkRVyDBvDgg7B8Odx+OyQmwo8/wtChkJQE11wTvCdJkiRJKpkMmCSVGNWqwfXXw5Il8Nhj0KRJMIJpzJgghLrggmCEkyTpz40bN47k5GTi4uJo164d8+fPL9B+U6dOJRQK0a1bt6ItUJIklSkGTJJKnLg4uPDC4OlyL78Mf/kLbNsG//43HH00nHYazJrlhOCStDvTpk0jLS2NkSNHsmDBAlq0aEFqaiqrVq3a435Llixh6NChnHjiicVUqSRJKisMmCSVWFFRcMYZ8L//wYcfQu/eEB0Nr70GnTpBixYweTJkZ0e6UkkqWe677z4uvvhiBgwYQNOmTRk/fjwVKlRg4sSJu90nJyeHPn36MGrUKBo0aFCM1UqSpLLAgElSqdCqFUyZAt9/D1ddBZUqwWefQf/+UL8+3HUXrFsX6SolKfKys7P56KOPSElJydsWFRVFSkoK8+bN2+1+t9xyC7Vq1WLgwIEFOs6WLVvIysrKt0iSpAOXAZOkUuXQQ+G++4JJv++8E+rUgZ9/hmHDggnBr7oKli6NdJWSFDlr1qwhJyeHxMTEfNsTExPJyMjY5T5vv/02jz32GBMmTCjwcUaPHk1CQkLekpSUtF91S5Kk0s2ASVKpVKUKXHddMCH4pElw1FGwYQPcfz8cdlhwO91HH0W2RkkqDdavX88FF1zAhAkTqFGjRoH3Gz58OJmZmXnLch/3KUnSAc2ASVKpFhMD/frBp5/CzJmQkgI5OTB1KrRuHUwQ/vLLkJsb6UolqXjUqFGD6OhoVq5cmW/7ypUrqV279k7tv//+e5YsWUKXLl0oV64c5cqV44knnuDFF1+kXLlyfP/997s8TmxsLPHx8fkWSZJ04DJgklQmhEKQmgpz5sDHH8P550O5cjB3Lpx5ZjDC6bHHnBBcUtkXExNDq1atSE9Pz9uWm5tLeno67du336l948aN+eyzz1i4cGHectZZZ/GXv/yFhQsXeuubJEkqEAMmSWVOy5bw5JPwww8wdChUrgyLFsFFF8FZZxkySSr70tLSmDBhApMnT2bRokUMHjyYjRs3MmDAAAD69u3L8OHDAYiLi+Ooo47Kt1SpUoXKlStz1FFHERMTE8lTkSRJpYQBk6QyKykJ7rknmBB8zBioUAFmzQqePOctc5LKsp49ezJmzBhGjBhBy5YtWbhwITNnzsyb+HvZsmWsWLEiwlVKkqSyJBQOh8ORLqKkycrKIiEhgczMTOcTkMqQWbOC2+W2bYPLLw8mBA+FIl2VpP3hd3bJ4bWQJKl0KKrvbEcwSTpgpKbC5MnB+oMPwujRka1HkiRJksoKAyZJB5S//jUYuQRwww3w6KMRLUeSJEmSygQDJkkHnCuugP+f25a//Q1mzIhoOZIkSZJU6hkwSTog3X47DBwYTPbdqxe88UakK5IkSZKk0suASdIBKRSC8eOhWzfYsgXOOgs++STSVUmSJElS6WTAJOmAVa4cTJkCJ54IWVnQqRP88EOkq5IkSZKk0seASdIBrXx5ePFFaN4cMjKgY0dYuTLSVUmSJElS6WLAJOmAV6UKzJwJ9evD99/D6acHI5okSZIkSQVjwCRJQJ06MGsW1KwJH38czM20eXOkq5IkSZKk0sGASZL+3+GHw6uvQqVK8PrrcP75kJMT6aokSZIkqeQzYJKk32nVCl54AWJi4Lnn4LLLIByOdFWSJEmSVLIZMEnSH5xyCvznPxAKwfjxMGpUpCuSJEmSpJLNgEmSdqFHDxg3LlgfNQr++c/I1iNJkiRJJZkBkyTtxuDBcPPNwfpll8HTT0e0HEmSJEkqsQyYJGkPRoyASy4J5mE6/3xIT490RZIkSZJU8hgwSdIehELw4IPBLXNbt0K3bvDRR5GuSpIkSZJKFgMmSfoT0dHw738Hk39v2ACnnw7ffhvpqiRJkiSp5Ih4wDRu3DiSk5OJi4ujXbt2zJ8/f7dtv/jiC8455xySk5MJhULcf//9O7W5+eabCYVC+ZbGjRsX4RlIOhDExsKMGXDMMbB6NXTsCD//HOmqJEmSJKlkiGjANG3aNNLS0hg5ciQLFiygRYsWpKamsmrVql2237RpEw0aNODOO++kdu3au+33yCOPZMWKFXnL22+/XVSnIOkAUrkyvPoqNGwIS5ZAp06wbl2kq5IkSZKkyItowHTfffdx8cUXM2DAAJo2bcr48eOpUKECEydO3GX7Nm3acM8999CrVy9iY2N322+5cuWoXbt23lKjRo2iOgVJB5hatWD2bKhdGz77DLp0gd9+i3RVkiRJkhRZEQuYsrOz+eijj0hJSdlRTFQUKSkpzJs3b7/6/vbbb6lbty4NGjSgT58+LFu2bI/tt2zZQlZWVr5Fknanfn2YNQsSEuDtt6FXL9i2LdJVSZIkSVLkRCxgWrNmDTk5OSQmJubbnpiYSEZGxj73265dOyZNmsTMmTN5+OGHWbx4MSeeeCLr16/f7T6jR48mISEhb0lKStrn40s6MDRvDi++GMzN9OKL8Le/QTgc6aokSZIkKTIiPsl3YTv99NM599xzad68OampqbzyyiusW7eOp59+erf7DB8+nMzMzLxl+fLlxVixpNKqQweYNg2iomDiRLjhhkhXJEmSJEmREbGAqUaNGkRHR7Ny5cp821euXLnHCbz3VpUqVWjUqBHffffdbtvExsYSHx+fb5GkgujaFR55JFgfPRp28XBLSZIkSSrzIhYwxcTE0KpVK9LT0/O25ebmkp6eTvv27QvtOBs2bOD777+nTp06hdanJP3ewIFwxx3B+lVXwX/+E9l6JEmSJKm4RfQWubS0NCZMmMDkyZNZtGgRgwcPZuPGjQwYMACAvn37Mnz48Lz22dnZLFy4kIULF5Kdnc1PP/3EwoUL841OGjp0KG+88QZLlizh3XffpXv37kRHR9O7d+9iPz9JB45hw+CKK4L1/v1h5syIliNJkiRJxapcJA/es2dPVq9ezYgRI8jIyKBly5bMnDkzb+LvZcuWERW1IwP7+eefOfroo/NejxkzhjFjxnDSSScxd+5cAH788Ud69+7N2rVrqVmzJieccALvvfceNWvWLNZzk3RgCYXgvvtg9WqYMgXOOQf+9z9o1y7SlUmSJElS0QuFwz736I+ysrJISEggMzPT+Zgk7ZXsbDjrLJg1C6pVg7ffhiZNIl2VVHb5nV1yeC0kSSodiuo7u8w9RU6SIikmBp59Ftq2hV9+gdRU8MGUkiRJkso6AyZJKmSVKsHLL0PjxkG4lJoKa9dGuipJkiRJKjoGTJJUBGrUCG6Tq1cPFi2CM8+EjRsjXZUkSZIkFQ0DJkkqIoccEoRMVavCe+/BuefC1q2RrkqSJEmSCp8BkyQVoaZNg9vlypeHV1+FCy+E3NxIVyVJkiRJhcuASZKKWPv2wcTf0dHw73/DNdeAz++UJEmSVJYYMElSMTjjDHj88WD9vvvgnnsiW48kSZIkFSYDJkkqJhdcAPfeG6xfd92OwEmSJEmSSjsDJkkqRmlpcO21wfrFF8N//xvZeiRJkiSpMBgwSVIxu/NO6N8fcnLgvPPg7bcjXZEkSZIk7R8DJkkqZqEQTJgAZ54JmzdDly7w2WeRrkqSJEmS9p0BkyRFQLlyMG0aHH88rFsHqamwZEmkq5IkSZKkfWPAJEkRUqFCMAfTUUfBihVByLR6daSrkiRJkqS9Z8AkSRFUtSrMnAmHHgrffANnnAHr10e6KkmSJEnaOwZMkhRhBx8Ms2ZBjRrw4Ydw9tmwZUukq5IkSZKkgjNgkqQS4Igj4JVXoGJFeO016NcPcnMjXZUkSZIkFYwBkySVEG3awPTpcNBBwQTgV1wB4XCkq5IkSZKkP2fAJEklyGmnwZNPQigEY8fC7bdHuiJJkiRJ+nMGTJJUwvTsCQ8+GKzfdBP861+RrUeSJEmS/owBkySVQJddBjfeGKxfcgk8/3xk65EkSZKkPTFgkqQS6pZbYNCgYLLv3r3h9dcjXZEkSZIk7ZoBkySVUKEQ/POfcPbZkJ0NXbvCxx9HuipJkiRJ2pkBkySVYNHR8J//wMknw/r1cPrp8P33ka5KkiRJkvIzYJKkEi4uDmbMgJYtYeVK6NgRMjIiXZUkSZIk7WDAJEmlQEICvPoqNGgAP/wQjGTKzIx0VZIkSZIUMGCSpFKidm2YPRsSE2HhwmBOps2bI12VJEmSJBkwSVKpcthhwUimypXhjTegTx/IyYl0VZIkSZIOdAZMklTKHH00vPgixMTA88/DJZdAOBzpqiRJkiQdyAyYJKkUOvlkeOopiIqCRx6BESMiXZEkSZKkA5kBkySVUmefDQ8/HKzfdhs89FBk65EkSZJ04DJgkqRSbNAguPXWYP2KK2Dq1MjWI0mSJOnAZMAkSaXcDTfAZZcF8zD17Qtz5kS6IkmSJEkHGgMmSSrlQiF44AHo2RO2boXu3eGDDyJdlSRJkqQDiQGTJJUBUVHwxBNw2mmwcSOccQZ8/XWkq5IkSZJ0oDBgkqQyIiYGnnsOWreGNWsgNRV++inSVUmSJEk6EBgwSVIZUrkyvPIKNGoES5dCp07w66+RrkqSJElSWWfAJEllTM2aMGsW1K0Ln38OXbrApk2RrkqSJElSWWbAJEllUHJyEDJVqQLvvLNjAnBJkiRJKgoGTJJURh11FPz3vxAXBy+9BIMGQTgc6aokFZdx48aRnJxMXFwc7dq1Y/78+bttO2HCBE488USqVq1K1apVSUlJ2WN7SZKkPzJgkqQy7IQT4OmnIToaJk2CYcMiXZGk4jBt2jTS0tIYOXIkCxYsoEWLFqSmprJq1apdtp87dy69e/fm9ddfZ968eSQlJdGxY0d+8kkBkiSpgELhsP+e/UdZWVkkJCSQmZlJfHx8pMuRpP02aRIMGBCsjxkDV18d0XKkQuN39q61a9eONm3aMHbsWAByc3NJSkpiyJAhDCtA0pyTk0PVqlUZO3Ysffv2LdAxvRaSJJUORfWd7QgmSToA9O8Pd90VrA8dCk88EdFyJBWh7OxsPvroI1JSUvK2RUVFkZKSwrx58wrUx6ZNm9i6dSvVqlXbbZstW7aQlZWVb5EkSQcuAyZJOkBccw2kpQXrF14Ir7wS2XokFY01a9aQk5NDYmJivu2JiYlkZGQUqI/rrruOunXr5gup/mj06NEkJCTkLUlJSftVtyRJKt0MmCTpABEKwT33wAUXQE4O9OgBBRzMIOkAcueddzJ16lSmT59OXFzcbtsNHz6czMzMvGX58uXFWKUkSSppykW6AElS8YmKgsceg7VrgxFMnTvDW2/BkUdGujJJhaVGjRpER0ezcuXKfNtXrlxJ7dq197jvmDFjuPPOO3nttddo3rz5HtvGxsYSGxu73/VKkqSywRFMknSAOeig4Mlyxx4Lv/4KqamwbFmkq5JUWGJiYmjVqhXp6el523Jzc0lPT6d9+/a73e/uu+/m1ltvZebMmbRu3bo4SpUkSWVIxAOmcePGkZycTFxcHO3atWP+/Pm7bfvFF19wzjnnkJycTCgU4v7779/vPiXpQFSxIrz8MjRtCj/9FIRMa9ZEuipJhSUtLY0JEyYwefJkFi1axODBg9m4cSMD/v9xkn379mX48OF57e+66y5uuukmJk6cSHJyMhkZGWRkZLBhw4ZInYIkSSplIhowTZs2jbS0NEaOHMmCBQto0aIFqamprFq1apftN23aRIMGDbjzzjt3O8R7b/uUpANVtWowaxYkJcFXX8GZZ4J/l5TKhp49ezJmzBhGjBhBy5YtWbhwITNnzsyb+HvZsmWsWLEir/3DDz9MdnY2PXr0oE6dOnnLmDFjInUKkiSplAmFw+FwpA7erl072rRpw9ixY4Fg+HZSUhJDhgxh2LBhe9w3OTmZK6+8kiuvvLLQ+twuKyuLhIQEMjMziY+P3/sTk6RSZNEiOOEE+OWXYCTTiy9CTEykq5IKxu/sksNrIUlS6VBU39kRG8GUnZ3NRx99lO/xt1FRUaSkpDBvHx9rtK99btmyhaysrHyLJB0omjQJJvyuUCEY0TRgAOTmRroqSZIkSaVJxAKmNWvWkJOTkzdUe7vExEQyMjKKtc/Ro0eTkJCQtyQlJe3T8SWptGrXDp5/HsqVgylTIC0NIje+VZIkSVJpE/FJvkuC4cOHk5mZmbcsX7480iVJUrFLTYVJk4L1Bx6AO++MaDmSJEmSSpFykTpwjRo1iI6OZuXKlfm2r1y5crcTeBdVn7GxscTGxu7TMSWpLOnTJ3ia3JVXwvXXQ61aMHBgpKuSJEmSVNJFbARTTEwMrVq1Ij09PW9bbm4u6enptG/fvsT0KUkHmiuugO1PLx80CF54IbL1SJIkSSr5IjaCCSAtLY1+/frRunVr2rZty/3338/GjRsZMGAAAH379uXggw9m9OjRQDCJ95dffpm3/tNPP7Fw4UIqVapEw4YNC9SnJOnP3X47rFoFjz0GvXoFk3936BDpqiRJkiSVVBENmHr27Mnq1asZMWIEGRkZtGzZkpkzZ+ZN0r1s2TKionYMsvr55585+uij816PGTOGMWPGcNJJJzF37twC9SlJ+nOhEIwfH9wu98ILcNZZ8Oab0Lx5pCuTJEmSVBKFwmGfE/RHWVlZJCQkkJmZSXx8fKTLkaSI+e23YPLvt96C2rXh3Xehfv1IVyXt4Hd2yeG1kCSpdCiq72yfIidJ2q3y5eHFF4ORSxkZ0LFjcOucJEmSJP2eAZMkaY+qVIGZMyE5Gb77Dk4/HbKyIl2VJEmSpJLEgEmS9Kfq1IHZs6FmTViwALp3hy1bIl2VJEmSpJLCgEmSVCCHHw6vvgqVKsH//gfnnw85OZGuSpIkSVJJYMAkSSqwVq1gxgyIiYFnn4UhQ8BHRUiSJEkyYJIk7ZVTT4V//xtCIXj4YbjllkhXJEmSJCnSDJgkSXvt3HNh3Lhg/eabYfz4iJYjSZIkKcIMmCRJ+2TwYBg5Mli/5JLgljlJkiRJByYDJknSPhs5MgiawmHo0yeY/FuSJEnSgceASZK0z0IheOgh6NEDsrOha1dYsCDSVUmSJEkqbgZMkqT9Eh0dTPp9yimwYQN06gTffhvpqiRJkiQVJwMmSdJ+i42F6dPhmGNg9Wro2BFWrIh0VZIkSZKKiwGTJKlQxMfDK69Aw4awZEkwkmndukhXJUmSJKk4GDBJkgpNYiLMng21a8OnnwZzMv32W6SrkiRJklTUDJgkSYWqfn2YOTMY0fTmm9C7N2zbFumqJEmSJBUlAyZJUqFr0QL++99gbqYXXoC//x3C4UhXJUmSJKmoGDBJkopEhw4wbRpERcFjj8GNN0a6IkmSJElFxYBJklRkunaFf/0rWL/jDnjggcjWI0mSJKloGDBJkorURRcF4RLAlVfClCkRLUeSJElSETBgkiQVuWHD4IorgvV+/WDWrMjWI0mSJKlwGTBJkopcKAT33Qd//WvwRLlzzoH33490VZIkSZIKiwGTJKlYREXB449Daips3AidO8NXX0W6KkmSJEmFwYBJklRsYmLg2WehbVtYuxY6doQff4x0VZIkSZL2lwGTJKlYVaoEL78MRxwBy5cHI5p++SXSVUmSJEnaHwZMkqRiV6MGzJ4NBx8MX34JZ54JmzZFuipJkiRJ+8qASZIUEYccEoRMVavCvHlw7rmwdWukq5IkSZK0LwyYJEkR07RpcLtc+fLwyitw0UWQmxvpqiRJkiTtLQMmSVJEtW8PzzwD0dHwxBNw3XWRrkiSJEnS3jJgkiRFXOfOMHFisD5mDNxzT2TrkSRJkrR3DJgkSSVC375BuARw7bUweXJk65EkSZJUcAZMkqQS4+qr4ZprgvWBA+GllyJbjyRJkqSCMWCSJJUod90F/ftDTk7wZLl33ol0RZIkSZL+jAGTJKlECYVgwgQ480zYvDn48/PPI12VJEmSpD0xYJIklTjlysG0aXD88bBuHaSmwtKlka5KkiRJ0u4YMEmSSqQKFeC//4WjjoKff4aOHeHDD+HHH+G33yJdnSRJkqTfKxfpAiRJ2p2qVWHmzGAk0zffQJs2O96rUAGqV9+x1KiR//WutsXHB7fgSZIkSSpcBkySpBLt4INh1iwYNAi++grWrg0mAN+0KViWLy94X+XK/XkI9cfX1apBdHTRnZ8kSZJUFhgwSZJKvCOOgDfeCNbDYcjKCoKmNWuCP3+//HHb9te//QbbtsHKlcFSUKEQVKmyd6FU9eoQF1ckPwpJkiSpRDJgkiSVKqEQJCQES4MGBd/vt9/2PpTKzAwCrV9/DZbvviv48SpW3PtQqnJlb+GTJElS6WTAJEk6IJQvD/XqBUtBbdsGv/yy5xDqj69/+SW4hW/jxmBZtqzgxzvooL2fV6pqVW/hkyRJUuQZMEmStBvlykGtWsFSULm5u7+Fb0+jpzZvhq1bISMjWAoqFApCpr0dLRUbu/c/D0mSJGl3DJgkSSpEUVHBnE1VqsBhhxV8v02b9v4Wvqys4Ba+X34Jlm+/LfjxKlXa+9FSlSp5C58kSZJ2zYBJkqQSoEKFYElKKvg+W7cGwdLehFK//BKMstqwIViWLi348WJi9u0Wvqiovf95SJIkqXQxYJIkqZQ66CBITAyWgsrNDSYv35t5pdauhS1bIDsbVqwIloKKitpxC1/TpjB9+t6fpyRJkko+AyZJkg4g2wOfqlWhYcOC7RMO7/4Wvj2Nnlq/Pgi0tm+Piyvac5MkSVLkGDBJkqQ9CoWgYsVgOeSQgu+XnZ3/Fj5vlZMkSSq7SsSveuPGjSM5OZm4uDjatWvH/Pnz99j+mWeeoXHjxsTFxdGsWTNeeeWVfO/379+fUCiUb+nUqVNRnoIkSfqDmBioXRuOOgpOOglOPDHSFUmSJKmoRDxgmjZtGmlpaYwcOZIFCxbQokULUlNTWbVq1S7bv/vuu/Tu3ZuBAwfy8ccf061bN7p168bnn3+er12nTp1YsWJF3vLUU08Vx+lIkiRJkiQdcELhcDgcyQLatWtHmzZtGDt2LAC5ubkkJSUxZMgQhg0btlP7nj17snHjRl566aW8bcceeywtW7Zk/PjxQDCCad26dcyYMWOfasrKyiIhIYHMzEzi4+P3qQ9JklT0/M4uObwWkiSVDkX1nR3REUzZ2dl89NFHpKSk5G2LiooiJSWFefPm7XKfefPm5WsPkJqaulP7uXPnUqtWLY444ggGDx7M2rVrd1vHli1byMrKyrdIkiRJkiSpYCIaMK1Zs4acnBwS//B85cTERDIyMna5T0ZGxp+279SpE0888QTp6encddddvPHGG5x++unk5OTsss/Ro0eTkJCQtyQlJe3nmUmSJEmSJB04yuRT5Hr16pW33qxZM5o3b85hhx3G3LlzOfXUU3dqP3z4cNLS0vJeZ2VlGTJJkiRJkiQVUERHMNWoUYPo6GhWrlyZb/vKlSupXbv2LvepXbv2XrUHaNCgATVq1OC7777b5fuxsbHEx8fnWyRJkiRJklQwEQ2YYmJiaNWqFenp6XnbcnNzSU9Pp3379rvcp3379vnaA8yZM2e37QF+/PFH1q5dS506dQqncEmSJEmSJOWJaMAEkJaWxoQJE5g8eTKLFi1i8ODBbNy4kQEDBgDQt29fhg8fntf+iiuuYObMmdx777189dVX3HzzzXz44YdcdtllAGzYsIFrrrmG9957jyVLlpCenk7Xrl1p2LAhqampETlHSZIkSZKksiziczD17NmT1atXM2LECDIyMmjZsiUzZ87Mm8h72bJlREXtyMGOO+44pkyZwo033sj111/P4YcfzowZMzjqqKMAiI6O5tNPP2Xy5MmsW7eOunXr0rFjR2699VZiY2Mjco6SJEmSJEllWSgcDocjXURJk5WVRUJCApmZmc7HJElSCeZ3dsnhtZAkqXQoqu/siN8iJ0mSJEmSpNLNgEmSJKkMGjduHMnJycTFxdGuXTvmz5+/x/bPPPMMjRs3Ji4ujmbNmvHKK68UU6WSJKksMGCSJEkqY6ZNm0ZaWhojR45kwYIFtGjRgtTUVFatWrXL9u+++y69e/dm4MCBfPzxx3Tr1o1u3brx+eefF3PlkiSptHIOpl1wDgFJkkoHv7N3rV27drRp04axY8cCkJubS1JSEkOGDGHYsGE7te/ZsycbN27kpZdeytt27LHH0rJlS8aPH1+gY3otJEkqHYrqOzviT5EribZnbllZWRGuRJIk7cn272r/vWyH7OxsPvroI4YPH563LSoqipSUFObNm7fLfebNm0daWlq+bampqcyYMWO3x9myZQtbtmzJe52ZmQn4+5MkSSVdUf3+ZMC0C+vXrwcgKSkpwpVIkqSCWL9+PQkJCZEuo0RYs2YNOTk5JCYm5tuemJjIV199tct9MjIydtk+IyNjt8cZPXo0o0aN2mm7vz9JklQ6rF27tlB/fzJg2oW6deuyfPlyKleuTCgUKrR+s7KySEpKYvny5WVy6HhZPz8o++fo+ZVunl/p5vntm3A4zPr166lbt26h9amCGT58eL5RT+vWrePQQw9l2bJlhn0RVNb/X1KaeC1KDq9FyeB1KDkyMzM55JBDqFatWqH2a8C0C1FRUdSrV6/I+o+Pjy/T/0GV9fODsn+Onl/p5vmVbp7f3jPMyK9GjRpER0ezcuXKfNtXrlxJ7dq1d7lP7dq196o9QGxsLLGxsTttT0hIKNOf4dKirP+/pDTxWpQcXouSwetQckRFFe5z33yKnCRJUhkSExNDq1atSE9Pz9uWm5tLeno67du33+U+7du3z9ceYM6cObttL0mS9EeOYJIkSSpj0tLS6NevH61bt6Zt27bcf//9bNy4kQEDBgDQt29fDj74YEaPHg3AFVdcwUknncS9995L586dmTp1Kh9++CGPPPJIJE9DkiSVIgZMxSg2NpaRI0fucjh5WVDWzw/K/jl6fqWb51e6eX4qTD179mT16tWMGDGCjIwMWrZsycyZM/Mm8l62bFm+YfHHHXccU6ZM4cYbb+T666/n8MMPZ8aMGRx11FEFPqbXuGTwOpQcXouSw2tRMngdSo6iuhahsM/1lSRJkiRJ0n5wDiZJkiRJkiTtFwMmSZIkSZIk7RcDJkmSJEmSJO0XAyZJkiRJkiTtFwOmQjZu3DiSk5OJi4ujXbt2zJ8/f4/tn3nmGRo3bkxcXBzNmjXjlVdeKaZK983enN+kSZMIhUL5lri4uGKsdu+8+eabdOnShbp16xIKhZgxY8af7jN37lyOOeYYYmNjadiwIZMmTSryOvfV3p7f3Llzd7p+oVCIjIyM4il4L40ePZo2bdpQuXJlatWqRbdu3fj666//dL/S8t/gvpxfafpv8OGHH6Z58+bEx8cTHx9P+/btefXVV/e4T2m5drD351eart2u3HnnnYRCIa688so9titN11CBsv57TmmxN9dhwoQJnHjiiVStWpWqVauSkpLyp9dNBbe3/01sN3XqVEKhEN26dSvaAg8ge3st1q1bx6WXXkqdOnWIjY2lUaNG/j+qEOztdbj//vs54ogjKF++PElJSVx11VVs3ry5mKotuyL1d1sDpkI0bdo00tLSGDlyJAsWLKBFixakpqayatWqXbZ/99136d27NwMHDuTjjz+mW7dudOvWjc8//7yYKy+Y/2vv/mOirv84gD/5dWgDDWfgqUiBhb8iA6Yd2DARaVLR8kcWI5qhqbjBXBnpCMUfobFcKzFSU9cvKxtk5hQEDpKkEMFQiQLEmqKmM0Mwfhyv7x+u+3r8kruDOz/H87HdH9y9P+z12nNv73MvP3zO2P4AYMiQIaivr9c/zp07Z8GKjdPY2IhHHnkEW7du7dX6s2fPIiIiAk888QTKy8uRkJCA2NhYHD58uJ8rNY2x/f2nqqrKIEN3d/d+qtA8BQUFiIuLQ3FxMXJyctDa2opZs2ahsbGx22OUtAdN6Q9Qzh4cPXo0UlNTUVpaiuPHj2PGjBmIjIzE6dOnu1yvpOwA4/sDlJNdRyUlJcjIyICfn1+P65SWIdn+eY5SGJuDVqvFCy+8gPz8fBw7dgyenp6YNWsWzp8/b+HKbY8p58YAUFdXh9deew2PP/64hSq1fcZm0dLSgrCwMNTV1WHfvn2oqqrC9u3bMWrUKAtXbluMzeHzzz9HYmIikpOTUVlZiZ07d+LLL7/EqlWrLFy57bHaZ1uhPjNlyhSJi4vT/6zT6WTkyJHy9ttvd7l+/vz5EhERYfDc1KlT5dVXX+3XOk1lbH+7du2SoUOHWqi6vgVAMjMze1yzcuVKmThxosFzzz//vISHh/djZX2jN/3l5+cLALl27ZpFauprly9fFgBSUFDQ7Rql7cHb9aY/Je9BERE3NzfZsWNHl68pObv/9NSfUrNraGiQBx98UHJyciQkJETi4+O7XWsLGQ40tn6eoxTG5tBRW1ubuLq6yp49e/qrxAHDlCza2tokKChIduzYITExMRIZGWmBSm2fsVls27ZNvL29paWlxVIlDgjG5hAXFyczZswweG7FihUSHBzcr3UONJb8bMsrmPpIS0sLSktLMXPmTP1z9vb2mDlzJo4dO9blMceOHTNYDwDh4eHdrrcmU/oDgBs3bsDLywuenp53/N96pVFSfuaYPHky1Go1wsLCUFRUZO1yeu369esAgGHDhnW7RskZ9qY/QJl7UKfTYe/evWhsbIRGo+lyjZKz601/gDKzi4uLQ0RERKdsuqLkDAciWz/PUQpTz8du19TUhNbW1ju+f1DPTM0iJSUF7u7ueOWVVyxR5oBgShb79++HRqNBXFwcPDw8MGnSJGzcuBE6nc5SZdscU3IICgpCaWmp/s/oamtrcfDgQcyePdsiNdP/9dV7tmNfFjWQXblyBTqdDh4eHgbPe3h44Ndff+3ymIsXL3a5/m68x40p/fn6+uLjjz+Gn58frl+/jrS0NAQFBeH06dMYPXq0JcruV93l988//+DmzZsYPHiwlSrrG2q1Gh9++CECAwPR3NyMHTt2YPr06fjpp5/g7+9v7fJ61N7ejoSEBAQHB2PSpEndrlPSHrxdb/tT2h6sqKiARqPBv//+CxcXF2RmZmLChAldrlVidsb0p7TsgFv3Ezlx4gRKSkp6tV6JGQ5ktn6eoxSm5NDRG2+8gZEjR/ZqEEzdMyWLo0ePYufOnSgvL7dAhQOHKVnU1tYiLy8PUVFROHjwIKqrq7Fs2TK0trYiOTnZEmXbHFNyePHFF3HlyhVMmzYNIoK2tjYsWbKEfyJnBX312ZYDJuo3Go3G4H/ng4KCMH78eGRkZGDdunVWrIx6w9fXF76+vvqfg4KCUFNTgy1btuCTTz6xYmV3FhcXh1OnTuHo0aPWLqVf9LY/pe1BX19flJeX4/r169i3bx9iYmJQUFDQ7RBGaYzpT2nZ/fnnn4iPj0dOTo6ibkZONNCkpqZi79690Gq13KsW1tDQgOjoaGzfvh3Dhw+3djkDXnt7O9zd3fHRRx/BwcEBAQEBOH/+PN555x0OmCxIq9Vi48aNSE9Px9SpU1FdXY34+HisW7cOSUlJ1i6PTMABUx8ZPnw4HBwccOnSJYPnL126hBEjRnR5zIgRI4xab02m9NeRk5MTHn30UVRXV/dHiRbXXX5DhgxR/NVL3ZkyZcpdP7RZvnw5Dhw4gMLCwjte6aGkPfgfY/rr6G7fgyqVCmPHjgUABAQEoKSkBO+99x4yMjI6rVVidsb019Hdnl1paSkuX75scHWjTqdDYWEhPvjgAzQ3N8PBwcHgGCVmOJDZ+nmOUphzPpaWlobU1FQcOXLkjjfhpzszNouamhrU1dXh6aef1j/X3t4OAHB0dERVVRV8fHz6t2gbZcq+UKvVcHJyMnhvGj9+PC5evIiWlhaoVKp+rdkWmZJDUlISoqOjERsbCwB4+OGH0djYiMWLF2P16tWwt+cdfSylrz7bMrE+olKpEBAQgNzcXP1z7e3tyM3N7fYeGxqNxmA9AOTk5PR4Tw5rMaW/jnQ6HSoqKqBWq/urTItSUn59pby8/K7NT0SwfPlyZGZmIi8vDw888MAdj1FShqb015HS9mB7ezuam5u7fE1J2XWnp/46utuzCw0NRUVFBcrLy/WPwMBAREVFoby8vNNwCbCNDAcSWz/PUQpTz8c2b96MdevW4dChQwgMDLREqTbP2CzGjRvX6d/JZ555Rv+NTZ6enpYs36aYsi+Cg4NRXV2tH/IBwG+//Qa1Ws3hkolMyaGpqanTEOm/c4Zb96YmS+mz92yjbglOPdq7d684OzvL7t275cyZM7J48WK599575eLFiyIiEh0dLYmJifr1RUVF4ujoKGlpaVJZWSnJycni5OQkFRUV1mqhR8b2t3btWjl8+LDU1NRIaWmpLFiwQAYNGiSnT5+2Vgs9amhokLKyMikrKxMA8u6770pZWZmcO3dOREQSExMlOjpav762tlbuueceef3116WyslK2bt0qDg4OcujQIWu10CNj+9uyZYtkZWXJ77//LhUVFRIfHy/29vZy5MgRa7XQo6VLl8rQoUNFq9VKfX29/tHU1KRfo+Q9aEp/StqDiYmJUlBQIGfPnpVffvlFEhMTxc7OTrKzs0VE2dmJGN+fkrLrTsdvkVN6hmT75zlKYWwOqampolKpZN++fQbvHw0NDdZqwWYYm0VH/Ba5vmNsFn/88Ye4urrK8uXLpaqqSg4cOCDu7u6yfv16a7VgE4zNITk5WVxdXeWLL76Q2tpayc7OFh8fH5k/f761WrAZ1vpsywFTH3v//fdlzJgxolKpZMqUKVJcXKx/LSQkRGJiYgzWf/XVV/LQQw+JSqWSiRMnyvfff2/hio1jTH8JCQn6tR4eHjJ79mw5ceKEFarunfz8fAHQ6fFfTzExMRISEtLpmMmTJ4tKpRJvb2/ZtWuXxevuLWP727Rpk/j4+MigQYNk2LBhMn36dMnLy7NO8b3QVW8ADDJR8h40pT8l7cGFCxeKl5eXqFQque+++yQ0NFQ/fBFRdnYixvenpOy603HApPQM6RZbP89RCmNy8PLy6vL9Izk52fKF2yBj98TtOGDqW8Zm8eOPP8rUqVPF2dlZvL29ZcOGDdLW1mbhqm2PMTm0trbKmjVr9J85PD09ZdmyZXLt2jXLF25jrPXZ1k6E154REREREREREZHpeA8mIiIiIiIiIiIyCwdMRERERERERERkFg6YiIiIiIiIiIjILBwwERERERERERGRWThgIiIiIiIiIiIis3DAREREREREREREZuGAiYiIiIiIiIiIzMIBExERERERERERmYUDJiIiIiIiIiIiMgsHTESkSH/99ReWLl2KMWPGwNnZGSNGjEB4eDiKiooAAHZ2dsjKyrJukURERERERAOEo7ULICIyxZw5c9DS0oI9e/bA29sbly5dQm5uLq5evWrt0oiIiIiIiAYcOxERaxdBRGSMv//+G25ubtBqtQgJCen0+v33349z587pf/by8kJdXR0A4Ntvv8XatWtx5swZjBw5EjExMVi9ejUcHW/N2+3s7JCeno79+/dDq9VCrVZj8+bNmDt3rkV6IyIiIiIiUiL+iRwRKY6LiwtcXFyQlZWF5ubmTq+XlJQAAHbt2oX6+nr9zz/88ANeeuklxMfH48yZM8jIyMDu3buxYcMGg+OTkpIwZ84cnDx5ElFRUViwYAEqKyv7vzEiIiIiIiKF4hVMRKRI33zzDRYtWoSbN2/C398fISEhWLBgAfz8/ADcuhIpMzMTzz77rP6YmTNnIjQ0FG+++ab+uU8//RQrV67EhQsX9MctWbIE27Zt06957LHH4O/vj/T0dMs0R0REREREpDC8gomIFGnOnDm4cOEC9u/fjyeffBJarRb+/v7YvXt3t8ecPHkSKSkp+iugXFxcsGjRItTX16OpqUm/TqPRGByn0Wh4BRMREREREVEPeJNvIlKsQYMGISwsDGFhYUhKSkJsbCySk5Px8ssvd7n+xo0bWLt2LZ577rkufxcRERERERGZhlcwEZHNmDBhAhobGwEATk5O0Ol0Bq/7+/ujqqoKY8eO7fSwt///P4fFxcUGxxUXF2P8+PH93wAREREREZFC8QomIlKcq1evYt68eVi4cCH8/Pzg6uqK48ePY/PmzYiMjARw65vkcnNzERwcDGdnZ7i5ueGtt97CU089hTFjxmDu3Lmwt7fHyZMncerUKaxfv17/+7/++msEBgZi2rRp+Oyzz/Dzzz9j586d1mqXiIiIiIjorsebfBOR4jQ3N2PNmjXIzs5GTU0NWltb4enpiXnz5mHVqlUYPHgwvvvuO6xYsQJ1dXUYNWoU6urqAACHDx9GSkoKysrK4OTkhHHjxiE2NhaLFi0CcOsm31u3bkVWVhYKCwuhVquxadMmzJ8/34odExERERER3d04YCIiuk1X3z5HREREREREPeM9mIiIiIiIiIiIyCwcMBERERERERERkVl4k28iotvwr4aJiIiIiIiMxyuYiIiIiIiIiIjILBwwERERERERERGRWThgIiIiIiIiIiIis3DAREREREREREREZuGAiYiIiIiIiIiIzMIBExERERERERERmYUDJiIiIiIiIiIiMgsHTEREREREREREZJb/AVAb3fbkD5JCAAAAAElFTkSuQmCC\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# !rm -rf ./logs" + ], + "metadata": { + "id": "JQ56jVQbsyO9" + }, + "execution_count": null, + "outputs": [] + }, + { + "metadata": { + "id": "n-NR96UtFSkB" + }, + "cell_type": "markdown", + "source": [ + "## Homework/Exercise\n", + "\n", + "1. Complete missing code and run the notebook.\n", + "2. Experiment with different network architectures and hyperparameters to try and improve the classification accuracy.\n", + "\n", + "You are allowed to change:\n", + " - network architecture, including using other torchvision models\n", + " - optimizer\n", + " - learning rate\n", + " - batch size\n", + " - loss function\n", + "\n", + "You can also experiment with [learning rate scheduling](https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate). In [Lightning](https://lightning.ai/docs/pytorch/stable/api/lightning.pytorch.core.LightningModule.html#lightning.pytorch.core.LightningModule), you will add the scheduler in the `configure_optimizer` function by returning something like `return {\"optimizer\": optimizer, \"lr_scheduler\": scheduler}`.\n", + "\n", + "However, changing the number of training epochs is **not allowed**. Train your network for **10 epochs**!\n", + "\n", + "The group with the best results gets a small prize :)\n", + "\n", + "Good luck!" + ] + } + ] +} \ No newline at end of file