diff --git "a/week06/hw/\320\232\320\276\321\200\321\201\321\202_hw2.ipynb" "b/week06/hw/\320\232\320\276\321\200\321\201\321\202_hw2.ipynb" new file mode 100644 index 0000000..8ae7da9 --- /dev/null +++ "b/week06/hw/\320\232\320\276\321\200\321\201\321\202_hw2.ipynb" @@ -0,0 +1,5570 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Корст spotter hw", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU", + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "caee7add746340e8b92da749f18c8418": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_14cd479a614541bfa4b23cc55d79080d", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_cb8183e538684a829013eb1ba0c895be", + "IPY_MODEL_260d6bd9b14145358409f64c165d4120", + "IPY_MODEL_c721a0d3985b46119aa9e4b73c06728f" + ] + } + }, + "14cd479a614541bfa4b23cc55d79080d": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "cb8183e538684a829013eb1ba0c895be": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_3dbcf5e1f4074a8caa3abd5222808223", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_e0e206ab485644288bafc60c4dcdd4e3" + } + }, + "260d6bd9b14145358409f64c165d4120": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_e6b185bb49f048adab3034f1ea82c325", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 1, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 1, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_2ad70242c0a34d17b47306bd7db95694" + } + }, + "c721a0d3985b46119aa9e4b73c06728f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_9f945e10829f4b6ab6d82bc4a2068786", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 525/? [00:15<00:00, 35.92it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_b9f9880dc92b49569eeb4ee410ebacc3" + } + }, + "3dbcf5e1f4074a8caa3abd5222808223": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "e0e206ab485644288bafc60c4dcdd4e3": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "e6b185bb49f048adab3034f1ea82c325": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "2ad70242c0a34d17b47306bd7db95694": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": "20px", + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "9f945e10829f4b6ab6d82bc4a2068786": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "b9f9880dc92b49569eeb4ee410ebacc3": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "d8d0c3aa4c7e45fbbcf6ce0bc51bb4be": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_c3e23e44b1af4ff2925f1813251f13d6", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_6661638db3a34f1a86b6780230c0eb55", + "IPY_MODEL_123555b4eb1b42dcb1181312ae889cd5", + "IPY_MODEL_e31bfa5339354c16a7a65252fe43c460" + ] + } + }, + "c3e23e44b1af4ff2925f1813251f13d6": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "6661638db3a34f1a86b6780230c0eb55": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_43ae85ddcddf4c19862cc41d52eb5f80", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_8773baea1b934e83b3f05d85a74e6791" + } + }, + "123555b4eb1b42dcb1181312ae889cd5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_084f4055472b4ab6b267508acf39af40", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 1, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 1, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_83c8058ab79d4930b84c011fdc24cbdd" + } + }, + "e31bfa5339354c16a7a65252fe43c460": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_ff80a62e7ee34685b1598ce4c666b788", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 525/? [00:15<00:00, 38.82it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_88b1bad0d03f4ed5a5ec144ef6ea7822" + } + }, + "43ae85ddcddf4c19862cc41d52eb5f80": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "8773baea1b934e83b3f05d85a74e6791": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "084f4055472b4ab6b267508acf39af40": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "83c8058ab79d4930b84c011fdc24cbdd": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": "20px", + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "ff80a62e7ee34685b1598ce4c666b788": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "88b1bad0d03f4ed5a5ec144ef6ea7822": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "dc85369552fb40b5bafa0b878a858d6c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_1e571ad332cf4831b1eaa568b3c3159d", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_051b3300a2fb45f2a1b5da7655822163", + "IPY_MODEL_b65471eb157244eab9f8ca0746c77b2b", + "IPY_MODEL_a563c8dd7fec43659c1ae3bc1b3774fe" + ] + } + }, + "1e571ad332cf4831b1eaa568b3c3159d": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "051b3300a2fb45f2a1b5da7655822163": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_24748aa07579429aaf44b329b9d2a605", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_84c3e62b745f45ccbe07af5335d255bf" + } + }, + "b65471eb157244eab9f8ca0746c77b2b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_b3fb2d5e3a2847d0a3c80a544f2f1443", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 1, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 1, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_686210ea67cb47c4876a36c5f9e3d1cc" + } + }, + "a563c8dd7fec43659c1ae3bc1b3774fe": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_cf89797058c346088727639de8a37c54", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 525/? [00:14<00:00, 37.96it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_656d3d91198b40dd9438e8c262c9d41f" + } + }, + "24748aa07579429aaf44b329b9d2a605": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "84c3e62b745f45ccbe07af5335d255bf": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "b3fb2d5e3a2847d0a3c80a544f2f1443": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "686210ea67cb47c4876a36c5f9e3d1cc": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": "20px", + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "cf89797058c346088727639de8a37c54": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "656d3d91198b40dd9438e8c262c9d41f": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "f53926accdfb4988aa96b164654bd8bc": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_f1cc361f9dd449cda41e52dea27af521", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_2de1bab27fe34a2091d25a4e06be9251", + "IPY_MODEL_70a4d6ca93b444b3859ad9c98e5628c0", + "IPY_MODEL_56a35434977a48b4a940b8ad3677ead4" + ] + } + }, + "f1cc361f9dd449cda41e52dea27af521": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "2de1bab27fe34a2091d25a4e06be9251": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_cd3b5bc894834e8089fbcb1aaa8bfeff", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_dceb4f6391a14402a58d842926599e44" + } + }, + "70a4d6ca93b444b3859ad9c98e5628c0": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_e9e0f5c6b40b4b3ab64bbc8ba0efc931", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 1, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 1, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_8aa475090a494c3b845efecd08428469" + } + }, + "56a35434977a48b4a940b8ad3677ead4": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_567e5650b97342f895f699bb0849cf09", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 525/? [00:14<00:00, 37.36it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_030f777cfe754bbc8d97330deab490eb" + } + }, + "cd3b5bc894834e8089fbcb1aaa8bfeff": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "dceb4f6391a14402a58d842926599e44": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "e9e0f5c6b40b4b3ab64bbc8ba0efc931": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "8aa475090a494c3b845efecd08428469": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": "20px", + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "567e5650b97342f895f699bb0849cf09": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "030f777cfe754bbc8d97330deab490eb": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "a5b5c5f1e7194d9485a820ca16483de5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_d783f3830ce34711aec0fcafeb6b4ccd", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_4115c95fffd64017a52a985044512ec1", + "IPY_MODEL_0c673a5a1356425697ea6dc8b5add71e", + "IPY_MODEL_51cc428fbd58499e95e546f9e2019dca" + ] + } + }, + "d783f3830ce34711aec0fcafeb6b4ccd": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "4115c95fffd64017a52a985044512ec1": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_9f7fe367958e4d3fabf2aadb1d6e8b1f", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_c9aa6b114b534c2989d230c2f9a0db49" + } + }, + "0c673a5a1356425697ea6dc8b5add71e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_08d47e8c2d00456397b8b0e8efeac9f3", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 1, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 1, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_4a2d56bedfd446f3862c8e3add2a9161" + } + }, + "51cc428fbd58499e95e546f9e2019dca": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_d4e24068990242069c8659a097723566", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 525/? [00:14<00:00, 37.98it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_7bbd3249586d4bda901f0e408ea7e806" + } + }, + "9f7fe367958e4d3fabf2aadb1d6e8b1f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "c9aa6b114b534c2989d230c2f9a0db49": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "08d47e8c2d00456397b8b0e8efeac9f3": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "4a2d56bedfd446f3862c8e3add2a9161": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": "20px", + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "d4e24068990242069c8659a097723566": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "7bbd3249586d4bda901f0e408ea7e806": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "48135cfce6184e3cbff7e053e5f4f5cd": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_18846f6c04a242c1bfbc5d082808d891", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_1a61f29855f043468b57fa69370af1f3", + "IPY_MODEL_c246c35210654b9684a2699e51549d65", + "IPY_MODEL_dff4e79a90d14f57a98b3557831ed4b7" + ] + } + }, + "18846f6c04a242c1bfbc5d082808d891": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "1a61f29855f043468b57fa69370af1f3": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_442d0db4b2924f1cac4bf71616865533", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_78ddba17b4ed4d5c98e31cf6f7528d62" + } + }, + "c246c35210654b9684a2699e51549d65": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_77ffbd0da6d44dd7af88bdc5481f533b", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 1, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 1, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_a69578912b2746f98897a5aa4df06b99" + } + }, + "dff4e79a90d14f57a98b3557831ed4b7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_f0628d45b0904362b959f6c326e99789", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 525/? [00:14<00:00, 38.82it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_8be3feca491149599220c238efa2fdea" + } + }, + "442d0db4b2924f1cac4bf71616865533": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "78ddba17b4ed4d5c98e31cf6f7528d62": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "77ffbd0da6d44dd7af88bdc5481f533b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "a69578912b2746f98897a5aa4df06b99": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": "20px", + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "f0628d45b0904362b959f6c326e99789": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "8be3feca491149599220c238efa2fdea": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "bcad49e8a1dd4e8aa63e3a655367610e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_800ef48a3ae345239df5b94324d7d6c6", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_9c47c5cef969400397d4c57cfc1fc2da", + "IPY_MODEL_977946d06db94bf28fafd8509607dbd5", + "IPY_MODEL_79e752ce29d24a97a778b1b5367b5a1e" + ] + } + }, + "800ef48a3ae345239df5b94324d7d6c6": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "9c47c5cef969400397d4c57cfc1fc2da": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_50778da969324a7d9a01dc4ad4b08efd", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_eee6f4b968014389ad2e0dd0659d0aa9" + } + }, + "977946d06db94bf28fafd8509607dbd5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_587bb65ba1b245ee9efcbd62556bcaaf", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 1, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 1, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_1db2d8e02b3b40748f04d57daa1d9735" + } + }, + "79e752ce29d24a97a778b1b5367b5a1e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_26bb183d019846ae909c362d90c43692", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 525/? [00:14<00:00, 37.20it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_3a090583d7304408a081fb8207d8f972" + } + }, + "50778da969324a7d9a01dc4ad4b08efd": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "eee6f4b968014389ad2e0dd0659d0aa9": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "587bb65ba1b245ee9efcbd62556bcaaf": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "1db2d8e02b3b40748f04d57daa1d9735": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": "20px", + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "26bb183d019846ae909c362d90c43692": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "3a090583d7304408a081fb8207d8f972": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "47e6500fd58a4f2db6ef3b90c06b6ade": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_53f91b9153ec46e9a418e273019cf5a5", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_898b8c52c4374c948eb7597e6af1017b", + "IPY_MODEL_0c9a1850a2034cfabfe7295f7e006fc7", + "IPY_MODEL_ad951488757446d08f07db503586d882" + ] + } + }, + "53f91b9153ec46e9a418e273019cf5a5": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "898b8c52c4374c948eb7597e6af1017b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_9f0558041e504bfe895e840f319531be", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_6d96b8a34ac94542a36cec48bcd11355" + } + }, + "0c9a1850a2034cfabfe7295f7e006fc7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_1601e46788504b0b880584708e9eb6f9", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 1, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 1, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_e8d0540c339942b0a23b681e2a0bb898" + } + }, + "ad951488757446d08f07db503586d882": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_b5f45da5f6aa459f9df27b1d56742bba", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 525/? [00:14<00:00, 37.41it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_2888b8d8652e4adc92cfabce9aa73c9e" + } + }, + "9f0558041e504bfe895e840f319531be": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "6d96b8a34ac94542a36cec48bcd11355": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "1601e46788504b0b880584708e9eb6f9": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "e8d0540c339942b0a23b681e2a0bb898": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": "20px", + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "b5f45da5f6aa459f9df27b1d56742bba": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "2888b8d8652e4adc92cfabce9aa73c9e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "44dee79453ad476abbac45626056bf97": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_86c77bf87e62474bb7e11a18d5117523", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_d599efe37084419d81b9cf46087ad606", + "IPY_MODEL_aa3ea7853deb42d5b6add3a39d26373a", + "IPY_MODEL_912f7b3a55a3448ab906ea3c38597ab9" + ] + } + }, + "86c77bf87e62474bb7e11a18d5117523": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "d599efe37084419d81b9cf46087ad606": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_2751b061ee77437b8cb96f030540c30a", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_fd3caa1285404d53882be197d0816b31" + } + }, + "aa3ea7853deb42d5b6add3a39d26373a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_2aff5fb8fe94417580c38cd63a76cd14", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 1, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 1, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_b8bbad055f644400a5238dc9246504e7" + } + }, + "912f7b3a55a3448ab906ea3c38597ab9": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_d685e22fade7480682c6c04da3a8bb4f", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 525/? [00:14<00:00, 36.70it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_056f2ee5981d449c8ff24ce11543cf29" + } + }, + "2751b061ee77437b8cb96f030540c30a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "fd3caa1285404d53882be197d0816b31": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "2aff5fb8fe94417580c38cd63a76cd14": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "b8bbad055f644400a5238dc9246504e7": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": "20px", + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "d685e22fade7480682c6c04da3a8bb4f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "056f2ee5981d449c8ff24ce11543cf29": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "cc2260bad3804dd0ad3cc18ea9601b5b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_fc53d2e01a9446c7856804b756bb505a", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_c3116fb7e27e4fd1a7c3b689724d91ef", + "IPY_MODEL_bf1c40f69cdc4188975dd8ae2f82cdd2", + "IPY_MODEL_7882395041054aa69bef6a139b057e55" + ] + } + }, + "fc53d2e01a9446c7856804b756bb505a": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "c3116fb7e27e4fd1a7c3b689724d91ef": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_0a2a99c060b643a9876ce2a4dadf3c43", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_396f618698644bd8b91eb894b5e59614" + } + }, + "bf1c40f69cdc4188975dd8ae2f82cdd2": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_12d4956ab0894415aefabd3f6e492ba5", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 1, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 1, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_5ba98db7527a4c26bd6ce7960e7b8607" + } + }, + "7882395041054aa69bef6a139b057e55": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_6f24cfff5f5845e2bf741796486bec3d", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 525/? [00:14<00:00, 37.86it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_f6eaf8b8df3f40d9866e6b7e9b8b7b89" + } + }, + "0a2a99c060b643a9876ce2a4dadf3c43": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "396f618698644bd8b91eb894b5e59614": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "12d4956ab0894415aefabd3f6e492ba5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "5ba98db7527a4c26bd6ce7960e7b8607": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": "20px", + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "6f24cfff5f5845e2bf741796486bec3d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "f6eaf8b8df3f40d9866e6b7e9b8b7b89": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + } + } + } + }, + "cells": [ + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "DLqUa76aAHIg", + "outputId": "6535a51e-8e8d-44d6-f1ac-a5a7b1d94404" + }, + "source": [ + "!apt install sox" + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Reading package lists... Done\n", + "Building dependency tree \n", + "Reading state information... Done\n", + "sox is already the newest version (14.4.2-3ubuntu0.18.04.1).\n", + "0 upgraded, 0 newly installed, 0 to remove and 37 not upgraded.\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eX_UvnL9FOB2" + }, + "source": [ + "### Baseline commands recognition (2-5 points)\n", + "\n", + "We're now going to train a classifier to recognize voice. More specifically, we'll use the [Speech Commands Dataset] that contains around 30 different words with a few thousand voice records each." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "FvHkw2rfY9k7", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "046f0293-65b3-454e-a2ee-bfd2dcc1afdd" + }, + "source": [ + "import os\n", + "from IPython.display import display, Audio\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "import numpy as np\n", + "import librosa\n", + "import torch\n", + "from torch.utils.data import TensorDataset, DataLoader\n", + "\n", + "datadir = \"speech_commands\"\n", + "\n", + "!wget http://download.tensorflow.org/data/speech_commands_v0.01.tar.gz -O speech_commands_v0.01.tar.gz\n", + "# alternative url: https://www.dropbox.com/s/j95n278g48bcbta/speech_commands_v0.01.tar.gz?dl=1\n", + "!mkdir {datadir} && tar -C {datadir} -xvzf speech_commands_v0.01.tar.gz 1> log\n", + "\n", + "samples_by_target = {\n", + " cls: [os.path.join(datadir, cls, name) for name in os.listdir(\"./speech_commands/{}\".format(cls))]\n", + " for cls in os.listdir(datadir)\n", + " if os.path.isdir(os.path.join(datadir, cls))\n", + "}\n", + "print('Classes:', ', '.join(sorted(samples_by_target.keys())[1:]))" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "--2021-10-26 20:06:50-- http://download.tensorflow.org/data/speech_commands_v0.01.tar.gz\n", + "Resolving download.tensorflow.org (download.tensorflow.org)... 172.217.212.128, 2607:f8b0:4001:c03::80\n", + "Connecting to download.tensorflow.org (download.tensorflow.org)|172.217.212.128|:80... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 1489096277 (1.4G) [application/gzip]\n", + "Saving to: ‘speech_commands_v0.01.tar.gz’\n", + "\n", + "speech_commands_v0. 100%[===================>] 1.39G 225MB/s in 6.3s \n", + "\n", + "2021-10-26 20:06:56 (227 MB/s) - ‘speech_commands_v0.01.tar.gz’ saved [1489096277/1489096277]\n", + "\n", + "mkdir: cannot create directory ‘speech_commands’: File exists\n", + "Classes: bed, bird, cat, dog, down, eight, five, four, go, happy, house, left, marvin, nine, no, off, on, one, right, seven, sheila, six, stop, three, tree, two, up, wow, yes, zero\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ME4cVShQ916w", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "93e5e236-16a8-4077-e30a-c2428db2ac91" + }, + "source": [ + "!sox --info speech_commands/bed/00176480_nohash_0.wav" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Input File : 'speech_commands/bed/00176480_nohash_0.wav'\n", + "Channels : 1\n", + "Sample Rate : 16000\n", + "Precision : 16-bit\n", + "Duration : 00:00:01.00 = 16000 samples ~ 75 CDDA sectors\n", + "File Size : 32.0k\n", + "Bit Rate : 256k\n", + "Sample Encoding: 16-bit Signed Integer PCM\n", + "\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cvF5l-PCyd8z", + "outputId": "9718a153-24ce-4e97-d5db-797e6ef88364" + }, + "source": [ + "from sklearn.model_selection import train_test_split\n", + "from itertools import chain\n", + "from tqdm import tqdm\n", + "import joblib as jl\n", + "\n", + "classes = (\"left\", \"right\", \"up\", \"down\", \"stop\")\n", + "\n", + "def preprocess_sample(filepath, max_length=124):\n", + " amplitudes, sr = librosa.core.load(filepath)\n", + " spectrogram = librosa.feature.melspectrogram(amplitudes, sr=sr)[:, :max_length]\n", + " spectrogram = np.pad(spectrogram, [[0, 0], [0, max(0, max_length - spectrogram.shape[1])]], mode='constant')\n", + " target = classes.index(filepath.split(os.sep)[-2])\n", + " return np.float32(spectrogram), np.int64(target)\n", + "\n", + "all_files = chain(*(samples_by_target[cls] for cls in classes))\n", + "spectrograms_and_targets = jl.Parallel(n_jobs=-1)(tqdm(list(map(jl.delayed(preprocess_sample), all_files))))\n", + "X, y = map(np.stack, zip(*spectrograms_and_targets))\n", + "X = X.transpose([0, 2, 1]) # to [batch, time, channels]\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "100%|██████████| 11834/11834 [07:51<00:00, 25.11it/s]\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "7Ol6sywTG_Y9" + }, + "source": [ + "batch_size = 16\n", + "\n", + "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", + "\n", + "tensor_x = torch.Tensor(X_train)\n", + "tensor_y = torch.LongTensor(y_train)\n", + "\n", + "train_dataset = TensorDataset(tensor_x, tensor_y)\n", + "\n", + "tensor_x = torch.Tensor(X_test) # transform to torch tensor\n", + "tensor_y = torch.LongTensor(y_test)\n", + "\n", + "test_dataset = TensorDataset(tensor_x, tensor_y)\n", + "\n", + "\n", + "trainloader = DataLoader(train_dataset, batch_size=batch_size,\n", + " shuffle=True, num_workers=2)\n", + "testloader = DataLoader(test_dataset, batch_size=batch_size,\n", + " shuffle=False, num_workers=2)" + ], + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3pPkqUsm0Dba", + "outputId": "19aed950-f755-499f-df03-46015bd00e98" + }, + "source": [ + "X_train.shape" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(8875, 124, 128)" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "1RPUUe852mN0", + "outputId": "43e9e7b9-d90a-4bf0-c539-b167e832b33b" + }, + "source": [ + "print(f\"Размерность одного примера: {train_dataset[0][0].shape}\")\n", + "print(f\"Классы, на которые мы будем делать классификацию: {set(map(int, train_dataset[:][1]))}\")" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Размерность одного примера: torch.Size([124, 128])\n", + "Классы, на которые мы будем делать классификацию: {0, 1, 2, 3, 4}\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ilW8NXRfSr5d" + }, + "source": [ + "### Реализуем модель из статьи MatchboxNet: 1D Time-Channel Separable Convolutional Neural Network Architecture for Speech Commands Recognition\n", + "\n", + "source: https://arxiv.org/pdf/2004.08531.pdf\n", + "\n", + "Будем реализовывать $MatchboxNet-3x2x64$" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "-qr8t6wCF8vT" + }, + "source": [ + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "\n", + "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", + "\n", + "\n", + "class TCSConv1d(nn.Module):\n", + " def __init__(self, in_channels, out_channels, kernel_size, stride=1, dilation=1, padding=0):\n", + " \"\"\"\n", + " Реализация 1D-time-channel separable convolution\n", + " \"\"\"\n", + " super(TCSConv1d, self).__init__()\n", + " self.depthwise = nn.Conv1d(in_channels, in_channels, kernel_size=kernel_size, \n", + " stride=stride, dilation=dilation, padding=padding,\n", + " groups=in_channels)\n", + " self.pointwise = nn.Conv1d(in_channels, out_channels, kernel_size=1)\n", + "\n", + " def forward(self, x):\n", + " x = self.depthwise(x)\n", + " x = self.pointwise(x)\n", + " return x\n", + "\n", + "\n", + "class MatchboxNet(nn.Module):\n", + " def __init__(self, num_classes):\n", + " super().__init__()\n", + " # prologue\n", + " self.prolog = nn.Sequential(\n", + " TCSConv1d(in_channels=128, out_channels=64, kernel_size=11, stride=2),\n", + " nn.BatchNorm1d(64),\n", + " nn.ReLU(),\n", + " nn.Dropout(0.2)\n", + " )\n", + "\n", + " self.relu = nn.ReLU()\n", + " self.dropout = nn.Dropout(0.2)\n", + "\n", + " # block1\n", + " self.block1_conv1 = TCSConv1d(in_channels=64, out_channels=64, kernel_size=13, padding=6)\n", + " self.block1_batchnorm1 = nn.BatchNorm1d(64)\n", + " self.block1_conv2 = TCSConv1d(in_channels=64, out_channels=64, kernel_size=13, padding=6)\n", + " self.block1_batchnorm2 = nn.BatchNorm1d(64)\n", + " self.block1_pointwise_conv = nn.Conv1d(64, 64, kernel_size=1)\n", + " self.block1_batchnorm3 = nn.BatchNorm1d(64)\n", + "\n", + " # block2\n", + " self.block2_conv1 = TCSConv1d(in_channels=64, out_channels=64, kernel_size=15, padding=7)\n", + " self.block2_batchnorm1 = nn.BatchNorm1d(64)\n", + " self.block2_conv2 = TCSConv1d(in_channels=64, out_channels=64, kernel_size=15, padding=7)\n", + " self.block2_batchnorm2 = nn.BatchNorm1d(64)\n", + " self.block2_pointwise_conv = nn.Conv1d(64, 64, kernel_size=1)\n", + " self.block2_batchnorm3 = nn.BatchNorm1d(64)\n", + "\n", + " # block3\n", + " self.block3_conv1 = TCSConv1d(in_channels=64, out_channels=64, kernel_size=17, padding=8)\n", + " self.block3_batchnorm1 = nn.BatchNorm1d(64)\n", + " self.block3_conv2 = TCSConv1d(in_channels=64, out_channels=64, kernel_size=17, padding=8)\n", + " self.block3_batchnorm2 = nn.BatchNorm1d(64)\n", + " self.block3_pointwise_conv = nn.Conv1d(64, 64, kernel_size=1)\n", + " self.block3_batchnorm3 = nn.BatchNorm1d(64)\n", + "\n", + " # epilogue\n", + " self.epilog1 = nn.Sequential(\n", + " TCSConv1d(in_channels=64, out_channels=128, kernel_size=29, dilation=2),\n", + " nn.BatchNorm1d(128),\n", + " nn.ReLU(),\n", + " nn.Dropout(0.2)\n", + " )\n", + " self.epilog2 = nn.Sequential(\n", + " TCSConv1d(in_channels=128, out_channels=128, kernel_size=1),\n", + " nn.BatchNorm1d(128),\n", + " nn.ReLU(),\n", + " nn.Dropout(0.2)\n", + " )\n", + " self.epilog3 = nn.Conv1d(128, num_classes, kernel_size=1)\n", + " self.flatten = nn.Flatten()\n", + "\n", + " def forward(self, x):\n", + " # x: [batch, time, channels]\n", + " # x: [batch, 124, 128]\n", + " batch, time, channels = x.shape\n", + " x = x.permute(0, 2, 1)\n", + "\n", + " # prologue conv1\n", + " # conv1 kernel_size=11\n", + " x = self.prolog(x)\n", + "\n", + " res_block1 = x\n", + "\n", + " # block 1 kernel_size=13\n", + " res_x_1 = self.block1_batchnorm3(self.block1_pointwise_conv(x))\n", + " x = self.dropout(self.relu(self.block1_batchnorm1(self.block1_conv1(x))))\n", + " x = self.block1_batchnorm2(self.block1_conv2(x))\n", + " x = x + res_x_1\n", + " x = self.dropout(self.relu(x))\n", + "\n", + " # residual connection\n", + " x = x + res_block1\n", + " res_block2 = x\n", + "\n", + " # block 2 kernel_size=15\n", + " res_x_2 = self.block2_batchnorm3(self.block2_pointwise_conv(x))\n", + " x = self.dropout(self.relu(self.block2_batchnorm1(self.block2_conv1(x))))\n", + " x = self.block2_batchnorm2(self.block2_conv2(x))\n", + " x = x + res_x_2\n", + " x = self.dropout(self.relu(x))\n", + "\n", + " # residual connection\n", + " x = x + res_block2\n", + " res_block3 = x\n", + "\n", + " # block 3 kernel_size=17\n", + " res_x_3 = self.block3_batchnorm3(self.block3_pointwise_conv(x))\n", + " x = self.dropout(self.relu(self.block3_batchnorm1(self.block3_conv1(x))))\n", + " x = self.block3_batchnorm2(self.block3_conv2(x))\n", + " x = x + res_x_3\n", + " x = self.dropout(self.relu(x))\n", + "\n", + " # residual connection\n", + " x = x + res_block3\n", + "\n", + " # epilogue conv2->conv3->conv4\n", + " # conv2 kernel_size=29 dilation=2\n", + " x = self.epilog1(x)\n", + " # conv3 kernel_size=1\n", + " x = self.epilog2(x)\n", + " # conv4 kernel_size=1\n", + " x = self.epilog3(x)\n", + "\n", + " x = self.flatten(x)\n", + " \n", + " x = F.softmax(x)\n", + "\n", + " return x\n", + "\n", + "\n", + "net = MatchboxNet(num_classes=5).to(device)" + ], + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "jTfmdYRILuYD", + "outputId": "51a5ce0a-a075-4ce8-baf7-2a185533de6e" + }, + "source": [ + "from torchsummary import summary\n", + "\n", + "summary(net, (124, 128))" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "----------------------------------------------------------------\n", + " Layer (type) Output Shape Param #\n", + "================================================================\n", + " Conv1d-1 [-1, 128, 57] 1,536\n", + " Conv1d-2 [-1, 64, 57] 8,256\n", + " TCSConv1d-3 [-1, 64, 57] 0\n", + " BatchNorm1d-4 [-1, 64, 57] 128\n", + " ReLU-5 [-1, 64, 57] 0\n", + " Dropout-6 [-1, 64, 57] 0\n", + " Conv1d-7 [-1, 64, 57] 4,160\n", + " BatchNorm1d-8 [-1, 64, 57] 128\n", + " Conv1d-9 [-1, 64, 57] 896\n", + " Conv1d-10 [-1, 64, 57] 4,160\n", + " TCSConv1d-11 [-1, 64, 57] 0\n", + " BatchNorm1d-12 [-1, 64, 57] 128\n", + " ReLU-13 [-1, 64, 57] 0\n", + " Dropout-14 [-1, 64, 57] 0\n", + " Conv1d-15 [-1, 64, 57] 896\n", + " Conv1d-16 [-1, 64, 57] 4,160\n", + " TCSConv1d-17 [-1, 64, 57] 0\n", + " BatchNorm1d-18 [-1, 64, 57] 128\n", + " ReLU-19 [-1, 64, 57] 0\n", + " Dropout-20 [-1, 64, 57] 0\n", + " Conv1d-21 [-1, 64, 57] 4,160\n", + " BatchNorm1d-22 [-1, 64, 57] 128\n", + " Conv1d-23 [-1, 64, 57] 1,024\n", + " Conv1d-24 [-1, 64, 57] 4,160\n", + " TCSConv1d-25 [-1, 64, 57] 0\n", + " BatchNorm1d-26 [-1, 64, 57] 128\n", + " ReLU-27 [-1, 64, 57] 0\n", + " Dropout-28 [-1, 64, 57] 0\n", + " Conv1d-29 [-1, 64, 57] 1,024\n", + " Conv1d-30 [-1, 64, 57] 4,160\n", + " TCSConv1d-31 [-1, 64, 57] 0\n", + " BatchNorm1d-32 [-1, 64, 57] 128\n", + " ReLU-33 [-1, 64, 57] 0\n", + " Dropout-34 [-1, 64, 57] 0\n", + " Conv1d-35 [-1, 64, 57] 4,160\n", + " BatchNorm1d-36 [-1, 64, 57] 128\n", + " Conv1d-37 [-1, 64, 57] 1,152\n", + " Conv1d-38 [-1, 64, 57] 4,160\n", + " TCSConv1d-39 [-1, 64, 57] 0\n", + " BatchNorm1d-40 [-1, 64, 57] 128\n", + " ReLU-41 [-1, 64, 57] 0\n", + " Dropout-42 [-1, 64, 57] 0\n", + " Conv1d-43 [-1, 64, 57] 1,152\n", + " Conv1d-44 [-1, 64, 57] 4,160\n", + " TCSConv1d-45 [-1, 64, 57] 0\n", + " BatchNorm1d-46 [-1, 64, 57] 128\n", + " ReLU-47 [-1, 64, 57] 0\n", + " Dropout-48 [-1, 64, 57] 0\n", + " Conv1d-49 [-1, 64, 1] 1,920\n", + " Conv1d-50 [-1, 128, 1] 8,320\n", + " TCSConv1d-51 [-1, 128, 1] 0\n", + " BatchNorm1d-52 [-1, 128, 1] 256\n", + " ReLU-53 [-1, 128, 1] 0\n", + " Dropout-54 [-1, 128, 1] 0\n", + " Conv1d-55 [-1, 128, 1] 256\n", + " Conv1d-56 [-1, 128, 1] 16,512\n", + " TCSConv1d-57 [-1, 128, 1] 0\n", + " BatchNorm1d-58 [-1, 128, 1] 256\n", + " ReLU-59 [-1, 128, 1] 0\n", + " Dropout-60 [-1, 128, 1] 0\n", + " Conv1d-61 [-1, 5, 1] 645\n", + " Flatten-62 [-1, 5] 0\n", + "================================================================\n", + "Total params: 82,821\n", + "Trainable params: 82,821\n", + "Non-trainable params: 0\n", + "----------------------------------------------------------------\n", + "Input size (MB): 0.06\n", + "Forward/backward pass size (MB): 1.38\n", + "Params size (MB): 0.32\n", + "Estimated Total Size (MB): 1.75\n", + "----------------------------------------------------------------\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:132: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "z-hvEqAXLsqi" + }, + "source": [ + "### Замечания, которые у меня есть по модели. Первое, что я долго не мог понять, это то, что блоки не изменяют длину временной размерности (кроме блоков prologue и epilogue). Я не мог этого понять, потому что в статье ни слова не написано об использовании паддинга в separable свертках. Это стало очевидно, когда я вспомнил о том, что в модели используются skip connection'ы - выход из блока складывается с его входом. Поэтому свертки не должны менять размерность данных. Поэтому для сверток должен быть использован same padding, которого нет в pytorch и нужно подбирать руками. Я подобрал паддинги для блоков, чтобы не менялась размерность и реализовал все, как описано в статье. Но единственное, что у меня не сошлось с ней, это то что у них временная размерность 128, а у меня 124 (если взять 128, то после последнего слоя будет размерность не 1, а 3). Возможно я где-то ошибся, или не так понял статью. Но у меня все работает так. Количество параметров у меня вышло меньше, чем заявленное: заявлено в статье - 93к, а у меня вышло - 83к. " + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GSaaRrpYs7gs", + "outputId": "6352c7db-477c-4074-802b-735d315606a6" + }, + "source": [ + "L_in = 57\n", + "dilation = 2\n", + "kernel_size = 29\n", + "stride = 1\n", + "padding = 0\n", + "L_out = int(np.floor((L_in + 2 * padding - dilation * (kernel_size - 1) - 1) / stride + 1))\n", + "L_out" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "1" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "MCZ7MkvsF9gs" + }, + "source": [ + "import torch.optim as optim\n", + "\n", + "criterion = nn.CrossEntropyLoss()\n", + "optimizer = optim.Adam(net.parameters())" + ], + "execution_count": 35, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "xR1uxQ-GGGLr", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "851eab87-9105-40c1-daf3-44f4af686143" + }, + "source": [ + "from tqdm import tqdm\n", + "\n", + "for epoch in range(10): # loop over the dataset multiple times\n", + "\n", + " running_loss = 0.0\n", + " for i, data in tqdm(enumerate(trainloader, 0)):\n", + " # get the inputs; data is a list of [inputs, labels]\n", + " inputs, labels = data\n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + "\n", + " # zero the parameter gradients\n", + " optimizer.zero_grad()\n", + "\n", + " # forward + backward + optimize\n", + " outputs = net(inputs)\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " # print statistics\n", + " running_loss += loss.item()\n", + " if i % 100 == 99: # print every 100 mini-batches\n", + " print('[%d, %5d] loss: %.3f' %\n", + " (epoch + 1, i + 1, running_loss / 100))\n", + " running_loss = 0.0\n", + "\n", + "print('Finished Training')" + ], + "execution_count": 36, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "0it [00:00, ?it/s]/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:132: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.\n", + "107it [00:03, 36.43it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[1, 100] loss: 1.611\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "207it [00:05, 35.82it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[1, 200] loss: 1.609\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "307it [00:08, 34.34it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[1, 300] loss: 1.604\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "407it [00:11, 34.47it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[1, 400] loss: 1.598\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "503it [00:14, 33.79it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[1, 500] loss: 1.579\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "555it [00:16, 34.19it/s]\n", + "104it [00:03, 35.32it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[2, 100] loss: 1.521\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "204it [00:05, 34.31it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[2, 200] loss: 1.508\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "304it [00:08, 35.70it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[2, 300] loss: 1.487\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "404it [00:11, 34.34it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[2, 400] loss: 1.471\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "504it [00:14, 35.61it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[2, 500] loss: 1.453\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "555it [00:16, 34.65it/s]\n", + "104it [00:03, 34.84it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[3, 100] loss: 1.408\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "204it [00:05, 34.52it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[3, 200] loss: 1.413\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "304it [00:08, 32.73it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[3, 300] loss: 1.390\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "404it [00:11, 34.92it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[3, 400] loss: 1.379\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "504it [00:14, 32.57it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[3, 500] loss: 1.378\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "555it [00:16, 33.96it/s]\n", + "107it [00:03, 34.98it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[4, 100] loss: 1.331\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "203it [00:05, 33.08it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[4, 200] loss: 1.352\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "303it [00:08, 34.29it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[4, 300] loss: 1.345\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "403it [00:11, 33.66it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[4, 400] loss: 1.334\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "507it [00:14, 35.02it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[4, 500] loss: 1.325\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "555it [00:16, 34.05it/s]\n", + "106it [00:03, 35.18it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[5, 100] loss: 1.326\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "207it [00:06, 35.95it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[5, 200] loss: 1.301\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "307it [00:08, 34.51it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[5, 300] loss: 1.276\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "407it [00:11, 34.02it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[5, 400] loss: 1.291\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "503it [00:14, 32.75it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[5, 500] loss: 1.287\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "555it [00:16, 33.82it/s]\n", + "103it [00:03, 33.00it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[6, 100] loss: 1.287\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "203it [00:05, 33.54it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[6, 200] loss: 1.267\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "303it [00:08, 33.69it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[6, 300] loss: 1.259\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "403it [00:11, 34.84it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[6, 400] loss: 1.253\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "503it [00:14, 33.34it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[6, 500] loss: 1.267\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "555it [00:16, 34.10it/s]\n", + "107it [00:03, 35.38it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[7, 100] loss: 1.258\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "203it [00:05, 33.68it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[7, 200] loss: 1.248\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "307it [00:08, 35.55it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[7, 300] loss: 1.243\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "407it [00:11, 34.75it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[7, 400] loss: 1.235\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "507it [00:14, 33.68it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[7, 500] loss: 1.249\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "555it [00:16, 34.21it/s]\n", + "107it [00:03, 34.37it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[8, 100] loss: 1.215\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "207it [00:06, 35.16it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[8, 200] loss: 1.229\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "303it [00:08, 33.69it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[8, 300] loss: 1.233\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "403it [00:11, 32.62it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[8, 400] loss: 1.243\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "503it [00:14, 34.77it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[8, 500] loss: 1.227\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "555it [00:16, 33.99it/s]\n", + "107it [00:03, 36.16it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[9, 100] loss: 1.222\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "207it [00:06, 33.93it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[9, 200] loss: 1.200\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "307it [00:09, 34.98it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[9, 300] loss: 1.210\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "403it [00:11, 33.95it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[9, 400] loss: 1.207\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "503it [00:14, 32.39it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[9, 500] loss: 1.201\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "555it [00:16, 33.88it/s]\n", + "103it [00:03, 32.55it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[10, 100] loss: 1.193\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "203it [00:06, 32.26it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[10, 200] loss: 1.210\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "303it [00:09, 32.28it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[10, 300] loss: 1.201\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "403it [00:12, 33.01it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[10, 400] loss: 1.195\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "507it [00:15, 33.57it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[10, 500] loss: 1.194\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "555it [00:16, 33.30it/s]" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Finished Training\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ojEuXjx5DlDW" + }, + "source": [ + "Train a model: finally, lets' build and train a classifier neural network. You can use any library you like. If in doubt, consult the model & training tips below." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hwgnOrZy1E8p" + }, + "source": [ + "__Training tips:__ here's what you can try:\n", + "* __Layers:__ 1d or 2d convolutions, perhaps with some batch normalization in between;\n", + "* __Architecture:__ VGG-like, residual, highway, densely-connected, MatchboxNet, Dilated convs - you name it :)\n", + "* __Batch size matters:__ smaller batches usually train slower but better. Try to find the one that suits you best.\n", + "* __Data augmentation:__ add background noise, faster/slower, change pitch;\n", + "* __Average checkpoints:__ you can make model more stable with [this simple technique (arxiv)](https://arxiv.org/abs/1803.05407)\n", + "* __For full scale stage:__ make sure you're not losing too much data due to max_length in the pre-processing stage!\n", + "\n", + "These are just recommendations. As long as your model works, you're not required to follow them." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Fvf8UCsPDvj2" + }, + "source": [ + "### Full scale commands recognition (3+ points)\n", + "\n", + "Your final task is to train a full-scale voice command spotter and apply it to a video:\n", + "1. Build the dataset with all 30+ classes (directions, digits, names, etc.)\n", + " * __Optional:__ include a special \"noise\" class that contains random unrelated sounds\n", + " * You can download youtube videos with [`youtube-dl`](https://ytdl-org.github.io/youtube-dl/index.html) library.\n", + "2. Train a model on this full dataset. Kudos for tuning its accuracy :)\n", + "3. Apply it to a audio/video of your choice to spot the occurences of each keyword\n", + " * Here's one [video about primes](https://www.youtube.com/watch?v=EK32jo7i5LQ) that you can try. It should be full of numbers :)\n", + " * There are multiple ways you can analyze the performance of your network, e.g. plot probabilities predicted for every time-step. Chances are you'll discover something useful about how to improve your model :)\n", + "\n", + "\n", + "Please briefly describe what you did in a short informal report." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZRwmSOzkOVTC" + }, + "source": [ + "### Весь датасет упал с OOM, поэтому загрузим поменьше" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "16Ux38uFD2g-" + }, + "source": [ + "from sklearn.model_selection import train_test_split\n", + "from itertools import chain\n", + "from tqdm import tqdm\n", + "import joblib as jl\n", + "\n", + "classes = (\"five\", \"four\", \"nine\", \"two\", \"bird\")\n", + "\n", + "def preprocess_sample(filepath, max_length=124):\n", + " amplitudes, sr = librosa.core.load(filepath)\n", + " spectrogram = librosa.feature.melspectrogram(amplitudes, sr=sr)[:, :max_length]\n", + " spectrogram = np.pad(spectrogram, [[0, 0], [0, max(0, max_length - spectrogram.shape[1])]], mode='constant')\n", + " target = classes.index(filepath.split(os.sep)[-2])\n", + " return np.float32(spectrogram), np.int64(target)\n", + "\n", + "all_files = chain(*(samples_by_target[cls] for cls in classes))\n", + "spectrograms_and_targets = jl.Parallel(n_jobs=-1)(tqdm(list(map(jl.delayed(preprocess_sample), all_files))))\n", + "X, y = map(np.stack, zip(*spectrograms_and_targets))\n", + "X = X.transpose([0, 2, 1]) # to [batch, time, channels]\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "NHRe3r53NkLr" + }, + "source": [ + "batch_size = 16\n", + "\n", + "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", + "\n", + "tensor_x = torch.Tensor(X_train)\n", + "tensor_y = torch.LongTensor(y_train)\n", + "\n", + "train_dataset = TensorDataset(tensor_x, tensor_y)\n", + "\n", + "tensor_x = torch.Tensor(X_test) # transform to torch tensor\n", + "tensor_y = torch.LongTensor(y_test)\n", + "\n", + "test_dataset = TensorDataset(tensor_x, tensor_y)\n", + "\n", + "\n", + "trainloader = DataLoader(train_dataset, batch_size=batch_size,\n", + " shuffle=True, num_workers=2)\n", + "testloader = DataLoader(test_dataset, batch_size=batch_size,\n", + " shuffle=False, num_workers=2)" + ], + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "y7bNJe-uAdMH" + }, + "source": [ + "import torch.optim as optim\n", + "\n", + "net = MatchboxNet(num_classes=5).to(device)\n", + "criterion = nn.CrossEntropyLoss()\n", + "optimizer = optim.Adam(net.parameters())" + ], + "execution_count": 15, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 573, + "referenced_widgets": [ + "caee7add746340e8b92da749f18c8418", + "14cd479a614541bfa4b23cc55d79080d", + "cb8183e538684a829013eb1ba0c895be", + "260d6bd9b14145358409f64c165d4120", + "c721a0d3985b46119aa9e4b73c06728f", + "3dbcf5e1f4074a8caa3abd5222808223", + "e0e206ab485644288bafc60c4dcdd4e3", + "e6b185bb49f048adab3034f1ea82c325", + "2ad70242c0a34d17b47306bd7db95694", + "9f945e10829f4b6ab6d82bc4a2068786", + "b9f9880dc92b49569eeb4ee410ebacc3", + "d8d0c3aa4c7e45fbbcf6ce0bc51bb4be", + "c3e23e44b1af4ff2925f1813251f13d6", + "6661638db3a34f1a86b6780230c0eb55", + "123555b4eb1b42dcb1181312ae889cd5", + "e31bfa5339354c16a7a65252fe43c460", + "43ae85ddcddf4c19862cc41d52eb5f80", + "8773baea1b934e83b3f05d85a74e6791", + "084f4055472b4ab6b267508acf39af40", + "83c8058ab79d4930b84c011fdc24cbdd", + "ff80a62e7ee34685b1598ce4c666b788", + "88b1bad0d03f4ed5a5ec144ef6ea7822", + "dc85369552fb40b5bafa0b878a858d6c", + "1e571ad332cf4831b1eaa568b3c3159d", + "051b3300a2fb45f2a1b5da7655822163", + "b65471eb157244eab9f8ca0746c77b2b", + "a563c8dd7fec43659c1ae3bc1b3774fe", + "24748aa07579429aaf44b329b9d2a605", + "84c3e62b745f45ccbe07af5335d255bf", + "b3fb2d5e3a2847d0a3c80a544f2f1443", + "686210ea67cb47c4876a36c5f9e3d1cc", + "cf89797058c346088727639de8a37c54", + "656d3d91198b40dd9438e8c262c9d41f", + "f53926accdfb4988aa96b164654bd8bc", + "f1cc361f9dd449cda41e52dea27af521", + "2de1bab27fe34a2091d25a4e06be9251", + "70a4d6ca93b444b3859ad9c98e5628c0", + "56a35434977a48b4a940b8ad3677ead4", + "cd3b5bc894834e8089fbcb1aaa8bfeff", + "dceb4f6391a14402a58d842926599e44", + "e9e0f5c6b40b4b3ab64bbc8ba0efc931", + "8aa475090a494c3b845efecd08428469", + "567e5650b97342f895f699bb0849cf09", + "030f777cfe754bbc8d97330deab490eb", + "a5b5c5f1e7194d9485a820ca16483de5", + "d783f3830ce34711aec0fcafeb6b4ccd", + "4115c95fffd64017a52a985044512ec1", + "0c673a5a1356425697ea6dc8b5add71e", + "51cc428fbd58499e95e546f9e2019dca", + "9f7fe367958e4d3fabf2aadb1d6e8b1f", + "c9aa6b114b534c2989d230c2f9a0db49", + "08d47e8c2d00456397b8b0e8efeac9f3", + "4a2d56bedfd446f3862c8e3add2a9161", + "d4e24068990242069c8659a097723566", + "7bbd3249586d4bda901f0e408ea7e806", + "48135cfce6184e3cbff7e053e5f4f5cd", + "18846f6c04a242c1bfbc5d082808d891", + "1a61f29855f043468b57fa69370af1f3", + "c246c35210654b9684a2699e51549d65", + "dff4e79a90d14f57a98b3557831ed4b7", + "442d0db4b2924f1cac4bf71616865533", + "78ddba17b4ed4d5c98e31cf6f7528d62", + "77ffbd0da6d44dd7af88bdc5481f533b", + "a69578912b2746f98897a5aa4df06b99", + "f0628d45b0904362b959f6c326e99789", + "8be3feca491149599220c238efa2fdea", + "bcad49e8a1dd4e8aa63e3a655367610e", + "800ef48a3ae345239df5b94324d7d6c6", + "9c47c5cef969400397d4c57cfc1fc2da", + "977946d06db94bf28fafd8509607dbd5", + "79e752ce29d24a97a778b1b5367b5a1e", + "50778da969324a7d9a01dc4ad4b08efd", + "eee6f4b968014389ad2e0dd0659d0aa9", + "587bb65ba1b245ee9efcbd62556bcaaf", + "1db2d8e02b3b40748f04d57daa1d9735", + "26bb183d019846ae909c362d90c43692", + "3a090583d7304408a081fb8207d8f972", + "47e6500fd58a4f2db6ef3b90c06b6ade", + "53f91b9153ec46e9a418e273019cf5a5", + "898b8c52c4374c948eb7597e6af1017b", + "0c9a1850a2034cfabfe7295f7e006fc7", + "ad951488757446d08f07db503586d882", + "9f0558041e504bfe895e840f319531be", + "6d96b8a34ac94542a36cec48bcd11355", + "1601e46788504b0b880584708e9eb6f9", + "e8d0540c339942b0a23b681e2a0bb898", + "b5f45da5f6aa459f9df27b1d56742bba", + "2888b8d8652e4adc92cfabce9aa73c9e", + "44dee79453ad476abbac45626056bf97", + "86c77bf87e62474bb7e11a18d5117523", + "d599efe37084419d81b9cf46087ad606", + "aa3ea7853deb42d5b6add3a39d26373a", + "912f7b3a55a3448ab906ea3c38597ab9", + "2751b061ee77437b8cb96f030540c30a", + "fd3caa1285404d53882be197d0816b31", + "2aff5fb8fe94417580c38cd63a76cd14", + "b8bbad055f644400a5238dc9246504e7", + "d685e22fade7480682c6c04da3a8bb4f", + "056f2ee5981d449c8ff24ce11543cf29", + "cc2260bad3804dd0ad3cc18ea9601b5b", + "fc53d2e01a9446c7856804b756bb505a", + "c3116fb7e27e4fd1a7c3b689724d91ef", + "bf1c40f69cdc4188975dd8ae2f82cdd2", + "7882395041054aa69bef6a139b057e55", + "0a2a99c060b643a9876ce2a4dadf3c43", + "396f618698644bd8b91eb894b5e59614", + "12d4956ab0894415aefabd3f6e492ba5", + "5ba98db7527a4c26bd6ce7960e7b8607", + "6f24cfff5f5845e2bf741796486bec3d", + "f6eaf8b8df3f40d9866e6b7e9b8b7b89" + ] + }, + "id": "RvQD2eYrAQoD", + "outputId": "624a8ff3-7b38-43bf-cf23-02a6bb2f995a" + }, + "source": [ + "from tqdm.notebook import tqdm\n", + "\n", + "for epoch in range(10): # loop over the dataset multiple times\n", + "\n", + " running_loss = 0.0\n", + " for i, data in tqdm(enumerate(trainloader, 0)):\n", + " # get the inputs; data is a list of [inputs, labels]\n", + " inputs, labels = data\n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + "\n", + " # zero the parameter gradients\n", + " optimizer.zero_grad()\n", + "\n", + " # forward + backward + optimize\n", + " outputs = net(inputs)\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " # print statistics\n", + " running_loss += loss.item()\n", + " if i % 500 == 499: # print every 100 mini-batches\n", + " print('[%d, %5d] loss: %.3f' %\n", + " (epoch + 1, i + 1, running_loss / 500))\n", + " running_loss = 0.0\n", + "\n", + "print('Finished Training')" + ], + "execution_count": 16, + "outputs": [ + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "caee7add746340e8b92da749f18c8418", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "0it [00:00, ?it/s]" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:132: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[1, 500] loss: 1.499\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d8d0c3aa4c7e45fbbcf6ce0bc51bb4be", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "0it [00:00, ?it/s]" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[2, 500] loss: 1.314\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "dc85369552fb40b5bafa0b878a858d6c", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "0it [00:00, ?it/s]" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[3, 500] loss: 1.298\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f53926accdfb4988aa96b164654bd8bc", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "0it [00:00, ?it/s]" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[4, 500] loss: 1.279\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a5b5c5f1e7194d9485a820ca16483de5", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "0it [00:00, ?it/s]" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[5, 500] loss: 1.242\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "48135cfce6184e3cbff7e053e5f4f5cd", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "0it [00:00, ?it/s]" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[6, 500] loss: 1.207\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "bcad49e8a1dd4e8aa63e3a655367610e", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "0it [00:00, ?it/s]" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[7, 500] loss: 1.195\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "47e6500fd58a4f2db6ef3b90c06b6ade", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "0it [00:00, ?it/s]" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[8, 500] loss: 1.184\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "44dee79453ad476abbac45626056bf97", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "0it [00:00, ?it/s]" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[9, 500] loss: 1.178\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "cc2260bad3804dd0ad3cc18ea9601b5b", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "0it [00:00, ?it/s]" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[10, 500] loss: 1.164\n", + "Finished Training\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BCkIRDnaLFYA" + }, + "source": [ + "### Хочется скачать видео про птиц (не очень длинное) и посмотреть на график вероятностей предсказания слова bird\n", + "\n", + "Хороший вариант: https://www.youtube.com/watch?v=Mu6b3u_95Ts" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "5jvvjl9hQ5sZ", + "outputId": "d696b17f-9ae8-4a1a-891c-2c01872655bc" + }, + "source": [ + "!pip install youtube_dl" + ], + "execution_count": 17, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting youtube_dl\n", + " Downloading youtube_dl-2021.6.6-py2.py3-none-any.whl (1.9 MB)\n", + "\u001b[K |████████████████████████████████| 1.9 MB 5.4 MB/s \n", + "\u001b[?25hInstalling collected packages: youtube-dl\n", + "Successfully installed youtube-dl-2021.6.6\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "2W_Ej-SMHBzw", + "outputId": "7159cc2e-048b-4d03-b394-539130a02d1a" + }, + "source": [ + "from __future__ import unicode_literals\n", + "import youtube_dl\n", + "\n", + "ydl_opts = {\n", + " 'format': 'bestaudio/best',\n", + " 'postprocessors': [{\n", + " 'key': 'FFmpegExtractAudio',\n", + " 'preferredcodec': 'wav',\n", + " 'preferredquality': '256'\n", + " }],\n", + " 'postprocessor_args': [\n", + " '-ar', '16000',\n", + " '-ac', '1'\n", + " \n", + " ],\n", + " 'prefer_ffmpeg': True,\n", + " 'keepvideo': True\n", + " \n", + "}\n", + "\n", + "with youtube_dl.YoutubeDL(ydl_opts) as ydl:\n", + " ydl.download(['https://www.youtube.com/watch?v=Mu6b3u_95Ts'])" + ], + "execution_count": 19, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[youtube] Mu6b3u_95Ts: Downloading webpage\n", + "[download] Destination: Interesting Facts about Birds _ Educational Video for Kids.-Mu6b3u_95Ts.webm\n", + "[download] 100% of 3.58MiB in 00:43\n", + "[ffmpeg] Destination: Interesting Facts about Birds _ Educational Video for Kids.-Mu6b3u_95Ts.wav\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "SxDtEOYTSBmd" + }, + "source": [ + "import joblib as jl\n", + "\n", + "def preprocess_sample(filepath):\n", + " amplitudes, sr = librosa.core.load(filepath)\n", + " spectrogram = librosa.feature.melspectrogram(amplitudes, sr=sr)\n", + " return np.float32(spectrogram)" + ], + "execution_count": 23, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cuXK4NLuR1Qg", + "outputId": "519ef921-1ef8-41ef-c5a1-f35f0a17fd0c" + }, + "source": [ + "spectrogram = preprocess_sample('Interesting Facts about Birds _ Educational Video for Kids.-Mu6b3u_95Ts.wav')" + ], + "execution_count": 24, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "\r 1%| | 248/25397 [18:36<31:26:16, 4.50s/it]\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "nN3rSTA4SknG", + "outputId": "30c1ff6b-d238-4d8f-98b7-eaf03820208b" + }, + "source": [ + "parts = []\n", + "\n", + "for i in range(0, spectrogram.shape[1]-124, 10):\n", + " parts.append(spectrogram[:, i:i + 124])\n", + "\n", + "parts = np.float32(parts)\n", + "parts = parts.transpose([0, 2, 1])\n", + "parts = parts[:, None, :, :]\n", + "\n", + "batch_size = 64\n", + "tensor_video = torch.Tensor(parts)\n", + "video_dataset = TensorDataset(tensor_video)\n", + "videoloader = DataLoader(video_dataset, batch_size=batch_size,\n", + " shuffle=False, num_workers=4, drop_last=True)" + ], + "execution_count": 31, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py:481: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " cpuset_checked))\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dwSOjRPbSlVM", + "outputId": "baf02de3-d7b5-4900-fffe-c92e37d7931b" + }, + "source": [ + "global_time = 0\n", + "probabilities = list()\n", + "\n", + "with torch.no_grad():\n", + " net.eval()\n", + " for inputs in videoloader:\n", + " inputs = inputs[0].to(device)\n", + " inputs = inputs.reshape(64, 124, 128)\n", + " outputs = net(inputs)\n", + " probabilities = probabilities + list(map(float, outputs[:, 4]))" + ], + "execution_count": 37, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py:481: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " cpuset_checked))\n", + "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:132: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "to0cc5u7S5eZ", + "outputId": "d274208c-f49e-4b02-abe2-82a55ec871ca" + }, + "source": [ + "# видео длится 3.31\n", + "print(len(probabilities))\n", + "x = np.array(list(range(896))) * 3.31 / 896" + ], + "execution_count": 55, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "896\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Uwv3Z6jMYHFq" + }, + "source": [ + "### Вероятность предсказания слова bird. Посмотрел видео, и это похоже на правду)" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 592 + }, + "id": "lVSg780jVRRq", + "outputId": "2058117f-e45b-4b2c-b67c-90d6bb7f6232" + }, + "source": [ + "plt.figure(figsize=(15, 10))\n", + "plt.plot(x, probabilities);" + ], + "execution_count": 54, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4Z5pT07OY78d" + }, + "source": [ + "### Код по предобработке видео для предсказания по нему подсмотрел в пулл реквесте Ольги Борисовой. Спасибо ее коду за возможность посмотреть на результаты работы моей модели)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "P2xcwxLXWFrs" + }, + "source": [ + "" + ], + "execution_count": 52, + "outputs": [] + } + ] +} \ No newline at end of file