Copy disabled (too large)
Download .txt
Showing preview only (33,307K chars total). Download the full file to get everything.
Repository: johnowhitaker/aiaiart
Branch: master
Commit: 728f077e4d3f
Files: 12
Total size: 46.8 MB
Directory structure:
gitextract_6ftzropk/
├── AIAIART_1.ipynb
├── AIAIART_2.ipynb
├── AIAIART_3.ipynb
├── AIAIART_4.ipynb
├── AIAIART_5.ipynb
├── AIAIART_6.ipynb
├── AIAIART_7.ipynb
├── AIAIART_8.ipynb
├── AIAIART_9.ipynb
├── LICENSE
├── intro.html
└── readme.md
================================================
FILE CONTENTS
================================================
================================================
FILE: AIAIART_1.ipynb
================================================
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "AIAIART #1.ipynb",
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"5d90b8dfe85246419a76ac5e3228751a": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatSliderModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatSliderModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "FloatSliderView",
"continuous_update": true,
"description": "",
"description_tooltip": null,
"disabled": false,
"layout": "IPY_MODEL_46ab4fa592ec4635b040df3368d2527a",
"max": 5,
"min": 0,
"orientation": "horizontal",
"readout": true,
"readout_format": ".2f",
"step": 0.1,
"style": "IPY_MODEL_fb154a3c5eba4d74bfe77092480323e1",
"value": 1
}
},
"46ab4fa592ec4635b040df3368d2527a": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"fb154a3c5eba4d74bfe77092480323e1": {
"model_module": "@jupyter-widgets/controls",
"model_name": "SliderStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "SliderStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": "",
"handle_color": null
}
},
"c7b5f49855d94b059e6bca5612f52831": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatSliderModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatSliderModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "FloatSliderView",
"continuous_update": true,
"description": "",
"description_tooltip": null,
"disabled": false,
"layout": "IPY_MODEL_1cd7db1aa67d4aacb790ba3f1951f668",
"max": 1,
"min": -1,
"orientation": "horizontal",
"readout": true,
"readout_format": ".2f",
"step": 0.1,
"style": "IPY_MODEL_b6c05b3e6cef42bf996bfdda685d65c1",
"value": 1
}
},
"1cd7db1aa67d4aacb790ba3f1951f668": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"b6c05b3e6cef42bf996bfdda685d65c1": {
"model_module": "@jupyter-widgets/controls",
"model_name": "SliderStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "SliderStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": "",
"handle_color": null
}
},
"02a97ff18a274f269bf6cad4cc1c2212": {
"model_module": "@jupyter-widgets/output",
"model_name": "OutputModel",
"model_module_version": "1.0.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/output",
"_model_module_version": "1.0.0",
"_model_name": "OutputModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/output",
"_view_module_version": "1.0.0",
"_view_name": "OutputView",
"layout": "IPY_MODEL_66ba54a7a0114507b4c4caa438785c7a",
"msg_id": "",
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"RMSE: tensor(0.7199)\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
}
},
"66ba54a7a0114507b4c4caa438785c7a": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"25ee8e84ac074f42bbb41d2165106e65": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_1f79eca980c947a7b9c2d12b8e072043",
"IPY_MODEL_0ad289245ff943f0802a098859e41638",
"IPY_MODEL_dee723ae415046a5a06fc5ff9a286b8f"
],
"layout": "IPY_MODEL_082a8ecce842492888b9f35234655c43"
}
},
"1f79eca980c947a7b9c2d12b8e072043": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_b633b70c00d44f0ebc62ce9113485fd0",
"placeholder": "",
"style": "IPY_MODEL_45e8bf12df234a6ba5738c4a5db61e91",
"value": "100%"
}
},
"0ad289245ff943f0802a098859e41638": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_8807557597e64df8b82871cb847935a0",
"max": 200,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_b9341a3eaac64c96852ae47b90859244",
"value": 200
}
},
"dee723ae415046a5a06fc5ff9a286b8f": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_5bcf23960f43426da59c64d6dbd52f3c",
"placeholder": "",
"style": "IPY_MODEL_acb45521073b451199c2f671458dca17",
"value": " 200/200 [01:41<00:00, 2.23it/s]"
}
},
"082a8ecce842492888b9f35234655c43": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"b633b70c00d44f0ebc62ce9113485fd0": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"45e8bf12df234a6ba5738c4a5db61e91": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"8807557597e64df8b82871cb847935a0": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"b9341a3eaac64c96852ae47b90859244": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": ""
}
},
"5bcf23960f43426da59c64d6dbd52f3c": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"acb45521073b451199c2f671458dca17": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"2567cd7a4c27483184eadc3c3a3240f3": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_1b8c85fe7300404d81fc0e759c43611f",
"IPY_MODEL_650526ba34c34d0181ecbe2b68add0fc",
"IPY_MODEL_174322e7ce9d44758c9273e8115a53dd"
],
"layout": "IPY_MODEL_83fd9d0aaeaa43c1acb9a6e838b901a8"
}
},
"1b8c85fe7300404d81fc0e759c43611f": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_91086b1cfd394d5f910826fb70e00459",
"placeholder": "",
"style": "IPY_MODEL_95de228a174848618eb60be1e11e6cb6",
"value": "100%"
}
},
"650526ba34c34d0181ecbe2b68add0fc": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_3dd20a2fc91949c9b1f374239eea5df9",
"max": 200,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_0ac156543958443c85d38653ea668a34",
"value": 200
}
},
"174322e7ce9d44758c9273e8115a53dd": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_b14ec60a69794f909f02fe68d14adecd",
"placeholder": "",
"style": "IPY_MODEL_54db47219610411287115c4630fde6d7",
"value": " 200/200 [01:34<00:00, 2.14it/s]"
}
},
"83fd9d0aaeaa43c1acb9a6e838b901a8": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"91086b1cfd394d5f910826fb70e00459": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"95de228a174848618eb60be1e11e6cb6": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"3dd20a2fc91949c9b1f374239eea5df9": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"0ac156543958443c85d38653ea668a34": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": ""
}
},
"b14ec60a69794f909f02fe68d14adecd": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"54db47219610411287115c4630fde6d7": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"271bcf85710d4470847ebb185bbdc1ea": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HBoxModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HBoxModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HBoxView",
"box_style": "",
"children": [
"IPY_MODEL_841391ad612c44969cc04d9a0ffe015c",
"IPY_MODEL_45c40734733b4c7c93b48a8e30f3359f",
"IPY_MODEL_7652d782b08243fa85c36ba8c22cc3da"
],
"layout": "IPY_MODEL_29a586c234db4201bd4724c0190d58da"
}
},
"841391ad612c44969cc04d9a0ffe015c": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_ecd42cff1c394706b26aad6523c0df87",
"placeholder": "",
"style": "IPY_MODEL_72d18297280042ffa0ae9757e874e13b",
"value": "100%"
}
},
"45c40734733b4c7c93b48a8e30f3359f": {
"model_module": "@jupyter-widgets/controls",
"model_name": "FloatProgressModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "FloatProgressModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "ProgressView",
"bar_style": "success",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_682e67e69f3345d29f3eb4bf9b9a6b61",
"max": 100,
"min": 0,
"orientation": "horizontal",
"style": "IPY_MODEL_a065ac549d6944df8cb29769ac94d3ea",
"value": 100
}
},
"7652d782b08243fa85c36ba8c22cc3da": {
"model_module": "@jupyter-widgets/controls",
"model_name": "HTMLModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "HTMLModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "HTMLView",
"description": "",
"description_tooltip": null,
"layout": "IPY_MODEL_e55bfb4066f540eebc4cecec71c0614f",
"placeholder": "",
"style": "IPY_MODEL_85980a73115440c094fef695f85524c1",
"value": " 100/100 [03:05<00:00, 1.84s/it]"
}
},
"29a586c234db4201bd4724c0190d58da": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"ecd42cff1c394706b26aad6523c0df87": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"72d18297280042ffa0ae9757e874e13b": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
},
"682e67e69f3345d29f3eb4bf9b9a6b61": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"a065ac549d6944df8cb29769ac94d3ea": {
"model_module": "@jupyter-widgets/controls",
"model_name": "ProgressStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "ProgressStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"bar_color": null,
"description_width": ""
}
},
"e55bfb4066f540eebc4cecec71c0614f": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"85980a73115440c094fef695f85524c1": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
}
}
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "YMJZP6P_9jmi"
},
"source": [
"# Welcome to AIAIART!"
]
},
{
"cell_type": "code",
"metadata": {
"id": "AhB1mgJ8slj2",
"cellView": "form"
},
"source": [
"#@title Setup and Imports (run this first)\n",
"import torch \n",
"import random\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from PIL import Image\n",
"import IPython.display as ipd"
],
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 337
},
"id": "fdSNcSjnWBBv",
"outputId": "00cc90a2-53ca-4507-bfe2-e7651e205bb5",
"cellView": "form"
},
"source": [
"#@title Lesson 1 Video\n",
"html = ipd.display(ipd.HTML('<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/p814BapRq2U\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>'))\n",
"html"
],
"execution_count": 2,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.HTML object>"
],
"text/html": [
"<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/p814BapRq2U\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>"
]
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jIAc_ozUr2kS"
},
"source": [
"There's been a bit of an explosion of AI-generated art recently, with the advent of CLIP-guided text-to-image methods and a renewed interest in all things generative. Diving into the various communities, I quickly realised that although there are lots of folks using these methods, only a small subset feel confident enough with the code to modify the notebooks being shared around. This course aims to change that by equipping more coders and artists with the understanding and tools necessary to explore this space, creating new tools and getting to grips with existing ones. \n",
"\n",
"The idea had been brewing for some time, but when I put out this tweet expecting one or two responses and ended up with more engagement than I'd ever seen before it became obvious that this needs to happen asap :)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_RjHtbVA23bj"
},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "hdnKaRMU3MO2"
},
"source": [
"We'll be using Discord to run the course and keep everything organised. If you haven't already, do join us there (https://discord.gg/P92X2pxC) to stay up-to-date on all things course-related. These notebooks are designed to work as standalone lessons, but you'll get much more value out of them if you join us in our weekly sessions (Sundays 4pm UTC) to work through the material together. \n",
"\n",
"There will be four main lessons along with additional bonus notebooks. We'll start with Lesson #1 on September 19 and do one every week following that. The content for each lesson will hopefully be released at least a week before the live session. Links to the notebooks for each lesson will be included here as they become available:\n",
"\n",
"\n",
"\n",
"* Lesson #1 (This one!): Intro to PyTorch and Optimizing via Gradient Descent\n",
"* Lesson #2: Learning Representations, ConvNets, Style Transfer and Auto-Encoders\n",
"* Lesson #3: GANs and CLIP\n",
"* Lesson #4: Going Further\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "P_RLUcBP6ym8"
},
"source": [
"# Navigating The Notebooks\n",
"\n",
"\n",
"\n",
"We're cramming a lot into each lesson, but don't despair! A lot of the code will be illustrative examples which you can skim now and refer to later if you ever need to remind yourself about some specific function. Our goal is NOT to memorize everything, merely to get a high-level overview. I recommend collapsing sections as we complete them to make navigation easier, and if you get lost remember that you can see the table of contents in the panel on the left. \n",
"\n",
"Within each section there will be \n",
"- Text explanations with code examples\n",
"- Video content (currently just part of the full run-through video linked at the top)\n",
"- Coding exercises to practice what you've learnt\n",
"- Discussion questions to talk through as a group, marked with **THINK/DISCUSS**\n",
"\n",
"This is version one of this course, so there may be mistakes or concepts that are unclear. Please ask questions and share any feedback via Discord or directly during the live lessons.\n",
"\n",
"The live lessons will be recorded (if participants are OK with that), so if you're working through this after we run the lesson there will be a video you can work along with linked here. \n",
"\n",
"At the start of each notebook, we'll have a setup section that imports some libraries that will give us access to functionality beyond that offered by Python's standard library. If you haven't already run it, scroll up to the start of this notebook and run the cell so that you're ready to view the videos and dive into the code. You'll notice the code is hidden - click 'show code' to see what's going on. Throughout these notebooks we'll hide code to keep things tidy, but you can always take a peek under the hood to see what's going on. \n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wYJXxl4ssGY_"
},
"source": [
"# Section 1: PyTorch and Tensors\n",
"\n",
"\n",
"\n",
"PyTorch is primarily a deep learning framework. It has been designed to make creating and working with deep neural networks as easy, fast and flexible as possible. Today we'll look at one of the core components that makes this possible: tensors. We'll start by looking at how to contruct and manipulate tensors, and then we'll explore the magic of autograd and how we can use it for optimization with gradient descent. \n",
"\n",
"Video:\n",
"- What is PyTorch?\n",
"- Creating tensors\n",
"- Modifying them\n",
"- Debugging tips\n",
"- Images as tensors\n",
"\n",
"A lot of the material for this lessson was taken from the excellent content over at https://deeplearning.neuromatch.io/tutorials/W1D1_BasicsAndPytorch/student/W1D1_Tutorial1.html"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HShEqOrSxZts"
},
"source": [
"## 1.1 Creating Tensors\n",
"\n",
"\n",
"\n",
"We can construct a tensor directly from some common python iterables, such as list and tuple. Nested iterables can also be handled as long as the dimensions make sense."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "2vfZ13I1smeE",
"outputId": "a1fd5b91-8bc8-4d3e-ca46-e4f27a07a87e"
},
"source": [
"# tensor from a list\n",
"a = torch.tensor([0, 1, 2])\n",
"\n",
"#tensor from a tuple of tuples\n",
"b = ((1.0, 1.1), (1.2, 1.3))\n",
"b = torch.tensor(b)\n",
"\n",
"# tensor from a numpy array\n",
"c = np.ones([2, 3])\n",
"c = torch.tensor(c)\n",
"\n",
"print(f\"Tensor a: {a}\")\n",
"print(f\"Tensor b: {b}\")\n",
"print(f\"Tensor c: {c}\")"
],
"execution_count": 3,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Tensor a: tensor([0, 1, 2])\n",
"Tensor b: tensor([[1.0000, 1.1000],\n",
" [1.2000, 1.3000]])\n",
"Tensor c: tensor([[1., 1., 1.],\n",
" [1., 1., 1.]], dtype=torch.float64)\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cihog7elk04X"
},
"source": [
"The numerical arguments we pass to these constructors determine the shape of the output tensor - try changing them and see what happens."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "hNIXxogkwcoK",
"outputId": "037468cc-5a70-4465-85c4-d1da99000154"
},
"source": [
"x = torch.ones(5, 3)\n",
"y = torch.zeros(2)\n",
"z = torch.empty(1, 1, 5)\n",
"print(f\"Tensor x: {x}\")\n",
"print(f\"Tensor y: {y}\")\n",
"print(f\"Tensor z: {z}\")"
],
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Tensor x: tensor([[1., 1., 1.],\n",
" [1., 1., 1.],\n",
" [1., 1., 1.],\n",
" [1., 1., 1.],\n",
" [1., 1., 1.]])\n",
"Tensor y: tensor([0., 0.])\n",
"Tensor z: tensor([[[7.6451e-31, 3.0939e-41, 3.3631e-44, 0.0000e+00, nan]]])\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tIYOqpPbwmbC"
},
"source": [
"Notice that `.empty()` does not return zeros, but seemingly random small numbers. Unlike `.zeros()`, which initialises the elements of the tensor with zeros, `.empty()` just allocates the memory. It is hence a bit faster if you are looking to just create a tensor.\n",
"\n",
"There are also constructors for random numbers:"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "S_qkpbmSwlZO",
"outputId": "66210761-0633-43be-e564-bebb01c2bb4d"
},
"source": [
"# uniform distribution\n",
"a = torch.rand(1, 3)\n",
"\n",
"# normal distribution\n",
"b = torch.randn(3, 4)\n",
"\n",
"print(f\"Tensor a: {a}\")\n",
"print(f\"Tensor b: {b}\")"
],
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Tensor a: tensor([[0.3682, 0.8918, 0.4300]])\n",
"Tensor b: tensor([[ 0.3662, 1.0566, -1.4481, -0.3543],\n",
" [-0.6821, -0.4614, 0.6763, 0.8091],\n",
" [-0.4049, -0.6253, -0.6337, -1.4377]])\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "hySuFeSEmMIq"
},
"source": [
"**THINK/DISCUSS**: What's the difference? If you're curious, use `plt.hist(torch.randn(100))` to view the distribution.\n",
"\n",
"There are also constructors that allow us to construct a tensor according to the above constructors, but with dimensions equal to another tensor:"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "3csqjS_cmHSF",
"outputId": "5f0dfebf-bcfe-43ad-8bbb-a5969f87fb84"
},
"source": [
"c = torch.zeros_like(a)\n",
"d = torch.rand_like(c)\n",
"print(f\"Tensor c: {c}\")\n",
"print(f\"Tensor d: {d}\")"
],
"execution_count": 6,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Tensor c: tensor([[0., 0., 0.]])\n",
"Tensor d: tensor([[0.7247, 0.1910, 0.6216]])\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FmOHzGx4w2lm"
},
"source": [
"Finally, `.arange()` and `.linspace()` behave how you would expect them to if you are familar with numpy."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "slxXZsSnwgCM",
"outputId": "4565747b-5816-484c-ec10-87fcb0ad7178"
},
"source": [
"a = torch.arange(0, 10, step=1) # Equivalent to np.arange(0, 10, step=1)\n",
"b = torch.linspace(0, 5, steps=11) # np.linspace(0, 5, num=11)\n",
"\n",
"print(f\"Tensor a: {a}\\n\")\n",
"print(f\"Tensor b: {b}\\n\")"
],
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Tensor a: tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n",
"\n",
"Tensor b: tensor([0.0000, 0.5000, 1.0000, 1.5000, 2.0000, 2.5000, 3.0000, 3.5000, 4.0000,\n",
" 4.5000, 5.0000])\n",
"\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Sle-zg1ow_KK"
},
"source": [
"#### Coding Exercise 1: Creating Tensors\n",
"Below you will find some incomplete code. Fill in the missing code to construct the specified tensors.\n",
"\n",
"We want the tensors:\n",
"\n",
"*A*: 20 by 21 tensor consisting of ones\n",
"\n",
"*B*: a tensor with elements equal to the elements of numpy array Z\n",
"\n",
"*C*: a tensor with the same number of elements as A but with values ∼U(0,1)\n",
"\n",
"*D*: a 1D tensor containing the even numbers between 4 and 40 inclusive."
]
},
{
"cell_type": "code",
"metadata": {
"id": "8cBZCTu3xKk7"
},
"source": [
"# The numpy array required for B\n",
"Z = np.vander([1, 2, 3], 4) \n",
"\n",
"# Fill in your solutions:\n",
"A = ...\n",
"B = ...\n",
"C = ...\n",
"D = ...\n",
"\n",
"# Check your answers"
],
"execution_count": 8,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "HpIy-S-dxRyn"
},
"source": [
"Tip: use `.shape` to check the dimensions of a tensor. "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "juZn5ZcCxeE4"
},
"source": [
"## 1.2 Tensor Operations\n",
"\n",
"\n",
"\n",
"We can perform operations on tensors using methods under `torch.`. However, in PyTorch most common Python operators are overridden, so we can use those instead. The common standard arithmetic operators (+, -, \\*, /, and **) have all been lifted to elementwise operations."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "3DM6Fi7TSA2P",
"outputId": "b0628c6b-f7f6-46a5-84c0-b277dcfd6d41"
},
"source": [
"x = torch.tensor([1, 2, 4, 8])\n",
"y = torch.tensor([1, 2, 3, 4])\n",
"print('Addition via torch.add:', torch.add(x, y))\n",
"print('Addition using \"+\":', x+y) # The same\n",
"print('Some other operations:')\n",
"x + y, x - y, x * y, x / y, x**y # The ** operator is exponentiation"
],
"execution_count": 9,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Addition via torch.add: tensor([ 2, 4, 7, 12])\n",
"Addition using \"+\": tensor([ 2, 4, 7, 12])\n",
"Some other operations:\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(tensor([ 2, 4, 7, 12]),\n",
" tensor([0, 0, 1, 4]),\n",
" tensor([ 1, 4, 12, 32]),\n",
" tensor([1.0000, 1.0000, 1.3333, 2.0000]),\n",
" tensor([ 1, 4, 64, 4096]))"
]
},
"metadata": {},
"execution_count": 9
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "IAP5PxDCSZsw"
},
"source": [
"**THINK/DISCUSS**: What does 'element-wise' mean? Inspect the outputs above and discuss."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "YpLCQbgQTFrJ"
},
"source": [
"Tensors also have many built-in methods such as `.mean()` or `.sum()` (see the full list here: https://pytorch.org/docs/stable/tensors.html). Whenever you're working with a multi-dimensional tensor, pay attention to the dimensions and think about what result you're aiming to achieve."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Ob5Yid5ATEQ4",
"outputId": "d823dffc-0756-4670-f5d4-10634172f880"
},
"source": [
"x = torch.rand(3, 3)\n",
"print(x)\n",
"print(\"\\n\")\n",
"# sum() - note the axis is the axis you move across when summing\n",
"print(f\"Sum of every element of x: {x.sum()}\")\n",
"print(f\"Sum of the columns of x: {x.sum(axis=0)}\")\n",
"print(f\"Sum of the rows of x: {x.sum(axis=1)}\")\n",
"print(\"\\n\")"
],
"execution_count": 10,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor([[0.3556, 0.6408, 0.4905],\n",
" [0.8050, 0.9791, 0.0330],\n",
" [0.9721, 0.9983, 0.5862]])\n",
"\n",
"\n",
"Sum of every element of x: 5.860609531402588\n",
"Sum of the columns of x: tensor([2.1327, 2.6182, 1.1097])\n",
"Sum of the rows of x: tensor([1.4869, 1.8172, 2.5566])\n",
"\n",
"\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Euo-dRWED409"
},
"source": [
"### Coding Exercise 2\n",
"\n",
"\n",
"1. Display the mean of each column in x\n",
"2. Make a new tensor `x_squared` which is x but every element has been raised to the power of 2\n",
"3. Find the sum of all elements in `x_squared`\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "qnBXMtVlEjZZ"
},
"source": [
"# Your solution here"
],
"execution_count": 11,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "E0pEvtTPUfbg"
},
"source": [
"Remember we said most operations default to 'element-wise'? What if we want the matrix operation? Torch has you covered there as well. `torch.matmul()` or the `@` symbol let you do matrix multiplication. For dot multiplication, you can use torch.dot(). \n",
"\n",
"Transposes of 2D tensors are obtained using `torch.t()` or `Tensor.T`. Note the lack of brackets for `Tensor.T` - it is an attribute, not a method.\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "VSr9CgCEWECq"
},
"source": [
"# Exercise: create a few 2D tensors and try out some of these operations."
],
"execution_count": 12,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "PeOm_wZJT01u"
},
"source": [
"## 1.3 Manipulating Tensors\n",
"\n",
"Beyond mathematical operations, we often want to access specific items or sets if items in a tensor, or perform operations like changing the shape of a tensor. Here are a few examples of some common tasks. These may feel simple if you're used to something like numpy, but it's worth making sure you know how to do these basic operations (or at least, you know where to find these examples again to refer to them!) since we'll use these a lot in the coming lessons. "
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Igu1ukW2xfoI",
"outputId": "a490fa55-0de7-4e54-fb6b-66596b271a7a"
},
"source": [
"# Indexing tensors\n",
"x = torch.arange(0, 10)\n",
"print(x)\n",
"print(x[-1])\n",
"print(x[1:3]) # From index 1 up to but NOT INCLUDING index 3\n",
"print(x[:-2])"
],
"execution_count": 13,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n",
"tensor(9)\n",
"tensor([1, 2])\n",
"tensor([0, 1, 2, 3, 4, 5, 6, 7])\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "lnF0-ZAjE3Qr"
},
"source": [
"Reshaping works as long as the shapes make send. (3, 4) -> (4, 3) is fine, but (3, 4) -> (8, 2) won't work since there aren't enough elements!"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Luu9gNG_xUmQ",
"outputId": "d9a38484-49a0-44f9-94b0-53f434ab8f7f"
},
"source": [
"# Reshaping\n",
"z = torch.arange(12).reshape(6, 2)\n",
"print(f\"Original z (6, 2) : \\n {z}\")\n",
"\n",
"# 2D -> 1D\n",
"z = z.flatten()\n",
"print(f\"Flattened z: \\n {z}\")\n",
"\n",
"# and back to 2D\n",
"z = z.reshape(3, 4)\n",
"print(f\"Reshaped (3x4) z: \\n {z}\")"
],
"execution_count": 14,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Original z (6, 2) : \n",
" tensor([[ 0, 1],\n",
" [ 2, 3],\n",
" [ 4, 5],\n",
" [ 6, 7],\n",
" [ 8, 9],\n",
" [10, 11]])\n",
"Flattened z: \n",
" tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])\n",
"Reshaped (3x4) z: \n",
" tensor([[ 0, 1, 2, 3],\n",
" [ 4, 5, 6, 7],\n",
" [ 8, 9, 10, 11]])\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "a4nW02YJerEk"
},
"source": [
"Concatenating tensors is done with torch.cat - take a look at this examples and take note of how the dimension specified affects the output:"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "8QzCDLe9cxQd",
"outputId": "7443889f-24d3-4108-9915-6f92e88e7068"
},
"source": [
"# Create two tensors of the same shape\n",
"x = torch.arange(12, dtype=torch.float32).reshape((3, 4))\n",
"y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])\n",
"\n",
"\n",
"#concatenate them along rows\n",
"cat_rows = torch.cat((x, y), dim=0)\n",
"\n",
"# concatenate along columns\n",
"cat_cols = torch.cat((x, y), dim=1)\n",
"\n",
"# printing outputs\n",
"print('Concatenated by rows: shape{} \\n {}'.format(list(cat_rows.shape), cat_rows))\n",
"print('\\n Concatenated by colums: shape{} \\n {}'.format(list(cat_cols.shape), cat_cols))"
],
"execution_count": 15,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Concatenated by rows: shape[6, 4] \n",
" tensor([[ 0., 1., 2., 3.],\n",
" [ 4., 5., 6., 7.],\n",
" [ 8., 9., 10., 11.],\n",
" [ 2., 1., 4., 3.],\n",
" [ 1., 2., 3., 4.],\n",
" [ 4., 3., 2., 1.]])\n",
"\n",
" Concatenated by colums: shape[3, 8] \n",
" tensor([[ 0., 1., 2., 3., 2., 1., 4., 3.],\n",
" [ 4., 5., 6., 7., 1., 2., 3., 4.],\n",
" [ 8., 9., 10., 11., 4., 3., 2., 1.]])\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "susBhttAePb8"
},
"source": [
"## 1.4 Squeezing Tensors\n",
"\n",
"When processing batches of data, you will quite often be left with singleton dimensions. e.g. [1,10] or [256, 1, 3]. This dimension can quite easily mess up your matrix operations if you don’t plan on it being there…\n",
"\n",
"In order to compress tensors along their singleton dimensions we can use the .`squeeze()` method. We can use the `.unsqueeze()` method to do the opposite."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "EqTZ3AMGciXI",
"outputId": "e12b5d50-517b-4b08-c3da-903e90db32ea"
},
"source": [
"x = torch.randn(1, 10)\n",
"print(x.shape)\n",
"print(f\"x[0]: {x[0]}\") # printing the zeroth element of the tensor will not give us the first number!"
],
"execution_count": 16,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"torch.Size([1, 10])\n",
"x[0]: tensor([ 0.9819, -0.7094, -0.1398, 0.1669, -2.0277, 0.2903, -0.0075, -0.6227,\n",
" 0.9910, 0.2557])\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "w9cmMuESeZq1"
},
"source": [
"We could do `x[0][0]` but this can get tedious - instead, we can use `squeeze` to get rid of that extra dimension:"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "shVuBS5ycnKT",
"outputId": "76cbffb4-20c0-42b1-eeaf-f9ab4c8187b8"
},
"source": [
"# lets get rid of that singleton dimension and see what happens now\n",
"x = x.squeeze(0)\n",
"print(x.shape)\n",
"print(f\"x[0]: {x[0]}\")"
],
"execution_count": 17,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"torch.Size([10])\n",
"x[0]: 0.9818704128265381\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xaPIjwXitrfp"
},
"source": [
"Adding singleton dimensions works a similar way, and is often used when tensors being added need same number of dimensions:"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "PLieYb6He5G6",
"outputId": "57c48bd3-0513-4dde-ddab-61c21cd0995b"
},
"source": [
"y = torch.randn(5, 5)\n",
"print(f\"shape of y: {y.shape}\")\n",
"\n",
"# lets insert a singleton dimension\n",
"y = y.unsqueeze(1) # Note the argument here is 1 - try 0 and 2 and make sure you get a feel for what unsqueeze does. \n",
"print(f\"shape of y: {y.shape}\")"
],
"execution_count": 18,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"shape of y: torch.Size([5, 5])\n",
"shape of y: torch.Size([5, 1, 5])\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "UMhHS9wmEquy"
},
"source": [
"### Coding Exercise 3\n",
"\n",
"\n",
"\n",
"1. Create a tensor shape (1, 10) containing the digits 5..14 \n",
"2. Reshape to (2, 5)\n",
"3. Use indexing to access just the first column in this reshaped tensor\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "-Ss-7jWdFHDQ"
},
"source": [
"# Your solution here"
],
"execution_count": 19,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "aTJ69R0qsc2L"
},
"source": [
"## 1.5 Image Operations\n",
"\n",
"As you can imagine, we'll be dealing with images a lot in this course. In this section we'll look at loading images, working with them and displaying them using the PIL library and converting back and forth between the format expected by PIL and that commonly used for tensor image processing.\n",
"\n",
"First up, we need an image to play with. We'll grab one from a URL and open it using PIL aka the Pythin Imaging Library):"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "SAJG8MjmuOUQ",
"outputId": "09a4cb38-7580-4201-e402-0b1cf0b20bcf"
},
"source": [
"# Downloading the original hastily-prepared course logo:\n",
"!curl https://raw.githubusercontent.com/johnowhitaker/aiaiart/master/logo.png > logo.png"
],
"execution_count": 23,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" % Total % Received % Xferd Average Speed Time Time Time Current\n",
" Dload Upload Total Spent Left Speed\n",
"\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 179k 100 179k 0 0 749k 0 --:--:-- --:--:-- --:--:-- 752k\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 517
},
"id": "KP2ht3AGtj_0",
"outputId": "74fd7171-12ac-4a86-f607-d73f9e96b9cb"
},
"source": [
"fn = 'logo.png'\n",
"im = Image.open(fn)\n",
"im # PIL images are easy to view directly in Jupyter"
],
"execution_count": 24,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=500x500 at 0x7F363C006B10>"
],
"image/png": "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
gitextract_6ftzropk/ ├── AIAIART_1.ipynb ├── AIAIART_2.ipynb ├── AIAIART_3.ipynb ├── AIAIART_4.ipynb ├── AIAIART_5.ipynb ├── AIAIART_6.ipynb ├── AIAIART_7.ipynb ├── AIAIART_8.ipynb ├── AIAIART_9.ipynb ├── LICENSE ├── intro.html └── readme.md
Copy disabled (too large)
Download .json
Condensed preview — 12 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (33,403K chars).
[
{
"path": "AIAIART_1.ipynb",
"chars": 2624735,
"preview": "{\n \"nbformat\": 4,\n \"nbformat_minor\": 0,\n \"metadata\": {\n \"colab\": {\n \"name\": \"AIAIART #1.ipynb\",\n \"proven"
},
{
"path": "AIAIART_2.ipynb",
"chars": 4406890,
"preview": "{\n \"nbformat\": 4,\n \"nbformat_minor\": 0,\n \"metadata\": {\n \"colab\": {\n \"name\": \"AIAIART #2.ipynb\",\n \"proven"
},
{
"path": "AIAIART_3.ipynb",
"chars": 6899206,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# AIAIART #3 - GANs and CLIP\"\n ]\n"
},
{
"path": "AIAIART_4.ipynb",
"chars": 6921791,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# AIAIART #4 - Going Further\\n\",\n "
},
{
"path": "AIAIART_5.ipynb",
"chars": 4084637,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Welcome to AIAIART Part 2!\\n\",\n "
},
{
"path": "AIAIART_6.ipynb",
"chars": 3473082,
"preview": "{\n \"nbformat\": 4,\n \"nbformat_minor\": 0,\n \"metadata\": {\n \"colab\": {\n \"name\": \"AIAIART #6.ipynb\",\n \"proven"
},
{
"path": "AIAIART_7.ipynb",
"chars": 3190276,
"preview": "{\n \"nbformat\": 4,\n \"nbformat_minor\": 0,\n \"metadata\": {\n \"colab\": {\n \"name\": \"AIAIART #7.ipynb\",\n \"proven"
},
{
"path": "AIAIART_9.ipynb",
"chars": 1699264,
"preview": "{\n \"nbformat\": 4,\n \"nbformat_minor\": 0,\n \"metadata\": {\n \"colab\": {\n \"name\": \"AIAIART #9.ipynb\",\n \"proven"
},
{
"path": "LICENSE",
"chars": 1074,
"preview": "MIT License\n\nCopyright (c) 2022 Jonathan Whitaker\n\nPermission is hereby granted, free of charge, to any person obtaining"
},
{
"path": "intro.html",
"chars": 117,
"preview": "<!doctype html>\n<html>\n <head>\n <title>AIAIART</title>\n </head>\n <body>\n <p>Test para</p>\n </body>\n</html>\n"
},
{
"path": "readme.md",
"chars": 3035,
"preview": "# AIAIART course\n\nNEWS: I'm working on a successor to this course called 'The Generative Landscape' which will be out mi"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the johnowhitaker/aiaiart GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 12 files (46.8 MB), approximately 8.3M tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.