{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"accelerator": "GPU",
"colab": {
"name": "Learning_rate_annealing.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": {
"121bf271756e48ee89011c118eb3acef": {
"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_35dbe15d0d614a378a7194698f3b7d2b",
"IPY_MODEL_c0bf00c159054eef944c32cffeaaf5ac"
],
"layout": "IPY_MODEL_97fedc22f4b4451899057d4aa21cacc8"
}
},
"97fedc22f4b4451899057d4aa21cacc8": {
"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
}
},
"35dbe15d0d614a378a7194698f3b7d2b": {
"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_6044bb55136243edb55d5fd1626ab6b0",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_b4e360589aa645ffb8b990fcfd2e6d4d",
"value": 1
}
},
"c0bf00c159054eef944c32cffeaaf5ac": {
"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_f12288961ef7460bb62681f7d1d2bece",
"placeholder": "",
"style": "IPY_MODEL_749f1cc5c99349f7b8bacb114bc8d124",
"value": " 26427392/? [00:20<00:00, 783618.23it/s]"
}
},
"b4e360589aa645ffb8b990fcfd2e6d4d": {
"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"
}
},
"6044bb55136243edb55d5fd1626ab6b0": {
"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
}
},
"749f1cc5c99349f7b8bacb114bc8d124": {
"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": ""
}
},
"f12288961ef7460bb62681f7d1d2bece": {
"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
}
},
"8312d26a60e94def95301e614028d928": {
"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_4e7fd30b2aa94d00904c1820cf4da47f",
"IPY_MODEL_afddf511606e4cecaa57c58a6354992f"
],
"layout": "IPY_MODEL_9cb8510294dd4d249621c85239d714a2"
}
},
"9cb8510294dd4d249621c85239d714a2": {
"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
}
},
"4e7fd30b2aa94d00904c1820cf4da47f": {
"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_79cee2e2202641059fd1904835f2fe7d",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_db6ff16b75b74c21a659ff7941fc050a",
"value": 1
}
},
"afddf511606e4cecaa57c58a6354992f": {
"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_e75b3677fda849d1ab4e14f3fbe0a144",
"placeholder": "",
"style": "IPY_MODEL_f350377c527b4acf96a584442524f611",
"value": " 32768/? [00:00<00:00, 104238.56it/s]"
}
},
"db6ff16b75b74c21a659ff7941fc050a": {
"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"
}
},
"79cee2e2202641059fd1904835f2fe7d": {
"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
}
},
"f350377c527b4acf96a584442524f611": {
"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": ""
}
},
"e75b3677fda849d1ab4e14f3fbe0a144": {
"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
}
},
"70b0035b0ed44a919284e59f882dfd67": {
"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_b5abc6896a2f406eb51ff709a8d5bb65",
"IPY_MODEL_79b82d2313cc4a56bf928dd2b4ad94fe"
],
"layout": "IPY_MODEL_dff73ff9b86940ff988e98dca428a5c7"
}
},
"dff73ff9b86940ff988e98dca428a5c7": {
"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
}
},
"b5abc6896a2f406eb51ff709a8d5bb65": {
"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_cb86ec154bd246b295794c57a692255a",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_f3704bae39fb48c49f68582136eeb829",
"value": 1
}
},
"79b82d2313cc4a56bf928dd2b4ad94fe": {
"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_1b29c52020a042d1b118fb7b0b767e5b",
"placeholder": "",
"style": "IPY_MODEL_d5b1b6422bc54ddd9aa0ad46eff9ab40",
"value": " 4423680/? [00:00<00:00, 19038424.90it/s]"
}
},
"f3704bae39fb48c49f68582136eeb829": {
"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"
}
},
"cb86ec154bd246b295794c57a692255a": {
"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
}
},
"d5b1b6422bc54ddd9aa0ad46eff9ab40": {
"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": ""
}
},
"1b29c52020a042d1b118fb7b0b767e5b": {
"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
}
},
"cf4c51e9500e41d4aa6717a2d650944e": {
"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_b80749088da943c2acf8c0a77cac5abf",
"IPY_MODEL_5bae4a76b2174963b69dbe97e9cc68e1"
],
"layout": "IPY_MODEL_33b8fcc14a7b455e83d03b9ace66fc47"
}
},
"33b8fcc14a7b455e83d03b9ace66fc47": {
"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
}
},
"b80749088da943c2acf8c0a77cac5abf": {
"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_0c21e2bfda3c4364bb845d8896a8f3df",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_d01a884210b340c090cd3721b186b41e",
"value": 1
}
},
"5bae4a76b2174963b69dbe97e9cc68e1": {
"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_f7347e2bcb9042888fdd208af319692e",
"placeholder": "",
"style": "IPY_MODEL_ea86a4f9ca0a4833943cec3e5feaa44f",
"value": " 8192/? [00:00<00:00, 27717.98it/s]"
}
},
"d01a884210b340c090cd3721b186b41e": {
"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"
}
},
"0c21e2bfda3c4364bb845d8896a8f3df": {
"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
}
},
"ea86a4f9ca0a4833943cec3e5feaa44f": {
"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": ""
}
},
"f7347e2bcb9042888fdd208af319692e": {
"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": [
""
]
},
{
"cell_type": "code",
"metadata": {
"id": "US2PQ90V-TxM",
"outputId": "81ec7fa2-0fde-4e01-dee9-48812856d2ea",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 437,
"referenced_widgets": [
"121bf271756e48ee89011c118eb3acef",
"97fedc22f4b4451899057d4aa21cacc8",
"35dbe15d0d614a378a7194698f3b7d2b",
"c0bf00c159054eef944c32cffeaaf5ac",
"b4e360589aa645ffb8b990fcfd2e6d4d",
"6044bb55136243edb55d5fd1626ab6b0",
"749f1cc5c99349f7b8bacb114bc8d124",
"f12288961ef7460bb62681f7d1d2bece",
"8312d26a60e94def95301e614028d928",
"9cb8510294dd4d249621c85239d714a2",
"4e7fd30b2aa94d00904c1820cf4da47f",
"afddf511606e4cecaa57c58a6354992f",
"db6ff16b75b74c21a659ff7941fc050a",
"79cee2e2202641059fd1904835f2fe7d",
"f350377c527b4acf96a584442524f611",
"e75b3677fda849d1ab4e14f3fbe0a144",
"70b0035b0ed44a919284e59f882dfd67",
"dff73ff9b86940ff988e98dca428a5c7",
"b5abc6896a2f406eb51ff709a8d5bb65",
"79b82d2313cc4a56bf928dd2b4ad94fe",
"f3704bae39fb48c49f68582136eeb829",
"cb86ec154bd246b295794c57a692255a",
"d5b1b6422bc54ddd9aa0ad46eff9ab40",
"1b29c52020a042d1b118fb7b0b767e5b",
"cf4c51e9500e41d4aa6717a2d650944e",
"33b8fcc14a7b455e83d03b9ace66fc47",
"b80749088da943c2acf8c0a77cac5abf",
"5bae4a76b2174963b69dbe97e9cc68e1",
"d01a884210b340c090cd3721b186b41e",
"0c21e2bfda3c4364bb845d8896a8f3df",
"ea86a4f9ca0a4833943cec3e5feaa44f",
"f7347e2bcb9042888fdd208af319692e"
]
}
},
"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": "121bf271756e48ee89011c118eb3acef",
"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": "8312d26a60e94def95301e614028d928",
"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": "70b0035b0ed44a919284e59f882dfd67",
"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": "cf4c51e9500e41d4aa6717a2d650944e",
"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": "Oh-XVKan-g2q"
},
"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": "QAtH6m0e-iKd"
},
"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": "code",
"metadata": {
"id": "1a6Ft27b-jTW"
},
"source": [
"class FMNISTDataset(Dataset):\n",
" def __init__(self, x, y):\n",
" x = x.float()\n",
" x = x.view(-1,28*28)/255\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 = Adam(model.parameters(), lr=1e-3)\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": "TV6g7C3v-k62"
},
"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": "6O1wjRFi-mFG"
},
"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": "fNzWYrew-ndP"
},
"source": [
"trn_dl, val_dl = get_data()\n",
"model, loss_fn, optimizer = get_model()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "-rKvZEha-ooh",
"outputId": "1f853a8c-83da-4500-d334-5f2090d3973a",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 145
}
},
"source": [
"from torch import optim\n",
"scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, factor=0.5, patience=0, threshold = 0.001, verbose=True, min_lr = 1e-5, threshold_mode = 'abs')\n",
"train_losses, train_accuracies = [], []\n",
"val_losses, val_accuracies = [], []\n",
"for epoch in range(30):\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",
"\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",
" scheduler.step(validation_loss)\n",
" val_epoch_accuracy = np.mean(val_is_correct)\n",
"\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": [
"Epoch 2: reducing learning rate of group 0 to 5.0000e-04.\n",
"Epoch 8: reducing learning rate of group 0 to 2.5000e-04.\n",
"Epoch 11: reducing learning rate of group 0 to 1.2500e-04.\n",
"Epoch 14: reducing learning rate of group 0 to 6.2500e-05.\n",
"Epoch 15: reducing learning rate of group 0 to 3.1250e-05.\n",
"Epoch 16: reducing learning rate of group 0 to 1.5625e-05.\n",
"Epoch 17: reducing learning rate of group 0 to 1.0000e-05.\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "lX0dSmyE_GSm",
"outputId": "3d8e1c75-6ca3-4bc0-eca3-7fd328e47ab3",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 337
}
},
"source": [
"epochs = np.arange(30)+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 learning rate scheduler')\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 learning rate scheduler')\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": [
"