From c86539241e29e674ec563f1e24c3777a38427bd1 Mon Sep 17 00:00:00 2001 From: AndrosovDima <71322332+AndrosovDima@users.noreply.github.com> Date: Tue, 26 Oct 2021 22:52:25 +0300 Subject: [PATCH 1/2] Create create_directory.txt --- week06/hw/create_directory.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 week06/hw/create_directory.txt diff --git a/week06/hw/create_directory.txt b/week06/hw/create_directory.txt new file mode 100644 index 0000000..147dcb5 --- /dev/null +++ b/week06/hw/create_directory.txt @@ -0,0 +1 @@ +Create directory /speech-tech-mipt/week06/hw/ From d06eedc1e2921d44cf971cd73f78d5d2312f1a1f Mon Sep 17 00:00:00 2001 From: AndrosovDima <71322332+AndrosovDima@users.noreply.github.com> Date: Tue, 26 Oct 2021 23:04:45 +0300 Subject: [PATCH 2/2] Add files via upload If you want to have access to files on my GoogleDrive, please, ask me https://t.me/androsovdy or androsov.dya@phystech.edu --- week06/hw/AndrosovDima.ipynb | 7433 ++++++++++++++++++++++++++++++++++ 1 file changed, 7433 insertions(+) create mode 100644 week06/hw/AndrosovDima.ipynb diff --git a/week06/hw/AndrosovDima.ipynb b/week06/hw/AndrosovDima.ipynb new file mode 100644 index 0000000..b1956ab --- /dev/null +++ b/week06/hw/AndrosovDima.ipynb @@ -0,0 +1,7433 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "accelerator": "GPU", + "colab": { + "name": "Androsov_spotter_hw.ipynb", + "provenance": [], + "collapsed_sections": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "a1ee52b11ea94aee991a15afba908231": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_f46d48961a9d4c62b598f9d7ce7fa064", + "IPY_MODEL_12b3bd3ca01e4706b572e10800888247", + "IPY_MODEL_c7587af96b5d4dbab8f11b9ca1c39511" + ], + "layout": "IPY_MODEL_4f9021b2600646c4af9651abf7c100be" + } + }, + "f46d48961a9d4c62b598f9d7ce7fa064": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ab4b611801a140259a5132207a8fffd3", + "placeholder": "​", + "style": "IPY_MODEL_03f49df15c4541b2af1d7fa006e9a93a", + "value": "100%" + } + }, + "12b3bd3ca01e4706b572e10800888247": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8eff2693027641c4875701a38d648850", + "max": 50, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_84f6360721d74d868a57f1a623e3e058", + "value": 50 + } + }, + "c7587af96b5d4dbab8f11b9ca1c39511": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_34b1cdcf58f84d798ba8173c1b0a71e0", + "placeholder": "​", + "style": "IPY_MODEL_20a9ea5506ef4cb9bf29e5fdef5fd464", + "value": " 50/50 [02:32<00:00, 3.08s/it]" + } + }, + "4f9021b2600646c4af9651abf7c100be": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ab4b611801a140259a5132207a8fffd3": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "03f49df15c4541b2af1d7fa006e9a93a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8eff2693027641c4875701a38d648850": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "84f6360721d74d868a57f1a623e3e058": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "34b1cdcf58f84d798ba8173c1b0a71e0": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "20a9ea5506ef4cb9bf29e5fdef5fd464": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a19f44b643f4454b98daca4e42b10b7c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_a93352ea51c94fc99d7c5d5fe023aee6", + "IPY_MODEL_c6c0731a16a24781afd7faf17a3bff6c", + "IPY_MODEL_6c55603e66da4785a30280960a72a20a" + ], + "layout": "IPY_MODEL_4a313d8bc4e94b75952f528389045170" + } + }, + "a93352ea51c94fc99d7c5d5fe023aee6": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_4ff688d03c6048d7a19310fb40d21ca8", + "placeholder": "​", + "style": "IPY_MODEL_0cad72e2ac37421baa14b1ef3f7b58d4", + "value": "100%" + } + }, + "c6c0731a16a24781afd7faf17a3bff6c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_6090a61df15e4ec0b1de4971cd807560", + "max": 30, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_078a2e7bcdd54661b16547c296804b63", + "value": 30 + } + }, + "6c55603e66da4785a30280960a72a20a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e7a135a45cd84ab3b1a19aaeca6a205b", + "placeholder": "​", + "style": "IPY_MODEL_4470a2c5172049f08761dac43282b8c5", + "value": " 30/30 [10:45<00:00, 21.58s/it]" + } + }, + "4a313d8bc4e94b75952f528389045170": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4ff688d03c6048d7a19310fb40d21ca8": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "0cad72e2ac37421baa14b1ef3f7b58d4": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "6090a61df15e4ec0b1de4971cd807560": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "078a2e7bcdd54661b16547c296804b63": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "e7a135a45cd84ab3b1a19aaeca6a205b": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4470a2c5172049f08761dac43282b8c5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "d28e8506bc59439787c25b97321a0df0": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_8b1886d6e6414261b0371af50d244439", + "IPY_MODEL_6a3b6b91968c450c81ace2a09f451ffe", + "IPY_MODEL_6b38964b8f944e7695ecdcee0c99d154" + ], + "layout": "IPY_MODEL_a32360353170435ba7e6b2767d56030e" + } + }, + "8b1886d6e6414261b0371af50d244439": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_79d48fca8d5342748d473916a37b2dbc", + "placeholder": "​", + "style": "IPY_MODEL_cbef124fabce4e73a6c04b5a2db59e27", + "value": "100%" + } + }, + "6a3b6b91968c450c81ace2a09f451ffe": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_557f128b4b224ce39250bca72132576a", + "max": 15, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_ea2364e82e0d4e4a8bb42a8fcc1c5e3b", + "value": 15 + } + }, + "6b38964b8f944e7695ecdcee0c99d154": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a09a3bac2f5d42f1bcce54750215b7f5", + "placeholder": "​", + "style": "IPY_MODEL_9d450cb2265141929d7aafff252ceec9", + "value": " 15/15 [39:24<00:00, 157.43s/it]" + } + }, + "a32360353170435ba7e6b2767d56030e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "79d48fca8d5342748d473916a37b2dbc": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "cbef124fabce4e73a6c04b5a2db59e27": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "557f128b4b224ce39250bca72132576a": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ea2364e82e0d4e4a8bb42a8fcc1c5e3b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "a09a3bac2f5d42f1bcce54750215b7f5": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "9d450cb2265141929d7aafff252ceec9": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "873b4d4a07234ff5ad29864bd925e0c3": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_c1deb5815a0447248582e3484cb04635", + "IPY_MODEL_01d76f7002b24bb3acf8f0081e65cb48", + "IPY_MODEL_7b7da43ad0554ef5b15d676c21ad866e" + ], + "layout": "IPY_MODEL_b8ad378df36e4125b05ded99fbe54f9d" + } + }, + "c1deb5815a0447248582e3484cb04635": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_334c9aa8095e4edd9a1afb872ed526c8", + "placeholder": "​", + "style": "IPY_MODEL_3eb2668641394af9bc9e0f7d2c04958b", + "value": "100%" + } + }, + "01d76f7002b24bb3acf8f0081e65cb48": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8d49371624784b4295f85051b509c9e2", + "max": 5, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_ae733cb1f8d84633a31b1c61af5f2bf8", + "value": 5 + } + }, + "7b7da43ad0554ef5b15d676c21ad866e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ddfde2e76bfb419fb01e53c7ecb5fc04", + "placeholder": "​", + "style": "IPY_MODEL_3ea1b903cf3949df93be35d33b550046", + "value": " 5/5 [23:27<00:00, 281.45s/it]" + } + }, + "b8ad378df36e4125b05ded99fbe54f9d": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "334c9aa8095e4edd9a1afb872ed526c8": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3eb2668641394af9bc9e0f7d2c04958b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8d49371624784b4295f85051b509c9e2": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ae733cb1f8d84633a31b1c61af5f2bf8": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "ddfde2e76bfb419fb01e53c7ecb5fc04": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3ea1b903cf3949df93be35d33b550046": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "9ca77079e21346c6b67efd7c84244218": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_648c62ce35b54057aff012d9fa8c8868", + "IPY_MODEL_1fe1217084e14cf7a056b722c50cec6a", + "IPY_MODEL_291237b93b884081b714ef85608074c1" + ], + "layout": "IPY_MODEL_7a14d91659c44bfab2865743269b7707" + } + }, + "648c62ce35b54057aff012d9fa8c8868": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_f35289fc008a47d2b368260637a090dc", + "placeholder": "​", + "style": "IPY_MODEL_f28b750b796b4165ab9901f0fdec9aad", + "value": "100%" + } + }, + "1fe1217084e14cf7a056b722c50cec6a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_21a69f5d253c465a9194dc1c95e6b0ea", + "max": 4, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_b69ba20d45f5430f9d2dc9a1405f4d7b", + "value": 4 + } + }, + "291237b93b884081b714ef85608074c1": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cddcae93ef954edca7ffb0e828a7415d", + "placeholder": "​", + "style": "IPY_MODEL_5c7fa3bc82fd4cce8dae0eb56752c39d", + "value": " 4/4 [00:47<00:00, 14.90s/it]" + } + }, + "7a14d91659c44bfab2865743269b7707": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f35289fc008a47d2b368260637a090dc": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f28b750b796b4165ab9901f0fdec9aad": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "21a69f5d253c465a9194dc1c95e6b0ea": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "b69ba20d45f5430f9d2dc9a1405f4d7b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "cddcae93ef954edca7ffb0e828a7415d": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "5c7fa3bc82fd4cce8dae0eb56752c39d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "abb35c94c74940ec82e12ba8c3243b91": { + "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_ca3a930bb33543fd893baec27ec81a5f", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_4aead5752d21457787e2f7b0b861a57e", + "IPY_MODEL_316c57f018b1410dae3cf71c789e971e", + "IPY_MODEL_64bdf8f26e8a49ec80091b0001ba7a99" + ] + } + }, + "ca3a930bb33543fd893baec27ec81a5f": { + "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 + } + }, + "4aead5752d21457787e2f7b0b861a57e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_8670185e627f48d3b13e9b9a1ca03cda", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "100%", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_e92f972d1a9b4d26a9d2c2d18febab64" + } + }, + "316c57f018b1410dae3cf71c789e971e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_a31fcbe28d754d759196ad3b7ed0632b", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 2, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 2, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_b65568fdd9464cb68140941f57dd44ce" + } + }, + "64bdf8f26e8a49ec80091b0001ba7a99": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_37800daf604d4f64bbb4e479a7ac2188", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 2/2 [1:00:19<00:00, 1810.05s/it]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_ce8169bedbd840129e31f02f685daef4" + } + }, + "8670185e627f48d3b13e9b9a1ca03cda": { + "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" + } + }, + "e92f972d1a9b4d26a9d2c2d18febab64": { + "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 + } + }, + "a31fcbe28d754d759196ad3b7ed0632b": { + "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" + } + }, + "b65568fdd9464cb68140941f57dd44ce": { + "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 + } + }, + "37800daf604d4f64bbb4e479a7ac2188": { + "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" + } + }, + "ce8169bedbd840129e31f02f685daef4": { + "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 + } + }, + "682fdfbe18074347b71b382b9f140141": { + "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_d2e02c80579d40f2969cbd62869ddf51", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_be584960263a47f083fcc738ec1f7a75", + "IPY_MODEL_8f1e5a8dd8f646f2bf5ac2500decbffa", + "IPY_MODEL_c7f8746fcbbf4e1791637a815c90462d" + ] + } + }, + "d2e02c80579d40f2969cbd62869ddf51": { + "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 + } + }, + "be584960263a47f083fcc738ec1f7a75": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_08a24c518c2a4e25aedf243d5cb01045", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "100%", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_a1358d61ef2246e3b7045effd03aef65" + } + }, + "8f1e5a8dd8f646f2bf5ac2500decbffa": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_6140aaa2c0da49508004a28c7df36872", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 252, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 252, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_6494ca997dc4401394efa95594eea0bd" + } + }, + "c7f8746fcbbf4e1791637a815c90462d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_4ea8351599cc4937ba828d6fcb4cf3e8", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 252/252 [03:10<00:00, 1.33it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_c495d9fdc23340cf9540ad631f494879" + } + }, + "08a24c518c2a4e25aedf243d5cb01045": { + "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" + } + }, + "a1358d61ef2246e3b7045effd03aef65": { + "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 + } + }, + "6140aaa2c0da49508004a28c7df36872": { + "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" + } + }, + "6494ca997dc4401394efa95594eea0bd": { + "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 + } + }, + "4ea8351599cc4937ba828d6fcb4cf3e8": { + "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" + } + }, + "c495d9fdc23340cf9540ad631f494879": { + "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 + } + }, + "05f05b8c622d42dfb8033454f91a212b": { + "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_8c920420edda4c16a213764c816ce227", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_27684ab7cf62412bbfa56d43db9a2305", + "IPY_MODEL_fb5467979e214859a890d1e94def6b1e", + "IPY_MODEL_d2a914a513b2461c8028d3881c5b8349" + ] + } + }, + "8c920420edda4c16a213764c816ce227": { + "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 + } + }, + "27684ab7cf62412bbfa56d43db9a2305": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_280ab8d6b4304ce69ff516fe43226f8a", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "100%", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_4d0ce419de7045c39fb09e1f8ebb1edb" + } + }, + "fb5467979e214859a890d1e94def6b1e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_041b196f8e644c13afc826543766f981", + "_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_b85dbb9eb0964ddc81689b6c40986453" + } + }, + "d2a914a513b2461c8028d3881c5b8349": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_2d4e2e7ade7b41faa6211859129816ed", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 1/1 [24:41<00:00, 1481.78s/it]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_6c0b8150348e4d4f89ef0071b5658721" + } + }, + "280ab8d6b4304ce69ff516fe43226f8a": { + "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" + } + }, + "4d0ce419de7045c39fb09e1f8ebb1edb": { + "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 + } + }, + "041b196f8e644c13afc826543766f981": { + "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" + } + }, + "b85dbb9eb0964ddc81689b6c40986453": { + "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 + } + }, + "2d4e2e7ade7b41faa6211859129816ed": { + "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" + } + }, + "6c0b8150348e4d4f89ef0071b5658721": { + "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 + } + }, + "a2586a70a06644bebc4be710940a6694": { + "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_8d7143d6e13b47728179850ffa33d43b", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_cd6aad4f7bcf4e068f8413da02d30848", + "IPY_MODEL_e2c29c0a000e4ff3bf94b6dfc581bee9", + "IPY_MODEL_78b13b3d9f54464fbf437bab94dd6086" + ] + } + }, + "8d7143d6e13b47728179850ffa33d43b": { + "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 + } + }, + "cd6aad4f7bcf4e068f8413da02d30848": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_b69fc78345d947cd9334ff8828da196d", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "100%", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_91a2d3a78f7949d5911eafd52f266104" + } + }, + "e2c29c0a000e4ff3bf94b6dfc581bee9": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_ea1118456db049fb80ea44209affb18d", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 252, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 252, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_7e4e450f949343fe8eb86bc1b5db1418" + } + }, + "78b13b3d9f54464fbf437bab94dd6086": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_3ed54cbf68ee4ad99e348d00bbd7e94f", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 252/252 [02:33<00:00, 1.64it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_25bf6a89b93c422eb62c7430d95ae2af" + } + }, + "b69fc78345d947cd9334ff8828da196d": { + "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" + } + }, + "91a2d3a78f7949d5911eafd52f266104": { + "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 + } + }, + "ea1118456db049fb80ea44209affb18d": { + "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" + } + }, + "7e4e450f949343fe8eb86bc1b5db1418": { + "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 + } + }, + "3ed54cbf68ee4ad99e348d00bbd7e94f": { + "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" + } + }, + "25bf6a89b93c422eb62c7430d95ae2af": { + "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 + } + }, + "1d1d8f9d05874562b0da0d9f42022f5e": { + "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_2ef90ce5007f45868c06df86abf7bef9", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_c11a2d13af084317a714c254775b2a07", + "IPY_MODEL_e60ddc48f732420c9f5130df2bad349e", + "IPY_MODEL_7988d180e38a4c1f9ed3e700339a4029" + ] + } + }, + "2ef90ce5007f45868c06df86abf7bef9": { + "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 + } + }, + "c11a2d13af084317a714c254775b2a07": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_01e13fefb4344b958654d40324a160db", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "100%", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_a01606b4960840cdae66fdaa7d90f4b4" + } + }, + "e60ddc48f732420c9f5130df2bad349e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_f458289e94ea4315aff2c9e1f6a33d1d", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 5797, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 5797, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_131fbe8d79544d508756fdda0ab55520" + } + }, + "7988d180e38a4c1f9ed3e700339a4029": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_94bd7c2cdd6745049bbc6656422df364", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 5797/5797 [00:00<00:00, 116517.38it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_c91aa585907545898c626e068d5380fb" + } + }, + "01e13fefb4344b958654d40324a160db": { + "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" + } + }, + "a01606b4960840cdae66fdaa7d90f4b4": { + "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 + } + }, + "f458289e94ea4315aff2c9e1f6a33d1d": { + "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" + } + }, + "131fbe8d79544d508756fdda0ab55520": { + "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 + } + }, + "94bd7c2cdd6745049bbc6656422df364": { + "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" + } + }, + "c91aa585907545898c626e068d5380fb": { + "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 + } + }, + "ebe5ff03043b40049e918c1a25e140d1": { + "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_3a201a95aad64a898b45fcd8ce8ebe1f", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_f5f930c8ffd14693af6914e3314da71f", + "IPY_MODEL_24b846ae797244bc9becfd44a216cc58", + "IPY_MODEL_d66e2540f0594470beadf03c9cb11b5b" + ] + } + }, + "3a201a95aad64a898b45fcd8ce8ebe1f": { + "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 + } + }, + "f5f930c8ffd14693af6914e3314da71f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_d808ed95076d49faaf508529334303d7", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": "100%", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_3ccc98a3d0fc43e6978116961f24bdad" + } + }, + "24b846ae797244bc9becfd44a216cc58": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_5216c9a211e545af9ad63deebfc21fbd", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 90, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 90, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_59e0a76fe8914cffbd0dc1a423c9092b" + } + }, + "d66e2540f0594470beadf03c9cb11b5b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_37e1c8d6f36b49a5af6ff01fab880fb8", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 90/90 [00:55<00:00, 1.66it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_cb3627dc92854c1ca0f0fea7d64dc5f2" + } + }, + "d808ed95076d49faaf508529334303d7": { + "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" + } + }, + "3ccc98a3d0fc43e6978116961f24bdad": { + "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 + } + }, + "5216c9a211e545af9ad63deebfc21fbd": { + "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" + } + }, + "59e0a76fe8914cffbd0dc1a423c9092b": { + "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 + } + }, + "37e1c8d6f36b49a5af6ff01fab880fb8": { + "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" + } + }, + "cb3627dc92854c1ca0f0fea7d64dc5f2": { + "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": "9857ec61-44f1-4270-c68f-718b81ffdd04" + }, + "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": "9GOZSrI9epgU" + }, + "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" + ], + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "FvHkw2rfY9k7", + "outputId": "70c3555b-d430-4b84-d23e-eaf6473d359c" + }, + "source": [ + "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": null, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--2021-10-24 17:43:06-- http://download.tensorflow.org/data/speech_commands_v0.01.tar.gz\n", + "Resolving download.tensorflow.org (download.tensorflow.org)... 74.125.70.128, 2607:f8b0:4001:c02::80\n", + "Connecting to download.tensorflow.org (download.tensorflow.org)|74.125.70.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 212MB/s in 6.6s \n", + "\n", + "2021-10-24 17:43:12 (214 MB/s) - ‘speech_commands_v0.01.tar.gz’ saved [1489096277/1489096277]\n", + "\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": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ME4cVShQ916w", + "outputId": "f908de11-00cf-4872-fb44-9c98f9b5fb2e" + }, + "source": [ + "!sox --info speech_commands/bed/00176480_nohash_0.wav" + ], + "execution_count": null, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "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": { + "id": "6t5j_qZDpNps" + }, + "source": [ + "from sklearn.model_selection import train_test_split\n", + "from itertools import chain\n", + "from tqdm.notebook import tqdm\n", + "import joblib as jl\n", + "import pickle" + ], + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "COBM_YuwU7hw" + }, + "source": [ + "device = 'cuda' if torch.cuda.is_available() else 'cpu'" + ], + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "nzKvHNS8kKAJ", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "fa4ae08e-35c5-4ba2-f99c-e01230fe1763" + }, + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "rc9cm1etnDes", + "outputId": "3229efe1-98ed-4629-dff7-19187452a1e7" + }, + "source": [ + "classes = (\"left\", \"right\", \"up\", \"down\", \"stop\")\n", + "\n", + "def preprocess_sample(filepath, max_length=150):\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": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 11834/11834 [07:26<00:00, 26.49it/s]\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 75 + }, + "id": "TGgEXx8kTCYw", + "outputId": "513ba118-ef58-45f1-ae57-c6f59f715028" + }, + "source": [ + "Audio('speech_commands/down/00176480_nohash_0.wav')" + ], + "execution_count": null, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "STwaZBHmoXDz" + }, + "source": [ + "## Попробуем сетку на 1D свертках" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "RwjxGDD7eR7B" + }, + "source": [ + "X_trainn = X_train.reshape(8875, 128, 150)\n", + "X_testt = X_test.reshape(2959, 128, 150)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "7Ol6sywTG_Y9" + }, + "source": [ + "batch_size = 32\n", + "\n", + "tensor_x = torch.Tensor(X_trainn)\n", + "tensor_y = torch.LongTensor(y_train)\n", + "\n", + "train_dataset = TensorDataset(tensor_x, tensor_y)\n", + "\n", + "tensor_x = torch.Tensor(X_testt) # 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, drop_last=True)\n", + "testloader = DataLoader(test_dataset, batch_size=batch_size,\n", + " shuffle=False, num_workers=2, drop_last=True)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "-qr8t6wCF8vT" + }, + "source": [ + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "\n", + "\n", + "class Net_Conv1D(nn.Module):\n", + " def __init__(self, n_input=1, n_output=5, stride=5, n_channel=32):\n", + " super().__init__()\n", + " # TODO: define your layers here\n", + " self.conv1 = nn.Conv1d(n_input, n_channel, kernel_size=80, stride=stride)\n", + " nn.init.xavier_normal_(self.conv1.weight) # проинициализируем веса (так лучше учится)\n", + " self.bn1 = nn.BatchNorm1d(n_channel)\n", + " self.conv2 = nn.Conv1d(n_channel, n_channel, kernel_size=3)\n", + " nn.init.xavier_normal_(self.conv2.weight)\n", + " self.bn2 = nn.BatchNorm1d(n_channel)\n", + " self.conv3 = nn.Conv1d(n_channel, 2 * n_channel, kernel_size=3)\n", + " nn.init.xavier_normal_(self.conv3.weight)\n", + " self.bn3 = nn.BatchNorm1d(2 * n_channel)\n", + " self.conv4 = nn.Conv1d(2 * n_channel, 2 * n_channel, kernel_size=1)\n", + " nn.init.xavier_normal_(self.conv4.weight)\n", + " self.bn4 = nn.BatchNorm1d(2 * n_channel)\n", + " self.fc1 = nn.Linear(2 * n_channel, n_output)\n", + "\n", + " def forward(self, x):\n", + " # TODO: apply your layers here\n", + " x = F.relu(self.bn1(self.conv1(x)))\n", + " x = F.relu(self.bn2(self.conv2(x)))\n", + " x = F.relu(self.bn3(self.conv3(x)))\n", + " x = F.relu(self.bn4(self.conv4(x)))\n", + " x = F.avg_pool1d(x, x.shape[-1])\n", + " x = x.permute(0, 2, 1)\n", + " x = self.fc1(x)\n", + " x = x.reshape(32, 5)\n", + " return F.softmax(x)\n", + "\n", + "# net on 1D conv layers with 128 input channels\n", + "net_1D_conv = Net_Conv1D(n_input=128, n_output=5).to(device)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "MCZ7MkvsF9gs" + }, + "source": [ + "import torch.optim as optim\n", + "\n", + "criterion = nn.CrossEntropyLoss()\n", + "optimizer = optim.Adam(net_1D_conv.parameters(), lr=0.01)\n", + "# scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=20, gamma=0.1)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "a1ee52b11ea94aee991a15afba908231", + "f46d48961a9d4c62b598f9d7ce7fa064", + "12b3bd3ca01e4706b572e10800888247", + "c7587af96b5d4dbab8f11b9ca1c39511", + "4f9021b2600646c4af9651abf7c100be", + "ab4b611801a140259a5132207a8fffd3", + "03f49df15c4541b2af1d7fa006e9a93a", + "8eff2693027641c4875701a38d648850", + "84f6360721d74d868a57f1a623e3e058", + "34b1cdcf58f84d798ba8173c1b0a71e0", + "20a9ea5506ef4cb9bf29e5fdef5fd464" + ] + }, + "id": "xR1uxQ-GGGLr", + "outputId": "57002880-434e-4793-a531-3a0f64706c07" + }, + "source": [ + "from tqdm.notebook import tqdm\n", + "\n", + "losses_train = []\n", + "\n", + "for epoch in tqdm(range(50)): # loop over the dataset multiple times\n", + " epoch_loss = 0.0\n", + " running_loss = 0.0\n", + " for i, (inputs, labels) in enumerate(trainloader, 0):\n", + " # get the inputs; data is a list of [inputs, labels]\n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + " # print(labels)\n", + " # zero the parameter gradients\n", + " optimizer.zero_grad()\n", + "\n", + " # forward + backward + optimize\n", + " outputs = net_1D_conv(inputs)\n", + " # print(outputs)\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " # print statistics\n", + "\n", + " running_loss += loss.item()\n", + " epoch_loss += loss.item()\n", + " if i % 200 == 199: # print every 200 mini-batches\n", + " print('[%d, %5d] loss: %.3f' %\n", + " (epoch + 1, i + 1, running_loss / 200))\n", + " running_loss = 0.0\n", + " losses_train.append(epoch_loss)\n", + "print('Finished Training')" + ], + "execution_count": null, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a1ee52b11ea94aee991a15afba908231", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/50 [00:00\n", + "Traceback (most recent call last):\n", + "Exception ignored in: \n", + " File \"/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py\", line 1328, in __del__\n", + "Traceback (most recent call last):\n", + " self._shutdown_workers()\n", + " File \"/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py\", line 1320, in _shutdown_workers\n", + " if w.is_alive():\n", + " File \"/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py\", line 1328, in __del__\n", + " File \"/usr/lib/python3.7/multiprocessing/process.py\", line 151, in is_alive\n", + " self._shutdown_workers()\n", + " File \"/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py\", line 1320, in _shutdown_workers\n", + " assert self._parent_pid == os.getpid(), 'can only test a child process'\n", + " if w.is_alive():\n", + "AssertionError: can only test a child process\n", + " File \"/usr/lib/python3.7/multiprocessing/process.py\", line 151, in is_alive\n", + " assert self._parent_pid == os.getpid(), 'can only test a child process'\n", + "AssertionError: can only test a child process\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[50, 200] loss: 1.191\n", + "Finished Training\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BPPyO3DxvYQf" + }, + "source": [ + "### Лосс падает нереально" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 497 + }, + "id": "97ug6w63vE_n", + "outputId": "9365c8db-7868-4935-fcbd-cb598bd6817b" + }, + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.figure(figsize=(12, 8))\n", + "plt.xlabel('Number of epoch')\n", + "plt.ylabel('Loss')\n", + "plt.plot(range(1, 51), np.array(losses_train) / (X_train.shape[0] // 16), color='green')\n", + "plt.grid()" + ], + "execution_count": null, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "LF2ux-UCmD0V", + "outputId": "dfb9f092-0680-40aa-f318-4d8c8df19ca8" + }, + "source": [ + "correct_test = 0\n", + "total_test = 0\n", + "\n", + "with torch.no_grad():\n", + "\n", + " for inputs, labels in testloader:\n", + " \n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + " \n", + " outputs = net_1D_conv(inputs)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + "\n", + " \n", + " total_test += labels.size(0)\n", + " correct_test += (predicted == labels).sum().item()\n", + " # print(f'Correct = {correct}, total = {total}, percent = {correct / total}')\n", + "print(f'Accuracy of the network on the {X_test.shape[0]} test inputs = {round(100 * correct_test / total_test, 2)}%')" + ], + "execution_count": null, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:33: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy of the network on the 2959 test inputs = 54.65%\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sUQ3aqH4FvXo" + }, + "source": [ + "### Если вдруг пропадут output-ы:\n", + "Accuracy of the network net_2D_conv on the 2959 test inputs = 54.65%" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vCUnOhYbuzaZ" + }, + "source": [ + "### Считаю, что норм качество (не 20%)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UK8VVWc-mcoU" + }, + "source": [ + "## Попробуем 2D свертки, посмотрим что из этого выйдет" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "xzRJg-I3xN6U" + }, + "source": [ + "X_tr = X_train[:, None, :, :]\n", + "X_te = X_test[:, None, :, :]" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "zlOuWvR7w9n4" + }, + "source": [ + "batch_size = 16\n", + "\n", + "tensor_x = torch.Tensor(X_tr)\n", + "tensor_y = torch.LongTensor(y_train)\n", + "\n", + "train_dataset = TensorDataset(tensor_x, tensor_y)\n", + "\n", + "tensor_x = torch.Tensor(X_te) # 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, drop_last=True)\n", + "testloader = DataLoader(test_dataset, batch_size=batch_size,\n", + " shuffle=False, num_workers=2, drop_last=True)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "mkSsAMp6mbwu" + }, + "source": [ + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "\n", + "class Net_Conv2D(nn.Module):\n", + " def __init__(self, n_input=1, n_output=5, stride=5, n_channel=32):\n", + " super().__init__()\n", + " # TODO: define your layers here\n", + " self.conv1 = nn.Conv2d(n_input, n_channel, kernel_size=5)\n", + " nn.init.xavier_normal_(self.conv1.weight) # проинициализируем веса (так лучше учится)\n", + " self.bn1 = nn.BatchNorm2d(n_channel)\n", + " self.pool1 = nn.MaxPool2d(2)\n", + " self.conv2 = nn.Conv2d(n_channel, n_channel, kernel_size=5)\n", + " nn.init.xavier_normal_(self.conv2.weight)\n", + " self.bn2 = nn.BatchNorm2d(n_channel)\n", + " self.pool2 = nn.MaxPool2d(2)\n", + " self.conv3 = nn.Conv2d(n_channel, 2 * n_channel, kernel_size=3)\n", + " nn.init.xavier_normal_(self.conv3.weight)\n", + " self.bn3 = nn.BatchNorm2d(2 * n_channel)\n", + " self.conv4 = nn.Conv2d(2 * n_channel, 2 * n_channel, kernel_size=3)\n", + " nn.init.xavier_normal_(self.conv4.weight)\n", + " self.bn4 = nn.BatchNorm2d(2 * n_channel)\n", + " self.pool4 = nn.MaxPool2d(2)\n", + " self.conv5 = nn.Conv2d(2 * n_channel, 2 * n_channel, kernel_size=3)\n", + " nn.init.xavier_normal_(self.conv5.weight)\n", + " self.bn5 = nn.BatchNorm2d(2 * n_channel)\n", + " self.pool5 = nn.MaxPool2d(4)\n", + " self.flatten = nn.Flatten()\n", + " self.fc1 = nn.Linear(384, 128)\n", + " nn.init.xavier_normal_(self.fc1.weight)\n", + " self.fc2 = nn.Linear(128, n_output)\n", + " nn.init.xavier_normal_(self.fc2.weight)\n", + "\n", + " def forward(self, x):\n", + " # TODO: apply your layers here\n", + " x = F.relu(self.pool1(self.bn1(self.conv1(x))))\n", + " x = F.relu(self.pool2(self.bn2(self.conv2(x))))\n", + " x = F.relu(self.bn3(self.conv3(x)))\n", + " x = F.relu(self.pool4(self.bn4(self.conv4(x))))\n", + " x = F.relu(self.pool5(self.bn5(self.conv5(x))))\n", + " x = self.flatten(x)\n", + " # print(x.shape)\n", + " x = F.relu(self.fc1(x))\n", + " x = self.fc2(x)\n", + " return F.softmax(x)\n", + "\n", + "# net on 2D conv layers with 1 input channels\n", + "net_2D_conv = Net_Conv2D(n_input=1, n_output=5).to(device)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "oeMqFHSkmb0O" + }, + "source": [ + "import torch.optim as optim\n", + "\n", + "criterion_2D = nn.CrossEntropyLoss()\n", + "optimizer_2D = optim.Adam(net_2D_conv.parameters(), lr=0.01)\n", + "scheduler = optim.lr_scheduler.StepLR(optimizer_2D, step_size=10, gamma=0.4)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "a19f44b643f4454b98daca4e42b10b7c", + "a93352ea51c94fc99d7c5d5fe023aee6", + "c6c0731a16a24781afd7faf17a3bff6c", + "6c55603e66da4785a30280960a72a20a", + "4a313d8bc4e94b75952f528389045170", + "4ff688d03c6048d7a19310fb40d21ca8", + "0cad72e2ac37421baa14b1ef3f7b58d4", + "6090a61df15e4ec0b1de4971cd807560", + "078a2e7bcdd54661b16547c296804b63", + "e7a135a45cd84ab3b1a19aaeca6a205b", + "4470a2c5172049f08761dac43282b8c5" + ] + }, + "id": "241tqwSEmb40", + "outputId": "1a67e9e2-9f89-4fe1-c4da-11c55526ab55" + }, + "source": [ + "from tqdm.notebook import tqdm\n", + "\n", + "losses_train = []\n", + "\n", + "for epoch in tqdm(range(30)): # loop over the dataset multiple times\n", + " epoch_loss = 0.0\n", + " running_loss = 0.0\n", + " for i, (inputs, labels) in enumerate(trainloader, 0):\n", + " # get the inputs; data is a list of [inputs, labels]\n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + " # print(inputs.shape)\n", + " # zero the parameter gradients\n", + " optimizer_2D.zero_grad()\n", + "\n", + " # forward + backward + optimize\n", + " outputs = net_2D_conv(inputs)\n", + " # print(outputs)\n", + " loss = criterion_2D(outputs, labels)\n", + " loss.backward()\n", + " optimizer_2D.step()\n", + "\n", + " # print statistics\n", + "\n", + " running_loss += loss.item()\n", + " epoch_loss += loss.item()\n", + " if i % 200 == 199: # print every 200 mini-batches\n", + " print('[%d, %5d] loss: %.3f' %\n", + " (epoch + 1, i + 1, running_loss / 200))\n", + " running_loss = 0.0\n", + " losses_train.append(epoch_loss)\n", + " scheduler.step()\n", + "print('Finished Training')" + ], + "execution_count": null, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a19f44b643f4454b98daca4e42b10b7c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/30 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "W10HVF5A2hmc", + "outputId": "142c0d09-2cb1-4351-95ca-9ce7f0f18526" + }, + "source": [ + "correct_test = 0\n", + "total_test = 0\n", + "\n", + "with torch.no_grad():\n", + "\n", + " for inputs, labels in testloader:\n", + " \n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + " \n", + " outputs = net_2D_conv(inputs)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + "\n", + " # print(f'Predicted = {predicted}\\nLabels = {labels}\\n')\n", + " total_test += labels.size(0)\n", + " correct_test += (predicted == labels).sum().item()\n", + " # print(f'Correct = {correct}, total = {total}, percent = {correct / total}')\n", + "print(f'Accuracy of the network net_2D_conv on the {X_test.shape[0]} test inputs = {round(100 * correct_test / total_test, 2)}%')" + ], + "execution_count": null, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:44: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy of the network net_2D_conv on the 2959 test inputs = 88.42%\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mbMdgnkCFi3l" + }, + "source": [ + "### Если вдруг пропадут output-ы:\n", + "Accuracy of the network net_2D_conv on the 2959 test inputs = 88.42%" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nfmZhQjM3PSq" + }, + "source": [ + "### Тут и говорить не о чем, далеко не 20%, качество - огонь! (менял параметры, лучше не получил)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4vN9YvRgDMbE" + }, + "source": [ + "## Попробуем VGG16" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "CJI8WLCvGBdS" + }, + "source": [ + "X_tr = X_train[:, None, :, :]\n", + "X_te = X_test[:, None, :, :]" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "gaBvSjO2DSWN" + }, + "source": [ + "batch_size = 128\n", + "\n", + "tensor_x = torch.Tensor(X_tr)\n", + "tensor_y = torch.LongTensor(y_train)\n", + "\n", + "train_dataset = TensorDataset(tensor_x, tensor_y)\n", + "\n", + "tensor_x = torch.Tensor(X_te) # 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, drop_last=True)\n", + "testloader = DataLoader(test_dataset, batch_size=batch_size,\n", + " shuffle=False, num_workers=2, drop_last=True)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "Q-7YiyAdDC5E" + }, + "source": [ + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "\n", + "class VGG16(nn.Module):\n", + " def __init__(self):\n", + " super(VGG16, self).__init__()\n", + " self.conv1_1 = nn.Conv2d(in_channels=1, out_channels=64, kernel_size=3, padding=1)\n", + " nn.init.xavier_normal_(self.conv1_1.weight)\n", + " self.conv1_2 = nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, padding=1)\n", + " nn.init.xavier_normal_(self.conv1_2.weight)\n", + "\n", + " self.conv2_1 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, padding=1)\n", + " nn.init.xavier_normal_(self.conv2_1.weight)\n", + " self.conv2_2 = nn.Conv2d(in_channels=128, out_channels=128, kernel_size=3, padding=1)\n", + " nn.init.xavier_normal_(self.conv2_2.weight)\n", + "\n", + " self.conv3_1 = nn.Conv2d(in_channels=128, out_channels=256, kernel_size=3, padding=1)\n", + " nn.init.xavier_normal_(self.conv3_1.weight)\n", + " self.conv3_2 = nn.Conv2d(in_channels=256, out_channels=256, kernel_size=3, padding=1)\n", + " nn.init.xavier_normal_(self.conv3_2.weight)\n", + " self.conv3_3 = nn.Conv2d(in_channels=256, out_channels=256, kernel_size=3, padding=1)\n", + " nn.init.xavier_normal_(self.conv3_3.weight)\n", + "\n", + " self.conv4_1 = nn.Conv2d(in_channels=256, out_channels=512, kernel_size=3, padding=1)\n", + " nn.init.xavier_normal_(self.conv4_1.weight)\n", + " self.conv4_2 = nn.Conv2d(in_channels=512, out_channels=512, kernel_size=3, padding=1)\n", + " nn.init.xavier_normal_(self.conv4_2.weight)\n", + " self.conv4_3 = nn.Conv2d(in_channels=512, out_channels=512, kernel_size=3, padding=1)\n", + " nn.init.xavier_normal_(self.conv4_3.weight)\n", + "\n", + " self.conv5_1 = nn.Conv2d(in_channels=512, out_channels=512, kernel_size=3, padding=1)\n", + " nn.init.xavier_normal_(self.conv5_1.weight)\n", + " self.conv5_2 = nn.Conv2d(in_channels=512, out_channels=512, kernel_size=3, padding=1)\n", + " nn.init.xavier_normal_(self.conv5_2.weight)\n", + " self.conv5_3 = nn.Conv2d(in_channels=512, out_channels=512, kernel_size=3, padding=1)\n", + " nn.init.xavier_normal_(self.conv5_3.weight)\n", + "\n", + " self.maxpool = nn.MaxPool2d(kernel_size=5, stride=2)\n", + "\n", + " self.fc1 = nn.Linear(512, 256)\n", + " nn.init.xavier_normal_(self.fc1.weight)\n", + " self.fc2 = nn.Linear(256, 128)\n", + " nn.init.xavier_normal_(self.fc2.weight)\n", + " self.fc3 = nn.Linear(128, 5)\n", + " nn.init.xavier_normal_(self.fc3.weight)\n", + "\n", + " def forward(self, x):\n", + " x = F.relu(self.conv1_1(x))\n", + " x = F.relu(self.conv1_2(x))\n", + " x = self.maxpool(x)\n", + " x = F.relu(self.conv2_1(x))\n", + " x = F.relu(self.conv2_2(x))\n", + " x = self.maxpool(x)\n", + " x = F.relu(self.conv3_1(x))\n", + " x = F.relu(self.conv3_2(x))\n", + " x = F.relu(self.conv3_3(x))\n", + " x = self.maxpool(x)\n", + " x = F.relu(self.conv4_1(x))\n", + " x = F.relu(self.conv4_2(x))\n", + " x = F.relu(self.conv4_3(x))\n", + " x = self.maxpool(x)\n", + " x = F.relu(self.conv5_1(x))\n", + " x = F.relu(self.conv5_2(x))\n", + " x = F.relu(self.conv5_3(x))\n", + " x = self.maxpool(x)\n", + " x = x.reshape(x.shape[0], -1)\n", + " x = F.relu(self.fc1(x))\n", + " x = F.dropout(x, 0.5)\n", + " x = F.relu(self.fc2(x))\n", + " x = F.dropout(x, 0.5)\n", + " x = self.fc3(x)\n", + " return x\n", + "\n", + "net_vgg = VGG16().to(device)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "YKBLShu_DZMO" + }, + "source": [ + "import torch.optim as optim\n", + "\n", + "criterion_vgg = nn.CrossEntropyLoss()\n", + "optimizer_vgg = optim.Adam(net_vgg.parameters(), lr=0.0001)\n", + "scheduler_vgg = optim.lr_scheduler.StepLR(optimizer_vgg, step_size=1, gamma=0.9)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "d28e8506bc59439787c25b97321a0df0", + "8b1886d6e6414261b0371af50d244439", + "6a3b6b91968c450c81ace2a09f451ffe", + "6b38964b8f944e7695ecdcee0c99d154", + "a32360353170435ba7e6b2767d56030e", + "79d48fca8d5342748d473916a37b2dbc", + "cbef124fabce4e73a6c04b5a2db59e27", + "557f128b4b224ce39250bca72132576a", + "ea2364e82e0d4e4a8bb42a8fcc1c5e3b", + "a09a3bac2f5d42f1bcce54750215b7f5", + "9d450cb2265141929d7aafff252ceec9" + ] + }, + "id": "PdVu1RVWDvib", + "outputId": "4389fbde-0e49-4653-ff35-c98185ff37e6" + }, + "source": [ + "from tqdm.notebook import tqdm\n", + "\n", + "losses_train_vgg = []\n", + "\n", + "for epoch in tqdm(range(15)): # loop over the dataset multiple times\n", + " epoch_loss = 0.0\n", + " running_loss = 0.0\n", + " for i, (inputs, labels) in enumerate(trainloader, 0):\n", + " # get the inputs; data is a list of [inputs, labels]\n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + " # print(inputs.shape)\n", + " # zero the parameter gradients\n", + " optimizer_vgg.zero_grad()\n", + "\n", + " # forward + backward + optimize\n", + " outputs = net_vgg(inputs)\n", + " # print(outputs)\n", + " loss = criterion_vgg(outputs, labels)\n", + " loss.backward()\n", + " optimizer_vgg.step()\n", + "\n", + " # print statistics\n", + "\n", + " running_loss += loss.item()\n", + " epoch_loss += loss.item()\n", + " if i % 10 == 9: # print every 10 mini-batches\n", + " print('[%d, %5d] loss: %.3f' %\n", + " (epoch + 1, i + 1, running_loss / 10))\n", + " running_loss = 0.0\n", + " losses_train_vgg.append(epoch_loss)\n", + " scheduler_vgg.step()\n", + "print('Finished Training')" + ], + "execution_count": null, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d28e8506bc59439787c25b97321a0df0", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/15 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "xLecb5muP8Ye", + "outputId": "03feab89-72d9-4657-b990-1f727cd4ac2a" + }, + "source": [ + "correct_test = 0\n", + "total_test = 0\n", + "\n", + "with torch.no_grad():\n", + "\n", + " for inputs, labels in testloader:\n", + " \n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + " \n", + " outputs = net_vgg(inputs)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + "\n", + " \n", + " total_test += labels.size(0)\n", + " correct_test += (predicted == labels).sum().item()\n", + " # print(f'Correct = {correct}, total = {total}, percent = {correct / total}')\n", + "print(f'Accuracy of the VGG network on the {X_test.shape[0]} test inputs = {round(100 * correct_test / total_test, 2)}%')" + ], + "execution_count": null, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy of the VGG network on the 2959 test inputs = 87.94%\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cg8coC7hcbsI" + }, + "source": [ + "Accuracy of the VGG network on the 2959 test inputs = 87.94%\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8JfkQdE9cGvH" + }, + "source": [ + "### Ну норм, почти как моя (чуть похуже), можно было еще поучить, но лимит на GPU на колабе не бесконечный\n", + "### Ну и учится долговато, поэтому batch_size не получится особо уменьшить, короче, моя бесспорно лучше" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "t0_xx9pKmm3X" + }, + "source": [ + "## Попробуем ResNet" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ZlpSaqiRmmv4" + }, + "source": [ + "X_tr = X_train[:, None, :, :]\n", + "X_te = X_test[:, None, :, :]" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aOihCnLDqoRF" + }, + "source": [ + "### Долго учится, но батч 128 не влезает в оперативу" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "bEJs1fjRmmsg" + }, + "source": [ + "batch_size = 64\n", + "\n", + "tensor_x = torch.Tensor(X_tr)\n", + "tensor_y = torch.LongTensor(y_train)\n", + "\n", + "train_dataset = TensorDataset(tensor_x, tensor_y)\n", + "\n", + "tensor_x = torch.Tensor(X_te) # 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, drop_last=True)\n", + "testloader = DataLoader(test_dataset, batch_size=batch_size,\n", + " shuffle=False, num_workers=2, drop_last=True)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "G_007iy_mmpm" + }, + "source": [ + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "import torchvision.models as models\n", + "\n", + "model = models.resnet50(pretrained=False)\n", + "model.conv1 = nn.Conv2d(in_channels=1, out_channels=64, kernel_size=3, padding=1, bias=False)\n", + "model = model.to(device)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "9pnILjWfn7hJ" + }, + "source": [ + "import torch.optim as optim\n", + "\n", + "criterion_resnet = nn.CrossEntropyLoss()\n", + "optimizer_resnet = optim.Adam(model.parameters(), lr=0.0001)\n", + "scheduler_resnet = optim.lr_scheduler.StepLR(optimizer_resnet, step_size=1, gamma=0.9)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "873b4d4a07234ff5ad29864bd925e0c3", + "c1deb5815a0447248582e3484cb04635", + "01d76f7002b24bb3acf8f0081e65cb48", + "7b7da43ad0554ef5b15d676c21ad866e", + "b8ad378df36e4125b05ded99fbe54f9d", + "334c9aa8095e4edd9a1afb872ed526c8", + "3eb2668641394af9bc9e0f7d2c04958b", + "8d49371624784b4295f85051b509c9e2", + "ae733cb1f8d84633a31b1c61af5f2bf8", + "ddfde2e76bfb419fb01e53c7ecb5fc04", + "3ea1b903cf3949df93be35d33b550046" + ] + }, + "id": "DTHwzk-Fn7j2", + "outputId": "3a6df6b8-245f-426a-83da-b7c047e3e75a" + }, + "source": [ + "from tqdm.notebook import tqdm\n", + "\n", + "losses_train_resnet = []\n", + "\n", + "for epoch in tqdm(range(5)): # loop over the dataset multiple times\n", + " epoch_loss = 0.0\n", + " running_loss = 0.0\n", + " for i, (inputs, labels) in enumerate(trainloader, 0):\n", + " # get the inputs; data is a list of [inputs, labels]\n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + " # print(inputs.shape)\n", + " # zero the parameter gradients\n", + " optimizer_resnet.zero_grad()\n", + "\n", + " # forward + backward + optimize\n", + " outputs = model(inputs)\n", + " # print(outputs)\n", + " loss = criterion_resnet(outputs, labels)\n", + " loss.backward()\n", + " optimizer_resnet.step()\n", + "\n", + " # print statistics\n", + "\n", + " running_loss += loss.item()\n", + " epoch_loss += loss.item()\n", + " if i % 10 == 9: # print every 10 mini-batches\n", + " print('[%d, %5d] loss: %.3f' %\n", + " (epoch + 1, i + 1, running_loss / 10))\n", + " running_loss = 0.0\n", + " losses_train_resnet.append(epoch_loss)\n", + " scheduler_resnet.step()\n", + "print('Finished Training')" + ], + "execution_count": null, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "873b4d4a07234ff5ad29864bd925e0c3", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/5 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "CXj9cS_qp8Lk", + "outputId": "600769ce-1ff3-4e56-d45e-67555ae22e08" + }, + "source": [ + "correct_test = 0\n", + "total_test = 0\n", + "\n", + "with torch.no_grad():\n", + "\n", + " for inputs, labels in testloader:\n", + " \n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + " \n", + " outputs = model(inputs)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + "\n", + " \n", + " total_test += labels.size(0)\n", + " correct_test += (predicted == labels).sum().item()\n", + " # print(f'Correct = {correct}, total = {total}, percent = {correct / total}')\n", + "print(f'Accuracy of the ResNet50 network on the {X_test.shape[0]} test inputs = {round(100 * correct_test / total_test, 2)}%')" + ], + "execution_count": null, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy of the ResNet50 network on the 2959 test inputs = 90.46%\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "B71ZxxjBw1fI" + }, + "source": [ + "Accuracy of the ResNet50 network on the 2959 test inputs = 90.46%" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9RdiSXH_w4B3" + }, + "source": [ + "### Топчик!" + ] + }, + { + "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": "GOmUhfziHZt-" + }, + "source": [ + "### Соберем датасет со всеми классами" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TYa-EW9bHnCA", + "outputId": "093accba-4931-44af-c605-8dfb394c8dd4" + }, + "source": [ + "tuple(sorted(samples_by_target.keys()))[1:]" + ], + "execution_count": null, + "outputs": [ + { + "data": { + "text/plain": [ + "('bed',\n", + " 'bird',\n", + " 'cat',\n", + " 'dog',\n", + " 'down',\n", + " 'eight',\n", + " 'five',\n", + " 'four',\n", + " 'go',\n", + " 'happy',\n", + " 'house',\n", + " 'left',\n", + " 'marvin',\n", + " 'nine',\n", + " 'no',\n", + " 'off',\n", + " 'on',\n", + " 'one',\n", + " 'right',\n", + " 'seven',\n", + " 'sheila',\n", + " 'six',\n", + " 'stop',\n", + " 'three',\n", + " 'tree',\n", + " 'two',\n", + " 'up',\n", + " 'wow',\n", + " 'yes',\n", + " 'zero')" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_cKmHlLT0U7I" + }, + "source": [ + "### Не хватает оперативы, пришлось батчами датасет собирать:(\n", + " (думаю, это заслуживает дополнительного балла)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c5SSwTtwzEbj" + }, + "source": [ + "### Преобразованные батчи:\n", + "('left', 'right', 'up', 'down', 'stop') \\\n", + "('bed', 'bird', 'cat', 'dog', 'eight', 'five', 'four') \\\n", + "('go', 'happy', 'house', 'marvin', 'nine', 'no', 'off', 'on') \\\n", + "('one', 'seven', 'sheila', 'six', 'three', 'tree', 'two', 'wow', 'yes', 'zero')" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "16Ux38uFD2g-", + "outputId": "dfaacdc7-1c21-426e-a9d1-452f868e0869" + }, + "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 = ('one', 'seven', 'sheila', 'six', 'three', 'tree', 'two', 'wow', 'yes', 'zero')\n", + "\n", + "def preprocess_sample(filepath, max_length=150):\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": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 21810/21810 [13:33<00:00, 26.82it/s]\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8UG1Bd7NVVUC", + "outputId": "dc33358c-f0b3-4354-8564-d5a99d1cbd8e" + }, + "source": [ + "%%time\n", + "with open('/content/drive/MyDrive/speech_technology/X_train_one_seven_sheila_six_three_tree_two_wow_yes_zero.pickle', 'wb') as f:\n", + " pickle.dump(X_train, f)\n", + "\n", + "with open('/content/drive/MyDrive/speech_technology/X_test_one_seven_sheila_six_three_tree_two_wow_yes_zero.pickle', 'wb') as f:\n", + " pickle.dump(X_test, f)\n", + "\n", + "with open('/content/drive/MyDrive/speech_technology/y_train_one_seven_sheila_six_three_tree_two_wow_yes_zero.pickle', 'wb') as f:\n", + " pickle.dump(y_train, f)\n", + "\n", + "with open('/content/drive/MyDrive/speech_technology/y_test_one_seven_sheila_six_three_tree_two_wow_yes_zero.pickle', 'wb') as f:\n", + " pickle.dump(y_test, f)" + ], + "execution_count": null, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 2.82 s, sys: 1.89 s, total: 4.71 s\n", + "Wall time: 12.4 s\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "s3vLw9aQz0pn", + "outputId": "27ed2489-b092-43d4-c21a-0e5a3ef813dd" + }, + "source": [ + "!ls /content/drive/MyDrive/speech_technology/" + ], + "execution_count": null, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X_test_bed_bird_cat_dog_eight_five_four.pickle\n", + "X_test_go_happy_house_marvin_nine_no_off_on.pickle\n", + "X_test_left_right_up_down_stop.pickle\n", + "X_test_one_seven_sheila_six_three_tree_two_wow_yes_zero.pickle\n", + "X_train_bed_bird_cat_dog_eight_five_four.pickle\n", + "X_train_go_happy_house_marvin_nine_no_off_on.pickle\n", + "X_train_left_right_up_down_stop.pickle\n", + "X_train_one_seven_sheila_six_three_tree_two_wow_yes_zero.pickle\n", + "y_test_bed_bird_cat_dog_eight_five_four.pickle\n", + "y_test_go_happy_house_marvin_nine_no_off_on.pickle\n", + "y_test_left_right_up_down_stop.pickle\n", + "y_test_one_seven_sheila_six_three_tree_two_wow_yes_zero.pickle\n", + "y_train_bed_bird_cat_dog_eight_five_four.pickle\n", + "y_train_go_happy_house_marvin_nine_no_off_on.pickle\n", + "y_train_left_right_up_down_stop.pickle\n", + "y_train_one_seven_sheila_six_three_tree_two_wow_yes_zero.pickle\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "j64Njr27hxk6" + }, + "source": [ + "### Собираем батчи в единые массивы" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 49, + "referenced_widgets": [ + "9ca77079e21346c6b67efd7c84244218", + "648c62ce35b54057aff012d9fa8c8868", + "1fe1217084e14cf7a056b722c50cec6a", + "291237b93b884081b714ef85608074c1", + "7a14d91659c44bfab2865743269b7707", + "f35289fc008a47d2b368260637a090dc", + "f28b750b796b4165ab9901f0fdec9aad", + "21a69f5d253c465a9194dc1c95e6b0ea", + "b69ba20d45f5430f9d2dc9a1405f4d7b", + "cddcae93ef954edca7ffb0e828a7415d", + "5c7fa3bc82fd4cce8dae0eb56752c39d" + ] + }, + "id": "G7uEgt2dac6G", + "outputId": "68e6ef47-38fe-4112-eccd-58be661909c9" + }, + "source": [ + "empty = True\n", + "for file in tqdm(['X_train_bed_bird_cat_dog_eight_five_four.pickle', 'X_train_go_happy_house_marvin_nine_no_off_on.pickle', \n", + " 'X_train_left_right_up_down_stop.pickle', 'X_train_one_seven_sheila_six_three_tree_two_wow_yes_zero.pickle']):\n", + " with open(f'/content/drive/MyDrive/speech_technology/{file}', 'rb') as f:\n", + " if empty:\n", + " X_train = pickle.load(f)\n", + " empty = False\n", + " else:\n", + " X_train = np.concatenate((X_train, pickle.load(f)))" + ], + "execution_count": null, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9ca77079e21346c6b67efd7c84244218", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/4 [00:00" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "0_rV92mKrAYB" + }, + "source": [ + "torch.save(model, '/content/drive/MyDrive/speech_technology/ResNet50_full_dataset')" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "p85wlDnAIuHl", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 67, + "referenced_widgets": [ + "682fdfbe18074347b71b382b9f140141", + "d2e02c80579d40f2969cbd62869ddf51", + "be584960263a47f083fcc738ec1f7a75", + "8f1e5a8dd8f646f2bf5ac2500decbffa", + "c7f8746fcbbf4e1791637a815c90462d", + "08a24c518c2a4e25aedf243d5cb01045", + "a1358d61ef2246e3b7045effd03aef65", + "6140aaa2c0da49508004a28c7df36872", + "6494ca997dc4401394efa95594eea0bd", + "4ea8351599cc4937ba828d6fcb4cf3e8", + "c495d9fdc23340cf9540ad631f494879" + ] + }, + "outputId": "5d91767e-43f3-475a-df93-f1cf5cd83355" + }, + "source": [ + "correct_test = 0\n", + "total_test = 0\n", + "\n", + "with torch.no_grad():\n", + "\n", + " for inputs, labels in tqdm(testloader):\n", + " \n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + " \n", + " outputs = model(inputs)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + "\n", + " \n", + " total_test += labels.size(0)\n", + " correct_test += (predicted == labels).sum().item()\n", + " # print(f'Correct = {correct}, total = {total}, percent = {correct / total}')\n", + "print(f'Accuracy of the ResNet50 network on the {X_test.shape[0]} test inputs = {round(100 * correct_test / total_test, 2)}%')" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "682fdfbe18074347b71b382b9f140141", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + " 0%| | 0/252 [00:00 слово)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "kN1MJJLqwD77" + }, + "source": [ + "target_words_ordered = 'bed_bird_cat_dog_eight_five_four'.split('_') + 'go_happy_house_marvin_nine_no_off_on'.split('_') + \\\n", + " 'left_right_up_down_stop'.split('_') + 'one_seven_sheila_six_three_tree_two_wow_yes_zero'.split('_')\n", + "\n", + "target_to_word = {\n", + " ind: word for ind, word in enumerate(target_words_ordered)\n", + "}" + ], + "execution_count": 30, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "R52Ngs1wKZVr", + "outputId": "8992a396-7952-4189-e0cb-75f4c803ef19" + }, + "source": [ + "!sox --info /content/drive/MyDrive/speech_technology/prime_numbers_mono.wav" + ], + "execution_count": 109, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Input File : '/content/drive/MyDrive/speech_technology/prime_numbers_mono.wav'\n", + "Channels : 1\n", + "Sample Rate : 16000\n", + "Precision : 16-bit\n", + "Duration : 00:22:29.52 = 21592247 samples ~ 101214 CDDA sectors\n", + "File Size : 43.2M\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": "uNEPDrexwEEV", + "outputId": "02cd9966-c606-4a08-d353-9ec7868834c9" + }, + "source": [ + "%%time\n", + "amplitudes, sr = librosa.core.load('/content/drive/MyDrive/speech_technology/prime_numbers_mono.wav')" + ], + "execution_count": 122, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "CPU times: user 38.5 s, sys: 230 ms, total: 38.7 s\n", + "Wall time: 39.5 s\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ZZ6H7Q0QwEHQ" + }, + "source": [ + "spectrogram = librosa.feature.melspectrogram(amplitudes, sr=sr)" + ], + "execution_count": 123, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "OuZU5h3tAqrz", + "outputId": "f21ba33e-7678-447b-cc73-774cda43d551" + }, + "source": [ + "spectrogram.shape" + ], + "execution_count": 125, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(128, 58119)" + ] + }, + "metadata": {}, + "execution_count": 125 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5MLzpW8fV6ZS" + }, + "source": [ + "### Нарезал спектрограмму окошком длины 150" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 49, + "referenced_widgets": [ + "1d1d8f9d05874562b0da0d9f42022f5e", + "2ef90ce5007f45868c06df86abf7bef9", + "c11a2d13af084317a714c254775b2a07", + "e60ddc48f732420c9f5130df2bad349e", + "7988d180e38a4c1f9ed3e700339a4029", + "01e13fefb4344b958654d40324a160db", + "a01606b4960840cdae66fdaa7d90f4b4", + "f458289e94ea4315aff2c9e1f6a33d1d", + "131fbe8d79544d508756fdda0ab55520", + "94bd7c2cdd6745049bbc6656422df364", + "c91aa585907545898c626e068d5380fb" + ] + }, + "id": "QjLSERokAS9T", + "outputId": "ec6907bd-ad76-4c41-d938-7a298ca02547" + }, + "source": [ + "samples = []\n", + "for i in tqdm(range(0, spectrogram.shape[1]-150, 10)):\n", + " samples.append(spectrogram[:, i:i + 150])" + ], + "execution_count": 129, + "outputs": [ + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1d1d8f9d05874562b0da0d9f42022f5e", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + " 0%| | 0/5797 [00:00 0.9:\n", + " print(f'Video TimeCode: {global_time} milliseconds \\t Predicted word is \"{target_to_word[pred.item()]}\"')\n", + " global_time += 5" + ], + "execution_count": 137, + "outputs": [ + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ebe5ff03043b40049e918c1a25e140d1", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + " 0%| | 0/90 [00:00