diff --git "a/Week12_\341\204\207\341\205\251\341\206\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\241\341\206\274\341\204\206\341\205\265\341\206\253\341\204\214\341\205\265.ipynb" "b/Week12_\341\204\207\341\205\251\341\206\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\241\341\206\274\341\204\206\341\205\265\341\206\253\341\204\214\341\205\265.ipynb" new file mode 100644 index 0000000..eade86d --- /dev/null +++ "b/Week12_\341\204\207\341\205\251\341\206\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\241\341\206\274\341\204\206\341\205\265\341\206\253\341\204\214\341\205\265.ipynb" @@ -0,0 +1,2867 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "eb4a970104f54540836ee19a571cb0ef": { + "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_12e2bf426eba46ca9ca014cb1b1fa3cd", + "IPY_MODEL_b0954218ad754ad398949296536bd76d", + "IPY_MODEL_64c497e3a6704467a03d08fbbe78db5c" + ], + "layout": "IPY_MODEL_35d325efc0b1454192b176ad79e601e2" + } + }, + "12e2bf426eba46ca9ca014cb1b1fa3cd": { + "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_c148daeb3fee42eeab65bd644a615ddd", + "placeholder": "​", + "style": "IPY_MODEL_1189b930c30d435195f9ce5d3183c9b1", + "value": "tokenizer_config.json: 100%" + } + }, + "b0954218ad754ad398949296536bd76d": { + "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_be0f958e24924d08b10b99f24cc0eed2", + "max": 26, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_8637c00627214e0c82329efc3cf68551", + "value": 26 + } + }, + "64c497e3a6704467a03d08fbbe78db5c": { + "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_d1ac42ffe42c4fb2ab02b17129ebc884", + "placeholder": "​", + "style": "IPY_MODEL_18ca93e2ef344e9891e15e6a2a0a039b", + "value": " 26.0/26.0 [00:00<00:00, 340B/s]" + } + }, + "35d325efc0b1454192b176ad79e601e2": { + "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 + } + }, + "c148daeb3fee42eeab65bd644a615ddd": { + "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 + } + }, + "1189b930c30d435195f9ce5d3183c9b1": { + "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": "" + } + }, + "be0f958e24924d08b10b99f24cc0eed2": { + "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 + } + }, + "8637c00627214e0c82329efc3cf68551": { + "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": "" + } + }, + "d1ac42ffe42c4fb2ab02b17129ebc884": { + "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 + } + }, + "18ca93e2ef344e9891e15e6a2a0a039b": { + "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": "" + } + }, + "d38cb30ac188486f9b8dfeec444cb071": { + "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_bd52c77daedb4fb08306a0a1b567fef7", + "IPY_MODEL_9b31723c29a84aac8689e8139d47e332", + "IPY_MODEL_f653353306534183bf30994c4b77d01f" + ], + "layout": "IPY_MODEL_ecc816dc03e04950aa1725906ec617c4" + } + }, + "bd52c77daedb4fb08306a0a1b567fef7": { + "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_fc102be6c8cc46e29f3d937cd3581565", + "placeholder": "​", + "style": "IPY_MODEL_f253e12a5b024b66a9869cf4862c6235", + "value": "vocab.json: 100%" + } + }, + "9b31723c29a84aac8689e8139d47e332": { + "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_0dc04567d49d4e839d11b416afaa15f1", + "max": 1042301, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_b22b8579d5a74adfa06653b1a3f45f34", + "value": 1042301 + } + }, + "f653353306534183bf30994c4b77d01f": { + "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_c8267c2f031148858ddfb44dd2f98678", + "placeholder": "​", + "style": "IPY_MODEL_fe181675f0904477bbd8f3cc33a4a968", + "value": " 1.04M/1.04M [00:00<00:00, 3.99MB/s]" + } + }, + "ecc816dc03e04950aa1725906ec617c4": { + "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 + } + }, + "fc102be6c8cc46e29f3d937cd3581565": { + "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 + } + }, + "f253e12a5b024b66a9869cf4862c6235": { + "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": "" + } + }, + "0dc04567d49d4e839d11b416afaa15f1": { + "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 + } + }, + "b22b8579d5a74adfa06653b1a3f45f34": { + "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": "" + } + }, + "c8267c2f031148858ddfb44dd2f98678": { + "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 + } + }, + "fe181675f0904477bbd8f3cc33a4a968": { + "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": "" + } + }, + "8be93376374b4953985d03cf5f0649e5": { + "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_163b4f06b92b41ce9371be325e8be59a", + "IPY_MODEL_ff86e016cacd495c8c36a254a13e0ea9", + "IPY_MODEL_516f958a7c8b4bfe8589280d22008fc1" + ], + "layout": "IPY_MODEL_e32189674ce3426abcbdc8fb51529711" + } + }, + "163b4f06b92b41ce9371be325e8be59a": { + "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_586a4db94c024bed99b5680d44576eef", + "placeholder": "​", + "style": "IPY_MODEL_eb1469eb7d8449f19ebab9986aa240e3", + "value": "merges.txt: 100%" + } + }, + "ff86e016cacd495c8c36a254a13e0ea9": { + "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_c1bb9d9593384946a7765c342a98f90f", + "max": 456318, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_02531ee459d447018bb6e30d04d2aa84", + "value": 456318 + } + }, + "516f958a7c8b4bfe8589280d22008fc1": { + "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_2a96b6faa3574c3db425178334f5de1b", + "placeholder": "​", + "style": "IPY_MODEL_5ac80abdfb6b4fa7835ce48b0eb58a8f", + "value": " 456k/456k [00:00<00:00, 7.78MB/s]" + } + }, + "e32189674ce3426abcbdc8fb51529711": { + "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 + } + }, + "586a4db94c024bed99b5680d44576eef": { + "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 + } + }, + "eb1469eb7d8449f19ebab9986aa240e3": { + "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": "" + } + }, + "c1bb9d9593384946a7765c342a98f90f": { + "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 + } + }, + "02531ee459d447018bb6e30d04d2aa84": { + "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": "" + } + }, + "2a96b6faa3574c3db425178334f5de1b": { + "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 + } + }, + "5ac80abdfb6b4fa7835ce48b0eb58a8f": { + "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": "" + } + }, + "9b4c6a01437742c29516f062494fdf74": { + "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_353d4e8035eb471993dcdb72e3fc7887", + "IPY_MODEL_912ca9c26887410f94620425233300ba", + "IPY_MODEL_d50c2a860734461f9b65c086705ab648" + ], + "layout": "IPY_MODEL_2f71c12331f7413e9c2727fb659e0431" + } + }, + "353d4e8035eb471993dcdb72e3fc7887": { + "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_b330adb100db4303b4152eb4eb1044ba", + "placeholder": "​", + "style": "IPY_MODEL_57bf76266d244513840d35674213371d", + "value": "tokenizer.json: 100%" + } + }, + "912ca9c26887410f94620425233300ba": { + "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_2926c37667014554ac9abe3242fbf351", + "max": 1355256, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_69d58d34e5cd4255abcef7fe5931a537", + "value": 1355256 + } + }, + "d50c2a860734461f9b65c086705ab648": { + "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_7c2e5b34108145cd96b4c2026a6a2237", + "placeholder": "​", + "style": "IPY_MODEL_cdfdd95dc26d42dfa937f9f80d919487", + "value": " 1.36M/1.36M [00:00<00:00, 15.0MB/s]" + } + }, + "2f71c12331f7413e9c2727fb659e0431": { + "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 + } + }, + "b330adb100db4303b4152eb4eb1044ba": { + "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 + } + }, + "57bf76266d244513840d35674213371d": { + "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": "" + } + }, + "2926c37667014554ac9abe3242fbf351": { + "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 + } + }, + "69d58d34e5cd4255abcef7fe5931a537": { + "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": "" + } + }, + "7c2e5b34108145cd96b4c2026a6a2237": { + "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 + } + }, + "cdfdd95dc26d42dfa937f9f80d919487": { + "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": "" + } + }, + "ea251ebb4c8d429aa893c1dc7f9f59df": { + "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_1fb75cb3c0ec4e32be76aa972e3b7456", + "IPY_MODEL_b7aa105eb26342c3a7bf142272c6fa76", + "IPY_MODEL_164f2d01e7524ac798d795c344cc572e" + ], + "layout": "IPY_MODEL_166f6fc3495249ed9dddf1dd32f88807" + } + }, + "1fb75cb3c0ec4e32be76aa972e3b7456": { + "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_91fc17fd92c141e782fb385f849814c7", + "placeholder": "​", + "style": "IPY_MODEL_fadd939b718b45b6a3b167e0c215fe13", + "value": "config.json: 100%" + } + }, + "b7aa105eb26342c3a7bf142272c6fa76": { + "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_783b70e9b9254947b59f7cf2e991475b", + "max": 666, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_8fdfc743bdbf45c3bc3d26a1f7531f70", + "value": 666 + } + }, + "164f2d01e7524ac798d795c344cc572e": { + "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_eebce808d44c40f59c31b470d14088fd", + "placeholder": "​", + "style": "IPY_MODEL_4eaecb12a8f34f9da1645d277032b40b", + "value": " 666/666 [00:00<00:00, 9.87kB/s]" + } + }, + "166f6fc3495249ed9dddf1dd32f88807": { + "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 + } + }, + "91fc17fd92c141e782fb385f849814c7": { + "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 + } + }, + "fadd939b718b45b6a3b167e0c215fe13": { + "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": "" + } + }, + "783b70e9b9254947b59f7cf2e991475b": { + "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 + } + }, + "8fdfc743bdbf45c3bc3d26a1f7531f70": { + "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": "" + } + }, + "eebce808d44c40f59c31b470d14088fd": { + "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 + } + }, + "4eaecb12a8f34f9da1645d277032b40b": { + "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": "" + } + }, + "fb4122dd81804f38be1ef5b16ace69ba": { + "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_efd64c4258bb48bca9f56b284433b75d", + "IPY_MODEL_c45284ad83874932a099c57fb64a670d", + "IPY_MODEL_759e2cbc69b341418f602e2aa3c31376" + ], + "layout": "IPY_MODEL_dd228848c9024f20a868f991578eb496" + } + }, + "efd64c4258bb48bca9f56b284433b75d": { + "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_3cf25d0e930e4c1ba58b403f43bf5538", + "placeholder": "​", + "style": "IPY_MODEL_e7330c40ed2449c497e17db4d8560810", + "value": "model.safetensors: 100%" + } + }, + "c45284ad83874932a099c57fb64a670d": { + "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_be3f5ff3c19c461bb885841c91d707b3", + "max": 3247159078, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_22d65b2b825c4bb18570c23a9b03ca95", + "value": 3247159078 + } + }, + "759e2cbc69b341418f602e2aa3c31376": { + "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_d8c20f2584d941039c91e9634c9a9296", + "placeholder": "​", + "style": "IPY_MODEL_19db93a1eb1c40feb326df84894240f7", + "value": " 3.25G/3.25G [00:42<00:00, 102MB/s]" + } + }, + "dd228848c9024f20a868f991578eb496": { + "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 + } + }, + "3cf25d0e930e4c1ba58b403f43bf5538": { + "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 + } + }, + "e7330c40ed2449c497e17db4d8560810": { + "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": "" + } + }, + "be3f5ff3c19c461bb885841c91d707b3": { + "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 + } + }, + "22d65b2b825c4bb18570c23a9b03ca95": { + "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": "" + } + }, + "d8c20f2584d941039c91e9634c9a9296": { + "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 + } + }, + "19db93a1eb1c40feb326df84894240f7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + } + } + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "##**Text generation Experiment**\n", + "\n", + "- 이번 복습과제에는 GPT-2 모델을 사용한 텍스트 생생을 다룹니다. 🙂\n", + "- GPT-2는 약 40GB의 인터넷 텍스트 데이터로 훈련된 모델로 다음 단어 예측(next word prediction)을 목적으로 학습이 되었습니다\n", + "- Beam Search, Top-k sampling, Top-p sampling 과 같은 다양한 디코딩 기법들을 실험해보겠습니다." + ], + "metadata": { + "id": "8Gxy65cu8irm" + } + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "_M2apVV-8cyb" + }, + "outputs": [], + "source": [ + "#reproducability을 위해 해당 코드를 실행해주세요\n", + "SEED = 34\n", + "#max number of words in output text\n", + "MAX_LEN = 70" + ] + }, + { + "cell_type": "code", + "source": [ + "# 실험할 문장입니다.\n", + "input_sequence = \"I don't know about you, but there's only one thing I want to do after a long day of work\"" + ], + "metadata": { + "id": "Kd6ZRQmG8gWL" + }, + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# transformers을 가져와서 사용해봅시다\n", + "from transformers import TFGPT2LMHeadModel, GPT2Tokenizer\n", + "\n", + "# pretrained large GPT2 tokenizer 와 GPT2 model를 가져와주세요.\n", + "tokenizer = GPT2Tokenizer.from_pretrained(\"gpt2-large\")\n", + "GPT2 = TFGPT2LMHeadModel.from_pretrained(\"gpt2-large\", pad_token_id=tokenizer.eos_token_id)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 444, + "referenced_widgets": [ + "eb4a970104f54540836ee19a571cb0ef", + "12e2bf426eba46ca9ca014cb1b1fa3cd", + "b0954218ad754ad398949296536bd76d", + "64c497e3a6704467a03d08fbbe78db5c", + "35d325efc0b1454192b176ad79e601e2", + "c148daeb3fee42eeab65bd644a615ddd", + "1189b930c30d435195f9ce5d3183c9b1", + "be0f958e24924d08b10b99f24cc0eed2", + "8637c00627214e0c82329efc3cf68551", + "d1ac42ffe42c4fb2ab02b17129ebc884", + "18ca93e2ef344e9891e15e6a2a0a039b", + "d38cb30ac188486f9b8dfeec444cb071", + "bd52c77daedb4fb08306a0a1b567fef7", + "9b31723c29a84aac8689e8139d47e332", + "f653353306534183bf30994c4b77d01f", + "ecc816dc03e04950aa1725906ec617c4", + "fc102be6c8cc46e29f3d937cd3581565", + "f253e12a5b024b66a9869cf4862c6235", + "0dc04567d49d4e839d11b416afaa15f1", + "b22b8579d5a74adfa06653b1a3f45f34", + "c8267c2f031148858ddfb44dd2f98678", + "fe181675f0904477bbd8f3cc33a4a968", + "8be93376374b4953985d03cf5f0649e5", + "163b4f06b92b41ce9371be325e8be59a", + "ff86e016cacd495c8c36a254a13e0ea9", + "516f958a7c8b4bfe8589280d22008fc1", + "e32189674ce3426abcbdc8fb51529711", + "586a4db94c024bed99b5680d44576eef", + "eb1469eb7d8449f19ebab9986aa240e3", + "c1bb9d9593384946a7765c342a98f90f", + "02531ee459d447018bb6e30d04d2aa84", + "2a96b6faa3574c3db425178334f5de1b", + "5ac80abdfb6b4fa7835ce48b0eb58a8f", + "9b4c6a01437742c29516f062494fdf74", + "353d4e8035eb471993dcdb72e3fc7887", + "912ca9c26887410f94620425233300ba", + "d50c2a860734461f9b65c086705ab648", + "2f71c12331f7413e9c2727fb659e0431", + "b330adb100db4303b4152eb4eb1044ba", + "57bf76266d244513840d35674213371d", + "2926c37667014554ac9abe3242fbf351", + "69d58d34e5cd4255abcef7fe5931a537", + "7c2e5b34108145cd96b4c2026a6a2237", + "cdfdd95dc26d42dfa937f9f80d919487", + "ea251ebb4c8d429aa893c1dc7f9f59df", + "1fb75cb3c0ec4e32be76aa972e3b7456", + "b7aa105eb26342c3a7bf142272c6fa76", + "164f2d01e7524ac798d795c344cc572e", + "166f6fc3495249ed9dddf1dd32f88807", + "91fc17fd92c141e782fb385f849814c7", + "fadd939b718b45b6a3b167e0c215fe13", + "783b70e9b9254947b59f7cf2e991475b", + "8fdfc743bdbf45c3bc3d26a1f7531f70", + "eebce808d44c40f59c31b470d14088fd", + "4eaecb12a8f34f9da1645d277032b40b", + "fb4122dd81804f38be1ef5b16ace69ba", + "efd64c4258bb48bca9f56b284433b75d", + "c45284ad83874932a099c57fb64a670d", + "759e2cbc69b341418f602e2aa3c31376", + "dd228848c9024f20a868f991578eb496", + "3cf25d0e930e4c1ba58b403f43bf5538", + "e7330c40ed2449c497e17db4d8560810", + "be3f5ff3c19c461bb885841c91d707b3", + "22d65b2b825c4bb18570c23a9b03ca95", + "d8c20f2584d941039c91e9634c9a9296", + "19db93a1eb1c40feb326df84894240f7" + ] + }, + "id": "pEjO6IVs8gS0", + "outputId": "0f72dc96-6fa1-4c8e-be96-8e003a8d3d7b" + }, + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.11/dist-packages/huggingface_hub/utils/_auth.py:94: UserWarning: \n", + "The secret `HF_TOKEN` does not exist in your Colab secrets.\n", + "To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.\n", + "You will be able to reuse this secret in all of your notebooks.\n", + "Please note that authentication is recommended but still optional to access public models or datasets.\n", + " warnings.warn(\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "tokenizer_config.json: 0%| | 0.00/26.0 [00:00 즉, 각 타임스텝 𝑡마다 조건부 확률이 가장 높은 단어를 선택하는 것!\n", + "\n", + "\n", + "- 이 단순한 접근방식이 어떤 성능 차이를 보이는지 살펴봅시다." + ], + "metadata": { + "id": "zsX-xn93-tUP" + } + }, + { + "cell_type": "code", + "source": [ + "# context를 encoder해주세요\n", + "input_ids = tokenizer.encode(input_sequence, return_tensors=\"tf\")\n", + "\n", + "# 텍스트 생성하기, 이때 output length가 (context length 포함) 50이 될 때까지\n", + "greedy_output = GPT2.generate(input_ids, max_length=50)\n", + "\n", + "# output sequences 출력하기\n", + "print(\"Output:\\n\" + 100 * '-')\n", + "print(tokenizer.decode(greedy_output[0], skip_special_tokens = True))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ig-oWtIA8gIq", + "outputId": "b45f1fc0-f86e-4bcf-e479-20131ddb3413" + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Output:\n", + "----------------------------------------------------------------------------------------------------\n", + "I don't know about you, but there's only one thing I want to do after a long day of work: go to the gym.\n", + "\n", + "I'm not talking about the gym that's right next to my house. I'm talking about\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "💡**위 Greedy Search 식과 코드 결과를 보고 고려되는 주요 문제점을 해당 셀을 풀고 설명해주세요.**\n", + "\n", + "\n", + "---\n", + "\n", + "\n", + "- 1) 전역 최적화(global optimum) 보장 실패\n", + " - 매 스텝마다 가장 확률이 높은 토큰만 골라 뒤이어 올 토큰의 전체 조합을 고려하지 않음.\n", + "- 2) 반복(repetition) 및 지루한 텍스트\n", + " - “...I don’t know about you but there’s only one thing I want to do after a long day of work” 처럼 앞부분을 계속 반복하는 현상이 자주 발생.\n", + "- 3) 다양성(diversity) 부족\n", + " - 항상 동일한 경로만 선택하므로 창의적이거나 예측 불가능한 문장 생성 불가능.\n", + "- 4) 길이 편향(length bias)\n", + " - 짧고 높은 확률의 토큰으로 구성된 문장을 선호해 문장이 부자연스럽게 짧거나 어색하게 끊길 수 있음." + ], + "metadata": { + "id": "gVj1neC__f2N" + } + }, + { + "cell_type": "markdown", + "source": [ + "### **Beam Search + N-Gram Penalty**\n", + "- Beam Search는 기본적으로 Greedy Search와 유사하지만, 모델이 각 시점에서 여러 개(num_beams)의 후보 경로를 동시에 추적한다는 점이 다릅니다\n", + " > 즉, 모델이 여러 대안을 비교하면서 텍스트를 생성할 수 있다는 점!\n", + "\n", + "\n", + "- 또한, n-gram 반복을 방지하기 위한 패널티도 적용할 수 있습니다.예를 들어 `no_repeat_ngram_size = 2`로 설정하면\n", + "동일한 2-그램이 두 번 등장하지 않도록 제한됩니다.\n", + "\n", + "- 그리고 `num_return_sequences = 5` 로 설정하면\n", + "5개의 beam 결과를 모두 출력하여 비교해볼 수 있습니다." + ], + "metadata": { + "id": "3EC0shCGAAQq" + } + }, + { + "cell_type": "code", + "source": [ + "# Beam Search를 사용하려면,단순히 generate 함수의 몇몇 파라미터만 변경하면 됩니다.\n", + "# num_beans를 설정해서 beam search decoding을 실행해주세요\n", + "beam_outputs = GPT2.generate(\n", + " input_ids,\n", + " max_length=50,\n", + " num_beams=5,\n", + " num_return_sequences=5,\n", + " no_repeat_ngram_size=2,\n", + " early_stopping=True\n", + ")\n", + "\n", + "print('')\n", + "print(\"Output:\\n\" + 100 * '-')\n", + "\n", + "# output sequences 출력하기\n", + "for i, beam_output in enumerate(beam_outputs):\n", + " print(\"{}: {}\".format(i, tokenizer.decode(beam_output, skip_special_tokens=True)))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "l6OrEzA684Np", + "outputId": "c37a2e5c-b75b-43a9-923c-a0be9d97baa4" + }, + "execution_count": 8, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Output:\n", + "----------------------------------------------------------------------------------------------------\n", + "0: I don't know about you, but there's only one thing I want to do after a long day of work, and that's to sit down and watch a movie.\"\n", + "\n", + "\"I know, I know,\" you say. \"But I\n", + "1: I don't know about you, but there's only one thing I want to do after a long day of work, and that's to sit down and watch a movie.\"\n", + "\n", + "\"I know, I know,\" you say. \"I'm\n", + "2: I don't know about you, but there's only one thing I want to do after a long day of work, and that's to sit down and watch a movie.\"\n", + "\n", + "\"I know, I know,\" you say. \"But you\n", + "3: I don't know about you, but there's only one thing I want to do after a long day of work, and that's to sit down and watch a movie.\"\n", + "\n", + "\"I know, I know,\" you say, \"but I\n", + "4: I don't know about you, but there's only one thing I want to do after a long day of work, and that's to sit down and watch a movie.\"\n", + "\n", + "\"I know, I know,\" you say. \"I just\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "💡**아래 그래프는 Beam Search의 결과와 실제 인간의 말하기 방식 사이의 차이를 보여줍니다. 위 Beam Search 코드 결과와 아래 그래프를 보고 고려되는 주요 문제점을 해당 셀을 풀고 설명해주세요. (기재된 논문에서 힌트를 찾을 수 있습니다.)**\n", + "\n", + "\n", + "---\n", + "\n", + "\n", + "1. 높은 반복성\n", + "\n", + " - 인간은 같은 표현을 연속해 반복하기보다는 유사 의미의 다른 어휘나 구문을 사용해 표현을 풍성하게 하는 경향이 있다.반면 beam search는 높은 확률을 받은 구문을 계속 재생산해, “I don’t know about you, but there’s only one thing I want to do…” 같은 구절이 끝없이 순환될 수 있다.\n", + "\n", + "2. 저다양성, 저창의성\n", + " - 논문 실험 결과, beam search로 생성된 문장은 미리 정해진 ‘베스트’ 경로 하나만을 탐색해, 거의 동일한 패턴으로만 결과가 나온다. 이는 인간 발화의 다채로운 어휘 선택 및 예측 불가능한 전개와 대조적이며, “Generic”하고 “Bland”하다고 평가된다.\n", + "\n", + "3. 불균형 정보 밀도\n", + " - 인간은 중요한 정보나 감정을 전달할 때 단어 선택이나 문장 길이를 적절히 조절한다. 그러나 beam search는 평균 우도를 극대화하는 방향으로 모든 토큰을 평균화해, 정보가 과도하게 압축되거나 빈약한 톤의 문장이 생성된다.\n", + "\n", + "\n", + "4. 확률 분포 왜곡\n", + " - 자연 언어는 장기 의존성을 통해 다양한 확률 분포를 띠지만, beam search는 높은 우도 영역(nucleus)만을 파고들어 “확률 꼬리(unreliable tail)”를 과도하게 잘라낸다. 결과적으로, 문법적으로는 맞지만 의미적으로 어색한 구문들이 발생하며 흐름이 부자연스럽다.\n", + "\n", + "5. 출력 문장의 반복 및 변주 부족\n", + " - 반환된 다섯 개의 시퀀스는 대부분 동일한 시작 구문을 공유하며, 어휘나 구문의 변화량이 거의 없습니다.예를 들어, “...only one thing I want to do after a long day of work is to relax.” 와 “...only one thing I want to do after a long day of work is to unwind.” 정도의 미세한 차이만 존재해, 실질적 다양성이 매우 낮다 .\n", + "\n", + "6. 과도한 안전성 추구\n", + " - beam search는 가능한 오류를 최소화하려다 보니, 지나치게 무난한 문장만을 생성한다. 인간 대화에서는 가끔 비격식체, 유머, 방언, 심지어 비문도 자연스럽게 섞여 나오지만, beam search 결과는 지나치게 정형화된 문어체 톤에 머문다.\n", + "\n", + "7. 맥락 확장력 부족\n", + " - 초기 prompt에 충실하되 그 이후 전개가 단조로워, 대화나 서술이 깊어지지 않는다. 예시 출력을 보면 새로운 주제 전환이나 추가 정보 제시 없이 똑같은 패턴을 반복해, “대화”라기보다는 “문장 반복기”에 가깝다.\n", + "\n", + "8. 의미적 정교함 결여\n", + " - beam search가 선택한 단어들은 높은 우도 기반이므로 문법적 오류는 적지만, 의미적으로는 평면적이다. 인간 발화는 맥락에 따라 비유, 은유, 감정적 표현을 섞어 의미를 다층적으로 전달하지만, beam search는 이런 뉘앙스를 포착하지 못한다.\n", + "\n", + "9. 길이 편향\n", + " - max_length=50로 설정했음에도, beam search는 가능한 한 짧고 높은 확률 시퀀스를 선호해, 종종 예상보다 짧게 잘린 문장을 반환한다.이는 문장의 완전한 의미 전달을 방해하며, 인간 대화에서 볼 수 있는 가변적 길이 패턴을 반영하지 못한다." + ], + "metadata": { + "id": "_VhLZdJlBVZk" + } + }, + { + "cell_type": "markdown", + "source": [ + "![image.png](data:image/png;base64,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)\n", + "\n", + "[출처] The Curious Case of Neural Text Degeneration, arXiv:1904.09751 (cs)\n", + "https://arxiv.org/abs/1904.09751" + ], + "metadata": { + "id": "aOBGUk2aAwQ-" + } + }, + { + "cell_type": "markdown", + "source": [ + "### **Basic Sampling**\n", + "- 이 방식은 가장 확률이 높은 문장을 찾는 경로를 고집하지 않고, 각 시점에서 조건부 확률 분포에 따라 무작위로 다음 단어를 선택합니다.\n", + "\n", + "$w t​ ∼P(w∣w 1:t−1)$\n", + "- 하지만 이렇게 무작위성이 추가되면, 생성된 문장이 일관성이 떨어지고 혼란스러워질 수 있습니다.\n", + "- 그래서 무작위성을 제어하기 위해 temperature 파라미터를 도입할 수 있습니다. 이 파라미터는 확률이 높은 단어의 선택 가능성을 높이고, 확률이 낮은 단어는 선택될 가능성을 줄여줍니다." + ], + "metadata": { + "id": "BcDagIp1BvFA" + } + }, + { + "cell_type": "code", + "source": [ + "# 샘플링을 구현하려면 do_sample = True만 설정하면 됩니다.\n", + "# temperature을 설정해주세요.\n", + "# 이때 top_k = 0으로 설정해주세요.\n", + "sample_output = GPT2.generate(\n", + " input_ids,\n", + " max_length=50,\n", + " do_sample=True,\n", + " temperature=1.0,\n", + " top_k=0\n", + ")\n", + "# output sequences 출력하기\n", + "print(\"Output:\\n\" + 100 * '-')\n", + "print(tokenizer.decode(sample_output[0], skip_special_tokens = True))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "z6pXSH2RBuz8", + "outputId": "da343f1f-1568-45a1-a31d-4864a382ca72" + }, + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Output:\n", + "----------------------------------------------------------------------------------------------------\n", + "I don't know about you, but there's only one thing I want to do after a long day of work – play games. Believe it or not, it's not that difficult. Today I decided to take a break, hope that I was\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "💡**temperature 파라미터가 어떤 매커니즘으로 무작위성을 제어하는지 해당 셀을 풀고 설명해주세요.**\n", + "\n", + "\n", + "---\n", + "\n", + "- temperature는 언어 모델의 출력 분포(entropy)를 조절하는 하이퍼파라미터로, 모델이 다음 토큰을 선택할 때 탐험(exploration)과 착취(exploitation)의 균형을 맞추도록 도와준다.\n", + "\n", + "- 로짓 스케일링(Softmax 온도 조정)\n", + " - 모델이 계산한 각 토큰의 미확인 점수(logit)에 온도 계수 T 를 나누어 주면, 그 값을 소프트맥스에 넣어 확률 분포를 만들게 된다.\n", + " - T < 1일 때는 고득점 토큰과 저득점 토큰 사이의 차이가 커져, 확률이 높은 토큰에 더욱 집중한다.\n", + " - T > 1일 때는 점수 차이가 줄어들어, 원래 낮은 확률 토큰도 선택될 가능성이 올라간다.\n", + "- 엔트로피 제어\n", + " - 낮은 온도(0.5 이하): 분포의 엔트로피가 낮아져, 확률이 가장 높은 몇몇 토큰만 반복적으로 선택(착취)\n", + " - 높은 온도(1.5 이상): 분포의 엔트로피가 높아져, 다양한 토큰에 기회가 부여(탐험)\n", + "\n", + "- 탐험 vs. 착취(Exploration vs. Exploitation)\n", + " - 착취(Exploitation): 이미 학습된 “가장 안전한” 토큰을 반복 선택해, 일관성 있는 출력을 얻고 싶을 때\n", + " - 탐험(Exploration): 새로운 표현이나 창의적인 구문을 시도할 때, 분포를 평탄하게 만들어 낮은 확률 토큰도 뽑히도록 유도\n", + "\n", + "- 결론적으로, temperature를 낮추면 확실한 문장, 높이면 실험적인 문장이 나오게 된다." + ], + "metadata": { + "id": "8g2RrY7PFmjJ" + } + }, + { + "cell_type": "markdown", + "source": [ + "### **Top-k Sampling**\n", + "- Top-K 샘플링에서는 다음 단어 후보 중 확률이 가장 높은 상위 K개 단어만 선택하고,\n", + "전체 probability mass을 이 K개의 단어에만 분배합니다.\n", + "\n", + "> 즉, 확률이 높은 단어의 선택 확률을 높이고, 낮은 단어의 확률을 줄이는 방식이 아니라,아예 확률이 낮은 단어들을 완전히 제거하는 방식!" + ], + "metadata": { + "id": "RzmrRsA8CmYs" + } + }, + { + "cell_type": "code", + "source": [ + "# top_k 값을 설정해서, 조건부 확률 분포에서 고려할 상위 단어 개수(K)를 지정해주세요!\n", + "sample_output = GPT2.generate(\n", + " input_ids,\n", + " max_length=50,\n", + " do_sample=True,\n", + " top_k=50\n", + ")\n", + "\n", + "# output sequences 출력하기\n", + "print(\"Output:\\n\" + 100 * '-')\n", + "print(tokenizer.decode(sample_output[0], skip_special_tokens = True), '...')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WA-og6IeD1BZ", + "outputId": "b2c76411-bba3-47a5-c7ba-1792f975cf58" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Output:\n", + "----------------------------------------------------------------------------------------------------\n", + "I don't know about you, but there's only one thing I want to do after a long day of work - the one thing I get to do when I leave home. And when I step into the kitchen, I want to use that one ...\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### **Top-P Sampling(Nucleus Sampling)**\n", + "- Top-K 샘플링은 이전의 random sampling보다 더 일관된 텍스트를 생성하는 것으로 보입니다. 하지만 이보다 더나은 방법으로 Top-p sampling이 있습니다.\n", + "- Top-P 샘플링은 Top-K와 유사하지만,가장 확률이 높은 상위 K개 단어를 고르는 대신,누적 확률이 P 이상이 되는 최소한의 단어 집합을 선택합니다 그리고 전체 probability mass는 이 단어 집합에 재분배됩니다.\n" + ], + "metadata": { + "id": "2CgUegJOAw6h" + } + }, + { + "cell_type": "code", + "source": [ + "# top_p 파라미터를 통해 only from 80% most likely words 만 sample 해주세요.\n", + "sample_output = GPT2.generate(\n", + " input_ids,\n", + " max_length=50,\n", + " do_sample=True,\n", + " top_p=0.8\n", + ")\n", + "# output sequences 출력하기\n", + "print(\"Output:\\n\" + 100 * '-')\n", + "print(tokenizer.decode(sample_output[0], skip_special_tokens = True), '...')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GEhy8PgbAr2f", + "outputId": "8b726513-e823-44ec-9b91-1a92425c4789" + }, + "execution_count": 11, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Output:\n", + "----------------------------------------------------------------------------------------------------\n", + "I don't know about you, but there's only one thing I want to do after a long day of work: take a bath. I'd even go as far as to say that it's my most important pre-work ritual, even if ...\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### **Top-K + Top-P sampling**\n", + "- 둘을 동시에 사용하면, 확률이 매우 낮은 단어(이상한 단어)가 나올 가능성을 줄이면서도, 선택되는 단어 집합의 크기는 유동적으로 유지할 수 있습니다." + ], + "metadata": { + "id": "heGKePrAE46H" + } + }, + { + "cell_type": "code", + "source": [ + "# top_k와 top_p에 값을 지정하면 되고, temperature 파라미터도 함께 사용할 수 있습니다.\n", + "# 아래 코드를 완성해주세요.\n", + "# 이때 max_length= 2*MAX_LEN 으로 설정해주세요\n", + "sample_outputs = GPT2.generate(\n", + " input_ids,\n", + " max_length=2*MAX_LEN,\n", + " do_sample=True,\n", + " temperature=1.0,\n", + " top_k=50,\n", + " top_p=0.8,\n", + " num_return_sequences=5\n", + ")\n", + "# output sequences 출력하기\n", + "print(\"Output:\\n\" + 100 * '-')\n", + "for i, sample_output in enumerate(sample_outputs):\n", + " print(\"{}: {}...\".format(i, tokenizer.decode(sample_output, skip_special_tokens = True)))\n", + " print('')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Q8-CnW76E3FI", + "outputId": "667d2ed6-f13f-4c18-f82c-98aee6d09499" + }, + "execution_count": 12, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Output:\n", + "----------------------------------------------------------------------------------------------------\n", + "0: I don't know about you, but there's only one thing I want to do after a long day of work: relax.\"\n", + "\n", + "And with that, she turned away and walked back into her cubicle.\n", + "\n", + "This is the end of the first part of this blog. If you want to read the rest, you can click here.\n", + "\n", + "I hope you enjoyed reading it!\n", + "\n", + "Advertisements...\n", + "\n", + "1: I don't know about you, but there's only one thing I want to do after a long day of work.\"\n", + "\n", + "\"I can't go back to my parents.\"\n", + "\n", + "\"I'm sorry, but you need to go back to the place where you came from. It's not like you're a monster.\"\n", + "\n", + "\"And you're the monster, and I'm not a monster.\"\n", + "\n", + "\"That's what I'm here to tell you, but it's also what you need to hear.\"\n", + "\n", + "\"I don't need a monster's warning.\"\n", + "\n", + "\"You need to hear it. What you need to do is leave the house. You need to leave...\n", + "\n", + "2: I don't know about you, but there's only one thing I want to do after a long day of work: sleep. I've been doing the same thing all day long, just waiting for it to end.\n", + "\n", + "So this morning, I did something different. I got up and looked around. I realized I was still in the same room, but instead of going to sleep, I looked around to see if I could get a different perspective.\n", + "\n", + "I was still in the same room, but I could see things that I hadn't seen before.\n", + "\n", + "I looked at the clock, and it was 5:30am. I was already a little bit tired, so I...\n", + "\n", + "3: I don't know about you, but there's only one thing I want to do after a long day of work.\"\n", + "\n", + "I felt a pang of guilt. \"I know what you want to do.\"\n", + "\n", + "\"It's just that I've never done it before. So I'm curious. What do you think of it?\"\n", + "\n", + "\"I really want to do it,\" I said, still a bit confused. \"But it seems too easy. I don't want to go out into the real world. I just want to hang out with you, and we can make things up as we go.\"\n", + "\n", + "\"I'll see what I can do.\"\n", + "\n", + "It was...\n", + "\n", + "4: I don't know about you, but there's only one thing I want to do after a long day of work, and that's to go outside and enjoy the scenery.\"\n", + "\n", + "\n", + "The most famous photo of a bear in a bear hug, shot by John Wayne in his movie, \"The Birth of a Nation,\" has been shared more than 4 million times on Facebook and has even been the subject of a new book.\n", + "\n", + "\n", + "While there are plenty of other photographs that bear hug, this photo, taken by wildlife photographer Jim Tressel in South Dakota, is considered by some to be the most iconic bear hug ever taken.\n", + "\n", + "\n", + "While it's not a close runner-up, there...\n", + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "💡**Top-k와 Top-p의 방식의 차이에 대해 설명해주세요**\n", + "\n", + "\n", + "---\n", + "- Top-k 샘플링\n", + " - 매 스텝마다 확률 순위 k위까지의 토큰들만 후보로 남긴다.\n", + " - 예를 들어 k=50 이면, 모델이 예측한 토큰들 중 확률이 높은 상위 50개만 골라내고, 나머지는 제거한 뒤 이 50개에서 샘플링한다.\n", + " - 고정된 개수의 후보만 고려한다.\n", + "- Top-p 샘플링\n", + " - 매 스텝마다 토큰을 확률 순으로 정렬한 뒤, 누적 확률이 p이상이 될 때까지 토큰을 포함한다.\n", + " - “가장 높은 확률 토큰부터 차례로 더해가서 총합이 90%가 될 때까지” 집합을 만들고, 그 안에서만 샘플링하는 방식이다.\n", + " - 동적으로 크기가 변하는 후보 집합이다.\n", + " - 매 스텝마다 확률 질량(coverage)을 기준으로 후보 크기를 조절해, 분포 특성에 유연하게 대응할 수 있다.\n", + " - 일반적으로 더 자연스럽고 안정적인 다양성을 제공한다고 평가되는 방식이다." + ], + "metadata": { + "id": "s_TeJ5zXF6Ra" + } + } + ] +} \ No newline at end of file diff --git "a/Week12_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\241\341\206\274\341\204\206\341\205\265\341\206\253\341\204\214\341\205\265.ipynb" "b/Week12_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\241\341\206\274\341\204\206\341\205\265\341\206\253\341\204\214\341\205\265.ipynb" new file mode 100644 index 0000000..e3a6cb6 --- /dev/null +++ "b/Week12_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\241\341\206\274\341\204\206\341\205\265\341\206\253\341\204\214\341\205\265.ipynb" @@ -0,0 +1,7569 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "gpuType": "T4" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU", + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "d88ee8862d1f4d07a719a84b1d3d85af": { + "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_99e0b7dd61824015a4aedc0ba20480e8", + "IPY_MODEL_07ced432d5e64e8ab9a7be8dccfc7416", + "IPY_MODEL_b4dcdf26bebf44b5ad949deb096de593" + ], + "layout": "IPY_MODEL_04e289bf791c4683ba529f268478523c" + } + }, + "99e0b7dd61824015a4aedc0ba20480e8": { + "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_d8f592c7966246ad8e846cb775864fcf", + "placeholder": "​", + "style": "IPY_MODEL_dd8e0a49e2d845ff837f19c1c1392559", + "value": "README.md: 100%" + } + }, + "07ced432d5e64e8ab9a7be8dccfc7416": { + "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_e2af8840c5d548c69a0805fe124b9f29", + "max": 35296, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_4dd6d600923b4687aab3ce5a071d6a70", + "value": 35296 + } + }, + "b4dcdf26bebf44b5ad949deb096de593": { + "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_2a1136c9f8ec403daf8a971631cfc862", + "placeholder": "​", + "style": "IPY_MODEL_afde7e3ea8c040839bfc7e45d335cc91", + "value": " 35.3k/35.3k [00:00<00:00, 3.69MB/s]" + } + }, + "04e289bf791c4683ba529f268478523c": { + "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 + } + }, + "d8f592c7966246ad8e846cb775864fcf": { + "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 + } + }, + "dd8e0a49e2d845ff837f19c1c1392559": { + "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": "" + } + }, + "e2af8840c5d548c69a0805fe124b9f29": { + "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 + } + }, + "4dd6d600923b4687aab3ce5a071d6a70": { + "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": "" + } + }, + "2a1136c9f8ec403daf8a971631cfc862": { + "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 + } + }, + "afde7e3ea8c040839bfc7e45d335cc91": { + "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": "" + } + }, + "33e27bedf0bf4b63bd487b2e06c5b619": { + "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_506fd2886e334605adf2927aeb77e4b8", + "IPY_MODEL_103db0cf377d4d02abf8971d9222ce7b", + "IPY_MODEL_74c53392170643079ff073457cb90c2c" + ], + "layout": "IPY_MODEL_13617b137397489fad898b5db09e7ec4" + } + }, + "506fd2886e334605adf2927aeb77e4b8": { + "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_275dbd6476b94a2c9937bef089356ada", + "placeholder": "​", + "style": "IPY_MODEL_20934e5ab45e4b118742fd51cacaa878", + "value": "train-00000-of-00001.parquet: 100%" + } + }, + "103db0cf377d4d02abf8971d9222ce7b": { + "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_1840b0a8dfdb480d8dc14db00cc51d4d", + "max": 251124, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_e491772cafed406d89aeeb6a29f94997", + "value": 251124 + } + }, + "74c53392170643079ff073457cb90c2c": { + "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_2fa223726b1344678558fa206a4888a9", + "placeholder": "​", + "style": "IPY_MODEL_f71e99cd8ce140598c09d7ac16aee1e7", + "value": " 251k/251k [00:00<00:00, 3.80MB/s]" + } + }, + "13617b137397489fad898b5db09e7ec4": { + "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 + } + }, + "275dbd6476b94a2c9937bef089356ada": { + "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 + } + }, + "20934e5ab45e4b118742fd51cacaa878": { + "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": "" + } + }, + "1840b0a8dfdb480d8dc14db00cc51d4d": { + "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 + } + }, + "e491772cafed406d89aeeb6a29f94997": { + "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": "" + } + }, + "2fa223726b1344678558fa206a4888a9": { + "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 + } + }, + "f71e99cd8ce140598c09d7ac16aee1e7": { + "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": "" + } + }, + "b1234462c3e243df960d5a110edea5a1": { + "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_10b6f3f88edc46ec94ec3e68d9fd5d55", + "IPY_MODEL_f3e85e4988c2470396834c205cba2681", + "IPY_MODEL_295fdfafaacc439b9f185e1159cbbbdc" + ], + "layout": "IPY_MODEL_16d7868a5a0440a19d1a0482396b521a" + } + }, + "10b6f3f88edc46ec94ec3e68d9fd5d55": { + "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_1cda92878ad44658b9a4a062c50c60fa", + "placeholder": "​", + "style": "IPY_MODEL_5848352850c940d5ba485102ffe34c38", + "value": "validation-00000-of-00001.parquet: 100%" + } + }, + "f3e85e4988c2470396834c205cba2681": { + "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_66417feea5ee426fb095f46e75ed243d", + "max": 37551, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_66e8944ac4a54c04b1d55cc968fb6e3c", + "value": 37551 + } + }, + "295fdfafaacc439b9f185e1159cbbbdc": { + "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_2075ccfbdca84ccaaf371e58987ec915", + "placeholder": "​", + "style": "IPY_MODEL_1ca5aa72fb4e40ffbaf1cdeb13889c4f", + "value": " 37.6k/37.6k [00:00<00:00, 648kB/s]" + } + }, + "16d7868a5a0440a19d1a0482396b521a": { + "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 + } + }, + "1cda92878ad44658b9a4a062c50c60fa": { + "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 + } + }, + "5848352850c940d5ba485102ffe34c38": { + "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": "" + } + }, + "66417feea5ee426fb095f46e75ed243d": { + "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 + } + }, + "66e8944ac4a54c04b1d55cc968fb6e3c": { + "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": "" + } + }, + "2075ccfbdca84ccaaf371e58987ec915": { + "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 + } + }, + "1ca5aa72fb4e40ffbaf1cdeb13889c4f": { + "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": "" + } + }, + "de1cbfc913694d9bafcc2d6109fd0588": { + "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_54b008697a434db28de50ac9f6e9ef81", + "IPY_MODEL_11895b9f58114a7c88f9a9344e4011cb", + "IPY_MODEL_8aa56209ce88401db36fd06f91a13fba" + ], + "layout": "IPY_MODEL_1c77df7c265b4cb2a889f019eb9bd304" + } + }, + "54b008697a434db28de50ac9f6e9ef81": { + "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_5807a43755ea452588490b2efcf3aba0", + "placeholder": "​", + "style": "IPY_MODEL_cbedc80a355f45369eb4255ff3fc9fc2", + "value": "test-00000-of-00001.parquet: 100%" + } + }, + "11895b9f58114a7c88f9a9344e4011cb": { + "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_beea1aa27cc5456c9a1b77346fc1baae", + "max": 37719, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_0e15461cadd6483aa29fb19a61588da8", + "value": 37719 + } + }, + "8aa56209ce88401db36fd06f91a13fba": { + "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_3b7f74d4d3b14ceb96c72dec567e2205", + "placeholder": "​", + "style": "IPY_MODEL_7475f43bb90c4a56829fbbecacc76f3a", + "value": " 37.7k/37.7k [00:00<00:00, 729kB/s]" + } + }, + "1c77df7c265b4cb2a889f019eb9bd304": { + "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 + } + }, + "5807a43755ea452588490b2efcf3aba0": { + "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 + } + }, + "cbedc80a355f45369eb4255ff3fc9fc2": { + "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": "" + } + }, + "beea1aa27cc5456c9a1b77346fc1baae": { + "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 + } + }, + "0e15461cadd6483aa29fb19a61588da8": { + "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": "" + } + }, + "3b7f74d4d3b14ceb96c72dec567e2205": { + "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 + } + }, + "7475f43bb90c4a56829fbbecacc76f3a": { + "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": "" + } + }, + "276d4c9b76ea4fe4be256bef900f9df0": { + "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_64b8088a857a4f1b85db3f855aa1e88f", + "IPY_MODEL_1252572559e748328975682a61045aae", + "IPY_MODEL_77296763efa3415e9b7713c5afcc6c8e" + ], + "layout": "IPY_MODEL_cd40105a274749daa3258bc4c24cf237" + } + }, + "64b8088a857a4f1b85db3f855aa1e88f": { + "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_0032ed4e2d1d4e858d7d4ea57469b66d", + "placeholder": "​", + "style": "IPY_MODEL_ffb9f3bf9e434c91b9a9d35de1b6da20", + "value": "Generating train split: 100%" + } + }, + "1252572559e748328975682a61045aae": { + "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_10aa6c9129f240378e1d5b2a03e7e6e7", + "max": 8551, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_c886be63b4e04536a4e07b7b0c27f3ef", + "value": 8551 + } + }, + "77296763efa3415e9b7713c5afcc6c8e": { + "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_537887cae9b14292af608527015e56ff", + "placeholder": "​", + "style": "IPY_MODEL_c919b3cac15142cb8010a0f229a09296", + "value": " 8551/8551 [00:00<00:00, 93205.54 examples/s]" + } + }, + "cd40105a274749daa3258bc4c24cf237": { + "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 + } + }, + "0032ed4e2d1d4e858d7d4ea57469b66d": { + "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 + } + }, + "ffb9f3bf9e434c91b9a9d35de1b6da20": { + "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": "" + } + }, + "10aa6c9129f240378e1d5b2a03e7e6e7": { + "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 + } + }, + "c886be63b4e04536a4e07b7b0c27f3ef": { + "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": "" + } + }, + "537887cae9b14292af608527015e56ff": { + "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 + } + }, + "c919b3cac15142cb8010a0f229a09296": { + "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": "" + } + }, + "652057cc92944cd48250b743e7f59b44": { + "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_4c867703811f4ebbb679088b3764c79e", + "IPY_MODEL_e692eb2bc69f406183269242622516e6", + "IPY_MODEL_4d1afaca7c634428a80aae90fdbbaf65" + ], + "layout": "IPY_MODEL_12cd5fb41df4405db40e428662d9c44c" + } + }, + "4c867703811f4ebbb679088b3764c79e": { + "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_f388da0e70954e388e8650f10585fe27", + "placeholder": "​", + "style": "IPY_MODEL_aaab06fe7bfa4c15be911835f301d887", + "value": "Generating validation split: 100%" + } + }, + "e692eb2bc69f406183269242622516e6": { + "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_6773f32495bf45ed995220270b50855a", + "max": 1043, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_ccbd8fde24204ebba7732528b02c13b8", + "value": 1043 + } + }, + "4d1afaca7c634428a80aae90fdbbaf65": { + "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_a5d129aa72b3449eb1a3adb5ec0a8b8b", + "placeholder": "​", + "style": "IPY_MODEL_8eca248f4c784854abc5c26716e295cc", + "value": " 1043/1043 [00:00<00:00, 23036.16 examples/s]" + } + }, + "12cd5fb41df4405db40e428662d9c44c": { + "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 + } + }, + "f388da0e70954e388e8650f10585fe27": { + "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 + } + }, + "aaab06fe7bfa4c15be911835f301d887": { + "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": "" + } + }, + "6773f32495bf45ed995220270b50855a": { + "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 + } + }, + "ccbd8fde24204ebba7732528b02c13b8": { + "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": "" + } + }, + "a5d129aa72b3449eb1a3adb5ec0a8b8b": { + "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 + } + }, + "8eca248f4c784854abc5c26716e295cc": { + "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": "" + } + }, + "a1bdf0dc27734df1888963a198f6931e": { + "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_4c1866c3af5648459f8a0f4e72d10499", + "IPY_MODEL_b4aec9a8ebad42aa934136b834e64349", + "IPY_MODEL_6d734910e2794e20bba6f04aa7289850" + ], + "layout": "IPY_MODEL_29d55652cecd4e4ebbe9eb8174bbd534" + } + }, + "4c1866c3af5648459f8a0f4e72d10499": { + "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_97bda4d6a35d4ca2bd1540c77e7ab9dd", + "placeholder": "​", + "style": "IPY_MODEL_7e4738f40ce4495cbba3eee1753efd9e", + "value": "Generating test split: 100%" + } + }, + "b4aec9a8ebad42aa934136b834e64349": { + "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_ebbe43b779384ba4a1f95ef80bdb6a1d", + "max": 1063, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_c2a090804acb454fba2d79551a8837d8", + "value": 1063 + } + }, + "6d734910e2794e20bba6f04aa7289850": { + "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_d894c67236814fc48906903359ac84a6", + "placeholder": "​", + "style": "IPY_MODEL_1a2da00b258e4c969c83152dda1b6a8e", + "value": " 1063/1063 [00:00<00:00, 35423.51 examples/s]" + } + }, + "29d55652cecd4e4ebbe9eb8174bbd534": { + "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 + } + }, + "97bda4d6a35d4ca2bd1540c77e7ab9dd": { + "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 + } + }, + "7e4738f40ce4495cbba3eee1753efd9e": { + "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": "" + } + }, + "ebbe43b779384ba4a1f95ef80bdb6a1d": { + "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 + } + }, + "c2a090804acb454fba2d79551a8837d8": { + "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": "" + } + }, + "d894c67236814fc48906903359ac84a6": { + "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 + } + }, + "1a2da00b258e4c969c83152dda1b6a8e": { + "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": "" + } + }, + "8633b7211f154941b7fff54308b7ac22": { + "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_1c0d30d3a0f74874b46e5c886de739e5", + "IPY_MODEL_7fbf2261a0074fc6991055e25cde37c8", + "IPY_MODEL_4f0fc8e02fc44d11b304dd0f281d4da4" + ], + "layout": "IPY_MODEL_2526806781b34d60a9950d69d8f9dbf9" + } + }, + "1c0d30d3a0f74874b46e5c886de739e5": { + "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_1ed70cb527d84dc0a26aca662e8ab218", + "placeholder": "​", + "style": "IPY_MODEL_2c981291b502409f8de78ecde0a54445", + "value": "model.safetensors: 100%" + } + }, + "7fbf2261a0074fc6991055e25cde37c8": { + "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_d9850f7aed04454595c9561a6d3cb4ab", + "max": 548105171, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_bbfed6a0b5d84265843e57a687efe3d1", + "value": 548105171 + } + }, + "4f0fc8e02fc44d11b304dd0f281d4da4": { + "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_56a2e49734934a10bb71b879ac2ea89f", + "placeholder": "​", + "style": "IPY_MODEL_0fcf4d7b870e4af5ad6086939f64d48b", + "value": " 548M/548M [00:06<00:00, 85.6MB/s]" + } + }, + "2526806781b34d60a9950d69d8f9dbf9": { + "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 + } + }, + "1ed70cb527d84dc0a26aca662e8ab218": { + "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 + } + }, + "2c981291b502409f8de78ecde0a54445": { + "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": "" + } + }, + "d9850f7aed04454595c9561a6d3cb4ab": { + "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 + } + }, + "bbfed6a0b5d84265843e57a687efe3d1": { + "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": "" + } + }, + "56a2e49734934a10bb71b879ac2ea89f": { + "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 + } + }, + "0fcf4d7b870e4af5ad6086939f64d48b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + } + } + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 7. 트랜스포머" + ], + "metadata": { + "id": "Is3ZSHT9Xoyu" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 트랜스포머 개념\n" + ], + "metadata": { + "id": "90f0OwPcXr96" + } + }, + { + "cell_type": "markdown", + "source": [ + "### 위치 인코딩" + ], + "metadata": { + "id": "xs7o6dnOXxtF" + } + }, + { + "cell_type": "code", + "source": [ + "import math\n", + "import torch\n", + "from torch import nn\n", + "from matplotlib import pyplot as plt\n", + "\n", + "class PositionalEncoding(nn.Module):\n", + " def __init__(self,d_model, max_len, dropout=0.1):\n", + " super().__init__()\n", + " self.dropout = nn.Dropout(p=dropout)\n", + "\n", + " position = torch.arange(max_len).unsqueeze(1)\n", + " div_term = torch.exp(\n", + " torch.arange(0, d_model, 2) * (-math.log(10000.0) / d_model)\n", + " )\n", + "\n", + " pe = torch.zeros(max_len, 1, d_model)\n", + " pe[:, 0, 0::2] = torch.sin(position * div_term)\n", + " pe[:, 0, 1::2] = torch.cos(position * div_term)\n", + " self.register_buffer(\"pe\", pe)\n", + "\n", + " def forward(self, x):\n", + " x = x + self.pe[: x.size(0)]\n", + " return self.dropout(x)\n", + "\n", + "encoding = PositionalEncoding(d_model=128, max_len=50)\n", + "\n", + "plt.pcolormesh(encoding.pe.numpy().squeeze(), cmap='RdBu')\n", + "plt.xlabel('Embedding Dimension')\n", + "plt.xlim((0, 128))\n", + "plt.ylabel('Position')\n", + "plt.colorbar()\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 455 + }, + "id": "7O6WAsx_ZZfc", + "outputId": "3231f7ec-e518-4004-a984-58e7d6a03dfb" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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j4+v0ufdvn17rF27FgcPHgQA/PHHH/j111/Ro0cPANX3vNXKco7JyckIDg5G27ZtxTaJiYkwGo3YunXrDR/z9ZKdnQ2DwYDg4GAAnnPeJFX6yrnOOHv2LGw221XVdSMjI3HgwAE3jer6stvtGD58ODp06ICbb74ZAJCWlgaz2Sz+gV8WGRmJtLQ0N4yy4ixduhQ7d+7E9u3br3qvup7333//jblz52LkyJH473//i+3bt+PZZ5+F2WzGgAEDxLk5+rmvyuf90ksvIScnB40bN4bJZILNZsNrr72Gfv36AUC1PW+1spxjWloaIiIiNO97eXkhNDS02nwOBQUFGD16NB555BGxyKInnDdpVcuJiycaNmwY9u7di19//dXdQ7nuUlNT8dxzz2H16tUetbqq3W5H27ZtMWXKFABA69atsXfvXsybNw8DBgxw8+iun88//xyLFy/GkiVL0KxZM+zevRvDhw9HTExMtT5v0iouLsZDDz0ERVEwd+5cdw+H3Kha3ioKDw+HyWS6KoskPT0dUVFRbhrV9ZOUlITvvvsO69evR61atUR7VFQUioqKkJWVpdm+qn8OO3bsQEZGBm655RZ4eXnBy8sLGzduxOzZs+Hl5YXIyMhqed7R0dFo2rSppq1JkyY4fvw4AIhzq24/96NGjcJLL72Ehx9+GM2bN8djjz2GESNGYOrUqQCq73mrleUco6Kirko+KCkpQWZmZpX/HC5PWv755x+sXr1aXG0Bqvd5k2PVcuJiNpvRpk0brF27VrTZ7XasXbsWCQkJbhxZxVIUBUlJSfj666+xbt061K1bV/N+mzZt4O3trfkcUlJScPz48Sr9OXTp0gV79uzB7t27xatt27bo16+fiKvjeXfo0OGqdPeDBw+iTp06AIC6desiKipKc945OTnYunVrlT7vixcvwmjU/qoymUyw2+0Aqu95q5XlHBMSEpCVlYUdO3aIbdatWwe73Y74+PgbPuaKcnnScujQIaxZswZhYWGa96vreVMp3P108PWydOlSxWKxKAsXLlT27dunDBkyRAkODlbS0tLcPbQK89RTTylBQUHKhg0blNOnT4vXxYsXxTZDhw5VYmNjlXXr1im///67kpCQoCQkJLhx1NeHOqtIUarneW/btk3x8vJSXnvtNeXQoUPK4sWLFV9fX+XTTz8V27z++utKcHCw8s033yh//vmn0qtXL6Vu3bpKfn6+G0fumgEDBig1a9ZUvvvuO+Xo0aPKV199pYSHhysvvvii2KY6nPeFCxeUXbt2Kbt27VIAKDNmzFB27dolsmfKco7du3dXWrdurWzdulX59ddflYYNGyqPPPKIu06pTEo776KiIuX+++9XatWqpezevVvze66wsFD0URXPm5xXbScuiqIo77zzjhIbG6uYzWalXbt2ypYtW9w9pAoFwOFrwYIFYpv8/Hzl6aefVkJCQhRfX1/l//7v/5TTp0+7b9DXyZUTl+p63itXrlRuvvlmxWKxKI0bN1Y++OADzft2u10ZO3asEhkZqVgsFqVLly5KSkqKm0ZbMXJycpTnnntOiY2NVaxWq1KvXj3l5Zdf1vyPqzqc9/r16x3+ex4wYICiKGU7x3PnzimPPPKI4u/vrwQGBioDBw5ULly44IazKbvSzvvo0aO6v+fWr18v+qiK503OMyiKqvwkERERUSVWLZ9xISIiouqJExciIiKqMjhxISIioiqDExciIiKqMjhxISIioiqDExciIiKqMjhxISIioiqDExeiUkyYMAGtWrWq8H6PHTsGg8GA3bt3626zYcMGGAwGsebSwoULr1rx2t06deqE4cOHu3sY12QwGLBixQp3D4OIKgAnLlQtPP744zAYDFe9unfv7u6hVZi+ffvi4MGD1/04CxcuFJ+fyWRCSEgI4uPjMWnSJGRnZ2u2/eqrrzB58uTrPiZXnT59Gj169HD3MIioAni5ewBEFaV79+5YsGCBps1isbhpNBXPx8cHPj4+N+RYgYGBSElJgaIoyMrKwubNmzF16lQsWLAAv/32G2JiYgAAoaGhN2Q8ruIqwUTVB6+4ULVhsVgQFRWleYWEhIj3DQYD3n//fdx7773w9fVFkyZNkJycjMOHD6NTp07w8/ND+/btceTIkav6fv/991G7dm34+vrioYceuurKw0cffYQmTZrAarWicePGeO+99zTvb9u2Da1bt4bVakXbtm2xa9euq47xww8/4KabboKPjw/uuusuHDt2TPP+lbeKLt/G+t///oe4uDgEBQXh4YcfxoULF8Q2Fy5cQL9+/eDn54fo6GjMnDmzTLd3DAYDoqKiEB0djSZNmmDQoEHYvHkzcnNz8eKLL4rtruwrLi4Or776Kvr37w9/f3/UqVMH3377Lc6cOYNevXrB398fLVq0wO+//6453q+//orbb78dPj4+qF27Np599lnk5eVp+p0yZQqeeOIJBAQEIDY2Fh988IF4v6ioCElJSYiOjobVakWdOnUwdepUzfmobxXt2bMHnTt3ho+PD8LCwjBkyBDk5uaK9x9//HH07t0b06dPR3R0NMLCwjBs2DAUFxeX+rkR0fXHiQt5lMmTJ6N///7YvXs3GjdujH//+9/4z3/+gzFjxuD333+HoihISkrS7HP48GF8/vnnWLlyJVatWoVdu3bh6aefFu8vXrwY48aNw2uvvYb9+/djypQpGDt2LD755BMAQG5uLu699140bdoUO3bswIQJE/DCCy9ojpGamooHHngA9913H3bv3o0nn3wSL7300jXP58iRI1ixYgW+++47fPfdd9i4cSNef/118f7IkSPx22+/4dtvv8Xq1avxyy+/YOfOnU59dhEREejXrx++/fZb2Gw23e1mzpyJDh06YNeuXejZsycee+wx9O/fH48++ih27tyJ+vXro3///ri8TNqRI0fQvXt39OnTB3/++SeWLVuGX3/99arvw1tvvSUmfU8//TSeeuoppKSkAABmz56Nb7/9Fp9//jlSUlKwePFixMXFORxfXl4eunXrhpCQEGzfvh3Lly/HmjVrrjre+vXrceTIEaxfvx6ffPIJFi5ciIULFzr12RFRBXLrEo9EFWTAgAGKyWRS/Pz8NK/XXntNbANAeeWVV8TXycnJCgDl448/Fm2fffaZYrVaxdfjx49XTCaTcuLECdH2448/KkajUaw2Xb9+fWXJkiWa8UyePFlJSEhQFEVR3n//fSUsLEzJz88X78+dO1cBoOzatUtRFEUZM2aM0rRpU00fo0ePVgAo58+fVxRFURYsWKAEBQVpxubr66vk5OSItlGjRinx8fGKolxaVdnb21tZvny5eD8rK0vx9fXVrKR9pSuPo3Z53Onp6YqiXL0qd506dZRHH31UfH369GkFgDJ27FjRdvlzv/z5DRo0SBkyZIjmOL/88otiNBrFZ3Zlv3a7XYmIiFDmzp2rKIqiPPPMM0rnzp0Vu93ucNwAlK+//lpRFEX54IMPlJCQECU3N1e8//333ytGo1FJS0tTFOXSz1OdOnWUkpISsc2DDz6o9O3b12H/RHTj8BkXqjbuuusuzJ07V9N25TMYLVq0EHFkZCQAoHnz5pq2goIC5OTkIDAwEAAQGxuLmjVrim0SEhJgt9uRkpKCgIAAHDlyBIMGDcLgwYPFNiUlJQgKCgIA7N+/Hy1atIDVatX0obZ//37Ex8dr2q7cxpG4uDgEBASIr6Ojo5GRkQEA+Pvvv1FcXIx27dqJ94OCgtCoUaNr9qtH+f9XSQwGg+42ZfmMASAjIwNRUVH4448/8Oeff2Lx4sWa49jtdhw9ehRNmjS5qt/Lt7Iun+vjjz+Ou+++G40aNUL37t1x7733omvXrg7Ht3//frRs2RJ+fn6irUOHDuJ7enl8zZo1g8lkEttER0djz549pX08RHQDcOJC1Yafnx8aNGhQ6jbe3t4ivvw/X0dtdru9TMe8/FzEhx9+eNXEQ/0/vetFPXbg0vjLOnZn7N+/H4GBgQgLCyvTmMryGefm5uI///kPnn322av6io2Nddjv5X4u93HLLbfg6NGj+PHHH7FmzRo89NBDSExMxBdffFHeUyzT8YjIffiMC9E1HD9+HKdOnRJfb9myBUajEY0aNUJkZCRiYmLw999/o0GDBppX3bp1AQBNmjTBn3/+iYKCAk0fak2aNMG2bds0bVduU1716tWDt7c3tm/fLtqys7OdTqnOyMjAkiVL0Lt3bxiNFfer45ZbbsG+ffuu+vwaNGgAs9lc5n4CAwPRt29ffPjhh1i2bBm+/PJLZGZmXrVdkyZN8Mcff2ge/v3tt9/E95SIKjdOXKjaKCwsRFpamuZ19uxZl/u1Wq0YMGAA/vjjD/zyyy949tln8dBDD4kU24kTJ2Lq1KmYPXs2Dh48iD179mDBggWYMWMGAODf//43DAYDBg8ejH379uGHH37A9OnTNccYOnQoDh06hFGjRiElJQVLlixx+UHQgIAADBgwAKNGjcL69evx119/YdCgQTAajaXe6gEu3apJS0vD6dOnsX//fsyfPx/t27dHUFCQ5uHfijB69Ghs3rwZSUlJ2L17Nw4dOoRvvvnmqodlSzNjxgx89tlnOHDgAA4ePIjly5cjKirKYcG+fv36ie/p3r17sX79ejzzzDN47LHHxG0iIqq8OHGhamPVqlWIjo7WvDp27Ohyvw0aNMADDzyAe+65B127dkWLFi006c5PPvkkPvroIyxYsADNmzfHnXfeiYULF4orLv7+/li5ciX27NmD1q1b4+WXX8a0adM0x4iNjcWXX36JFStWoGXLlpg3bx6mTJni8thnzJiBhIQE3HvvvUhMTESHDh1E2nZpcnJyEB0djZo1ayIhIQHvv/8+BgwYgF27diE6Otrlcam1aNECGzduxMGDB3H77bejdevWGDdunKgVUxYBAQF444030LZtW9x66604duwYfvjhB4dXhnx9ffHTTz8hMzMTt956K/71r3+hS5cuePfddyvytIjoOjEol5+2I6JqLy8vDzVr1sRbb72FQYMGuXs4RETlxodziaqxXbt24cCBA2jXrh2ys7MxadIkAECvXr3cPDIiIudw4kJUzU2fPh0pKSkwm81o06YNfvnlF4SHh7t7WERETuGtIiIiIqoy+HAuERERVRmcuBAREVGVwYkLERERVRmcuBAREVGVwYkLERERVRmcuBAREVGVwYkLERERVRmcuBAREVGVwYkLERERVRn/DzwRT2M08ggtAAAAAElFTkSuQmCC\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## 모델 실습\n", + "- 파이토치에서 제공하는 트랜스포머 모델을 활용해 영어-독일어 번역 모델 구성\n", + "- 데이터세트: 자연어 처리를 위한 대규모 다국어 데이터세트 중 하나인 Multi30k\n", + " - 영어-독일어 병렬 말뭉치(2개 국어 이상의 번역된 문서를 모은 말뭉치)\n", + " - 약 30000개의 데이터 제공\n", + " - 토치 데이터(torchdata), 토치 텍스트(torchtext) 라이브러리로 쉽게 다운로드" + ], + "metadata": { + "id": "B15RpwbmyrMf" + } + }, + { + "cell_type": "markdown", + "source": [ + "### 토치 데이터, 토치 텍스트 라이브러리 설치" + ], + "metadata": { + "id": "9odCXSQ1zdhw" + } + }, + { + "cell_type": "code", + "source": [ + "!pip install spacy\n", + "\n", + "!python -m spacy download de_core_news_sm\n", + "!python -m spacy download en_core_web_sm" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Ra-Ej_bsAaoq", + "outputId": "1a6d82cc-39d0-46b0-f3b4-359a7c49ae26" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: spacy in /usr/local/lib/python3.11/dist-packages (3.8.5)\n", + "Requirement already satisfied: spacy-legacy<3.1.0,>=3.0.11 in /usr/local/lib/python3.11/dist-packages (from spacy) (3.0.12)\n", + "Requirement already satisfied: spacy-loggers<2.0.0,>=1.0.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (1.0.5)\n", + "Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (1.0.12)\n", + "Requirement already satisfied: cymem<2.1.0,>=2.0.2 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.0.11)\n", + "Requirement already satisfied: preshed<3.1.0,>=3.0.2 in /usr/local/lib/python3.11/dist-packages (from spacy) (3.0.9)\n", + "Requirement already satisfied: thinc<8.4.0,>=8.3.4 in /usr/local/lib/python3.11/dist-packages (from spacy) (8.3.6)\n", + "Requirement already satisfied: wasabi<1.2.0,>=0.9.1 in /usr/local/lib/python3.11/dist-packages (from spacy) (1.1.3)\n", + "Requirement already satisfied: srsly<3.0.0,>=2.4.3 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.5.1)\n", + "Requirement already satisfied: catalogue<2.1.0,>=2.0.6 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.0.10)\n", + "Requirement already satisfied: weasel<0.5.0,>=0.1.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (0.4.1)\n", + "Requirement already satisfied: typer<1.0.0,>=0.3.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (0.15.3)\n", + "Requirement already satisfied: tqdm<5.0.0,>=4.38.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (4.67.1)\n", + "Requirement already satisfied: numpy>=1.19.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.0.2)\n", + "Requirement already satisfied: requests<3.0.0,>=2.13.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.32.3)\n", + "Requirement already satisfied: pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.11.4)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from spacy) (3.1.6)\n", + "Requirement already satisfied: setuptools in /usr/local/lib/python3.11/dist-packages (from spacy) (75.2.0)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (24.2)\n", + "Requirement already satisfied: langcodes<4.0.0,>=3.2.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (3.5.0)\n", + "Requirement already satisfied: language-data>=1.2 in /usr/local/lib/python3.11/dist-packages (from langcodes<4.0.0,>=3.2.0->spacy) (1.3.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/lib/python3.11/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.33.2 in /usr/local/lib/python3.11/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy) (2.33.2)\n", + "Requirement already satisfied: typing-extensions>=4.12.2 in /usr/local/lib/python3.11/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy) (4.13.2)\n", + "Requirement already satisfied: typing-inspection>=0.4.0 in /usr/local/lib/python3.11/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy) (0.4.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests<3.0.0,>=2.13.0->spacy) (3.4.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests<3.0.0,>=2.13.0->spacy) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests<3.0.0,>=2.13.0->spacy) (2.4.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests<3.0.0,>=2.13.0->spacy) (2025.4.26)\n", + "Requirement already satisfied: blis<1.4.0,>=1.3.0 in /usr/local/lib/python3.11/dist-packages (from thinc<8.4.0,>=8.3.4->spacy) (1.3.0)\n", + "Requirement already satisfied: confection<1.0.0,>=0.0.1 in /usr/local/lib/python3.11/dist-packages (from thinc<8.4.0,>=8.3.4->spacy) (0.1.5)\n", + "Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.11/dist-packages (from typer<1.0.0,>=0.3.0->spacy) (8.2.0)\n", + "Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.11/dist-packages (from typer<1.0.0,>=0.3.0->spacy) (1.5.4)\n", + "Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.11/dist-packages (from typer<1.0.0,>=0.3.0->spacy) (13.9.4)\n", + "Requirement already satisfied: cloudpathlib<1.0.0,>=0.7.0 in /usr/local/lib/python3.11/dist-packages (from weasel<0.5.0,>=0.1.0->spacy) (0.21.0)\n", + "Requirement already satisfied: smart-open<8.0.0,>=5.2.1 in /usr/local/lib/python3.11/dist-packages (from weasel<0.5.0,>=0.1.0->spacy) (7.1.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->spacy) (3.0.2)\n", + "Requirement already satisfied: marisa-trie>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from language-data>=1.2->langcodes<4.0.0,>=3.2.0->spacy) (1.2.1)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.11/dist-packages (from rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.11/dist-packages (from rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy) (2.19.1)\n", + "Requirement already satisfied: wrapt in /usr/local/lib/python3.11/dist-packages (from smart-open<8.0.0,>=5.2.1->weasel<0.5.0,>=0.1.0->spacy) (1.17.2)\n", + "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.11/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy) (0.1.2)\n", + "Collecting de-core-news-sm==3.8.0\n", + " Downloading https://github.com/explosion/spacy-models/releases/download/de_core_news_sm-3.8.0/de_core_news_sm-3.8.0-py3-none-any.whl (14.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m14.6/14.6 MB\u001b[0m \u001b[31m90.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: de-core-news-sm\n", + "Successfully installed de-core-news-sm-3.8.0\n", + "\u001b[38;5;2m✔ Download and installation successful\u001b[0m\n", + "You can now load the package via spacy.load('de_core_news_sm')\n", + "\u001b[38;5;3m⚠ Restart to reload dependencies\u001b[0m\n", + "If you are in a Jupyter or Colab notebook, you may need to restart Python in\n", + "order to load all the package's dependencies. You can do this by selecting the\n", + "'Restart kernel' or 'Restart runtime' option.\n", + "Collecting en-core-web-sm==3.8.0\n", + " Downloading https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl (12.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.8/12.8 MB\u001b[0m \u001b[31m89.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h\u001b[38;5;2m✔ Download and installation successful\u001b[0m\n", + "You can now load the package via spacy.load('en_core_web_sm')\n", + "\u001b[38;5;3m⚠ Restart to reload dependencies\u001b[0m\n", + "If you are in a Jupyter or Colab notebook, you may need to restart Python in\n", + "order to load all the package's dependencies. You can do this by selecting the\n", + "'Restart kernel' or 'Restart runtime' option.\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "!pip install --upgrade --force-reinstall \\\n", + " torch==2.0.1+cu118 \\\n", + " torchtext==0.15.2 \\\n", + " --extra-index-url https://download.pytorch.org/whl/cu118" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "dKTHj0Lo-E3V", + "outputId": "499f1b72-379a-422b-dc48-221907e1092a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://download.pytorch.org/whl/cu118\n", + "Collecting torch==2.0.1+cu118\n", + " Downloading https://download.pytorch.org/whl/cu118/torch-2.0.1%2Bcu118-cp311-cp311-linux_x86_64.whl (2267.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.3/2.3 GB\u001b[0m \u001b[31m571.6 kB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting torchtext==0.15.2\n", + " Downloading https://download.pytorch.org/whl/torchtext-0.15.2%2Bcpu-cp311-cp311-linux_x86_64.whl (2.0 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.0/2.0 MB\u001b[0m \u001b[31m76.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting filelock (from torch==2.0.1+cu118)\n", + " Downloading filelock-3.18.0-py3-none-any.whl.metadata (2.9 kB)\n", + "Collecting typing-extensions (from torch==2.0.1+cu118)\n", + " Downloading typing_extensions-4.13.2-py3-none-any.whl.metadata (3.0 kB)\n", + "Collecting sympy (from torch==2.0.1+cu118)\n", + " Downloading sympy-1.14.0-py3-none-any.whl.metadata (12 kB)\n", + "Collecting networkx (from torch==2.0.1+cu118)\n", + " Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n", + "Collecting jinja2 (from torch==2.0.1+cu118)\n", + " Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)\n", + "Collecting triton==2.0.0 (from torch==2.0.1+cu118)\n", + " Downloading https://download.pytorch.org/whl/triton-2.0.0-1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (63.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m63.3/63.3 MB\u001b[0m \u001b[31m11.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting tqdm (from torchtext==0.15.2)\n", + " Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.7/57.7 kB\u001b[0m \u001b[31m3.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting requests (from torchtext==0.15.2)\n", + " Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n", + "Collecting numpy (from torchtext==0.15.2)\n", + " Downloading numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m62.0/62.0 kB\u001b[0m \u001b[31m5.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting torchdata==0.6.1 (from torchtext==0.15.2)\n", + " Downloading https://download.pytorch.org/whl/torchdata-0.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.6/4.6 MB\u001b[0m \u001b[31m96.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting urllib3>=1.25 (from torchdata==0.6.1->torchtext==0.15.2)\n", + " Downloading urllib3-2.4.0-py3-none-any.whl.metadata (6.5 kB)\n", + "Collecting cmake (from triton==2.0.0->torch==2.0.1+cu118)\n", + " Downloading cmake-4.0.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.3 kB)\n", + "Collecting lit (from triton==2.0.0->torch==2.0.1+cu118)\n", + " Downloading lit-18.1.8-py3-none-any.whl.metadata (2.5 kB)\n", + "Collecting MarkupSafe>=2.0 (from jinja2->torch==2.0.1+cu118)\n", + " Downloading MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "Collecting charset-normalizer<4,>=2 (from requests->torchtext==0.15.2)\n", + " Downloading charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n", + "Collecting idna<4,>=2.5 (from requests->torchtext==0.15.2)\n", + " Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)\n", + "Collecting certifi>=2017.4.17 (from requests->torchtext==0.15.2)\n", + " Downloading certifi-2025.4.26-py3-none-any.whl.metadata (2.5 kB)\n", + "Collecting mpmath<1.4,>=1.1.0 (from sympy->torch==2.0.1+cu118)\n", + " Downloading https://download.pytorch.org/whl/mpmath-1.3.0-py3-none-any.whl (536 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m536.2/536.2 kB\u001b[0m \u001b[31m43.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading filelock-3.18.0-py3-none-any.whl (16 kB)\n", + "Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m134.9/134.9 kB\u001b[0m \u001b[31m13.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m48.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m16.8/16.8 MB\u001b[0m \u001b[31m116.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading requests-2.32.3-py3-none-any.whl (64 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m64.9/64.9 kB\u001b[0m \u001b[31m6.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading sympy-1.14.0-py3-none-any.whl (6.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.3/6.3 MB\u001b[0m \u001b[31m127.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m78.5/78.5 kB\u001b[0m \u001b[31m8.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading typing_extensions-4.13.2-py3-none-any.whl (45 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m45.8/45.8 kB\u001b[0m \u001b[31m4.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading certifi-2025.4.26-py3-none-any.whl (159 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m159.6/159.6 kB\u001b[0m \u001b[31m16.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (147 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m147.3/147.3 kB\u001b[0m \u001b[31m15.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading idna-3.10-py3-none-any.whl (70 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m70.4/70.4 kB\u001b[0m \u001b[31m7.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (23 kB)\n", + "Downloading urllib3-2.4.0-py3-none-any.whl (128 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m128.7/128.7 kB\u001b[0m \u001b[31m14.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading cmake-4.0.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.9 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m27.9/27.9 MB\u001b[0m \u001b[31m20.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading lit-18.1.8-py3-none-any.whl (96 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m96.4/96.4 kB\u001b[0m \u001b[31m9.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: mpmath, lit, urllib3, typing-extensions, tqdm, sympy, numpy, networkx, MarkupSafe, idna, filelock, cmake, charset-normalizer, certifi, requests, jinja2, triton, torch, torchdata, torchtext\n", + " Attempting uninstall: mpmath\n", + " Found existing installation: mpmath 1.3.0\n", + " Uninstalling mpmath-1.3.0:\n", + " Successfully uninstalled mpmath-1.3.0\n", + " Attempting uninstall: urllib3\n", + " Found existing installation: urllib3 2.4.0\n", + " Uninstalling urllib3-2.4.0:\n", + " Successfully uninstalled urllib3-2.4.0\n", + " Attempting uninstall: typing-extensions\n", + " Found existing installation: typing_extensions 4.13.2\n", + " Uninstalling typing_extensions-4.13.2:\n", + " Successfully uninstalled typing_extensions-4.13.2\n", + " Attempting uninstall: tqdm\n", + " Found existing installation: tqdm 4.67.1\n", + " Uninstalling tqdm-4.67.1:\n", + " Successfully uninstalled tqdm-4.67.1\n", + " Attempting uninstall: sympy\n", + " Found existing installation: sympy 1.13.1\n", + " Uninstalling sympy-1.13.1:\n", + " Successfully uninstalled sympy-1.13.1\n", + " Attempting uninstall: numpy\n", + " Found existing installation: numpy 2.0.2\n", + " Uninstalling numpy-2.0.2:\n", + " Successfully uninstalled numpy-2.0.2\n", + " Attempting uninstall: networkx\n", + " Found existing installation: networkx 3.4.2\n", + " Uninstalling networkx-3.4.2:\n", + " Successfully uninstalled networkx-3.4.2\n", + " Attempting uninstall: MarkupSafe\n", + " Found existing installation: MarkupSafe 3.0.2\n", + " Uninstalling MarkupSafe-3.0.2:\n", + " Successfully uninstalled MarkupSafe-3.0.2\n", + " Attempting uninstall: idna\n", + " Found existing installation: idna 3.10\n", + " Uninstalling idna-3.10:\n", + " Successfully uninstalled idna-3.10\n", + " Attempting uninstall: filelock\n", + " Found existing installation: filelock 3.18.0\n", + " Uninstalling filelock-3.18.0:\n", + " Successfully uninstalled filelock-3.18.0\n", + " Attempting uninstall: cmake\n", + " Found existing installation: cmake 3.31.6\n", + " Uninstalling cmake-3.31.6:\n", + " Successfully uninstalled cmake-3.31.6\n", + " Attempting uninstall: charset-normalizer\n", + " Found existing installation: charset-normalizer 3.4.2\n", + " Uninstalling charset-normalizer-3.4.2:\n", + " Successfully uninstalled charset-normalizer-3.4.2\n", + " Attempting uninstall: certifi\n", + " Found existing installation: certifi 2025.4.26\n", + " Uninstalling certifi-2025.4.26:\n", + " Successfully uninstalled certifi-2025.4.26\n", + " Attempting uninstall: requests\n", + " Found existing installation: requests 2.32.3\n", + " Uninstalling requests-2.32.3:\n", + " Successfully uninstalled requests-2.32.3\n", + " Attempting uninstall: jinja2\n", + " Found existing installation: Jinja2 3.1.6\n", + " Uninstalling Jinja2-3.1.6:\n", + " Successfully uninstalled Jinja2-3.1.6\n", + " Attempting uninstall: triton\n", + " Found existing installation: triton 3.2.0\n", + " Uninstalling triton-3.2.0:\n", + " Successfully uninstalled triton-3.2.0\n", + " Attempting uninstall: torch\n", + " Found existing installation: torch 2.6.0+cu124\n", + " Uninstalling torch-2.6.0+cu124:\n", + " Successfully uninstalled torch-2.6.0+cu124\n", + " Attempting uninstall: torchdata\n", + " Found existing installation: torchdata 0.11.0\n", + " Uninstalling torchdata-0.11.0:\n", + " Successfully uninstalled torchdata-0.11.0\n", + "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "torchvision 0.21.0+cu124 requires torch==2.6.0, but you have torch 2.0.1+cu118 which is incompatible.\n", + "torchtune 0.6.1 requires torchdata==0.11.0, but you have torchdata 0.6.1 which is incompatible.\n", + "numba 0.60.0 requires numpy<2.1,>=1.22, but you have numpy 2.2.6 which is incompatible.\n", + "tensorflow 2.18.0 requires numpy<2.1.0,>=1.26.0, but you have numpy 2.2.6 which is incompatible.\n", + "torchaudio 2.6.0+cu124 requires torch==2.6.0, but you have torch 2.0.1+cu118 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0mSuccessfully installed MarkupSafe-3.0.2 certifi-2025.4.26 charset-normalizer-3.4.2 cmake-4.0.2 filelock-3.18.0 idna-3.10 jinja2-3.1.6 lit-18.1.8 mpmath-1.3.0 networkx-3.4.2 numpy-2.2.6 requests-2.32.3 sympy-1.14.0 torch-2.0.1+cu118 torchdata-0.6.1 torchtext-0.15.2+cpu tqdm-4.67.1 triton-2.0.0 typing-extensions-4.13.2 urllib3-2.4.0\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.colab-display-data+json": { + "pip_warning": { + "packages": [ + "certifi" + ] + }, + "id": "3f7e16f4c1d24135a7821b2ceb71f028" + } + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "!pip install torchdata portalocker" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "_liYMcWh0Fxs", + "outputId": "0badce64-5e0d-497c-d1c2-dcd32de95bf4" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: torchdata in /usr/local/lib/python3.11/dist-packages (0.11.0)\n", + "Collecting portalocker\n", + " Downloading portalocker-3.1.1-py3-none-any.whl.metadata (8.6 kB)\n", + "Requirement already satisfied: urllib3>=1.25 in /usr/local/lib/python3.11/dist-packages (from torchdata) (2.4.0)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (from torchdata) (2.32.3)\n", + "Requirement already satisfied: torch>=2 in /usr/local/lib/python3.11/dist-packages (from torchdata) (2.6.0+cu124)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from torch>=2->torchdata) (3.18.0)\n", + "Requirement already satisfied: typing-extensions>=4.10.0 in /usr/local/lib/python3.11/dist-packages (from torch>=2->torchdata) (4.13.2)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.11/dist-packages (from torch>=2->torchdata) (3.4.2)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from torch>=2->torchdata) (3.1.6)\n", + "Requirement already satisfied: fsspec in /usr/local/lib/python3.11/dist-packages (from torch>=2->torchdata) (2025.3.2)\n", + "Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=2->torchdata)\n", + " Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=2->torchdata)\n", + " Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=2->torchdata)\n", + " Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=2->torchdata)\n", + " Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=2->torchdata)\n", + " Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=2->torchdata)\n", + " Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=2->torchdata)\n", + " Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=2->torchdata)\n", + " Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=2->torchdata)\n", + " Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", + "Requirement already satisfied: nvidia-cusparselt-cu12==0.6.2 in /usr/local/lib/python3.11/dist-packages (from torch>=2->torchdata) (0.6.2)\n", + "Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /usr/local/lib/python3.11/dist-packages (from torch>=2->torchdata) (2.21.5)\n", + "Requirement already satisfied: nvidia-nvtx-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch>=2->torchdata) (12.4.127)\n", + "Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=2->torchdata)\n", + " Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", + "Requirement already satisfied: triton==3.2.0 in /usr/local/lib/python3.11/dist-packages (from torch>=2->torchdata) (3.2.0)\n", + "Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.11/dist-packages (from torch>=2->torchdata) (1.13.1)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from sympy==1.13.1->torch>=2->torchdata) (1.3.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests->torchdata) (3.4.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests->torchdata) (3.10)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests->torchdata) (2025.4.26)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->torch>=2->torchdata) (3.0.2)\n", + "Downloading portalocker-3.1.1-py3-none-any.whl (19 kB)\n", + "Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m363.4/363.4 MB\u001b[0m \u001b[31m2.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m121.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.6/24.6 MB\u001b[0m \u001b[31m97.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m883.7/883.7 kB\u001b[0m \u001b[31m56.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m664.8/664.8 MB\u001b[0m \u001b[31m2.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m211.5/211.5 MB\u001b[0m \u001b[31m5.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.3/56.3 MB\u001b[0m \u001b[31m12.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m127.9/127.9 MB\u001b[0m \u001b[31m7.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m207.5/207.5 MB\u001b[0m \u001b[31m5.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.1/21.1 MB\u001b[0m \u001b[31m101.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: portalocker, nvidia-nvjitlink-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nvidia-cusolver-cu12\n", + " Attempting uninstall: nvidia-nvjitlink-cu12\n", + " Found existing installation: nvidia-nvjitlink-cu12 12.5.82\n", + " Uninstalling nvidia-nvjitlink-cu12-12.5.82:\n", + " Successfully uninstalled nvidia-nvjitlink-cu12-12.5.82\n", + " Attempting uninstall: nvidia-curand-cu12\n", + " Found existing installation: nvidia-curand-cu12 10.3.6.82\n", + " Uninstalling nvidia-curand-cu12-10.3.6.82:\n", + " Successfully uninstalled nvidia-curand-cu12-10.3.6.82\n", + " Attempting uninstall: nvidia-cufft-cu12\n", + " Found existing installation: nvidia-cufft-cu12 11.2.3.61\n", + " Uninstalling nvidia-cufft-cu12-11.2.3.61:\n", + " Successfully uninstalled nvidia-cufft-cu12-11.2.3.61\n", + " Attempting uninstall: nvidia-cuda-runtime-cu12\n", + " Found existing installation: nvidia-cuda-runtime-cu12 12.5.82\n", + " Uninstalling nvidia-cuda-runtime-cu12-12.5.82:\n", + " Successfully uninstalled nvidia-cuda-runtime-cu12-12.5.82\n", + " Attempting uninstall: nvidia-cuda-nvrtc-cu12\n", + " Found existing installation: nvidia-cuda-nvrtc-cu12 12.5.82\n", + " Uninstalling nvidia-cuda-nvrtc-cu12-12.5.82:\n", + " Successfully uninstalled nvidia-cuda-nvrtc-cu12-12.5.82\n", + " Attempting uninstall: nvidia-cuda-cupti-cu12\n", + " Found existing installation: nvidia-cuda-cupti-cu12 12.5.82\n", + " Uninstalling nvidia-cuda-cupti-cu12-12.5.82:\n", + " Successfully uninstalled nvidia-cuda-cupti-cu12-12.5.82\n", + " Attempting uninstall: nvidia-cublas-cu12\n", + " Found existing installation: nvidia-cublas-cu12 12.5.3.2\n", + " Uninstalling nvidia-cublas-cu12-12.5.3.2:\n", + " Successfully uninstalled nvidia-cublas-cu12-12.5.3.2\n", + " Attempting uninstall: nvidia-cusparse-cu12\n", + " Found existing installation: nvidia-cusparse-cu12 12.5.1.3\n", + " Uninstalling nvidia-cusparse-cu12-12.5.1.3:\n", + " Successfully uninstalled nvidia-cusparse-cu12-12.5.1.3\n", + " Attempting uninstall: nvidia-cudnn-cu12\n", + " Found existing installation: nvidia-cudnn-cu12 9.3.0.75\n", + " Uninstalling nvidia-cudnn-cu12-9.3.0.75:\n", + " Successfully uninstalled nvidia-cudnn-cu12-9.3.0.75\n", + " Attempting uninstall: nvidia-cusolver-cu12\n", + " Found existing installation: nvidia-cusolver-cu12 11.6.3.83\n", + " Uninstalling nvidia-cusolver-cu12-11.6.3.83:\n", + " Successfully uninstalled nvidia-cusolver-cu12-11.6.3.83\n", + "Successfully installed nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-nvjitlink-cu12-12.4.127 portalocker-3.1.1\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "**<토치 데이터 라이브러리(`torchdata`)>**\n", + "- 대규모 데이터세트를 다루기 쉽게 데이터를 로드, 변환, 배치하는 간단하고 유연한 API 제공\n", + "- 데이터세트를 효율적으로 불러오고 배치할 수 있음.\n", + "\n", + "**<토치 텍스트 라이브러리(`torchtext`)>**\n", + "- 파이토치를 위한 텍스트 처리 라이브러리\n", + "- 다양한 언어 모델링 작업에 대해 사전 처리\n", + "- 데이터세트 관리를 단순화하기 위한 다양한 도구, 기능 제공\n", + "\n", + "**<포르타락커(`portalocker`) 라이브러리>**\n", + "- 파이썬에서 파일 락을 관리하기 위한 라이브러리\n", + "- 파일 락을 사용해 여러 프로세스 간에 동시에 파일을 수정하거나 읽는 것을 방지\n", + "- Multi30k 데이터세트를 다운로드하고 압축을 해제하는 과정에서 내부적으로 사용" + ], + "metadata": { + "id": "kcfhRsf90LdC" + } + }, + { + "cell_type": "markdown", + "source": [ + "### 데이터세트 다운로드, 전처리\n", + "- 토치 텍스트 라이브러리로 Multi30k 데이터세트 다운로드\n", + "- 독일어 말뭉치(de_core_news_sm)과 영어 말뭉치(en_core_web_sm)에 대해 각각 토크나이저, 어휘 사전 생성" + ], + "metadata": { + "id": "FrLprrEk7YrA" + } + }, + { + "cell_type": "code", + "source": [ + "import ssl\n", + "ssl._create_default_https_context = ssl._create_unverified_context\n", + "\n", + "import torch\n", + "from torch import nn\n", + "from torchtext.datasets import Multi30k\n", + "from torchtext.data.utils import get_tokenizer\n", + "from torchtext.vocab import build_vocab_from_iterator\n", + "\n", + "# 독일어(de)와 영어(en) 텍스트를 처리하기 위해 토크나이저와 단어장(vocab) 준비\n", + "\n", + "def generate_tokens(text_iter, language):\n", + " # 언어별 인덱스 매핑: {'de': 0, 'en': 1}\n", + " language_index = {SRC_LANGUAGE: 0, TGT_LANGUAGE: 1}\n", + "\n", + " # text_iter은 (src_sentence, tgt_sentence) 쌍을 반환하므로,\n", + " # 원하는 언어의 문장을 토크나이저에 넣어 토큰을 생성\n", + " for text in text_iter:\n", + " yield token_transform[language](\n", + " text[language_index[language]]\n", + " )\n", + "\n", + "# 소스(source)와 타겟(target) 언어 설정\n", + "SRC_LANGUAGE = 'de'\n", + "TGT_LANGUAGE = 'en'\n", + "\n", + "# 특수 토큰 인덱스 정의\n", + "UNK_IDX, PAD_IDX, BOS_IDX, EOS_IDX = 0, 1, 2, 3\n", + "special_symbols = ['', '', '', '']\n", + "\n", + "# 언어별 토크나이저 설정 (spaCy 사용)\n", + "# get_tokenizer: 사용자가 지정한 토크나이저를 가져오는 유틸리티 함수\n", + "# spaCy 라이브러리로 사전 학습된 모델을 가져옴 => token_transform 변수에 저장\n", + "token_transform = {\n", + " SRC_LANGUAGE: get_tokenizer('spacy', language='de_core_news_sm'),\n", + " TGT_LANGUAGE: get_tokenizer('spacy', language='en_core_web_sm')\n", + "}\n", + "\n", + "print(\"Token Transform : \")\n", + "print(token_transform)\n", + "\n", + "# vocab_transform: 토큰을 인덱스로 변환시키는 함수를 저장\n", + "vocab_transform = {}\n", + "# 각 언어별로 훈련 데이터셋을 순회하며 단어장 생성\n", + "for language in [SRC_LANGUAGE, TGT_LANGUAGE]:\n", + " # Multi30k 훈련 데이터 로드\n", + " # Multi30k 데이터 세트를 활용해 (독일어, 영어)의 튜플 형식으로 데이터 로드\n", + " train_iter = Multi30k(\n", + " split='train',\n", + " language_pair=(SRC_LANGUAGE, TGT_LANGUAGE)\n", + " )\n", + " # 토큰 제너레이터를 통해 iterator 생성 후 단어장 빌드\n", + " # build_vocab_from_iterator: 생성된 토큰을 이용해 단어 집합 생성\n", + " vocab_transform[language] = build_vocab_from_iterator(\n", + " generate_tokens(train_iter, language),\n", + " min_freq=1, # 토큰화된 단어들의 최소 빈도수\n", + " specials=special_symbols, # 트랜스포머에 활용하는 특수 토큰 지정\n", + " special_first=True # 특수 토큰을 단어장 맨 앞에 배치\n", + " )\n", + "\n", + "# 단어장에 없는 토큰은 UNK_IDX로 매핑되도록 설정\n", + "for language in [SRC_LANGUAGE, TGT_LANGUAGE]:\n", + " # set_default_index: 메서드의 기본값을 설정. 어휘 사전에 없는 토큰인 의 인덱스 할당\n", + " vocab_transform[language].set_default_index(UNK_IDX)\n", + "\n", + "print(\"Vocab Transform : \")\n", + "print(vocab_transform)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 887 + }, + "id": "TSUZohnn9Jve", + "outputId": "c448a322-751c-473f-e703-f0cc4d1593c0" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Token Transform : \n", + "{'de': functools.partial(, spacy=), 'en': functools.partial(, spacy=)}\n" + ] + }, + { + "output_type": "error", + "ename": "SSLError", + "evalue": "\nThis exception is thrown by __iter__ of HTTPReaderIterDataPipe(skip_on_error=False, source_datapipe=OnDiskCacheHolderIterDataPipe, timeout=None)", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mSSLCertVerificationError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36m_make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 463\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 464\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_validate_conn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 465\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mSocketTimeout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mBaseSSLError\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36m_validate_conn\u001b[0;34m(self, conn)\u001b[0m\n\u001b[1;32m 1092\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mconn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_closed\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1093\u001b[0;31m \u001b[0mconn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1094\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/urllib3/connection.py\u001b[0m in \u001b[0;36mconnect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 740\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 741\u001b[0;31m sock_and_verified = _ssl_wrap_socket_and_match_hostname(\n\u001b[0m\u001b[1;32m 742\u001b[0m \u001b[0msock\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msock\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/urllib3/connection.py\u001b[0m in \u001b[0;36m_ssl_wrap_socket_and_match_hostname\u001b[0;34m(sock, cert_reqs, ssl_version, ssl_minimum_version, ssl_maximum_version, cert_file, key_file, key_password, ca_certs, ca_cert_dir, ca_cert_data, assert_hostname, assert_fingerprint, server_hostname, ssl_context, tls_in_tls)\u001b[0m\n\u001b[1;32m 919\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 920\u001b[0;31m ssl_sock = ssl_wrap_socket(\n\u001b[0m\u001b[1;32m 921\u001b[0m \u001b[0msock\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msock\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/urllib3/util/ssl_.py\u001b[0m in \u001b[0;36mssl_wrap_socket\u001b[0;34m(sock, keyfile, certfile, cert_reqs, ca_certs, server_hostname, ssl_version, ciphers, ssl_context, ca_cert_dir, key_password, ca_cert_data, tls_in_tls)\u001b[0m\n\u001b[1;32m 479\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 480\u001b[0;31m \u001b[0mssl_sock\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_ssl_wrap_socket_impl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msock\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcontext\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtls_in_tls\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mserver_hostname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 481\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mssl_sock\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/urllib3/util/ssl_.py\u001b[0m in \u001b[0;36m_ssl_wrap_socket_impl\u001b[0;34m(sock, ssl_context, tls_in_tls, server_hostname)\u001b[0m\n\u001b[1;32m 523\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 524\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mssl_context\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwrap_socket\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msock\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mserver_hostname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mserver_hostname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/usr/lib/python3.11/ssl.py\u001b[0m in \u001b[0;36mwrap_socket\u001b[0;34m(self, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, session)\u001b[0m\n\u001b[1;32m 516\u001b[0m \u001b[0;31m# ctx._wrap_socket()\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 517\u001b[0;31m return self.sslsocket_class._create(\n\u001b[0m\u001b[1;32m 518\u001b[0m \u001b[0msock\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msock\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/lib/python3.11/ssl.py\u001b[0m in \u001b[0;36m_create\u001b[0;34m(cls, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, context, session)\u001b[0m\n\u001b[1;32m 1103\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"do_handshake_on_connect should not be specified for non-blocking sockets\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1104\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdo_handshake\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1105\u001b[0m \u001b[0;32mexcept\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/lib/python3.11/ssl.py\u001b[0m in \u001b[0;36mdo_handshake\u001b[0;34m(self, block)\u001b[0m\n\u001b[1;32m 1381\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msettimeout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1382\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_sslobj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdo_handshake\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1383\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mSSLCertVerificationError\u001b[0m: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'www.quest.dcs.shef.ac.uk'. (_ssl.c:1016)", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mSSLError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36murlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 786\u001b[0m \u001b[0;31m# Make the request on the HTTPConnection object\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 787\u001b[0;31m response = self._make_request(\n\u001b[0m\u001b[1;32m 788\u001b[0m \u001b[0mconn\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36m_make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 487\u001b[0m \u001b[0mnew_e\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_wrap_proxy_error\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnew_e\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mproxy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscheme\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 488\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mnew_e\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 489\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mSSLError\u001b[0m: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'www.quest.dcs.shef.ac.uk'. (_ssl.c:1016)", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mMaxRetryError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/requests/adapters.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 666\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 667\u001b[0;31m resp = conn.urlopen(\n\u001b[0m\u001b[1;32m 668\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/urllib3/connectionpool.py\u001b[0m in \u001b[0;36murlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 840\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 841\u001b[0;31m retries = retries.increment(\n\u001b[0m\u001b[1;32m 842\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merror\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnew_e\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_pool\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_stacktrace\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexc_info\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/urllib3/util/retry.py\u001b[0m in \u001b[0;36mincrement\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m 518\u001b[0m \u001b[0mreason\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0merror\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mResponseError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcause\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 519\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mMaxRetryError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_pool\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreason\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mreason\u001b[0m \u001b[0;31m# type: ignore[arg-type]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 520\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mMaxRetryError\u001b[0m: HTTPSConnectionPool(host='www.quest.dcs.shef.ac.uk', port=443): Max retries exceeded with url: /wmt16_files_mmt/training.tar.gz (Caused by SSLError(SSLCertVerificationError(1, \"[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'www.quest.dcs.shef.ac.uk'. (_ssl.c:1016)\")))", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mSSLError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 52\u001b[0m \u001b[0;31m# 토큰 제너레이터를 통해 iterator 생성 후 단어장 빌드\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0;31m# build_vocab_from_iterator: 생성된 토큰을 이용해 단어 집합 생성\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 54\u001b[0;31m vocab_transform[language] = build_vocab_from_iterator(\n\u001b[0m\u001b[1;32m 55\u001b[0m \u001b[0mgenerate_tokens\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain_iter\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlanguage\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 56\u001b[0m \u001b[0mmin_freq\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;31m# 토큰화된 단어들의 최소 빈도수\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchtext/vocab/vocab_factory.py\u001b[0m in \u001b[0;36mbuild_vocab_from_iterator\u001b[0;34m(iterator, min_freq, specials, special_first, max_tokens)\u001b[0m\n\u001b[1;32m 96\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 97\u001b[0m \u001b[0mcounter\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mCounter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 98\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mtokens\u001b[0m \u001b[0;32min\u001b[0m \u001b[0miterator\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 99\u001b[0m \u001b[0mcounter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtokens\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 100\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36mgenerate_tokens\u001b[0;34m(text_iter, language)\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0;31m# text_iter은 (src_sentence, tgt_sentence) 쌍을 반환하므로,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;31m# 원하는 언어의 문장을 토크나이저에 넣어 토큰을 생성\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 18\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mtext\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtext_iter\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 19\u001b[0m yield token_transform[language](\n\u001b[1;32m 20\u001b[0m \u001b[0mtext\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mlanguage_index\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mlanguage\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/sharding.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 73\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 74\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 75\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mitem\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_datapipe\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 76\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mi\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnum_of_instances\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minstance_id\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 77\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mitem\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/combinatorics.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 122\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mT_co\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 123\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_enabled\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 124\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 125\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 126\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/combining.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 587\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mTuple\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mT_co\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 588\u001b[0m \u001b[0miterators\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0miter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdatapipe\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mdatapipe\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatapipes\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 589\u001b[0;31m \u001b[0;32myield\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0miterators\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 590\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 591\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__len__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchdata/datapipes/iter/util/plain_text_reader.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 132\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 133\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mUnion\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mStr_Or_Bytes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mTuple\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mStr_Or_Bytes\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 134\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfile\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_datapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 135\u001b[0m \u001b[0mstream\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_helper\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mskip_lines\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfile\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 136\u001b[0m \u001b[0mstream\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_helper\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstrip_newline\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstream\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/fileopener.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0;31m# a subtype would cause mypy error.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 67\u001b[0;31m \u001b[0;32myield\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mget_file_binaries_from_pathnames\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatapipe\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mencoding\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 68\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__len__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/utils/common.py\u001b[0m in \u001b[0;36mget_file_binaries_from_pathnames\u001b[0;34m(pathnames, mode, encoding)\u001b[0m\n\u001b[1;32m 208\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'r'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 209\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 210\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mpathname\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mpathnames\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 211\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpathname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 212\u001b[0m raise TypeError(\"Expected string type for pathname, but got {}\"\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/combining.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mdp\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatapipes\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 52\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdp\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 53\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/combining.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mdp\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatapipes\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 52\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdp\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 53\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchdata/datapipes/iter/util/cacheholder.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 452\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 453\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 454\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mfilename\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_datapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 455\u001b[0m \u001b[0mrec_uuid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrecord\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmemory_cell_dp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_last\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 456\u001b[0m \u001b[0moriginal_file_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfirst_filepath_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrecord\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchdata/datapipes/iter/util/saver.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 52\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 53\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mfilepath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_datapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 54\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfn\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[0mfilepath\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/callable.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mT_co\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 122\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 123\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/callable.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mT_co\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 122\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 123\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/selecting.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mT_co\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 71\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 72\u001b[0m \u001b[0mcondition\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfiltered\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_returnIfTrue\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 73\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcondition\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchdata/datapipes/iter/util/tararchiveloader.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 52\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mTuple\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mBufferedIOBase\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 54\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 55\u001b[0m \u001b[0mvalidate_pathname_binary_tuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 56\u001b[0m \u001b[0mpathname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata_stream\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/fileopener.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0;31m# a subtype would cause mypy error.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 67\u001b[0;31m \u001b[0;32myield\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mget_file_binaries_from_pathnames\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatapipe\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mencoding\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 68\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__len__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/utils/common.py\u001b[0m in \u001b[0;36mget_file_binaries_from_pathnames\u001b[0;34m(pathnames, mode, encoding)\u001b[0m\n\u001b[1;32m 208\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'r'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 209\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 210\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mpathname\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mpathnames\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 211\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpathname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 212\u001b[0m raise TypeError(\"Expected string type for pathname, but got {}\"\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchdata/datapipes/iter/util/cacheholder.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 227\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_end_caching_flag\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 229\u001b[0;31m \u001b[0;32myield\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_datapipe\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 230\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 231\u001b[0m \u001b[0;31m# In case of BC breaking, use RuntimeError for now. Warning is another option\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchdata/datapipes/iter/util/cacheholder.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 372\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 373\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 374\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mitem\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_datapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 375\u001b[0m \u001b[0mitem_id\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0muuid\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muuid4\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 376\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbuffer_pos\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbuffer_pos\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mremember_elements\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36m__next__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 142\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_next\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 143\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Decided against using `contextlib.nullcontext` for performance reasons\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 144\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_next\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 145\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 146\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__getattr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36m_get_next\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 130\u001b[0m \"\"\"\n\u001b[1;32m 131\u001b[0m \u001b[0m_check_iterator_valid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_dp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miterator_id\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 132\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miterator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 133\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mself_and_has_next_method\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 134\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_dp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_number_of_samples_yielded\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/combining.py\u001b[0m in \u001b[0;36mget_next_element_by_instance\u001b[0;34m(self, instance_id)\u001b[0m\n\u001b[1;32m 425\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 426\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 427\u001b[0;31m \u001b[0;32myield\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_find_next\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minstance_id\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 428\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mStopIteration\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 429\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_child_stop\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0minstance_id\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/combining.py\u001b[0m in \u001b[0;36m_find_next\u001b[0;34m(self, instance_id)\u001b[0m\n\u001b[1;32m 394\u001b[0m \u001b[0;34m\"_datapipe_iterator has not been set, likely because this private method is called directly \"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 395\u001b[0m \"without invoking get_next_element_by_instance() first.\")\n\u001b[0;32m--> 396\u001b[0;31m \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_datapipe_iterator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 397\u001b[0m \u001b[0mclassification\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclassifier_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 398\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mclassification\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdrop_none\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36m__next__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 142\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_next\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 143\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Decided against using `contextlib.nullcontext` for performance reasons\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 144\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_next\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 145\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 146\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__getattr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36m_get_next\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 130\u001b[0m \"\"\"\n\u001b[1;32m 131\u001b[0m \u001b[0m_check_iterator_valid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_dp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miterator_id\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 132\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miterator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 133\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mself_and_has_next_method\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 134\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_dp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_number_of_samples_yielded\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/combining.py\u001b[0m in \u001b[0;36mget_next_element_by_instance\u001b[0;34m(self, instance_id)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mleading_ptr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchild_pointers\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0minstance_id\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 163\u001b[0;31m \u001b[0mreturn_val\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_datapipe_iterator\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[arg-type]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 164\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbuffer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mreturn_val\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 165\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mStopIteration\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/combining.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mdp\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatapipes\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 52\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdp\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 53\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/combining.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mdp\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatapipes\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 52\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdp\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 53\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchdata/datapipes/iter/util/cacheholder.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 452\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 453\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 454\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mfilename\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_datapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 455\u001b[0m \u001b[0mrec_uuid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrecord\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmemory_cell_dp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_last\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 456\u001b[0m \u001b[0moriginal_file_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfirst_filepath_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrecord\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchdata/datapipes/iter/util/saver.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 52\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 53\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mfilepath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_datapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 54\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfn\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[0mfilepath\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchdata/datapipes/iter/util/hashchecker.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mTuple\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mStreamWrapper\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 67\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mfile_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_datapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 68\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhash_type\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"sha256\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[0mhash_func\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhashlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msha256\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/callable.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mT_co\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 122\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 123\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/iter/callable.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mIterator\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mT_co\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 122\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 123\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/utils/data/datapipes/_hook_iterator.py\u001b[0m in \u001b[0;36mwrap_generator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchdata/datapipes/iter/load/online.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 84\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0murl\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msource_datapipe\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 85\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 86\u001b[0;31m \u001b[0;32myield\u001b[0m \u001b[0m_get_response_from_http\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mquery_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 87\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 88\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mskip_on_error\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchdata/datapipes/iter/load/online.py\u001b[0m in \u001b[0;36m_get_response_from_http\u001b[0;34m(url, timeout, **query_params)\u001b[0m\n\u001b[1;32m 37\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mrequests\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSession\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msession\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[0mproxies\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_get_proxies\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 39\u001b[0;31m \u001b[0mr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msession\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mproxies\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mproxies\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstream\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mquery_params\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[attr-defined]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 40\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mraise_for_status\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 41\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mStreamWrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mraw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/requests/sessions.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, url, **kwargs)\u001b[0m\n\u001b[1;32m 600\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 601\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msetdefault\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"allow_redirects\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 602\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"GET\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 603\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 604\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0moptions\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/requests/sessions.py\u001b[0m in \u001b[0;36mrequest\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 587\u001b[0m }\n\u001b[1;32m 588\u001b[0m \u001b[0msend_kwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msettings\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 589\u001b[0;31m \u001b[0mresp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mprep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0msend_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 590\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 591\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/requests/sessions.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 722\u001b[0m \u001b[0;31m# Redirect resolving generator.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 723\u001b[0m \u001b[0mgen\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresolve_redirects\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 724\u001b[0;31m \u001b[0mhistory\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mresp\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mresp\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 725\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 726\u001b[0m \u001b[0mhistory\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/requests/sessions.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 722\u001b[0m \u001b[0;31m# Redirect resolving generator.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 723\u001b[0m \u001b[0mgen\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresolve_redirects\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 724\u001b[0;31m \u001b[0mhistory\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mresp\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mresp\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mgen\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 725\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 726\u001b[0m \u001b[0mhistory\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/requests/sessions.py\u001b[0m in \u001b[0;36mresolve_redirects\u001b[0;34m(self, resp, req, stream, timeout, verify, cert, proxies, yield_requests, **adapter_kwargs)\u001b[0m\n\u001b[1;32m 263\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mreq\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 264\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 265\u001b[0;31m resp = self.send(\n\u001b[0m\u001b[1;32m 266\u001b[0m \u001b[0mreq\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 267\u001b[0m \u001b[0mstream\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mstream\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/requests/sessions.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 701\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 702\u001b[0m \u001b[0;31m# Send the request\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 703\u001b[0;31m \u001b[0mr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0madapter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 704\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 705\u001b[0m \u001b[0;31m# Total elapsed time of the request (approximately)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/requests/adapters.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 696\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreason\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_SSLError\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 697\u001b[0m \u001b[0;31m# This branch is for urllib3 v1.22 and later.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 698\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mSSLError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 699\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 700\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mConnectionError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequest\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrequest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mSSLError\u001b[0m: \nThis exception is thrown by __iter__ of HTTPReaderIterDataPipe(skip_on_error=False, source_datapipe=OnDiskCacheHolderIterDataPipe, timeout=None)" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "#### 오류로 인해 직접 데이터세트 다운로드 후 전처리" + ], + "metadata": { + "id": "hvpFha8jINkP" + } + }, + { + "cell_type": "code", + "source": [ + "import os\n", + "DATA_ROOT = '/content/drive/MyDrive/Euron_DL/Week12'\n", + "os.makedirs(DATA_ROOT, exist_ok=True)\n", + "\n", + "# GitHub 미러에서 SSL 검증 없이 다운로드\n", + "!wget --no-check-certificate -P {DATA_ROOT} \\\n", + " https://raw.githubusercontent.com/neychev/small_DL_repo/master/datasets/Multi30k/training.tar.gz \\\n", + " https://raw.githubusercontent.com/neychev/small_DL_repo/master/datasets/Multi30k/validation.tar.gz \\\n", + " https://raw.githubusercontent.com/neychev/small_DL_repo/master/datasets/Multi30k/mmt16_task1_test.tar.gz\n", + "\n", + "# 압축 풀기\n", + "!tar -xvzf {DATA_ROOT}/training.tar.gz -C {DATA_ROOT}\n", + "!tar -xvzf {DATA_ROOT}/validation.tar.gz -C {DATA_ROOT}\n", + "!tar -xvzf {DATA_ROOT}/mmt16_task1_test.tar.gz -C {DATA_ROOT}\n", + "\n", + "# 압축 해제된 파일 확인\n", + "!ls -lh {DATA_ROOT}" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "jXRUAT-lFbzf", + "outputId": "d24c39d7-2492-4019-b3be-9cb511ede1aa" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "--2025-05-24 11:04:42-- https://raw.githubusercontent.com/neychev/small_DL_repo/master/datasets/Multi30k/training.tar.gz\n", + "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...\n", + "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 1207136 (1.2M) [application/octet-stream]\n", + "Saving to: ‘/content/drive/MyDrive/Euron_DL/Week12/training.tar.gz.1’\n", + "\n", + "training.tar.gz.1 100%[===================>] 1.15M --.-KB/s in 0.05s \n", + "\n", + "2025-05-24 11:04:42 (23.8 MB/s) - ‘/content/drive/MyDrive/Euron_DL/Week12/training.tar.gz.1’ saved [1207136/1207136]\n", + "\n", + "--2025-05-24 11:04:42-- https://raw.githubusercontent.com/neychev/small_DL_repo/master/datasets/Multi30k/validation.tar.gz\n", + "Reusing existing connection to raw.githubusercontent.com:443.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 46329 (45K) [application/octet-stream]\n", + "Saving to: ‘/content/drive/MyDrive/Euron_DL/Week12/validation.tar.gz.1’\n", + "\n", + "validation.tar.gz.1 100%[===================>] 45.24K --.-KB/s in 0.002s \n", + "\n", + "2025-05-24 11:04:42 (18.0 MB/s) - ‘/content/drive/MyDrive/Euron_DL/Week12/validation.tar.gz.1’ saved [46329/46329]\n", + "\n", + "--2025-05-24 11:04:42-- https://raw.githubusercontent.com/neychev/small_DL_repo/master/datasets/Multi30k/mmt16_task1_test.tar.gz\n", + "Reusing existing connection to raw.githubusercontent.com:443.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 67079 (66K) [application/octet-stream]\n", + "Saving to: ‘/content/drive/MyDrive/Euron_DL/Week12/mmt16_task1_test.tar.gz.1’\n", + "\n", + "mmt16_task1_test.ta 100%[===================>] 65.51K --.-KB/s in 0.003s \n", + "\n", + "2025-05-24 11:04:42 (20.7 MB/s) - ‘/content/drive/MyDrive/Euron_DL/Week12/mmt16_task1_test.tar.gz.1’ saved [67079/67079]\n", + "\n", + "FINISHED --2025-05-24 11:04:42--\n", + "Total wall clock time: 0.6s\n", + "Downloaded: 3 files, 1.3M in 0.05s (23.4 MB/s)\n", + "train.de\n", + "train.en\n", + "val.de\n", + "val.en\n", + "./._test.de\n", + "tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.quarantine'\n", + "./test.de\n", + "./._test.en\n", + "tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.quarantine'\n", + "./test.en\n", + "./._test.fr\n", + "tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.quarantine'\n", + "./test.fr\n", + "total 7.0M\n", + "-rw------- 1 root root 66K May 24 10:59 mmt16_task1_test.tar.gz\n", + "-rw------- 1 root root 66K May 24 11:04 mmt16_task1_test.tar.gz.1\n", + "-rw------- 1 root root 69K Oct 17 2016 test.de\n", + "-rw------- 1 root root 61K Oct 17 2016 test.en\n", + "-rw------- 1 root root 71K Feb 11 2017 test.fr\n", + "-rw------- 1 root root 2.1M Feb 2 2016 train.de\n", + "-rw------- 1 root root 1.8M Feb 2 2016 train.en\n", + "-rw------- 1 root root 1.2M May 24 10:59 training.tar.gz\n", + "-rw------- 1 root root 1.2M May 24 11:04 training.tar.gz.1\n", + "-rw------- 1 root root 75K Feb 2 2016 val.de\n", + "-rw------- 1 root root 62K Feb 2 2016 val.en\n", + "-rw------- 1 root root 46K May 24 10:59 validation.tar.gz\n", + "-rw------- 1 root root 46K May 24 11:04 validation.tar.gz.1\n", + "-rw------- 1 root root 333K May 24 11:04 Week12_예습과제_방민지.ipynb\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 터미널(혹은 Colab 셀)에서\n", + "!ls -lh /content/drive/MyDrive/Euron_DL/Week12" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "31FY2EVB9dLj", + "outputId": "ed763149-99b6-4ccf-9b2f-5ae6081378b3" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "total 5.6M\n", + "-rw------- 1 root root 66K May 24 11:04 mmt16_task1_test.tar.gz.1\n", + "-rw------- 1 root root 69K Oct 17 2016 test.de\n", + "-rw------- 1 root root 61K Oct 17 2016 test.en\n", + "-rw------- 1 root root 71K Feb 11 2017 test.fr\n", + "-rw------- 1 root root 2.1M Feb 2 2016 train.de\n", + "-rw------- 1 root root 1.8M Feb 2 2016 train.en\n", + "-rw------- 1 root root 1.2M May 24 11:04 training.tar.gz.1\n", + "-rw------- 1 root root 75K Feb 2 2016 val.de\n", + "-rw------- 1 root root 62K Feb 2 2016 val.en\n", + "-rw------- 1 root root 46K May 24 11:04 validation.tar.gz.1\n", + "-rw------- 1 root root 229K May 24 11:41 Week12_예습과제_방민지.ipynb\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Python으로 읽어서 vocab 생성\n", + "import ssl\n", + "ssl._create_default_https_context = ssl._create_unverified_context\n", + "\n", + "from torchtext.data.utils import get_tokenizer\n", + "from torchtext.vocab import build_vocab_from_iterator\n", + "import gzip\n", + "from torchtext.data.utils import get_tokenizer\n", + "from torchtext.vocab import build_vocab_from_iterator\n", + "\n", + "# split→파일명 매핑\n", + "SPLIT_MAP = {\n", + " 'training': 'train',\n", + " 'validation': 'val',\n", + " 'mmt16_task1_test_2016': 'test'\n", + "}\n", + "\n", + "def get_filepath(split: str, language: str) -> str:\n", + " \"\"\"\n", + " split: 'training', 'validation', 'mmt16_task1_test_2016'\n", + " 실제 파일은 train.de, valid.de, test.de 등이므로 맵핑 처리\n", + " \"\"\"\n", + " base = SPLIT_MAP.get(split, split)\n", + " gz_path = os.path.join(DATA_ROOT, f\"{base}.{language}.gz\")\n", + " txt_path = os.path.join(DATA_ROOT, f\"{base}.{language}\")\n", + " if os.path.exists(gz_path):\n", + " return gz_path\n", + " elif os.path.exists(txt_path):\n", + " return txt_path\n", + " else:\n", + " raise FileNotFoundError(f\"No file for split={split}, lang={language}\")\n", + "\n", + "def read_corpus(split: str, language: str):\n", + " path = get_filepath(split, language)\n", + " if path.endswith('.gz'):\n", + " with gzip.open(path, 'rt', encoding='utf-8') as f:\n", + " for line in f:\n", + " yield line.strip()\n", + " else:\n", + " with open(path, 'r', encoding='utf-8') as f:\n", + " for line in f:\n", + " yield line.strip()" + ], + "metadata": { + "id": "Cuo80kVhE-Vk" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# 토크나이저 & 특수토큰 세팅\n", + "SRC_LANGUAGE = 'de'\n", + "TGT_LANGUAGE = 'en'\n", + "UNK_IDX, PAD_IDX, BOS_IDX, EOS_IDX = 0, 1, 2, 3\n", + "special_symbols = ['', '', '', '']\n", + "\n", + "token_transform = {\n", + " SRC_LANGUAGE: get_tokenizer('spacy', language='de_core_news_sm'),\n", + " TGT_LANGUAGE: get_tokenizer('spacy', language='en_core_web_sm')\n", + "}\n", + "\n", + "\n", + "# 토큰 생성기\n", + "def generate_tokens(text_iter, language):\n", + " language_index = {SRC_LANGUAGE: 0, TGT_LANGUAGE: 1}\n", + " for text_pair in text_iter:\n", + " # text_pair 는 (src_sentence, tgt_sentence)\n", + " yield token_transform[language](\n", + " text_pair[language_index[language]]\n", + " )\n", + "\n", + "print(\"Token Transform : \")\n", + "print(token_transform)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "qFeKjzDWF0n_", + "outputId": "553ed5e3-d864-46a5-bce1-98dc4a126fe6" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Token Transform : \n", + "{'de': functools.partial(, spacy=), 'en': functools.partial(, spacy=)}\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "def yield_tokens(split_names, language):\n", + " language_index = {SRC_LANGUAGE: 0, TGT_LANGUAGE: 1}\n", + " for split in split_names:\n", + " # split마다 fresh iterator 생성\n", + " pairs = zip(\n", + " read_corpus(split, SRC_LANGUAGE),\n", + " read_corpus(split, TGT_LANGUAGE)\n", + " )\n", + " for src_tgt in pairs:\n", + " yield token_transform[language](src_tgt[language_index[language]])\n", + "\n", + "# vocab_transform 생성\n", + "vocab_transform = {}\n", + "for language in [SRC_LANGUAGE, TGT_LANGUAGE]:\n", + " tokens = yield_tokens(['training', 'validation'], language)\n", + " vocab = build_vocab_from_iterator(\n", + " tokens,\n", + " min_freq=1,\n", + " specials=special_symbols,\n", + " special_first=True\n", + " )\n", + " vocab.set_default_index(UNK_IDX)\n", + " vocab_transform[language] = vocab\n", + "\n", + "\n", + "print(\"Vocab Transform : \")\n", + "print(vocab_transform)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "pODBlwhZGa2y", + "outputId": "e85038db-c246-4410-f8f1-3d408fe09de1" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Vocab Transform : \n", + "{'de': Vocab(), 'en': Vocab()}\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### 트랜스포머 모델 구성" + ], + "metadata": { + "id": "nbaozec1JvOx" + } + }, + { + "cell_type": "code", + "source": [ + "import math\n", + "import torch\n", + "from torch import nn\n", + "\n", + "class PositionalEncoding(nn.Module):\n", + " def __init__(self, d_model, max_len, dropout=0.1):\n", + " super().__init__()\n", + " # 드롭아웃 확률 설정\n", + " self.dropout = nn.Dropout(p=dropout)\n", + "\n", + " # 위치 인코딩을 위한 위치 번호 벡터: [0, 1, ..., max_len-1]\n", + " position = torch.arange(max_len).unsqueeze(1) # (max_len, 1)\n", + " # 주기 파라미터 계산: 각 짝수 차원마다 다른 주기 사용\n", + " div_term = torch.exp(\n", + " torch.arange(0, d_model, 2) * (-math.log(10000.0) / d_model)\n", + " ) # (d_model/2,)\n", + "\n", + " # 최대 길이만큼 위치 인코딩 행렬 초기화\n", + " pe = torch.zeros(max_len, 1, d_model) # (max_len, 1, d_model)\n", + " # 짝수 인덱스 차원에는 sin, 홀수 인덱스 차원에는 cos 적용\n", + " pe[:, 0, 0::2] = torch.sin(position * div_term)\n", + " pe[:, 0, 1::2] = torch.cos(position * div_term)\n", + " # buffer로 등록하여 모델 파라미터로 학습되지 않도록 함\n", + " self.register_buffer(\"pe\", pe)\n", + "\n", + " def forward(self, x):\n", + " # 입력 시퀀스 길이만큼 위치 인코딩 더하기\n", + " x = x + self.pe[: x.size(0)]\n", + " # 드롭아웃 적용 후 반환\n", + " return self.dropout(x)\n", + "\n", + "class TokenEmbedding(nn.Module):\n", + " def __init__(self, vocab_size, emb_size):\n", + " super().__init__()\n", + " # 단어 임베딩 레이어\n", + " self.embedding = nn.Embedding(vocab_size, emb_size)\n", + " # 임베딩 차원 저장\n", + " self.emb_size = emb_size\n", + "\n", + " def forward(self, tokens):\n", + " # 임베딩 스케일링: sqrt(emb_size) 곱해 안정화\n", + " return self.embedding(tokens.long()) * math.sqrt(self.emb_size)\n", + "\n", + "# TokenEmbedding 클래스\n", + "# 소스 데이터와 입력 데이터를 입력 임베딩으로 변환 -> src_tok_emb, tgt_tok_emb 생성\n", + "# 소스와 타깃 데이터의 어휘 사전 크기를 입력 -> 트랜스포머 임베딩 크기로 변환\n", + "class Seq2SeqTransformer(nn.Module):\n", + " def __init__(\n", + " self,\n", + " num_encoder_layers,\n", + " num_decoder_layers,\n", + " emb_size,\n", + " max_len,\n", + " nhead,\n", + " src_vocab_size,\n", + " tgt_vocab_size,\n", + " dim_feedforward,\n", + " dropout=0.1,\n", + " ):\n", + " super().__init__()\n", + " # 소스 및 타겟 토큰 임베딩\n", + " self.src_tok_emb = TokenEmbedding(src_vocab_size, emb_size)\n", + " self.tgt_tok_emb = TokenEmbedding(tgt_vocab_size, emb_size)\n", + " # 위치 인코딩 모듈\n", + " self.positional_encoding = PositionalEncoding(\n", + " d_model=emb_size, max_len=max_len, dropout=dropout\n", + " )\n", + " # Transformer 블록 (인코더+디코더)\n", + " self.transformer = nn.Transformer( # 파이토치에서 제공되는 Transformer 클래스 적용\n", + " # 인코더와 디코더는 encoder_layers 변수 값으로 구성\n", + " d_model=emb_size,\n", + " nhead=nhead,\n", + " num_encoder_layers=num_encoder_layers,\n", + " num_decoder_layers=num_decoder_layers,\n", + " dim_feedforward=dim_feedforward,\n", + " dropout=dropout,\n", + " )\n", + " # 최종 출력용 선형 레이어 (어휘 크기로 매핑)\n", + " # 마지막 트랜스포머 디코더 블록에서 산출되는 벡터를 선형 변환 -> 어휘 사전에 대한 로짓(logit) 생성\n", + " self.generator = nn.Linear(emb_size, tgt_vocab_size)\n", + "\n", + " def forward(\n", + " self,\n", + " src,\n", + " trg,\n", + " src_mask,\n", + " tgt_mask,\n", + " src_padding_mask,\n", + " tgt_padding_mask,\n", + " memory_key_padding_mask,\n", + " ):\n", + " # 소스 입력 임베딩 + 위치 인코딩\n", + " src_emb = self.positional_encoding(self.src_tok_emb(src)) # (S, N, E)\n", + " # 타겟 입력 임베딩 + 위치 인코딩\n", + " tgt_emb = self.positional_encoding(self.tgt_tok_emb(trg)) # (T, N, E)\n", + " # Transformer 인코더-디코더 통과\n", + " outs = self.transformer(\n", + " src=src_emb,\n", + " tgt=tgt_emb,\n", + " src_mask=src_mask,\n", + " tgt_mask=tgt_mask,\n", + " memory_mask=None,\n", + " src_key_padding_mask=src_padding_mask,\n", + " tgt_key_padding_mask=tgt_padding_mask,\n", + " memory_key_padding_mask=memory_key_padding_mask,\n", + " ) # (T, N, E)\n", + " # 생성 레이어로 어휘 차원으로 변환\n", + " return self.generator(outs)\n", + "\n", + " def encode(self, src, src_mask):\n", + " # 인코더만 실행하는 헬퍼 메서드\n", + " return self.transformer.encoder(\n", + " self.positional_encoding(self.src_tok_emb(src)), src_mask\n", + " )\n", + "\n", + " def decode(self, tgt, memory, tgt_mask):\n", + " # 디코더만 실행하는 헬퍼 메서드\n", + " return self.transformer.decoder(\n", + " self.positional_encoding(self.tgt_tok_emb(tgt)), memory, tgt_mask\n", + " )\n" + ], + "metadata": { + "id": "JPZtbvsWNWzu" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### 트랜스포머 클래스\n", + "- 파이토치에서 제공하는 트랜스포머 클래스를 활용하면 트랜스포머 구조의 모델을 쉽게 구현할 수 있음\n", + "\n", + "**<트랜스포머 클래스>**\n", + "```\n", + "transformer = torch.nn.Transformer(\n", + " d_model=512,\n", + " nhead=8,\n", + " num_encoder_layers=6,\n", + " num_decoder_layers=6,\n", + " dim_feedforward=2048,\n", + " dropout=0.1,\n", + " activation=torch.nn.functional.relu,\n", + " layer_norm_eps=1e-05,\n", + ")\n", + "```\n", + "- d_model(임베딩 차원): 트랜스포머 모델의 입출력 차원의 크기를 정의\n", + "- head(헤드): 멀티 헤드 어텐션의 헤드 개수를 정의\n", + " - 헤드 개수가 많을수록 병렬 처리 능력이 증가. 하지만 모델 매개변수의 수도 증가\n", + "- num_encoder_layers(인코더 계층 수), num_decoder_layers(디코더 계층 수): 인코더와 디코더의 계층 수\n", + " - 모델의 복잡도와 성능에 영향을 미침\n", + " - 계층 개수가 많을수록 더 복잡한 문제를 해결\n", + " - 너무 많을 경우 과적합 위험\n", + "- dim_feedforward(순방향 신경망 크기): 순방향 신경망의 은닉층 크기를 정의\n", + " - 순방향 신경망 계층은 트랜스포머 계층의 각 입력 위치에 독립적으로 적용\n", + " - 인코더/디코더 계층과 마찬가지로 모델의 복잡도, 성능에 영향을 미침\n", + "- dropout(드롭아웃): 인코더, 디코더 계층에 적용되는 드롭아웃 비율을 적용\n", + "- activivation(활성화 함수): 순방향 신경망에 적용되는 활성화 함수\n", + " - 활성화 함수는 파이토치 함수 형태로 입력\n", + "- layer_norm_eps(계층 정규화 입실론): 계층 장규화를 수행할 때 분모에 더해지는 입실론 값을 정의\n", + "\n", + "**<트랜스포머 순방향 메서드>**\n", + "- 인스턴스의 설정과 입력 시퀀스를 통해 타깃 시퀀스의 임베딩 텐서를 반환\n", + "- [타깃 시퀀스 길이, 배치 크기, 임베딩 차원] 반환\n", + "```\n", + "output = transformer.forward(\n", + " src,\n", + " tgt,\n", + " src_mask=None,\n", + " tgt_mask=None,\n", + " memory_mask=None,\n", + " src_key_padding_mask=None,\n", + " tgt_key_padding_mask=None,\n", + " memory_key_padding_mask=None,\n", + "```\n", + "- src(소스),tgt(타깃): 인코더와 디코더에 대한 시퀀스\n", + " - [소스(타깃) 시퀀스 길이, 배치 크기, 임베딩 차원] 형태의 데이터를 입력\n", + "- src_mask(소스 마스크), tgt_mask(타깃 마스크): 소스와 타깃 시퀀스의 마스크\n", + " - [소스(타킷) 시퀀스 길이, 시퀀스 길이] 형태의 데이터 입력\n", + " - 마스크 값이 0: 해당 위치에서는 모든 입력 단어가 동일한 가중치를 갖고 어텐션 수행\n", + " - 마스크 값이 1: 모든 입력 단어의 가중치가 0으로 설정되어 어텐션 연산이 수행되지 않음\n", + " - 마스크 값이 -inf: 해당 위치에서는 어텐션 연산 결과에 0으로 가중치가 부여돼 마스킹된 위치의 정보를 모델이 무시하게 만듬\n", + " - 마스크 값이 +inf: 모든 입력 단어에 무한대의 가중치가 부여돼 어텐션 연산 결과가 해단 위치에 대한 정보만으로 구성\n", + "\n", + " => 일반적으로 적용하지 않으며 어떤 특정 단어나 위치에 대해 모델이 특별한 관심을 가지도록 할 때만 사용\n", + "- memory_mask(메모리 마스크): 인코더의 출력 마스크\n", + " - [타깃 시퀀스 길이, 소스 시퀀스 길이] 형태\n", + " - 메모리 마스크 값이 0인 위치에서는 어텐션 연산이 수행되지 않음\n", + "- src_key_padding_mask(소스 키 패딩 마스크), tgt_key_padding_mask(타깃 키 패딩 마스크), memory_key_padding_mask(메모리 키 패딩 마스크): 소스, 타깃, 메모리 시퀀스에 대한 패딩 마스크\n", + " - [배치 크기, 소스(타깃) 시퀀스 길이] 형태 입력\n", + " - 메모리 키 패딩 마스크: 소스 키 패딩 마스크와 동일한 형태의 데이터를 입력 받음\n", + " - 키 패딩 마스크: 입력 시퀀스에서 패딩 토큰이 위치한 부분을 가리키는 이진 마스크. 패딩 토큰이 실제 의미를 가지지 않는 것으로 간주되어 해당 위치의 어텐션 연산 결과에 대한 가중치를 0으로 만듬\n", + "\n" + ], + "metadata": { + "id": "6uW4rH-tPCng" + } + }, + { + "cell_type": "markdown", + "source": [ + "### 트랜스포머 모델 선언 방식, 구조" + ], + "metadata": { + "id": "84lQIR_CUQEF" + } + }, + { + "cell_type": "code", + "source": [ + "from torch import optim\n", + "\n", + "# 학습에 사용할 배치 크기와 디바이스 설정\n", + "BATCH_SIZE = 128\n", + "DEVICE = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", + "\n", + "# Seq2SeqTransformer 모델 초기화 및 디바이스로 이동\n", + "model = Seq2SeqTransformer(\n", + " num_encoder_layers=3, # 인코더 레이어 수\n", + " num_decoder_layers=3, # 디코더 레이어 수\n", + " emb_size=512, # 임베딩 및 모델 차원\n", + " max_len=512, # 최대 시퀀스 길이\n", + " nhead=8, # 멀티헤드 어텐션 헤드 수\n", + " src_vocab_size=len(vocab_transform[SRC_LANGUAGE]), # 소스 언어 어휘 크기\n", + " tgt_vocab_size=len(vocab_transform[TGT_LANGUAGE]), # 타겟 언어 어휘 크기\n", + " dim_feedforward=512, # 피드포워드 네트워크 차원\n", + ").to(DEVICE)\n", + "\n", + "# 손실 함수: 패딩 토큰 인덱스 무시\n", + "criterion = nn.CrossEntropyLoss(ignore_index=PAD_IDX).to(DEVICE)\n", + "# 옵티마이저: Adam\n", + "optimizer = optim.Adam(model.parameters())\n", + "\n", + "# 모델 구조 출력 (named_children를 이용한 계층별 모듈 탐색)\n", + "for main_name, main_module in model.named_children():\n", + " print(main_name) # 최상위 모듈 이름 출력\n", + "\n", + " for sub_name, sub_module in main_module.named_children():\n", + " print(f\"L {sub_name}\") # 1단계 하위 모듈\n", + " for ssub_name, ssub_module in sub_module.named_children():\n", + " print(f\"| L {ssub_name}\") # 2단계 하위 모듈\n", + " for sssub_name, sssub_module in ssub_module.named_children():\n", + " print(f\"| | L {sssub_name}\") # 3단계 하위 모듈\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Fmc3JpAtUVbX", + "outputId": "08696a3e-e78c-4a83-d7e7-42cc71f7fa33" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "src_tok_emb\n", + "L embedding\n", + "tgt_tok_emb\n", + "L embedding\n", + "positional_encoding\n", + "L dropout\n", + "transformer\n", + "L encoder\n", + "| L layers\n", + "| | L 0\n", + "| | L 1\n", + "| | L 2\n", + "| L norm\n", + "L decoder\n", + "| L layers\n", + "| | L 0\n", + "| | L 1\n", + "| | L 2\n", + "| L norm\n", + "generator\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "****\n", + "- 입력 임베딩(src_tok_emb, tgt_tok_emb), 위치 인코딩(positional_encoding), 트랜스포머 블록(transformer),로짓 생성(generator)으로 구성\n", + "\n", + "**<구조>**\n", + "- 인코더, 디코더가 각각 세 개(0, 1, 2)의 계층으로 구성\n", + "- 손실 함수: 교차 엔트로피\n", + "- 무시되는 색인(ignore_index) 값을 패딩 토큰(PAD_IDX)을 할당 => 모델이 학습하는 동안 무시해야 할 클래스 레이블을 지정\n", + " - 패딩 토큰: 모델 학습에 사용되지 않으므로 해당 토큰에 대한 레이블을 무시하고 모델이 해당 클래스를 학습하지 않게 함" + ], + "metadata": { + "id": "L1CpdNrnVy3q" + } + }, + { + "cell_type": "markdown", + "source": [ + "### 배치 데이터 생성" + ], + "metadata": { + "id": "kZUrfPJgXBEK" + } + }, + { + "cell_type": "code", + "source": [ + "from torch.utils.data import DataLoader\n", + "from torch.nn.utils.rnn import pad_sequence\n", + "import torch\n", + "\n", + "# 여러 개의 전처리 함수를 인자로 받아 이를 차례로 적용하는 함수를 반환\n", + "def sequential_transforms(*transforms):\n", + " def func(text):\n", + " for transform in transforms:\n", + " text = transform(text)\n", + " return text\n", + " return func\n", + "\n", + "# BOS/EOS 토큰 추가\n", + "def input_transform(token_ids):\n", + " return torch.cat([\n", + " torch.tensor([BOS_IDX]), # 문장 시작 토큰\n", + " torch.tensor(token_ids), # 본래 토큰 ID들\n", + " torch.tensor([EOS_IDX]) # 문장 종료 토큰\n", + " ])\n", + "\n", + "# 집합 함수\n", + "# 배치 단위로 데이터 처리\n", + "def collator(batch):\n", + " src_batch, tgt_batch = [], []\n", + " for src_sample, tgt_sample in batch:\n", + " # 문자열 끝의 \\n을 제거 -> text_transform 변수에 저장된 sequential_transforms 함수 적용\n", + " src_batch.append(text_transform[SRC_LANGUAGE](src_sample.rstrip(\"\\n\")))\n", + " tgt_batch.append(text_transform[TGT_LANGUAGE](tgt_sample.rstrip(\"\\n\")))\n", + " # 패딩 시퀀스 함수를 사용해 소스와 타깃 시퀀스를 패딩\n", + " # 동일한 길이를 가지도록 시퀀스의 뒤쪽에 PAD_IDX(1)로 채워진 패딩 토큰 추가\n", + " src_batch = pad_sequence(src_batch, padding_value=PAD_IDX)\n", + " tgt_batch = pad_sequence(tgt_batch, padding_value=PAD_IDX)\n", + " return src_batch, tgt_batch # [소스(타깃) 시퀀스 길이, 배치 크기]\n", + "\n", + "# 텍스트 → 토큰화 → 인덱스 → BOS/EOS 적용\n", + "text_transform = {}\n", + "for language in [SRC_LANGUAGE, TGT_LANGUAGE]:\n", + " text_transform[language] = sequential_transforms(\n", + " token_transform[language], # 문장 토큰화\n", + " vocab_transform[language], # 각 토큰을 인덱스화\n", + " input_transform # 인덱스화된 토큰에 문장의 시작과 끝을 알리는 특수 토큰 할당\n", + " )\n", + "\n", + "# 로컬 validation 데이터를 한 쌍씩 읽어 리스트로 변환\n", + "# zip 객체는 __len__이 없어 DataLoader가 오류를 내므로, 리스트로 감쌈\n", + "valid_pairs = list(zip(\n", + " read_corpus('validation', SRC_LANGUAGE),\n", + " read_corpus('validation', TGT_LANGUAGE)\n", + "))\n", + "\n", + "# DataLoader 생성\n", + "# (패딩이 적용된 소스, 패딩이 적용된 타깃) 튜플을 반환\n", + "dataloader = DataLoader(\n", + " valid_pairs, # 리스트화된 (src, tgt) 쌍\n", + " batch_size=BATCH_SIZE,\n", + " collate_fn=collator\n", + ")\n", + "\n", + "# 첫 배치 가져오기\n", + "source_tensor, target_tensor = next(iter(dataloader))\n", + "\n", + "# 출력\n", + "print(\"(source, target) raw example:\")\n", + "print(valid_pairs[0]) # 리스트이므로 인덱싱 가능\n", + "\n", + "print(\"source_batch shape:\", source_tensor.shape)\n", + "print(source_tensor)\n", + "\n", + "print(\"target_batch shape:\", target_tensor.shape)\n", + "print(target_tensor)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "aCMEO_MSZgdp", + "outputId": "abfa30c8-36e1-475d-d45e-93dc9cd3d900" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(source, target) raw example:\n", + "('Eine Gruppe von Männern lädt Baumwolle auf einen Lastwagen', 'A group of men are loading cotton onto a truck')\n", + "source_batch shape: torch.Size([35, 128])\n", + "tensor([[ 2, 2, 2, ..., 2, 2, 2],\n", + " [ 14, 5, 5, ..., 5, 21, 5],\n", + " [ 38, 12, 35, ..., 12, 1610, 68],\n", + " ...,\n", + " [ 1, 1, 1, ..., 1, 1, 1],\n", + " [ 1, 1, 1, ..., 1, 1, 1],\n", + " [ 1, 1, 1, ..., 1, 1, 1]])\n", + "target_batch shape: torch.Size([30, 128])\n", + "tensor([[ 2, 2, 2, ..., 2, 2, 2],\n", + " [ 6, 6, 6, ..., 247, 19, 6],\n", + " [ 39, 12, 35, ..., 12, 2943, 61],\n", + " ...,\n", + " [ 1, 1, 1, ..., 1, 1, 1],\n", + " [ 1, 1, 1, ..., 1, 1, 1],\n", + " [ 1, 1, 1, ..., 1, 1, 1]])\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### 어텐션 마스크 생성" + ], + "metadata": { + "id": "n3IlEtgdcYt2" + } + }, + { + "cell_type": "code", + "source": [ + "import torch\n", + "\n", + "# 마스크를 생성하는 함수\n", + "# s x s 크기의 사각 마스크를 만들어, 디코더가 미래 토큰을 보지 못하도록 차단\n", + "def generate_square_subsequent_mask(s):\n", + " # 상삼각 행렬(upper triangular)을 생성하고, transpose하여 하삼각(과 대각선) 부분이 True가 되게 함\n", + " # torch.ones를 사용해 1로 채워진 행렬을 만든 후 torch.triu를 적용하여 상삼각행렬을 생성 -> transpose를 사용하여 행렬을 전치\n", + " mask = (torch.triu(torch.ones((s, s), device=DEVICE)) == 1).transpose(0, 1)\n", + " # mask==0 영역은 -inf, mask==1 영역은 0.0 값으로 채워서 소프트맥스 시 확률이 0이 되도록 설정\n", + " mask = (\n", + " mask.float()\n", + " .masked_fill(mask == 0, float('-inf'))\n", + " .masked_fill(mask == 1, float(0.0))\n", + " )\n", + " return mask\n", + "\n", + "# 패딩 마스크를 생성하는 함수\n", + "# 시퀀스를 입력받아 길이를 계산 -> 마스크 생성 함수로 타깃 시퀀스의 마스크 생성\n", + "def create_mask(src, tgt):\n", + " src_seq_len = src.shape[0] # 소스 시퀀스 길이 (time dimension)\n", + " tgt_seq_len = tgt.shape[0] # 타겟 시퀀스 길이\n", + "\n", + " # 디코더용 인과적(causal) 마스크: 미래 토큰 정보 차단\n", + " tgt_mask = generate_square_subsequent_mask(tgt_seq_len)\n", + " # 인코더용 마스크: 패딩만 처리하므로 전부 False (정보 차단 없음)\n", + " # 소스 시퀀스 길이의 크기로 채워진 행렬을 생성\n", + " src_mask = torch.zeros((src_seq_len, src_seq_len), device=DEVICE, dtype=torch.bool)\n", + "\n", + " # 패딩 토큰 위치를 True로 표시 (batch dimension 기준)\n", + " # (src == PAD_IDX) -> (time_steps, batch) 형태 -> transpose -> (batch, time_steps)\n", + " src_padding_mask = (src == PAD_IDX).transpose(0, 1)\n", + " tgt_padding_mask = (tgt == PAD_IDX).transpose(0, 1)\n", + "\n", + " return src_mask, tgt_mask, src_padding_mask, tgt_padding_mask\n", + "\n", + "# 토큰 순서를 한 칸 shift => 이전 토큰들이 주어졌을 때 다음 토큰을 예측\n", + "target_input = target_tensor[:-1, :]\n", + "target_out = target_tensor[1:, :]\n", + "\n", + "# 실제 마스크 생성 호출\n", + "# 소스 시퀀스 입력값과 타깃 시퀀스 입력값을 전달 -> 4개의 텐서 생성\n", + "source_mask, target_mask, source_padding_mask, target_padding_mask = create_mask(\n", + " source_tensor,\n", + " target_input\n", + ")\n", + "'''\n", + "- source_mask: 셀프 어텐션 과정에서 참조되는 소스 데이터의 시퀀스 범위\n", + " - False인 위치 => 셀프 어텐션에 참조되는 토큰\n", + " - True인 위치 => 어텐션에서 제외되는 토큰\n", + "\n", + "- target_mask: [쿼리 시퀀스 길이, 키 시퀀스 길이]의 형태로 구성\n", + " - i번째 쿼리 벡터는 i+1 이상의 키 벡터에 대해 어텐션 연산을 수행할 수 없게 됨\n", + " - 모델이 현재 예측하고자 하는 위치 이전의 토큰들만 참고하게 제한 => 모델이 미래 시점의 정보 X => 현재 시점에 영향 X\n", + "\n", + "- source_padding_mask, target_padding_mask: 소스(타깃) 배치 데이터에서 텍스트 토큰이 존재하는지 여부를 나타내는 값\n", + " - False인 경우 => 해당 토큰 인덱스가 존재\n", + " - True인 경우 => 해당 토큰 인덱스가 패딩 토큰으로 채워져 있음\n", + "'''\n", + "\n", + "# 생성된 마스크 및 패딩 마스크 형태와 값을 확인\n", + "print(\"source_mask:\", source_mask.shape)\n", + "print(source_mask)\n", + "\n", + "print(\"target_mask:\", target_mask.shape)\n", + "print(target_mask)\n", + "\n", + "print(\"source_padding_mask:\", source_padding_mask.shape)\n", + "print(source_padding_mask)\n", + "\n", + "print(\"target_padding_mask:\", target_padding_mask.shape)\n", + "print(target_padding_mask)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zFLmjOsLfAJk", + "outputId": "d832f36d-2e88-434f-b782-dfebe49bb066" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "source_mask: torch.Size([35, 35])\n", + "tensor([[False, False, False, ..., False, False, False],\n", + " [False, False, False, ..., False, False, False],\n", + " [False, False, False, ..., False, False, False],\n", + " ...,\n", + " [False, False, False, ..., False, False, False],\n", + " [False, False, False, ..., False, False, False],\n", + " [False, False, False, ..., False, False, False]], device='cuda:0')\n", + "target_mask: torch.Size([29, 29])\n", + "tensor([[0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -inf, -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -inf,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " -inf, -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., -inf, -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., -inf, -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., -inf, -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., -inf],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0.]], device='cuda:0')\n", + "source_padding_mask: torch.Size([128, 35])\n", + "tensor([[False, False, False, ..., True, True, True],\n", + " [False, False, False, ..., True, True, True],\n", + " [False, False, False, ..., True, True, True],\n", + " ...,\n", + " [False, False, False, ..., True, True, True],\n", + " [False, False, False, ..., True, True, True],\n", + " [False, False, False, ..., True, True, True]])\n", + "target_padding_mask: torch.Size([128, 29])\n", + "tensor([[False, False, False, ..., True, True, True],\n", + " [False, False, False, ..., True, True, True],\n", + " [False, False, False, ..., True, True, True],\n", + " ...,\n", + " [False, False, False, ..., True, True, True],\n", + " [False, False, False, ..., True, True, True],\n", + " [False, False, False, ..., True, True, True]])\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### 모델 학습, 평가" + ], + "metadata": { + "id": "OO83HWgXho0t" + } + }, + { + "cell_type": "code", + "source": [ + "# 모델 학습 및 평가를 위한 함수\n", + "# 소스와 타깃 데이터를 입력받아 collator로 문장들을 토큰화하고 인덱스로 변환\n", + "def run(model, optimizer, criterion, split):\n", + " # 모델 모드 설정: train 모드일 때만 파라미터 업데이트 허용\n", + " if split == \"training\":\n", + " model.train()\n", + " else:\n", + " model.eval()\n", + "\n", + " # 로컬 파일을 직접 읽어서 (src, tgt) 쌍 리스트 생성\n", + " # 'training'→train.de/ train.en, 'validation'→val.de/ val.en 사용\n", + " data_iter = list(zip(\n", + " read_corpus(split, SRC_LANGUAGE),\n", + " read_corpus(split, TGT_LANGUAGE)\n", + " ))\n", + "\n", + " # DataLoader 준비 (collator로 패딩)\n", + " dataloader = DataLoader(\n", + " data_iter,\n", + " batch_size=BATCH_SIZE,\n", + " collate_fn=collator\n", + " )\n", + "\n", + " total_loss = 0.0\n", + " # 배치 단위 반복\n", + " for source_batch, target_batch in dataloader:\n", + " # GPU/CPU로 배치 이동\n", + " source_batch = source_batch.to(DEVICE)\n", + " target_batch = target_batch.to(DEVICE)\n", + "\n", + " # 디코더 입력/출력 분리 (right-shift)\n", + " # 입력은 처음부터 끝-1, 출력은 두번째부터 끝까지\n", + " target_input = target_batch[:-1, :]\n", + " target_output = target_batch[1:, :]\n", + "\n", + " # create_mask: 입력 패딩 마스크, 어텐션 마스크 생성\n", + " # 결괏값: 타깃 시퀀스의 i번째까지 토큰이 주어졌을 때 i+1번째 토큰을 예측하는 데 활용\n", + " src_mask, tgt_mask, src_pad_mask, tgt_pad_mask = create_mask(\n", + " source_batch, target_input\n", + " )\n", + "\n", + " # 순전파: 모델에 입력하고 로짓(logits) 반환\n", + " logits = model(\n", + " src=source_batch,\n", + " trg=target_input,\n", + " src_mask=src_mask,\n", + " tgt_mask=tgt_mask,\n", + " src_padding_mask=src_pad_mask,\n", + " tgt_padding_mask=tgt_pad_mask,\n", + " memory_key_padding_mask=src_pad_mask\n", + " )\n", + "\n", + " # 손실 계산\n", + " # 로짓과 정답을 reshape해 (토큰수×배치, vocab_size) vs (토큰수×배치) 형태로 맞춤\n", + " loss = criterion(\n", + " logits.reshape(-1, logits.size(-1)),\n", + " target_output.reshape(-1)\n", + " )\n", + "\n", + " # train split에서만 역전파 및 파라미터 업데이트\n", + " if split == \"training\":\n", + " optimizer.zero_grad()\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " # 배치 손실 누적\n", + " total_loss += loss.item()\n", + "\n", + " # 평균 손실 반환\n", + " return total_loss / len(list(dataloader))\n", + "\n", + "\n", + "# 실제 학습/평가 루프: 5 epochs 실행\n", + "for epoch in range(1, 6):\n", + " train_loss = run(model, optimizer, criterion, \"training\")\n", + " val_loss = run(model, optimizer, criterion, \"validation\")\n", + " print(f\"Epoch {epoch}: Train Loss = {train_loss:.3f}, Val Loss = {val_loss:.3f}\")\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Pb1cW7iV0lfS", + "outputId": "108fab60-2dd9-438c-d997-c893283af443" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1: Train Loss = 5.403, Val Loss = 5.007\n", + "Epoch 2: Train Loss = 4.952, Val Loss = 4.868\n", + "Epoch 3: Train Loss = 4.734, Val Loss = 5.008\n", + "Epoch 4: Train Loss = 4.634, Val Loss = 4.702\n", + "Epoch 5: Train Loss = 4.742, Val Loss = 5.226\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### 트랜스포머 모델 번역 결과" + ], + "metadata": { + "id": "NZrLp6qw-xLa" + } + }, + { + "cell_type": "code", + "source": [ + "# 그리디 디코딩 함수 (Greedy Decoding)\n", + "# - 주어진 source 텐서로부터 한 토큰씩 예측하며, 가장 높은 확률의 단어를 선택\n", + "# - max_len 토큰까지 생성하되, EOS 토큰이 나오면 중단\n", + "# - 현재 시점에서 가장 확률이 높은 단어를 선택하여 디코딩\n", + "def greedy_decode(model, source_tensor, source_mask, max_len, start_symbol):\n", + " # 디바이스로 이동\n", + " source_tensor = source_tensor.to(DEVICE)\n", + " source_mask = source_mask.to(DEVICE)\n", + "\n", + " # 모델 추론 방식: 디코더에 참조되느 마지막 인코더 트랜스포머 블록의 벡터(memory), 타깃데이터의 입력 텐서(ys), 타깃 마스크(target_mask)사용\n", + " # 소스 문장을 토큰 인덱스로 표현한 source_tensor 생성\n", + " # source_mask는 소스문장에서 모든 토큰이 어텐션 될 수 있게 0으로 설정\n", + " # .encode: source_tensor, source_mask 입력으로 넣어 소스 문장에 대한 인코딩 수행 -> 마지막 인코더 트랜스포머 블록의 벡터 추출\n", + " memory = model.encode(source_tensor, source_mask)\n", + "\n", + "\n", + " # 디코더 입력 초기화: 시작 토큰(BOS)로 시작\n", + " ys = torch.ones(1, 1).fill_(start_symbol).long().to(DEVICE)\n", + "\n", + " # 최대 길이만큼 반복\n", + " for i in range(max_len - 1):\n", + " # ensure memory on correct device\n", + " memory = memory.to(DEVICE)\n", + " # 디코더용 subsequent mask 생성 (미래 토큰 정보 차단)\n", + " target_mask = generate_square_subsequent_mask(ys.size(0))\n", + " target_mask = target_mask.bool().to(DEVICE)\n", + "\n", + " # 디코더 실행: 현재까지 생성된 ys + memory + mask -> decoder outputs\n", + " # out: [토큰 개수, 배치 크기, 확률] 형태\n", + " out = model.decode(ys, memory, target_mask)\n", + " # (T, N, E) -> (N, T, E) 형태로 변환\n", + " out = out.transpose(0, 1) # [배치 크기, 토큰 개수, 확률] 형태로 변환\n", + "\n", + " # 마지막 시점의 로짓을 generator(선형층)에 전달하여 어휘 차원 점수 획득\n", + " prob = model.generator(out[:, -1]) # 슬라이싱 -> [배치 크기, 확률] 형태\n", + " # 가장 높은 점수를 갖는 단어 인덱스 선택\n", + " _, next_word = torch.max(prob, dim=1)\n", + " next_word = next_word.item()\n", + "\n", + " # 선택된 단어를 ys 뒤에 추가\n", + " ys = torch.cat([\n", + " ys,\n", + " torch.tensor([[next_word]], device=DEVICE, dtype=ys.dtype)\n", + " ], dim=0)\n", + "\n", + " # EOS 토큰이 생성되면 중단\n", + " if next_word == EOS_IDX:\n", + " break\n", + "\n", + " return ys # 생성된 토큰 시퀀스 반환 (including BOS and EOS)\n", + "\n", + "# 번역 함수 (Translate)\n", + "# - 입력 문장을 텍스트 -> 토큰 -> 인덱스 -> 텐서로 변환\n", + "# - greedy_decode로 디코딩 후, 인덱스를 다시 토큰(단어)로 변환\n", + "def translate(model, source_sentence):\n", + " # 평가 모드 설정\n", + " model.eval()\n", + "\n", + " # source 문장 전처리: 토큰화 -> 인덱스 변환 -> (time, 1) 형태 텐서\n", + " source_tensor = text_transform[SRC_LANGUAGE](source_sentence).view(-1, 1)\n", + " num_tokens = source_tensor.size(0)\n", + "\n", + " # 인코더 마스크: 패딩 없이 모두 False\n", + " src_mask = torch.zeros(num_tokens, num_tokens, dtype=torch.bool).to(DEVICE)\n", + "\n", + " # greedy 디코딩 수행\n", + " # max_len 이전이거나 EOD_IDX를 예측할 때까지 반복\n", + " # 예측된 토큰 시퀀스를 반환\n", + " tgt_tokens = greedy_decode(\n", + " model,\n", + " source_tensor,\n", + " src_mask,\n", + " # num_tokens: 소스 문장의 토큰 개수\n", + " # 일반적으로 생성된 문장의 길이가 소스 문장 길이보다 약간 더 길어지는 경우가 많기 때문에 5를 더함\n", + " max_len=start_symbol if False else num_tokens + 5,\n", + " start_symbol=BOS_IDX\n", + " ).flatten()\n", + "\n", + " # 예측된 토큰 인덱스를 lookup_tokens를 통해 실제 단어로 변환\n", + " # , 토큰을 슬라이싱으로 제거\n", + " generated_tokens = tgt_tokens.cpu().tolist()\n", + " output_tokens = vocab_transform[TGT_LANGUAGE].lookup_tokens(generated_tokens)[:-1]\n", + "\n", + " # 공백으로 결합하여 최종 번역문 리턴\n", + " return \" \".join(output_tokens)\n", + "\n", + "# 예시 실행\n", + "# - OOV(Out-of-Vocabulary) 예시\n", + "output_oov = translate(model, \"Eine Gruppe von Menschen steht vor einem Iglu.\")\n", + "# - 일반 문장 예시\n", + "output = translate(model, \"Eine Gruppe von Menschen steht vor einem Gebäude .\")\n", + "\n", + "print(output_oov)\n", + "print(output)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "38_pnhkFC-4G", + "outputId": "641ef264-a20a-44fd-d159-2ffa807fbbf3" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " A man a .\n", + " A man a .\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# GPT" + ], + "metadata": { + "id": "9BJoMJyQLnrd" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 모델 실습\n", + "- 허깅 페이스 트랜스포머스 라이브러리의 GPT-2 모델로 문장 생성" + ], + "metadata": { + "id": "1OulhsAjdz89" + } + }, + { + "cell_type": "markdown", + "source": [ + "### GPT-2 모델 구조 확인" + ], + "metadata": { + "id": "xyHZ7dFud5GU" + } + }, + { + "cell_type": "code", + "source": [ + "from transformers import GPT2LMHeadModel\n", + "\n", + "# from_pretained 메서드로 사전 학습된 GPT-2 로드\n", + "# pretrained_model_name_or_path 매개변수: 불러오려는 사전 학습된 모델\n", + "model = GPT2LMHeadModel.from_pretrained(pretrained_model_name_or_path=\"gpt2\")\n", + "\n", + "for main_name, main_module in model.named_children():\n", + " print(main_name)\n", + " for sub_name, sub_module in main_module.named_children():\n", + " print(\"L \", sub_name)\n", + " for ssub_name, ssub_module in sub_module.named_children():\n", + " print(\"| L \", ssub_name)\n", + " for sssub_name, sssub_module in ssub_module.named_children():\n", + " print(\"| | L \", sssub_name)" + ], + "metadata": { + "id": "9xWLhfx9LnXy", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "a284d418-378f-4d81-9dc6-ef933838a19e" + }, + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.11/dist-packages/huggingface_hub/utils/_auth.py:94: UserWarning: \n", + "The secret `HF_TOKEN` does not exist in your Colab secrets.\n", + "To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.\n", + "You will be able to reuse this secret in all of your notebooks.\n", + "Please note that authentication is recommended but still optional to access public models or datasets.\n", + " warnings.warn(\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "transformer\n", + "L wte\n", + "L wpe\n", + "L drop\n", + "L h\n", + "| L 0\n", + "| | L ln_1\n", + "| | L attn\n", + "| | L ln_2\n", + "| | L mlp\n", + "| L 1\n", + "| | L ln_1\n", + "| | L attn\n", + "| | L ln_2\n", + "| | L mlp\n", + "| L 2\n", + "| | L ln_1\n", + "| | L attn\n", + "| | L ln_2\n", + "| | L mlp\n", + "| L 3\n", + "| | L ln_1\n", + "| | L attn\n", + "| | L ln_2\n", + "| | L mlp\n", + "| L 4\n", + "| | L ln_1\n", + "| | L attn\n", + "| | L ln_2\n", + "| | L mlp\n", + "| L 5\n", + "| | L ln_1\n", + "| | L attn\n", + "| | L ln_2\n", + "| | L mlp\n", + "| L 6\n", + "| | L ln_1\n", + "| | L attn\n", + "| | L ln_2\n", + "| | L mlp\n", + "| L 7\n", + "| | L ln_1\n", + "| | L attn\n", + "| | L ln_2\n", + "| | L mlp\n", + "| L 8\n", + "| | L ln_1\n", + "| | L attn\n", + "| | L ln_2\n", + "| | L mlp\n", + "| L 9\n", + "| | L ln_1\n", + "| | L attn\n", + "| | L ln_2\n", + "| | L mlp\n", + "| L 10\n", + "| | L ln_1\n", + "| | L attn\n", + "| | L ln_2\n", + "| | L mlp\n", + "| L 11\n", + "| | L ln_1\n", + "| | L attn\n", + "| | L ln_2\n", + "| | L mlp\n", + "L ln_f\n", + "lm_head\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "**<모델 구조>**\n", + "- 48개의 디코더 계층을 사용하는 모델이 아니하, 12개의 디코더 계층을 사용하는 간소화 모델인 gpt2 사용\n", + " - 48개의 디코더 계층을 사용하는 모델 => gpt2-xl\n", + "- wte: 단어 토큰 임베딩\n", + "- wpe: 단어 위치 임베딩\n", + "- drop: 드롭아웃\n", + "- h: 트랜스포머 디코더 계층\n", + "- lm_head: 선형 임베딩 및 언어 모델" + ], + "metadata": { + "id": "Z5QuKfnne9qB" + } + }, + { + "cell_type": "markdown", + "source": [ + "### GPT-2를 이용한 문장 생성\n", + "- 트랜스포머스 라이브러리의 파이프라인 함수\n", + "\n", + " : 문장 분류, 문장 생성, 토큰 분류 등 다양한 작업에 대한 전처리, 모델 아키텍처, 후처리를 처리" + ], + "metadata": { + "id": "aZVAVadefqZv" + } + }, + { + "cell_type": "code", + "source": [ + "from transformers import pipeline\n", + "'''\n", + "파이프라인 클래스\n", + " - 입력된 작업(task)에 모델(model)로 적합한 파이프라인을 구축\n", + " - 작업 매개변수: 수행하려는 작업\n", + " - 반환: 설정한 작업을 수행하는 파이프라인 클래스의 인스턴스\n", + "\n", + "'''\n", + "generator = pipeline(task=\"text-generation\", model=\"gpt2\") # 매개변수: task, model\n", + "# text-generation: 텍스트 생성 작업 -> TextGenerationPipeline 클래스 생성\n", + "\n", + "outputs = generator(\n", + " text_inputs=\"Machine learning is \", # 생성하려는 문장의 입력 문맥\n", + " max_length=20, # 생성될 문장의 최대 토큰 수를 제한\n", + " num_return_sequences=3, # 생성할 텍스트 시퀀스의 수\n", + " pad_token_id=generator.tokenizer.eos_token_id) # 모델의 자유 생성 여부. 모델이 입력된 문장의 문맥을 기반으로 자유롭게 다음 단어/문장 생성\n", + "\n", + "print(outputs)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "mGilj7XSf665", + "outputId": "dd3631bf-2a6d-4c21-c891-67c1413f5148" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Device set to use cuda:0\n", + "Truncation was not explicitly activated but `max_length` is provided a specific value, please use `truncation=True` to explicitly truncate examples to max length. Defaulting to 'longest_first' truncation strategy. If you encode pairs of sequences (GLUE-style) with the tokenizer you can select this strategy more precisely by providing a specific strategy to `truncation`.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[{'generated_text': 'Machine learning is 그이 안가귭. This'}, {'generated_text': 'Machine learning is \\xa0really\\xa0hard. Here, the task is to get at the bottom of'}, {'generated_text': 'Machine learning is iced on the spot and I am amazed at how well it can be applied in'}]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### 다운스트림 작업에 활용\n", + "- GPT-2 모델은 선형 임베딩 층을 이용해 텍스트 분류 등 다양한 다운스트림 작업에 활용\n", + "- CoLA(The Corpus of Limguistic Acceptability) 데이터세트를 이용해 모델을 학습" + ], + "metadata": { + "id": "bjth4wy-inYJ" + } + }, + { + "cell_type": "markdown", + "source": [ + "#### CoLA 데이터세트 로드\n", + "- 문법적으로 올바른 문장과 올바르지 않은 문장을 포함하는 영어 문장 말뭉치 데이터세트\n", + "- train, dev, test로 구성\n", + " - train: 모델 학습에 사용\n", + " - dev: 모델 검증에 사용\n", + " - test: 모델 성능 평가에 사용" + ], + "metadata": { + "id": "4pvnA_g1i8Wu" + } + }, + { + "cell_type": "code", + "source": [ + "!pip install torchtext" + ], + "metadata": { + "id": "l5JsX4IujFlH" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "import torch\n", + "from torchtext.datasets import CoLA\n", + "from transformers import AutoTokenizer\n", + "from torch.utils.data import DataLoader\n", + "\n", + "# 데이터 배치 하나를 처리하는 함수 정의\n", + "# 배치를 토크나이저로 토큰화, 패딩, 절사, 반환 형식 설정 작업 수행\n", + "def collator(batch, tokenizer, device):\n", + " source, labels, texts = zip(*batch) # 배치 데이터를 튜플 형식으로 분리 (source는 사용하지 않음)\n", + " tokenized = tokenizer(\n", + " texts, # 문장 리스트\n", + " padding=\"longest\", # 가장 긴 문장에 맞춰 padding 적용\n", + " truncation=True, # 최대 길이를 초과하는 경우 해당 시퀀스를 자름\n", + " return_tensors=\"pt\" # PyTorch 텐서로 결과 반환\n", + " )\n", + " input_ids = tokenized[\"input_ids\"].to(device) # input_ids 텐서를 GPU 또는 CPU로 이동\n", + " attention_mask = tokenized[\"attention_mask\"].to(device) # attention mask도 동일하게 처리\n", + " labels = torch.tensor(labels, dtype=torch.long).to(device) # 라벨을 LongTensor로 변환 후 디바이스로 이동\n", + " return input_ids, attention_mask, labels # 토큰 ID, 어텐션 마스크 반환\n", + " # 토큰 ID: 토크나이저가 각 토큰에 대해 부여한 숫자 ID를 담고 있음\n", + " # 어텐션 마스크: 입력 문장의 실제 단어에 대응하는 부분은 1, 패딩에 대응하는 부분은 0으로 채움\n", + " # GPT 모델은 어텐션 마스크를 이용해 입력 문장에서 패딩 부분을 무시하고 실제 단어에 대해 처리\n", + "\n", + "# CoLA 데이터셋 로드 (train, dev, test로 분할)\n", + "train_data = list(CoLA(split=\"train\"))\n", + "valid_data = list(CoLA(split=\"dev\"))\n", + "test_data = list(CoLA(split=\"test\"))\n", + "\n", + "# GPT-2용 tokenizer 불러오기\n", + "tokenizer = AutoTokenizer.from_pretrained(\"gpt2\")\n", + "# GPT-2는 사전 학습 시 패딩 기법을 사용 X => 패딩 토큰이 포함되어있지 않음 => 문장의 끝을 의미하는 eos 토큰으로 대체\n", + "tokenizer.pad_token = tokenizer.eos_token\n", + "\n", + "# 학습 관련 설정\n", + "epochs = 3\n", + "batch_size = 16\n", + "device = \"cuda\" if torch.cuda.is_available() else \"cpu\" # GPU 사용 가능하면 cuda, 아니면 cpu\n", + "\n", + "# 학습 데이터 로더 생성\n", + "train_dataloader = DataLoader(\n", + " train_data,\n", + " batch_size=batch_size,\n", + " collate_fn=lambda x: collator(x, tokenizer, device), # 배치마다 collator 적용\n", + " shuffle=True, # 학습 시 셔플 적용\n", + ")\n", + "\n", + "# 검증 데이터 로더 생성\n", + "valid_dataloader = DataLoader(\n", + " valid_data,\n", + " batch_size=batch_size,\n", + " collate_fn=lambda x: collator(x, tokenizer, device)\n", + ")\n", + "\n", + "# 테스트 데이터 로더 생성\n", + "test_dataloader = DataLoader(\n", + " test_data,\n", + " batch_size=batch_size,\n", + " collate_fn=lambda x: collator(x, tokenizer, device)\n", + ")\n", + "\n", + "# 데이터셋 크기 출력\n", + "print(\"Train Dataset Length: \", len(train_data))\n", + "print(\"Valid Dataset Length: \", len(valid_data))\n", + "print(\"Test Dataset Length: \", len(test_data))\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "hEXKL4kmjAOh", + "outputId": "d056dcd0-b02c-4691-c392-3bfed71c5f8b" + }, + "execution_count": 3, + "outputs": [ + { + "output_type": "error", + "ename": "OSError", + "evalue": "/usr/local/lib/python3.11/dist-packages/torchtext/lib/libtorchtext.so: undefined symbol: _ZN5torch3jit17parseSchemaOrNameERKSs", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mOSError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mtorchtext\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatasets\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mCoLA\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtransformers\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mAutoTokenizer\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mDataLoader\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchtext/__init__.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;31m# the following import has to happen first in order to load the torchtext C++ library\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 18\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mtorchtext\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0m_extension\u001b[0m \u001b[0;31m# noqa: F401\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 19\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0m_TEXT_BUCKET\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"https://download.pytorch.org/models/text/\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchtext/_extension.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 64\u001b[0;31m \u001b[0m_init_extension\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchtext/_extension.py\u001b[0m in \u001b[0;36m_init_extension\u001b[0;34m()\u001b[0m\n\u001b[1;32m 56\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mImportError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"torchtext C++ Extension is not found.\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 58\u001b[0;31m \u001b[0m_load_lib\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"libtorchtext\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 59\u001b[0m \u001b[0;31m# This import is for initializing the methods registered via PyBind11\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 60\u001b[0m \u001b[0;31m# This has to happen after the base library is loaded\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torchtext/_extension.py\u001b[0m in \u001b[0;36m_load_lib\u001b[0;34m(lib)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mpath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexists\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 50\u001b[0;31m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_library\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 51\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 52\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/_ops.py\u001b[0m in \u001b[0;36mload_library\u001b[0;34m(self, path)\u001b[0m\n\u001b[1;32m 1355\u001b[0m \u001b[0;31m# static (global) initialization code in order to register custom\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1356\u001b[0m \u001b[0;31m# operators with the JIT.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1357\u001b[0;31m \u001b[0mctypes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mCDLL\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1358\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloaded_libraries\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1359\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/lib/python3.11/ctypes/__init__.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, name, mode, handle, use_errno, use_last_error, winmode)\u001b[0m\n\u001b[1;32m 374\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 375\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mhandle\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 376\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_handle\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_dlopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 377\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 378\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_handle\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhandle\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mOSError\u001b[0m: /usr/local/lib/python3.11/dist-packages/torchtext/lib/libtorchtext.so: undefined symbol: _ZN5torch3jit17parseSchemaOrNameERKSs" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "##### 오류로 인한 huggingface 데이터세트 사용" + ], + "metadata": { + "id": "wF7t3uEEmH_Y" + } + }, + { + "cell_type": "code", + "source": [ + "!pip install -U datasets fsspec huggingface_hub" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "hwWNg_r9liYU", + "outputId": "ea926d5d-f285-4dfb-c07a-d7bbac1d78ed" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: datasets in /usr/local/lib/python3.11/dist-packages (2.14.4)\n", + "Collecting datasets\n", + " Downloading datasets-3.6.0-py3-none-any.whl.metadata (19 kB)\n", + "Requirement already satisfied: fsspec in /usr/local/lib/python3.11/dist-packages (2025.3.2)\n", + "Collecting fsspec\n", + " Downloading fsspec-2025.5.1-py3-none-any.whl.metadata (11 kB)\n", + "Requirement already satisfied: huggingface_hub in /usr/local/lib/python3.11/dist-packages (0.31.2)\n", + "Collecting huggingface_hub\n", + " Downloading huggingface_hub-0.32.0-py3-none-any.whl.metadata (14 kB)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from datasets) (3.18.0)\n", + "Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.11/dist-packages (from datasets) (2.0.2)\n", + "Requirement already satisfied: pyarrow>=15.0.0 in /usr/local/lib/python3.11/dist-packages (from datasets) (18.1.0)\n", + "Requirement already satisfied: dill<0.3.9,>=0.3.0 in /usr/local/lib/python3.11/dist-packages (from datasets) (0.3.7)\n", + "Requirement already satisfied: pandas in /usr/local/lib/python3.11/dist-packages (from datasets) (2.2.2)\n", + "Requirement already satisfied: requests>=2.32.2 in /usr/local/lib/python3.11/dist-packages (from datasets) (2.32.3)\n", + "Requirement already satisfied: tqdm>=4.66.3 in /usr/local/lib/python3.11/dist-packages (from datasets) (4.67.1)\n", + "Requirement already satisfied: xxhash in /usr/local/lib/python3.11/dist-packages (from datasets) (3.5.0)\n", + "Requirement already satisfied: multiprocess<0.70.17 in /usr/local/lib/python3.11/dist-packages (from datasets) (0.70.15)\n", + "Collecting fsspec\n", + " Downloading fsspec-2025.3.0-py3-none-any.whl.metadata (11 kB)\n", + "Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from datasets) (24.2)\n", + "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.11/dist-packages (from datasets) (6.0.2)\n", + "Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.11/dist-packages (from huggingface_hub) (4.13.2)\n", + "Collecting hf-xet<2.0.0,>=1.1.2 (from huggingface_hub)\n", + " Downloading hf_xet-1.1.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (879 bytes)\n", + "Requirement already satisfied: aiohttp!=4.0.0a0,!=4.0.0a1 in /usr/local/lib/python3.11/dist-packages (from fsspec[http]<=2025.3.0,>=2023.1.0->datasets) (3.11.15)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests>=2.32.2->datasets) (3.4.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests>=2.32.2->datasets) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests>=2.32.2->datasets) (2.4.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests>=2.32.2->datasets) (2025.4.26)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.11/dist-packages (from pandas->datasets) (2.9.0.post0)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas->datasets) (2025.2)\n", + "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas->datasets) (2025.2)\n", + "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2025.3.0,>=2023.1.0->datasets) (2.6.1)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.11/dist-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2025.3.0,>=2023.1.0->datasets) (1.3.2)\n", + "Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2025.3.0,>=2023.1.0->datasets) (25.3.0)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.11/dist-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2025.3.0,>=2023.1.0->datasets) (1.6.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.11/dist-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2025.3.0,>=2023.1.0->datasets) (6.4.3)\n", + "Requirement already satisfied: propcache>=0.2.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2025.3.0,>=2023.1.0->datasets) (0.3.1)\n", + "Requirement already satisfied: yarl<2.0,>=1.17.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2025.3.0,>=2023.1.0->datasets) (1.20.0)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.8.2->pandas->datasets) (1.17.0)\n", + "Downloading datasets-3.6.0-py3-none-any.whl (491 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m491.5/491.5 kB\u001b[0m \u001b[31m17.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading fsspec-2025.3.0-py3-none-any.whl (193 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m193.6/193.6 kB\u001b[0m \u001b[31m13.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading huggingface_hub-0.32.0-py3-none-any.whl (509 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m509.3/509.3 kB\u001b[0m \u001b[31m37.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading hf_xet-1.1.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.2/5.2 MB\u001b[0m \u001b[31m90.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: hf-xet, fsspec, huggingface_hub, datasets\n", + " Attempting uninstall: fsspec\n", + " Found existing installation: fsspec 2025.3.2\n", + " Uninstalling fsspec-2025.3.2:\n", + " Successfully uninstalled fsspec-2025.3.2\n", + " Attempting uninstall: huggingface_hub\n", + " Found existing installation: huggingface-hub 0.31.2\n", + " Uninstalling huggingface-hub-0.31.2:\n", + " Successfully uninstalled huggingface-hub-0.31.2\n", + " Attempting uninstall: datasets\n", + " Found existing installation: datasets 2.14.4\n", + " Uninstalling datasets-2.14.4:\n", + " Successfully uninstalled datasets-2.14.4\n", + "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "gcsfs 2025.3.2 requires fsspec==2025.3.2, but you have fsspec 2025.3.0 which is incompatible.\n", + "torch 2.6.0+cu124 requires nvidia-cublas-cu12==12.4.5.8; platform_system == \"Linux\" and platform_machine == \"x86_64\", but you have nvidia-cublas-cu12 12.5.3.2 which is incompatible.\n", + "torch 2.6.0+cu124 requires nvidia-cuda-cupti-cu12==12.4.127; platform_system == \"Linux\" and platform_machine == \"x86_64\", but you have nvidia-cuda-cupti-cu12 12.5.82 which is incompatible.\n", + "torch 2.6.0+cu124 requires nvidia-cuda-nvrtc-cu12==12.4.127; platform_system == \"Linux\" and platform_machine == \"x86_64\", but you have nvidia-cuda-nvrtc-cu12 12.5.82 which is incompatible.\n", + "torch 2.6.0+cu124 requires nvidia-cuda-runtime-cu12==12.4.127; platform_system == \"Linux\" and platform_machine == \"x86_64\", but you have nvidia-cuda-runtime-cu12 12.5.82 which is incompatible.\n", + "torch 2.6.0+cu124 requires nvidia-cudnn-cu12==9.1.0.70; platform_system == \"Linux\" and platform_machine == \"x86_64\", but you have nvidia-cudnn-cu12 9.3.0.75 which is incompatible.\n", + "torch 2.6.0+cu124 requires nvidia-cufft-cu12==11.2.1.3; platform_system == \"Linux\" and platform_machine == \"x86_64\", but you have nvidia-cufft-cu12 11.2.3.61 which is incompatible.\n", + "torch 2.6.0+cu124 requires nvidia-curand-cu12==10.3.5.147; platform_system == \"Linux\" and platform_machine == \"x86_64\", but you have nvidia-curand-cu12 10.3.6.82 which is incompatible.\n", + "torch 2.6.0+cu124 requires nvidia-cusolver-cu12==11.6.1.9; platform_system == \"Linux\" and platform_machine == \"x86_64\", but you have nvidia-cusolver-cu12 11.6.3.83 which is incompatible.\n", + "torch 2.6.0+cu124 requires nvidia-cusparse-cu12==12.3.1.170; platform_system == \"Linux\" and platform_machine == \"x86_64\", but you have nvidia-cusparse-cu12 12.5.1.3 which is incompatible.\n", + "torch 2.6.0+cu124 requires nvidia-nvjitlink-cu12==12.4.127; platform_system == \"Linux\" and platform_machine == \"x86_64\", but you have nvidia-nvjitlink-cu12 12.5.82 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0mSuccessfully installed datasets-3.6.0 fsspec-2025.3.0 hf-xet-1.1.2 huggingface_hub-0.32.0\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.colab-display-data+json": { + "pip_warning": { + "packages": [ + "datasets", + "huggingface_hub" + ] + }, + "id": "b2867a86d9cf410aa16b38e652adc1ff" + } + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "from datasets import load_dataset\n", + "\n", + "dataset = load_dataset(\"glue\", \"cola\") # 자동으로 로컬에 캐시됨\n", + "train_data = dataset[\"train\"]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 452, + "referenced_widgets": [ + "d88ee8862d1f4d07a719a84b1d3d85af", + "99e0b7dd61824015a4aedc0ba20480e8", + "07ced432d5e64e8ab9a7be8dccfc7416", + "b4dcdf26bebf44b5ad949deb096de593", + "04e289bf791c4683ba529f268478523c", + "d8f592c7966246ad8e846cb775864fcf", + "dd8e0a49e2d845ff837f19c1c1392559", + "e2af8840c5d548c69a0805fe124b9f29", + "4dd6d600923b4687aab3ce5a071d6a70", + "2a1136c9f8ec403daf8a971631cfc862", + "afde7e3ea8c040839bfc7e45d335cc91", + "33e27bedf0bf4b63bd487b2e06c5b619", + "506fd2886e334605adf2927aeb77e4b8", + "103db0cf377d4d02abf8971d9222ce7b", + "74c53392170643079ff073457cb90c2c", + "13617b137397489fad898b5db09e7ec4", + "275dbd6476b94a2c9937bef089356ada", + "20934e5ab45e4b118742fd51cacaa878", + "1840b0a8dfdb480d8dc14db00cc51d4d", + "e491772cafed406d89aeeb6a29f94997", + "2fa223726b1344678558fa206a4888a9", + "f71e99cd8ce140598c09d7ac16aee1e7", + "b1234462c3e243df960d5a110edea5a1", + "10b6f3f88edc46ec94ec3e68d9fd5d55", + "f3e85e4988c2470396834c205cba2681", + "295fdfafaacc439b9f185e1159cbbbdc", + "16d7868a5a0440a19d1a0482396b521a", + "1cda92878ad44658b9a4a062c50c60fa", + "5848352850c940d5ba485102ffe34c38", + "66417feea5ee426fb095f46e75ed243d", + "66e8944ac4a54c04b1d55cc968fb6e3c", + "2075ccfbdca84ccaaf371e58987ec915", + "1ca5aa72fb4e40ffbaf1cdeb13889c4f", + "de1cbfc913694d9bafcc2d6109fd0588", + "54b008697a434db28de50ac9f6e9ef81", + "11895b9f58114a7c88f9a9344e4011cb", + "8aa56209ce88401db36fd06f91a13fba", + "1c77df7c265b4cb2a889f019eb9bd304", + "5807a43755ea452588490b2efcf3aba0", + "cbedc80a355f45369eb4255ff3fc9fc2", + "beea1aa27cc5456c9a1b77346fc1baae", + "0e15461cadd6483aa29fb19a61588da8", + "3b7f74d4d3b14ceb96c72dec567e2205", + "7475f43bb90c4a56829fbbecacc76f3a", + "276d4c9b76ea4fe4be256bef900f9df0", + "64b8088a857a4f1b85db3f855aa1e88f", + "1252572559e748328975682a61045aae", + "77296763efa3415e9b7713c5afcc6c8e", + "cd40105a274749daa3258bc4c24cf237", + "0032ed4e2d1d4e858d7d4ea57469b66d", + "ffb9f3bf9e434c91b9a9d35de1b6da20", + "10aa6c9129f240378e1d5b2a03e7e6e7", + "c886be63b4e04536a4e07b7b0c27f3ef", + "537887cae9b14292af608527015e56ff", + "c919b3cac15142cb8010a0f229a09296", + "652057cc92944cd48250b743e7f59b44", + "4c867703811f4ebbb679088b3764c79e", + "e692eb2bc69f406183269242622516e6", + "4d1afaca7c634428a80aae90fdbbaf65", + "12cd5fb41df4405db40e428662d9c44c", + "f388da0e70954e388e8650f10585fe27", + "aaab06fe7bfa4c15be911835f301d887", + "6773f32495bf45ed995220270b50855a", + "ccbd8fde24204ebba7732528b02c13b8", + "a5d129aa72b3449eb1a3adb5ec0a8b8b", + "8eca248f4c784854abc5c26716e295cc", + "a1bdf0dc27734df1888963a198f6931e", + "4c1866c3af5648459f8a0f4e72d10499", + "b4aec9a8ebad42aa934136b834e64349", + "6d734910e2794e20bba6f04aa7289850", + "29d55652cecd4e4ebbe9eb8174bbd534", + "97bda4d6a35d4ca2bd1540c77e7ab9dd", + "7e4738f40ce4495cbba3eee1753efd9e", + "ebbe43b779384ba4a1f95ef80bdb6a1d", + "c2a090804acb454fba2d79551a8837d8", + "d894c67236814fc48906903359ac84a6", + "1a2da00b258e4c969c83152dda1b6a8e" + ] + }, + "id": "AFrk4zZTlWlA", + "outputId": "1419271d-7694-4641-c5da-d2dfa5329993" + }, + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.11/dist-packages/huggingface_hub/utils/_auth.py:94: UserWarning: \n", + "The secret `HF_TOKEN` does not exist in your Colab secrets.\n", + "To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.\n", + "You will be able to reuse this secret in all of your notebooks.\n", + "Please note that authentication is recommended but still optional to access public models or datasets.\n", + " warnings.warn(\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "README.md: 0%| | 0.00/35.3k [00:00 분류 레이블 수:2\n", + ").to(device)\n", + "\n", + "model.config.pad_token_id = model.config.eos_token_id\n", + "# 패딩 토큰을 eos 토큰으로 대체 => 문장 분류 모델에서 필요로 하는 고정된 길이의 입력 제공\n", + "\n", + "optimizer = optim.Adam(model.parameters(), lr=1e-5)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 105, + "referenced_widgets": [ + "8633b7211f154941b7fff54308b7ac22", + "1c0d30d3a0f74874b46e5c886de739e5", + "7fbf2261a0074fc6991055e25cde37c8", + "4f0fc8e02fc44d11b304dd0f281d4da4", + "2526806781b34d60a9950d69d8f9dbf9", + "1ed70cb527d84dc0a26aca662e8ab218", + "2c981291b502409f8de78ecde0a54445", + "d9850f7aed04454595c9561a6d3cb4ab", + "bbfed6a0b5d84265843e57a687efe3d1", + "56a2e49734934a10bb71b879ac2ea89f", + "0fcf4d7b870e4af5ad6086939f64d48b" + ] + }, + "id": "O3oFWqk3qJxr", + "outputId": "ff333408-ef76-47f4-9741-f5303f669e54" + }, + "execution_count": 4, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "model.safetensors: 0%| | 0.00/548M [00:00 train 함수로 모델 학습 시 손실은 모델 출력값의 loss 속성으로 가져옴\n", + "def train(model, optimizer, dataloader):\n", + " model.train() # 학습 모드로 설정\n", + " train_loss = 0.0 # 누적 손실 초기화\n", + "\n", + " for input_ids, attention_mask, labels in dataloader:\n", + " # 모델에 입력 데이터 전달하고 출력 받음\n", + " outputs = model(\n", + " input_ids=input_ids,\n", + " attention_mask=attention_mask,\n", + " labels=labels\n", + " )\n", + " loss = outputs.loss # 모델이 자동으로 계산한 손실 가져오기\n", + " train_loss += loss.item() # 손실 값 누적\n", + "\n", + " optimizer.zero_grad() # 이전 기울기 초기화\n", + " loss.backward() # 역전파로 기울기 계산\n", + " optimizer.step() # 옵티마이저로 파라미터 업데이트\n", + "\n", + " train_loss = train_loss / len(dataloader) # 전체 평균 손실 계산\n", + " return train_loss\n", + "\n", + "\n", + "# 모델 성능을 평가하는 함수\n", + "# 모델의 예측 결과와 실제 레이블을 비교 => 정확도를 계산, 반환\n", + "# 각 에포크에서 학습 손실, 검증 손실, 검증 정확도 계산 -> 검증 손실값이 가장 낮은 값을 갖는 체크포인트 저장\n", + "def evaluation(model, dataloader):\n", + " with torch.no_grad(): # 평가 시에는 기울기 계산 비활성화 (메모리/속도 효율)\n", + " model.eval() # 평가 모드로 설정\n", + " criterion = nn.CrossEntropyLoss() # 손실 함수 명시적으로 선언 (로짓 직접 사용)\n", + " val_loss, val_accuracy = 0.0, 0.0 # 손실과 정확도 초기화\n", + "\n", + " for input_ids, attention_mask, labels in dataloader:\n", + " outputs = model(\n", + " input_ids=input_ids,\n", + " attention_mask=attention_mask,\n", + " labels=labels\n", + " )\n", + " logits = outputs.logits # 모델 출력 로짓 (softmax 이전의 점수)\n", + "\n", + " loss = criterion(logits, labels) # 손실 수동 계산\n", + " logits = logits.detach().cpu().numpy() # 로짓을 NumPy 배열로 변환\n", + " label_ids = labels.to(\"cpu\").numpy() # 라벨도 NumPy 배열로 변환\n", + " accuracy = calc_accuracy(logits, label_ids) # 정확도 계산\n", + "\n", + " val_loss += loss # 손실 누적\n", + " val_accuracy += accuracy # 정확도 누적\n", + "\n", + " val_loss = val_loss / len(dataloader) # 평균 손실 계산\n", + " val_accuracy = val_accuracy / len(dataloader) # 평균 정확도 계산\n", + " return val_loss, val_accuracy\n", + "\n", + "# 학습 루프 정의\n", + "best_loss = 10000 # 초기 베스트 손실 값을 아주 큰 값으로 설정 -> 각 에포크마다 검증 손실값이 더 작으면 모델이 개선됐다고 판단 -> 그 시점의 가중치 저장\n", + "\n", + "for epoch in range(epochs):\n", + " train_loss = train(model, optimizer, train_dataloader) # 학습 단계 실행\n", + " val_loss, val_accuracy = evaluation(model, valid_dataloader) # 검증 단계 실행\n", + "\n", + " # 현재 epoch의 결과 출력\n", + " print(f\"Epoch {epoch+1}: Train Loss: {train_loss:.4f} Val Loss: {val_loss:.4f} Val Accuracy: {val_accuracy:.4f}\")\n", + "\n", + " # 현재 검증 손실이 이전보다 더 낮으면 모델 저장\n", + " if val_loss < best_loss:\n", + " best_loss = val_loss\n", + " torch.save(model.state_dict(), \"best_model.pt\") # 모델 파라미터 저장\n", + " print(\"Saved the model weights\")\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "YYv8SrOtrY8t", + "outputId": "5ebf21bb-db80-46a4-f537-6eace30f317f" + }, + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0]\n", + "Label values in batch: [0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0]\n", + "Label values in batch: [0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1]\n", + "Label values in batch: [1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1]\n", + "Label values in batch: [1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0]\n", + "Label values in batch: [1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1]\n", + "Label values in batch: [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1]\n", + "Epoch 1: Train Loss: 0.5926 Val Loss: 0.6127 Val Accuracy: 0.6985\n", + "Saved the model weights\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0]\n", + "Label values in batch: [0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0]\n", + "Label values in batch: [0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1]\n", + "Epoch 2: Train Loss: 0.5225 Val Loss: 0.5086 Val Accuracy: 0.7617\n", + "Saved the model weights\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1]\n", + "Label values in batch: [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0]\n", + "Label values in batch: [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1]\n", + "Label values in batch: [0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0]\n", + "Label values in batch: [0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1]\n", + "Epoch 3: Train Loss: 0.4370 Val Loss: 0.5020 Val Accuracy: 0.7664\n", + "Saved the model weights\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "#### 모델 평가" + ], + "metadata": { + "id": "R-hdAdQpx8s_" + } + }, + { + "cell_type": "code", + "source": [ + "model = GPT2ForSequenceClassification.from_pretrained(\n", + " pretrained_model_name_or_path=\"gpt2\",\n", + " num_labels=2\n", + ").to(device)\n", + "\n", + "model.config.pad_token_id = model.config.eos_token_id\n", + "model.load_state_dict(torch.load(\"best_model.pt\"))\n", + "\n", + "test_loss, test_accuracy = evaluation(model, test_dataloader)\n", + "print(f\"Test Loss: {test_loss:.4f}\")\n", + "print(f\"Test Accuracy: {test_accuracy:.4f}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "_z2Me29Bx-AI", + "outputId": "e0bd57c2-d059-4a9a-fbe1-e84b419ea5ca" + }, + "execution_count": 12, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Some weights of GPT2ForSequenceClassification were not initialized from the model checkpoint at gpt2 and are newly initialized: ['score.weight']\n", + "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Label values in batch: [1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0]\n", + "Label values in batch: [1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0]\n", + "Label values in batch: [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1]\n", + "Label values in batch: [1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]\n", + "Label values in batch: [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1]\n", + "Label values in batch: [0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1]\n", + "Label values in batch: [0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n", + "Label values in batch: [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0]\n", + "Label values in batch: [0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1]\n", + "Label values in batch: [0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0]\n", + "Label values in batch: [0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1]\n", + "Label values in batch: [1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]\n", + "Label values in batch: [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]\n", + "Label values in batch: [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1]\n", + "Label values in batch: [1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Label values in batch: [0, 1, 1]\n", + "Test Loss: 0.5020\n", + "Test Accuracy: 0.7664\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "- 모델 규모에 비해 매우 작은 데이터세트를 사용했음에도 불구하고, 모델이 높은 성능을 발휘\n", + "\n", + " => 모델이 작은 데이터세트에서도 일반화 능력을 갖고 있음을 의미" + ], + "metadata": { + "id": "JCgQt5yd235a" + } + } + ] +} \ No newline at end of file diff --git "a/Week12_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\241\341\206\274\341\204\206\341\205\265\341\206\253\341\204\214\341\205\265.pdf" "b/Week12_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\241\341\206\274\341\204\206\341\205\265\341\206\253\341\204\214\341\205\265.pdf" new file mode 100644 index 0000000..f73f1cb Binary files /dev/null and "b/Week12_\341\204\213\341\205\250\341\204\211\341\205\263\341\206\270\341\204\200\341\205\252\341\204\214\341\205\246_\341\204\207\341\205\241\341\206\274\341\204\206\341\205\265\341\206\253\341\204\214\341\205\265.pdf" differ