Computer_Vision/Chapter03/Varying_loss_optimizer.ipynb
2024-02-13 03:34:51 +01:00

1657 lines
119 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"accelerator": "GPU",
"colab": {
"name": "Varying_loss_optimizer.ipynb",
"provenance": [],
"include_colab_link": true
},
"hide_input": false,
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"555f8075b30344ffad1a09752ac88ea1": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_e11f28d88a22465b97f31a8611583a76",
"IPY_MODEL_8cef7279ec104ee5a45602603537ba92"
],
"layout": "IPY_MODEL_40a4dc115817415fb0f956ab8343921c"
}
},
"40a4dc115817415fb0f956ab8343921c": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"e11f28d88a22465b97f31a8611583a76": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "info",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_ec6aa5ffe76947d99d74fdc48f3bda87",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_a8251570eabf4c87a5f54837ccb2a0a0",
"value": 1
}
},
"8cef7279ec104ee5a45602603537ba92": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_4ebe7feaf19b463ea64c7ceb939392ae",
"placeholder": "",
"style": "IPY_MODEL_db11ed571583409992509c9177265bab",
"value": " 26427392/? [00:20<00:00, 83478868.91it/s]"
}
},
"a8251570eabf4c87a5f54837ccb2a0a0": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": "initial"
}
},
"ec6aa5ffe76947d99d74fdc48f3bda87": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"db11ed571583409992509c9177265bab": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"4ebe7feaf19b463ea64c7ceb939392ae": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"0afd0f24f0b84d01a1ac805461780038": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_8bfb0bf136954e508e49691710baea94",
"IPY_MODEL_57ff7b0b5c5747498c7c251acfadba63"
],
"layout": "IPY_MODEL_9149b38ce9e24652a226bbb78c57158e"
}
},
"9149b38ce9e24652a226bbb78c57158e": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"8bfb0bf136954e508e49691710baea94": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_d2d7908b02104b53819195b4b38dc35b",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_4996fd9c0f29441285827db538683121",
"value": 1
}
},
"57ff7b0b5c5747498c7c251acfadba63": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_a0273ce565bb403eb1f180bb1c65782c",
"placeholder": "",
"style": "IPY_MODEL_7a36dd0db81146289a0014156aadc02f",
"value": " 32768/? [00:00<00:00, 89204.95it/s]"
}
},
"4996fd9c0f29441285827db538683121": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": "initial"
}
},
"d2d7908b02104b53819195b4b38dc35b": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"7a36dd0db81146289a0014156aadc02f": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"a0273ce565bb403eb1f180bb1c65782c": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"708bd6ef4ee14f8a81c3e0eea17dbb3b": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_10c602e87fa844deb169ce5400ac9992",
"IPY_MODEL_09d4af85a8474de2a21402b585fcd0ea"
],
"layout": "IPY_MODEL_ebbc2338d4f44948adc9636383cab302"
}
},
"ebbc2338d4f44948adc9636383cab302": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"10c602e87fa844deb169ce5400ac9992": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_53beddf25c0d4373ba8335491af85fa5",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_fc3f7edb493b49db9eda12f9c45ff30a",
"value": 1
}
},
"09d4af85a8474de2a21402b585fcd0ea": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_ed4d32cfa18849f3b421fe4b9c433a96",
"placeholder": "",
"style": "IPY_MODEL_f23dccb7ae8d4e6bbde1b96394a044da",
"value": " 4423680/? [00:00<00:00, 17006263.58it/s]"
}
},
"fc3f7edb493b49db9eda12f9c45ff30a": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": "initial"
}
},
"53beddf25c0d4373ba8335491af85fa5": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"f23dccb7ae8d4e6bbde1b96394a044da": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"ed4d32cfa18849f3b421fe4b9c433a96": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"e7e20d5f7ded4155b5de7a59a5ddf43e": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_736b7a750d094ff487db2249615fa82a",
"IPY_MODEL_378f2fb19c37421195f2b0c19ea1cf7f"
],
"layout": "IPY_MODEL_7aeec9531faa44d7bd95ff72fd63bb8b"
}
},
"7aeec9531faa44d7bd95ff72fd63bb8b": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"736b7a750d094ff487db2249615fa82a": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_ac086a6bcf274e91b8d506ea39490592",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_c6cf46d85249463caaf07823604e0ce3",
"value": 1
}
},
"378f2fb19c37421195f2b0c19ea1cf7f": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_abe78c8e154f4fe48ae2753e0f5fc9e7",
"placeholder": "",
"style": "IPY_MODEL_4e6caf9db2f345e9aa3a83d47d9d635c",
"value": " 8192/? [00:00<00:00, 25459.14it/s]"
}
},
"c6cf46d85249463caaf07823604e0ce3": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": "initial"
}
},
"ac086a6bcf274e91b8d506ea39490592": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"4e6caf9db2f345e9aa3a83d47d9d635c": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"abe78c8e154f4fe48ae2753e0f5fc9e7": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
}
}
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/github/PacktPublishing/Hands-On-Computer-Vision-with-PyTorch/blob/master/Chapter03/Varying_loss_optimizer.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "-CiYe82L4gom",
"outputId": "7238ae25-5422-41bf-9101-8c42777ebb3e",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 437,
"referenced_widgets": [
"555f8075b30344ffad1a09752ac88ea1",
"40a4dc115817415fb0f956ab8343921c",
"e11f28d88a22465b97f31a8611583a76",
"8cef7279ec104ee5a45602603537ba92",
"a8251570eabf4c87a5f54837ccb2a0a0",
"ec6aa5ffe76947d99d74fdc48f3bda87",
"db11ed571583409992509c9177265bab",
"4ebe7feaf19b463ea64c7ceb939392ae",
"0afd0f24f0b84d01a1ac805461780038",
"9149b38ce9e24652a226bbb78c57158e",
"8bfb0bf136954e508e49691710baea94",
"57ff7b0b5c5747498c7c251acfadba63",
"4996fd9c0f29441285827db538683121",
"d2d7908b02104b53819195b4b38dc35b",
"7a36dd0db81146289a0014156aadc02f",
"a0273ce565bb403eb1f180bb1c65782c",
"708bd6ef4ee14f8a81c3e0eea17dbb3b",
"ebbc2338d4f44948adc9636383cab302",
"10c602e87fa844deb169ce5400ac9992",
"09d4af85a8474de2a21402b585fcd0ea",
"fc3f7edb493b49db9eda12f9c45ff30a",
"53beddf25c0d4373ba8335491af85fa5",
"f23dccb7ae8d4e6bbde1b96394a044da",
"ed4d32cfa18849f3b421fe4b9c433a96",
"e7e20d5f7ded4155b5de7a59a5ddf43e",
"7aeec9531faa44d7bd95ff72fd63bb8b",
"736b7a750d094ff487db2249615fa82a",
"378f2fb19c37421195f2b0c19ea1cf7f",
"c6cf46d85249463caaf07823604e0ce3",
"ac086a6bcf274e91b8d506ea39490592",
"4e6caf9db2f345e9aa3a83d47d9d635c",
"abe78c8e154f4fe48ae2753e0f5fc9e7"
]
}
},
"source": [
"from torchvision import datasets\n",
"import torch\n",
"data_folder = '~/data/FMNIST' # This can be any directory you want to \n",
"# download FMNIST to\n",
"fmnist = datasets.FashionMNIST(data_folder, download=True, train=True)\n",
"tr_images = fmnist.data\n",
"tr_targets = fmnist.targets"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz to /root/data/FMNIST/FashionMNIST/raw/train-images-idx3-ubyte.gz\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "555f8075b30344ffad1a09752ac88ea1",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"Extracting /root/data/FMNIST/FashionMNIST/raw/train-images-idx3-ubyte.gz to /root/data/FMNIST/FashionMNIST/raw\n",
"Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz to /root/data/FMNIST/FashionMNIST/raw/train-labels-idx1-ubyte.gz\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "0afd0f24f0b84d01a1ac805461780038",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"Extracting /root/data/FMNIST/FashionMNIST/raw/train-labels-idx1-ubyte.gz to /root/data/FMNIST/FashionMNIST/raw\n",
"Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz to /root/data/FMNIST/FashionMNIST/raw/t10k-images-idx3-ubyte.gz\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "708bd6ef4ee14f8a81c3e0eea17dbb3b",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"Extracting /root/data/FMNIST/FashionMNIST/raw/t10k-images-idx3-ubyte.gz to /root/data/FMNIST/FashionMNIST/raw\n",
"Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz to /root/data/FMNIST/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz\n",
"\n",
"\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e7e20d5f7ded4155b5de7a59a5ddf43e",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"Extracting /root/data/FMNIST/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz to /root/data/FMNIST/FashionMNIST/raw\n",
"Processing...\n",
"Done!\n",
"\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/torchvision/datasets/mnist.py:469: UserWarning: The given NumPy array is not writeable, and PyTorch does not support non-writeable tensors. This means you can write to the underlying (supposedly non-writeable) NumPy array using the tensor. You may want to copy the array to protect its data or make it writeable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at /pytorch/torch/csrc/utils/tensor_numpy.cpp:141.)\n",
" return torch.from_numpy(parsed.astype(m[2], copy=False)).view(*s)\n"
],
"name": "stderr"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "53UbSwV44pKN"
},
"source": [
"val_fmnist = datasets.FashionMNIST(data_folder, download=True, train=False)\n",
"val_images = val_fmnist.data\n",
"val_targets = val_fmnist.targets"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "hLjiLWl24qjU"
},
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"import numpy as np\n",
"from torch.utils.data import Dataset, DataLoader\n",
"import torch\n",
"import torch.nn as nn\n",
"device = 'cuda' if torch.cuda.is_available() else 'cpu'"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "r9CEfaWfxCAZ"
},
"source": [
"### SGD optimizer"
]
},
{
"cell_type": "code",
"metadata": {
"id": "5brrbtrf4rsb"
},
"source": [
"class FMNISTDataset(Dataset):\n",
" def __init__(self, x, y):\n",
" x = x.float()/255\n",
" x = x.view(-1,28*28)\n",
" self.x, self.y = x, y \n",
" def __getitem__(self, ix):\n",
" x, y = self.x[ix], self.y[ix] \n",
" return x.to(device), y.to(device)\n",
" def __len__(self): \n",
" return len(self.x)\n",
"\n",
"from torch.optim import SGD, Adam\n",
"def get_model():\n",
" model = nn.Sequential(\n",
" nn.Linear(28 * 28, 1000),\n",
" nn.ReLU(),\n",
" nn.Linear(1000, 10)\n",
" ).to(device)\n",
"\n",
" loss_fn = nn.CrossEntropyLoss()\n",
" optimizer = SGD(model.parameters(), lr=1e-2)\n",
" return model, loss_fn, optimizer\n",
"\n",
"def train_batch(x, y, model, opt, loss_fn):\n",
" model.train()\n",
" prediction = model(x)\n",
" batch_loss = loss_fn(prediction, y)\n",
" batch_loss.backward()\n",
" optimizer.step()\n",
" optimizer.zero_grad()\n",
" return batch_loss.item()\n",
"\n",
"def accuracy(x, y, model):\n",
" model.eval()\n",
" # this is the same as @torch.no_grad \n",
" # at the top of function, only difference\n",
" # being, grad is not computed in the with scope\n",
" with torch.no_grad():\n",
" prediction = model(x)\n",
" max_values, argmaxes = prediction.max(-1)\n",
" is_correct = argmaxes == y\n",
" return is_correct.cpu().numpy().tolist()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Ipn9JZfJ4yVl"
},
"source": [
"def get_data(): \n",
" train = FMNISTDataset(tr_images, tr_targets) \n",
" trn_dl = DataLoader(train, batch_size=32, shuffle=True)\n",
" val = FMNISTDataset(val_images, val_targets) \n",
" val_dl = DataLoader(val, batch_size=len(val_images), shuffle=False)\n",
" return trn_dl, val_dl"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "q44UDG_q41Up"
},
"source": [
"@torch.no_grad()\n",
"def val_loss(x, y, model):\n",
" prediction = model(x)\n",
" val_loss = loss_fn(prediction, y)\n",
" return val_loss.item()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "mK19mnET42it"
},
"source": [
"trn_dl, val_dl = get_data()\n",
"model, loss_fn, optimizer = get_model()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "TVtikJsV43mD",
"outputId": "f2c6ca32-5347-4062-a57f-ba50f7b74662",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 199
}
},
"source": [
"train_losses, train_accuracies = [], []\n",
"val_losses, val_accuracies = [], []\n",
"for epoch in range(10):\n",
" print(epoch)\n",
" train_epoch_losses, train_epoch_accuracies = [], []\n",
" for ix, batch in enumerate(iter(trn_dl)):\n",
" x, y = batch\n",
" batch_loss = train_batch(x, y, model, optimizer, loss_fn)\n",
" train_epoch_losses.append(batch_loss) \n",
" train_epoch_loss = np.array(train_epoch_losses).mean()\n",
"\n",
" for ix, batch in enumerate(iter(trn_dl)):\n",
" x, y = batch\n",
" is_correct = accuracy(x, y, model)\n",
" train_epoch_accuracies.extend(is_correct)\n",
" train_epoch_accuracy = np.mean(train_epoch_accuracies)\n",
" for ix, batch in enumerate(iter(val_dl)):\n",
" x, y = batch\n",
" val_is_correct = accuracy(x, y, model)\n",
" validation_loss = val_loss(x, y, model)\n",
" val_epoch_accuracy = np.mean(val_is_correct)\n",
" train_losses.append(train_epoch_loss)\n",
" train_accuracies.append(train_epoch_accuracy)\n",
" val_losses.append(validation_loss)\n",
" val_accuracies.append(val_epoch_accuracy)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"0\n",
"1\n",
"2\n",
"3\n",
"4\n",
"5\n",
"6\n",
"7\n",
"8\n",
"9\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "X8qZ13F3452Y",
"outputId": "17ff2d4a-2679-49a8-f03f-0f6b0d02e702",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 337
}
},
"source": [
"epochs = np.arange(10)+1\n",
"import matplotlib.ticker as mtick\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.ticker as mticker\n",
"%matplotlib inline\n",
"plt.subplot(211)\n",
"plt.plot(epochs, train_losses, 'bo', label='Training loss')\n",
"plt.plot(epochs, val_losses, 'r', label='Validation loss')\n",
"plt.gca().xaxis.set_major_locator(mticker.MultipleLocator(1))\n",
"plt.title('Training and validation loss with SGD optimizer')\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Loss')\n",
"plt.legend()\n",
"plt.grid('off')\n",
"plt.show()\n",
"plt.subplot(212)\n",
"plt.plot(epochs, train_accuracies, 'bo', label='Training accuracy')\n",
"plt.plot(epochs, val_accuracies, 'r', label='Validation accuracy')\n",
"plt.gca().xaxis.set_major_locator(mticker.MultipleLocator(1))\n",
"plt.title('Training and validation accuracy with SGD optimizer')\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Accuracy')\n",
"plt.gca().set_yticklabels(['{:.0f}%'.format(x*100) for x in plt.gca().get_yticks()]) \n",
"plt.legend()\n",
"plt.grid('off')\n",
"plt.show()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Bsv-ldC65IYQ"
},
"source": [
""
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "-kDtEW1q5cAn"
},
"source": [
""
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "sfeSNp305eB4"
},
"source": [
"### Adam optimizer"
]
},
{
"cell_type": "code",
"metadata": {
"id": "S1iUHZf15cDA"
},
"source": [
"from torch.optim import SGD, Adam\n",
"def get_model():\n",
" model = nn.Sequential(\n",
" nn.Linear(28 * 28, 1000),\n",
" nn.ReLU(),\n",
" nn.Linear(1000, 10)\n",
" ).to(device)\n",
"\n",
" loss_fn = nn.CrossEntropyLoss()\n",
" optimizer = Adam(model.parameters(), lr=1e-2)\n",
" return model, loss_fn, optimizer"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "vy7zpicT5cGw"
},
"source": [
"trn_dl, val_dl = get_data()\n",
"model, loss_fn, optimizer = get_model()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "s86zqzoO5k5s",
"outputId": "22c0e4a3-43a8-4ed4-bc5d-8c9e166e4a30",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 199
}
},
"source": [
"train_losses, train_accuracies = [], []\n",
"val_losses, val_accuracies = [], []\n",
"for epoch in range(10):\n",
" print(epoch)\n",
" train_epoch_losses, train_epoch_accuracies = [], []\n",
" for ix, batch in enumerate(iter(trn_dl)):\n",
" x, y = batch\n",
" batch_loss = train_batch(x, y, model, optimizer, loss_fn)\n",
" train_epoch_losses.append(batch_loss) \n",
" train_epoch_loss = np.array(train_epoch_losses).mean()\n",
"\n",
" for ix, batch in enumerate(iter(trn_dl)):\n",
" x, y = batch\n",
" is_correct = accuracy(x, y, model)\n",
" train_epoch_accuracies.extend(is_correct)\n",
" train_epoch_accuracy = np.mean(train_epoch_accuracies)\n",
" for ix, batch in enumerate(iter(val_dl)):\n",
" x, y = batch\n",
" val_is_correct = accuracy(x, y, model)\n",
" validation_loss = val_loss(x, y, model)\n",
" val_epoch_accuracy = np.mean(val_is_correct)\n",
" train_losses.append(train_epoch_loss)\n",
" train_accuracies.append(train_epoch_accuracy)\n",
" val_losses.append(validation_loss)\n",
" val_accuracies.append(val_epoch_accuracy)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"0\n",
"1\n",
"2\n",
"3\n",
"4\n",
"5\n",
"6\n",
"7\n",
"8\n",
"9\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "7MBiwBMq5mop",
"outputId": "91134f0f-dbcc-4212-de17-c6198f0b3ab9",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 337
}
},
"source": [
"epochs = np.arange(10)+1\n",
"import matplotlib.ticker as mtick\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.ticker as mticker\n",
"%matplotlib inline\n",
"plt.subplot(211)\n",
"plt.plot(epochs, train_losses, 'bo', label='Training loss')\n",
"plt.plot(epochs, val_losses, 'r', label='Validation loss')\n",
"plt.gca().xaxis.set_major_locator(mticker.MultipleLocator(1))\n",
"plt.title('Training and validation loss with Adam optimizer')\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Loss')\n",
"plt.legend()\n",
"plt.grid('off')\n",
"plt.show()\n",
"plt.subplot(212)\n",
"plt.plot(epochs, train_accuracies, 'bo', label='Training accuracy')\n",
"plt.plot(epochs, val_accuracies, 'r', label='Validation accuracy')\n",
"plt.gca().xaxis.set_major_locator(mticker.MultipleLocator(1))\n",
"plt.title('Training and validation accuracy with Adam optimizer')\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Accuracy')\n",
"plt.gca().set_yticklabels(['{:.0f}%'.format(x*100) for x in plt.gca().get_yticks()]) \n",
"plt.legend()\n",
"plt.grid('off')\n",
"plt.show()"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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Q4cOsTewEA3DwwyEUWqJZEfHvn37EhcXB8CuXbsYNGgQ33zzDSJCdnZ20H26detG5cqVqVy5MieffDJbt24lOTn5qDRt2rTJW5eamsqGDRtITEzkjDPOyGs+2r9/fyZNmpSvvgULFuQZqc6dO7Njxw52795NRkYGt912GwMGDKBXr14kJyfTunVrhgwZQnZ2NldeeSWpqanFKhuj7GIuJqPUEqpDYzg6OvpHyrzvvvvo1KkTK1as4K233grZ1LNy5cp583FxceTk5BQpTXEYOXIkkydPZt++fWRkZLBmzRrat2/PvHnzqFu3LoMHD+b5558v0WMaZQczEEapZdw417HRTyQ6Ou7atYu6desC8Oyzz5Z4/o0bN+bbb79lw4YNALz00ksF7tOuXTumesGXOXPmULt2bapXr8769etp1qwZd999N61bt2bNmjVs3LiROnXqcP3113PdddexdOnSEj8Ho2xgBsIotRzd0ZGIdXS86667GDVqFGlpaSX+xg9QpUoVnnjiCbp06ULLli1JSkqiRo0a+e4zZswYlixZQvPmzRk5ciTPPfccAI8++ihNmzalefPmVKxYka5duzJnzhxatGhBWloaL730ErfeemuJn4NRRgg1Dnhpm4r6PYhcYmFc91jQoBpdHatWrcqb3717d9R0+ImGjqysLFVVPXz4sN54443697//PSbKI1CD/3pFErtXjiZc34OwGoRhxCD/+c9/SE1N5dxzz2XXrl0MHTo02pKMcoi1YjKMGGTEiBGMGDHiqHVZWVlRUmOUV8JagxCRLiKyVkTWicjIINsHi8g2EVnmTdf5tg0SkW+8aVA4dRqGYRjHErYahIjEAY8DvwEygUUiMkNVVwUkfUlVbwrY90RgNNAKUGCJt+8v4dJrGIZhHE04axBtgHWq+q2qHgSmAVcUct9LgQ9U9WfPKHwAdAmTTsMwDCMI4TQQdYHvfcuZ3rpAeovIlyLyqojUO859DcMwjDAR7SD1W8CLqnpARIYCzwGdC7uziNwA3ABQp04d5syZU2Qhe/bsKdb+JUEsaIi2jho1auQFYw8dOhTxwGy3bt0YMWIEF198cd66xx57jPXr1/PII48E3eeyyy5j7NixpKen07t3b5566ilOOOGEo9L86U9/IjExMd/hwN9++23OPPNMzj77bADGjh1LRkYGnTp1AopeHvPnz2fi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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "PeY_NGfF6Kzf"
},
"source": [
""
],
"execution_count": null,
"outputs": []
}
]
}