Computer_Vision/Chapter03/Impact_of_building_a_deeper...

1807 lines
143 KiB
Plaintext
Raw Permalink Normal View History

2024-02-13 03:34:51 +01:00
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"accelerator": "GPU",
"colab": {
"name": "Impact_of_building_a_deeper_neural_network.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": {
"7e3e385d271e4f8ca736fe0da0be67c0": {
"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_85ef40115e2446db918c8fb58d8298a5",
"IPY_MODEL_a14ae0a36fb74cee9c702887b4e1bb72"
],
"layout": "IPY_MODEL_5550477bbf9e4c55b5d509067f4c8b7f"
}
},
"5550477bbf9e4c55b5d509067f4c8b7f": {
"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
}
},
"85ef40115e2446db918c8fb58d8298a5": {
"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_d7835c3fcbc344d6929e9e276f5283e5",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_cd67e879a910462da5262779575d0f33",
"value": 1
}
},
"a14ae0a36fb74cee9c702887b4e1bb72": {
"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_ad775d32a59a4e52a1886a17b450e163",
"placeholder": "",
"style": "IPY_MODEL_6986a69e9d1d4871bbd0c2bf8caf382f",
"value": " 26427392/? [00:20<00:00, 6975829.22it/s]"
}
},
"cd67e879a910462da5262779575d0f33": {
"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"
}
},
"d7835c3fcbc344d6929e9e276f5283e5": {
"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
}
},
"6986a69e9d1d4871bbd0c2bf8caf382f": {
"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": ""
}
},
"ad775d32a59a4e52a1886a17b450e163": {
"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
}
},
"2cbbd3dcb34146dc866525d958bacf0c": {
"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_6d939043fe894743991520b97dd96da9",
"IPY_MODEL_8b1f6ef2208b49a589cabedc4760969f"
],
"layout": "IPY_MODEL_a412bc9ea39d4e1da0a50568f9ff7293"
}
},
"a412bc9ea39d4e1da0a50568f9ff7293": {
"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
}
},
"6d939043fe894743991520b97dd96da9": {
"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_97bbf22385ac423984249f6fb45ef9c8",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_d04a50b9b7154afb9b66453d12405dea",
"value": 1
}
},
"8b1f6ef2208b49a589cabedc4760969f": {
"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_062f019e1a7d41f78ba39da29236f667",
"placeholder": "",
"style": "IPY_MODEL_45d2be82486c4f4c855b6d3844387f6b",
"value": " 32768/? [00:02<00:00, 13416.51it/s]"
}
},
"d04a50b9b7154afb9b66453d12405dea": {
"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"
}
},
"97bbf22385ac423984249f6fb45ef9c8": {
"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
}
},
"45d2be82486c4f4c855b6d3844387f6b": {
"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": ""
}
},
"062f019e1a7d41f78ba39da29236f667": {
"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
}
},
"5010491fbe1b4ed2bc8b422333c6164b": {
"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_5e81fcbed9484c98ae98dca2b8a515f6",
"IPY_MODEL_e6743f07e8a74738802f206fcfc76cb5"
],
"layout": "IPY_MODEL_cd942030383742dcadfd703bd47dfea4"
}
},
"cd942030383742dcadfd703bd47dfea4": {
"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
}
},
"5e81fcbed9484c98ae98dca2b8a515f6": {
"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_8bca20deab3445e8be0fe4bac16abdca",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_27c1827603fd478f9dca8c8b4ad52bf6",
"value": 1
}
},
"e6743f07e8a74738802f206fcfc76cb5": {
"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_889970c06edf4c26ae1c6561f8b8e21a",
"placeholder": "",
"style": "IPY_MODEL_c550af41d5ae4be7b2d9094e15eda141",
"value": " 4423680/? [00:01<00:00, 2311972.75it/s]"
}
},
"27c1827603fd478f9dca8c8b4ad52bf6": {
"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"
}
},
"8bca20deab3445e8be0fe4bac16abdca": {
"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
}
},
"c550af41d5ae4be7b2d9094e15eda141": {
"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": ""
}
},
"889970c06edf4c26ae1c6561f8b8e21a": {
"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
}
},
"07ffb7aafa2e4a09ae10d1d7f74d3ac7": {
"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_b29285a4ff1e481fbfaad8b20a559f25",
"IPY_MODEL_318c5ef119774c9f9f3b685c824c3f31"
],
"layout": "IPY_MODEL_b4603aa9e1ef48bdb151b5f7e68713df"
}
},
"b4603aa9e1ef48bdb151b5f7e68713df": {
"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
}
},
"b29285a4ff1e481fbfaad8b20a559f25": {
"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_c61c295b6e564c689dba74e7d0819ab4",
"max": 1,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_54fad4d3c539434fbb76904d4dd89e90",
"value": 1
}
},
"318c5ef119774c9f9f3b685c824c3f31": {
"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_38de1f5fe92b4870926540527a31d879",
"placeholder": "",
"style": "IPY_MODEL_281b03bf21ee499cb9d4588531cddbee",
"value": " 8192/? [00:00<00:00, 15149.15it/s]"
}
},
"54fad4d3c539434fbb76904d4dd89e90": {
"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"
}
},
"c61c295b6e564c689dba74e7d0819ab4": {
"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
}
},
"281b03bf21ee499cb9d4588531cddbee": {
"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": ""
}
},
"38de1f5fe92b4870926540527a31d879": {
"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/Impact_of_building_a_deeper_neural_network.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "db6eHXhn_teE",
"outputId": "1bcce1ac-5c74-4bf8-f113-a5d9ed560303",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 437,
"referenced_widgets": [
"7e3e385d271e4f8ca736fe0da0be67c0",
"5550477bbf9e4c55b5d509067f4c8b7f",
"85ef40115e2446db918c8fb58d8298a5",
"a14ae0a36fb74cee9c702887b4e1bb72",
"cd67e879a910462da5262779575d0f33",
"d7835c3fcbc344d6929e9e276f5283e5",
"6986a69e9d1d4871bbd0c2bf8caf382f",
"ad775d32a59a4e52a1886a17b450e163",
"2cbbd3dcb34146dc866525d958bacf0c",
"a412bc9ea39d4e1da0a50568f9ff7293",
"6d939043fe894743991520b97dd96da9",
"8b1f6ef2208b49a589cabedc4760969f",
"d04a50b9b7154afb9b66453d12405dea",
"97bbf22385ac423984249f6fb45ef9c8",
"45d2be82486c4f4c855b6d3844387f6b",
"062f019e1a7d41f78ba39da29236f667",
"5010491fbe1b4ed2bc8b422333c6164b",
"cd942030383742dcadfd703bd47dfea4",
"5e81fcbed9484c98ae98dca2b8a515f6",
"e6743f07e8a74738802f206fcfc76cb5",
"27c1827603fd478f9dca8c8b4ad52bf6",
"8bca20deab3445e8be0fe4bac16abdca",
"c550af41d5ae4be7b2d9094e15eda141",
"889970c06edf4c26ae1c6561f8b8e21a",
"07ffb7aafa2e4a09ae10d1d7f74d3ac7",
"b4603aa9e1ef48bdb151b5f7e68713df",
"b29285a4ff1e481fbfaad8b20a559f25",
"318c5ef119774c9f9f3b685c824c3f31",
"54fad4d3c539434fbb76904d4dd89e90",
"c61c295b6e564c689dba74e7d0819ab4",
"281b03bf21ee499cb9d4588531cddbee",
"38de1f5fe92b4870926540527a31d879"
]
}
},
"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": "7e3e385d271e4f8ca736fe0da0be67c0",
"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": "2cbbd3dcb34146dc866525d958bacf0c",
"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": "5010491fbe1b4ed2bc8b422333c6164b",
"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"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "07ffb7aafa2e4a09ae10d1d7f74d3ac7",
"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": [
"\n",
"\n",
"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": "USu9lapK_520"
},
"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": "oaKX_Log_7Vq"
},
"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": "7MkYWfNrzDsJ"
},
"source": [
"### Model with 0 hidden layers"
]
},
{
"cell_type": "code",
"metadata": {
"id": "LZh0i54a_8zA"
},
"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, 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": "2pm_AtNh_9xO"
},
"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": "tr7aYJszAABu"
},
"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": "-QsGjZhYABEm"
},
"source": [
"trn_dl, val_dl = get_data()\n",
"model, loss_fn, optimizer = get_model()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "KKq8CFkPACLw",
"outputId": "8abc68ee-68a9-443b-f9ff-a4dea475ee35",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 108
}
},
"source": [
"train_losses, train_accuracies = [], []\n",
"val_losses, val_accuracies = [], []\n",
"for epoch in range(5):\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"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "X3SlttxNAXCM",
"outputId": "ce4b9893-85de-4ede-d770-d9d53f8a3a38",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 337
}
},
"source": [
"epochs = np.arange(5)+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 no hidden layer')\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 no hidden layer')\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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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "frZEg63SAc7K"
},
"source": [
""
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "WHDksDDgBgp3"
},
"source": [
"### Model with 1 hidden layer"
]
},
{
"cell_type": "code",
"metadata": {
"id": "XyIYRbkoAdTo"
},
"source": [
"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"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "-6ZPcquEAnOt"
},
"source": [
"trn_dl, val_dl = get_data()\n",
"model, loss_fn, optimizer = get_model()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "1SHVfTnqApUa",
"outputId": "40ed576d-98b2-4ab1-9646-7311e265d335",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 108
}
},
"source": [
"train_losses, train_accuracies = [], []\n",
"val_losses, val_accuracies = [], []\n",
"for epoch in range(5):\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"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "OS-HLAriArIc",
"outputId": "6674e504-54f6-4ed1-f8b9-276586dd2fe6",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 337
}
},
"source": [
"epochs = np.arange(5)+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 1 hidden layer')\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 1 hidden layer')\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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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "I25leQbQAuGw"
},
"source": [
""
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "q33tx2wdBrRi"
},
"source": [
"Model with 2 hidden layers"
]
},
{
"cell_type": "code",
"metadata": {
"id": "0tasZD3fBspj"
},
"source": [
"def get_model():\n",
" model = nn.Sequential(\n",
" nn.Linear(28 * 28, 1000),\n",
" nn.ReLU(),\n",
" nn.Linear(1000, 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"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "NCL8UX_aBxBc"
},
"source": [
"trn_dl, val_dl = get_data()\n",
"model, loss_fn, optimizer = get_model()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "TTvPNVGGBzLI",
"outputId": "2edbce71-c797-484f-97bb-1ad251879504",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 108
}
},
"source": [
"train_losses, train_accuracies = [], []\n",
"val_losses, val_accuracies = [], []\n",
"for epoch in range(5):\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"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "HYhXTLF2B2q5",
"outputId": "89f4647f-cfb7-425e-b79a-dac38c65b4e7",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 337
}
},
"source": [
"epochs = np.arange(5)+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 2 hidden layers')\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 2 hidden layers')\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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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "HsXD3fkYB6c8"
},
"source": [
""
],
"execution_count": null,
"outputs": []
}
]
}