diff --git a/TD2 Deep Learning.ipynb b/TD2 Deep Learning.ipynb index 8ad507cea32f75710f1756b6c233086fcc1898f9..1cdde7c12ce25e35731c3bef44edbf6f7419278a 100644 --- a/TD2 Deep Learning.ipynb +++ b/TD2 Deep Learning.ipynb @@ -33,7 +33,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "id": "330a42f5", "metadata": {}, "outputs": [ @@ -41,13 +41,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Collecting torchNote: you may need to restart the kernel to use updated packages.\n", + "Requirement already satisfied: torch in c:\\users\\lucil\\anaconda3\\lib\\site-packages (2.1.0)Note: you may need to restart the kernel to use updated packages.\n", "\n", - " Obtaining dependency information for torch from https://files.pythonhosted.org/packages/74/07/edce54779f5c3fe8ab8390eafad3d7c8190fce68f922a254ea77f4a94a99/torch-2.1.0-cp311-cp311-win_amd64.whl.metadata\n", - " Downloading torch-2.1.0-cp311-cp311-win_amd64.whl.metadata (25 kB)\n", - "Collecting torchvision\n", - " Obtaining dependency information for torchvision from https://files.pythonhosted.org/packages/20/ac/ab6f42af83349e679b03c9bb18354740c6b58b17dba329fb408730230584/torchvision-0.16.0-cp311-cp311-win_amd64.whl.metadata\n", - " Downloading torchvision-0.16.0-cp311-cp311-win_amd64.whl.metadata (6.6 kB)\n", + "Requirement already satisfied: torchvision in c:\\users\\lucil\\anaconda3\\lib\\site-packages (0.16.0)\n", "Requirement already satisfied: filelock in c:\\users\\lucil\\anaconda3\\lib\\site-packages (from torch) (3.9.0)\n", "Requirement already satisfied: typing-extensions in c:\\users\\lucil\\anaconda3\\lib\\site-packages (from torch) (4.7.1)\n", "Requirement already satisfied: sympy in c:\\users\\lucil\\anaconda3\\lib\\site-packages (from torch) (1.11.1)\n", @@ -62,448 +58,7 @@ "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\lucil\\anaconda3\\lib\\site-packages (from requests->torchvision) (3.4)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in c:\\users\\lucil\\anaconda3\\lib\\site-packages (from requests->torchvision) (1.26.16)\n", "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\lucil\\anaconda3\\lib\\site-packages (from requests->torchvision) (2023.7.22)\n", - "Requirement already satisfied: mpmath>=0.19 in c:\\users\\lucil\\anaconda3\\lib\\site-packages (from sympy->torch) (1.3.0)\n", - "Downloading torch-2.1.0-cp311-cp311-win_amd64.whl (192.3 MB)\n", - " ---------------------------------------- 0.0/192.3 MB ? eta -:--:--\n", - " ---------------------------------------- 0.0/192.3 MB 991.0 kB/s eta 0:03:15\n", - " ---------------------------------------- 0.3/192.3 MB 3.5 MB/s eta 0:00:55\n", - " ---------------------------------------- 0.8/192.3 MB 5.8 MB/s eta 0:00:33\n", - " ---------------------------------------- 1.3/192.3 MB 7.3 MB/s eta 0:00:27\n", - " ---------------------------------------- 1.7/192.3 MB 7.4 MB/s eta 0:00:26\n", - " ---------------------------------------- 2.1/192.3 MB 7.8 MB/s eta 0:00:25\n", - " --------------------------------------- 2.8/192.3 MB 8.2 MB/s eta 0:00:24\n", - " --------------------------------------- 3.1/192.3 MB 8.2 MB/s eta 0:00:24\n", - " --------------------------------------- 3.4/192.3 MB 8.0 MB/s eta 0:00:24\n", - " --------------------------------------- 3.8/192.3 MB 7.8 MB/s eta 0:00:25\n", - " --------------------------------------- 4.3/192.3 MB 8.5 MB/s eta 0:00:23\n", - " --------------------------------------- 4.5/192.3 MB 8.3 MB/s eta 0:00:23\n", - " - -------------------------------------- 5.1/192.3 MB 8.2 MB/s eta 0:00:23\n", - " - -------------------------------------- 5.4/192.3 MB 8.0 MB/s eta 0:00:24\n", - " - -------------------------------------- 5.8/192.3 MB 8.2 MB/s eta 0:00:23\n", - " - -------------------------------------- 6.1/192.3 MB 8.1 MB/s eta 0:00:23\n", - " - -------------------------------------- 6.4/192.3 MB 8.0 MB/s eta 0:00:24\n", - " - -------------------------------------- 6.7/192.3 MB 7.9 MB/s eta 0:00:24\n", - " - -------------------------------------- 6.9/192.3 MB 7.8 MB/s eta 0:00:24\n", - " - -------------------------------------- 7.3/192.3 MB 7.9 MB/s eta 0:00:24\n", - " - -------------------------------------- 7.7/192.3 MB 8.0 MB/s eta 0:00:24\n", - " - -------------------------------------- 8.3/192.3 MB 8.0 MB/s eta 0:00:23\n", - " - -------------------------------------- 8.6/192.3 MB 8.1 MB/s eta 0:00:23\n", - " - -------------------------------------- 8.9/192.3 MB 7.9 MB/s eta 0:00:24\n", - " - -------------------------------------- 9.3/192.3 MB 8.0 MB/s eta 0:00:23\n", - " - -------------------------------------- 9.5/192.3 MB 7.8 MB/s eta 0:00:24\n", - " -- ------------------------------------- 9.9/192.3 MB 7.8 MB/s eta 0:00:24\n", - " -- ------------------------------------- 10.4/192.3 MB 8.1 MB/s eta 0:00:23\n", - " -- ------------------------------------- 10.8/192.3 MB 8.3 MB/s eta 0:00:22\n", - " -- ------------------------------------- 11.3/192.3 MB 8.1 MB/s eta 0:00:23\n", - " -- ------------------------------------- 11.7/192.3 MB 8.2 MB/s eta 0:00:23\n", - " -- ------------------------------------- 11.8/192.3 MB 8.3 MB/s eta 0:00:22\n", - " -- ------------------------------------- 12.4/192.3 MB 8.1 MB/s eta 0:00:23\n", - " -- ------------------------------------- 12.5/192.3 MB 8.1 MB/s eta 0:00:23\n", - " -- ------------------------------------- 12.9/192.3 MB 7.9 MB/s eta 0:00:23\n", - " -- ------------------------------------- 13.3/192.3 MB 7.9 MB/s eta 0:00:23\n", - " -- ------------------------------------- 13.5/192.3 MB 7.8 MB/s eta 0:00:23\n", - " -- ------------------------------------- 14.0/192.3 MB 7.8 MB/s eta 0:00:23\n", - " --- ------------------------------------ 14.5/192.3 MB 7.4 MB/s eta 0:00:24\n", - " --- ------------------------------------ 14.9/192.3 MB 7.7 MB/s eta 0:00:24\n", - " --- ------------------------------------ 15.0/192.3 MB 7.5 MB/s eta 0:00:24\n", - " --- ------------------------------------ 15.0/192.3 MB 7.5 MB/s eta 0:00:24\n", - " --- ------------------------------------ 15.0/192.3 MB 7.5 MB/s eta 0:00:24\n", - " --- ------------------------------------ 15.0/192.3 MB 7.5 MB/s eta 0:00:24\n", - " --- ------------------------------------ 16.6/192.3 MB 7.4 MB/s eta 0:00:24\n", - " --- ------------------------------------ 16.8/192.3 MB 7.4 MB/s eta 0:00:24\n", - " --- ------------------------------------ 17.2/192.3 MB 7.5 MB/s eta 0:00:24\n", - " --- ------------------------------------ 17.6/192.3 MB 7.5 MB/s eta 0:00:24\n", - " --- ------------------------------------ 18.0/192.3 MB 7.5 MB/s eta 0:00:24\n", - " --- ------------------------------------ 18.5/192.3 MB 7.5 MB/s eta 0:00:24\n", - " --- ------------------------------------ 18.9/192.3 MB 7.7 MB/s eta 0:00:23\n", - " ---- ----------------------------------- 19.4/192.3 MB 7.8 MB/s eta 0:00:23\n", - " ---- ----------------------------------- 19.6/192.3 MB 7.8 MB/s eta 0:00:23\n", - " ---- ----------------------------------- 19.9/192.3 MB 7.5 MB/s eta 0:00:23\n", - " ---- ----------------------------------- 20.2/192.3 MB 7.5 MB/s eta 0:00:23\n", - " ---- ----------------------------------- 20.7/192.3 MB 7.6 MB/s eta 0:00:23\n", - " ---- ----------------------------------- 21.2/192.3 MB 7.6 MB/s eta 0:00:23\n", - " ---- ----------------------------------- 21.9/192.3 MB 7.8 MB/s eta 0:00:22\n", - " ---- ----------------------------------- 22.1/192.3 MB 7.9 MB/s eta 0:00:22\n", - " ---- ----------------------------------- 22.8/192.3 MB 8.2 MB/s eta 0:00:21\n", - " ---- ----------------------------------- 23.2/192.3 MB 8.1 MB/s eta 0:00:21\n", - " ---- ----------------------------------- 23.7/192.3 MB 8.3 MB/s eta 0:00:21\n", - " ----- ---------------------------------- 24.2/192.3 MB 8.7 MB/s eta 0:00:20\n", - " ----- ---------------------------------- 24.6/192.3 MB 8.6 MB/s eta 0:00:20\n", - " ----- ---------------------------------- 25.1/192.3 MB 8.7 MB/s eta 0:00:20\n", - " ----- ---------------------------------- 25.2/192.3 MB 8.6 MB/s eta 0:00:20\n", - " ----- ---------------------------------- 25.4/192.3 MB 9.9 MB/s eta 0:00:17\n", - " ----- ---------------------------------- 25.8/192.3 MB 9.5 MB/s eta 0:00:18\n", - " ----- ---------------------------------- 26.2/192.3 MB 9.4 MB/s eta 0:00:18\n", - " ----- ---------------------------------- 26.7/192.3 MB 9.0 MB/s eta 0:00:19\n", - " ----- ---------------------------------- 26.9/192.3 MB 8.8 MB/s eta 0:00:19\n", - " ----- ---------------------------------- 27.4/192.3 MB 9.0 MB/s eta 0:00:19\n", - " ----- ---------------------------------- 27.9/192.3 MB 9.0 MB/s eta 0:00:19\n", - " ----- ---------------------------------- 28.3/192.3 MB 9.1 MB/s eta 0:00:19\n", - " ----- ---------------------------------- 28.6/192.3 MB 8.8 MB/s eta 0:00:19\n", - " ------ --------------------------------- 29.0/192.3 MB 9.0 MB/s eta 0:00:19\n", - " ------ --------------------------------- 29.6/192.3 MB 8.8 MB/s eta 0:00:19\n", - " ------ --------------------------------- 30.1/192.3 MB 9.5 MB/s eta 0:00:18\n", - " ------ --------------------------------- 30.4/192.3 MB 9.5 MB/s eta 0:00:18\n", - " ------ --------------------------------- 30.9/192.3 MB 9.4 MB/s eta 0:00:18\n", - " ------ --------------------------------- 31.4/192.3 MB 9.5 MB/s eta 0:00:17\n", - " ------ --------------------------------- 31.8/192.3 MB 9.4 MB/s eta 0:00:18\n", - " ------ --------------------------------- 32.2/192.3 MB 9.2 MB/s eta 0:00:18\n", - " ------ --------------------------------- 32.6/192.3 MB 9.4 MB/s eta 0:00:18\n", - " ------ --------------------------------- 33.0/192.3 MB 9.1 MB/s eta 0:00:18\n", - " ------ --------------------------------- 33.5/192.3 MB 9.4 MB/s eta 0:00:17\n", - " ------- -------------------------------- 33.9/192.3 MB 9.1 MB/s eta 0:00:18\n", - " ------- -------------------------------- 34.3/192.3 MB 9.0 MB/s eta 0:00:18\n", - " ------- -------------------------------- 34.5/192.3 MB 8.8 MB/s eta 0:00:18\n", - " ------- -------------------------------- 35.0/192.3 MB 9.0 MB/s eta 0:00:18\n", - " ------- -------------------------------- 35.5/192.3 MB 9.2 MB/s eta 0:00:18\n", - " ------- -------------------------------- 35.8/192.3 MB 9.2 MB/s eta 0:00:17\n", - " ------- -------------------------------- 35.9/192.3 MB 9.0 MB/s eta 0:00:18\n", - " ------- -------------------------------- 36.1/192.3 MB 8.8 MB/s eta 0:00:18\n", - " ------- -------------------------------- 36.3/192.3 MB 8.6 MB/s eta 0:00:19\n", - " ------- -------------------------------- 36.5/192.3 MB 8.4 MB/s eta 0:00:19\n", - " ------- -------------------------------- 37.1/192.3 MB 8.4 MB/s eta 0:00:19\n", - " ------- -------------------------------- 37.3/192.3 MB 8.5 MB/s eta 0:00:19\n", - " ------- -------------------------------- 37.5/192.3 MB 8.4 MB/s eta 0:00:19\n", - " ------- -------------------------------- 38.0/192.3 MB 8.4 MB/s eta 0:00:19\n", - " -------- ------------------------------- 38.7/192.3 MB 8.4 MB/s eta 0:00:19\n", - " -------- ------------------------------- 39.3/192.3 MB 8.6 MB/s eta 0:00:18\n", - " -------- ------------------------------- 40.2/192.3 MB 8.7 MB/s eta 0:00:18\n", - " -------- ------------------------------- 40.6/192.3 MB 8.7 MB/s eta 0:00:18\n", - " -------- ------------------------------- 41.1/192.3 MB 8.8 MB/s eta 0:00:18\n", - " -------- ------------------------------- 41.6/192.3 MB 8.7 MB/s eta 0:00:18\n", - " -------- ------------------------------- 42.2/192.3 MB 9.0 MB/s eta 0:00:17\n", - " -------- ------------------------------- 42.7/192.3 MB 9.0 MB/s eta 0:00:17\n", - " --------- ------------------------------ 43.3/192.3 MB 9.0 MB/s eta 0:00:17\n", - " --------- ------------------------------ 43.7/192.3 MB 9.0 MB/s eta 0:00:17\n", - " --------- ------------------------------ 44.4/192.3 MB 9.1 MB/s eta 0:00:17\n", - " --------- ------------------------------ 44.8/192.3 MB 9.5 MB/s eta 0:00:16\n", - " --------- ------------------------------ 45.5/192.3 MB 9.5 MB/s eta 0:00:16\n", - " --------- ------------------------------ 46.0/192.3 MB 9.6 MB/s eta 0:00:16\n", - " --------- ------------------------------ 46.3/192.3 MB 10.2 MB/s eta 0:00:15\n", - " --------- ------------------------------ 46.9/192.3 MB 10.7 MB/s eta 0:00:14\n", - " --------- ------------------------------ 47.1/192.3 MB 10.6 MB/s eta 0:00:14\n", - " --------- ------------------------------ 47.8/192.3 MB 11.3 MB/s eta 0:00:13\n", - " ---------- ----------------------------- 48.2/192.3 MB 10.9 MB/s eta 0:00:14\n", - " ---------- ----------------------------- 48.9/192.3 MB 11.1 MB/s eta 0:00:13\n", - " ---------- ----------------------------- 49.3/192.3 MB 10.9 MB/s eta 0:00:14\n", - " ---------- ----------------------------- 49.9/192.3 MB 10.9 MB/s eta 0:00:14\n", - " ---------- ----------------------------- 50.3/192.3 MB 10.9 MB/s eta 0:00:14\n", - " ---------- ----------------------------- 50.8/192.3 MB 10.9 MB/s eta 0:00:13\n", - " ---------- ----------------------------- 51.4/192.3 MB 10.9 MB/s eta 0:00:13\n", - " ---------- ----------------------------- 52.1/192.3 MB 10.9 MB/s eta 0:00:13\n", - " ---------- ----------------------------- 52.6/192.3 MB 10.7 MB/s eta 0:00:14\n", - " ----------- ---------------------------- 53.1/192.3 MB 10.9 MB/s eta 0:00:13\n", - " ----------- ---------------------------- 53.6/192.3 MB 10.9 MB/s eta 0:00:13\n", - " ----------- ---------------------------- 54.0/192.3 MB 10.7 MB/s eta 0:00:13\n", - " ----------- ---------------------------- 54.5/192.3 MB 10.6 MB/s eta 0:00:14\n", - " ----------- ---------------------------- 55.1/192.3 MB 10.7 MB/s eta 0:00:13\n", - " ----------- ---------------------------- 55.6/192.3 MB 10.7 MB/s eta 0:00:13\n", - " ----------- ---------------------------- 56.0/192.3 MB 10.6 MB/s eta 0:00:13\n", - " ----------- ---------------------------- 56.7/192.3 MB 10.7 MB/s eta 0:00:13\n", - " ----------- ---------------------------- 56.9/192.3 MB 10.4 MB/s eta 0:00:14\n", - " ----------- ---------------------------- 57.5/192.3 MB 10.7 MB/s eta 0:00:13\n", - " ------------ --------------------------- 58.1/192.3 MB 10.6 MB/s eta 0:00:13\n", - " ------------ --------------------------- 58.5/192.3 MB 10.9 MB/s eta 0:00:13\n", - " ------------ --------------------------- 58.7/192.3 MB 10.7 MB/s eta 0:00:13\n", - " ------------ --------------------------- 59.1/192.3 MB 10.2 MB/s eta 0:00:14\n", - " ------------ --------------------------- 59.6/192.3 MB 10.2 MB/s eta 0:00:13\n", - " ------------ --------------------------- 60.4/192.3 MB 10.2 MB/s eta 0:00:13\n", - " ------------ --------------------------- 60.7/192.3 MB 10.2 MB/s eta 0:00:13\n", - " ------------ --------------------------- 61.2/192.3 MB 10.4 MB/s eta 0:00:13\n", - " ------------ --------------------------- 61.7/192.3 MB 10.2 MB/s eta 0:00:13\n", - " ------------ --------------------------- 62.4/192.3 MB 10.1 MB/s eta 0:00:13\n", - " ------------- -------------------------- 63.0/192.3 MB 10.1 MB/s eta 0:00:13\n", - " ------------- -------------------------- 63.8/192.3 MB 10.4 MB/s eta 0:00:13\n", - " ------------- -------------------------- 64.2/192.3 MB 10.4 MB/s eta 0:00:13\n", - " ------------- -------------------------- 64.7/192.3 MB 10.4 MB/s eta 0:00:13\n", - " ------------- -------------------------- 65.2/192.3 MB 10.6 MB/s eta 0:00:13\n", - " ------------- -------------------------- 65.5/192.3 MB 10.2 MB/s eta 0:00:13\n", - " ------------- -------------------------- 66.2/192.3 MB 10.6 MB/s eta 0:00:12\n", - " ------------- -------------------------- 66.4/192.3 MB 10.2 MB/s eta 0:00:13\n", - " ------------- -------------------------- 67.0/192.3 MB 10.4 MB/s eta 0:00:13\n", - " -------------- ------------------------- 67.3/192.3 MB 10.6 MB/s eta 0:00:12\n", - " -------------- ------------------------- 67.6/192.3 MB 10.1 MB/s eta 0:00:13\n", - " -------------- ------------------------- 68.2/192.3 MB 10.1 MB/s eta 0:00:13\n", - " -------------- ------------------------- 68.6/192.3 MB 10.1 MB/s eta 0:00:13\n", - " -------------- ------------------------- 69.2/192.3 MB 10.6 MB/s eta 0:00:12\n", - " -------------- ------------------------- 69.7/192.3 MB 10.6 MB/s eta 0:00:12\n", - " -------------- ------------------------- 70.4/192.3 MB 10.7 MB/s eta 0:00:12\n", - " -------------- ------------------------- 70.7/192.3 MB 10.7 MB/s eta 0:00:12\n", - " -------------- ------------------------- 71.3/192.3 MB 10.9 MB/s eta 0:00:12\n", - " -------------- ------------------------- 71.9/192.3 MB 11.1 MB/s eta 0:00:11\n", - " --------------- ------------------------ 72.3/192.3 MB 10.9 MB/s eta 0:00:11\n", - " --------------- ------------------------ 72.7/192.3 MB 10.7 MB/s eta 0:00:12\n", - " --------------- ------------------------ 73.1/192.3 MB 10.7 MB/s eta 0:00:12\n", - " --------------- ------------------------ 73.6/192.3 MB 10.6 MB/s eta 0:00:12\n", - " --------------- ------------------------ 73.7/192.3 MB 9.9 MB/s eta 0:00:12\n", - " --------------- ------------------------ 74.3/192.3 MB 10.1 MB/s eta 0:00:12\n", - " --------------- ------------------------ 74.7/192.3 MB 9.9 MB/s eta 0:00:12\n", - " --------------- ------------------------ 75.4/192.3 MB 9.9 MB/s eta 0:00:12\n", - " --------------- ------------------------ 75.9/192.3 MB 10.1 MB/s eta 0:00:12\n", - " --------------- ------------------------ 76.5/192.3 MB 10.1 MB/s eta 0:00:12\n", - " ---------------- ----------------------- 77.1/192.3 MB 10.2 MB/s eta 0:00:12\n", - " ---------------- ----------------------- 77.8/192.3 MB 10.7 MB/s eta 0:00:11\n", - " ---------------- ----------------------- 78.2/192.3 MB 10.6 MB/s eta 0:00:11\n", - " ---------------- ----------------------- 78.7/192.3 MB 10.9 MB/s eta 0:00:11\n", - " ---------------- ----------------------- 79.3/192.3 MB 10.7 MB/s eta 0:00:11\n", - " ---------------- ----------------------- 79.8/192.3 MB 10.7 MB/s eta 0:00:11\n", - " ---------------- ----------------------- 80.2/192.3 MB 10.6 MB/s eta 0:00:11\n", - " ---------------- ----------------------- 80.5/192.3 MB 10.6 MB/s eta 0:00:11\n", - " ---------------- ----------------------- 81.0/192.3 MB 10.6 MB/s eta 0:00:11\n", - " ---------------- ----------------------- 81.7/192.3 MB 10.4 MB/s eta 0:00:11\n", - " ----------------- ---------------------- 82.1/192.3 MB 10.4 MB/s eta 0:00:11\n", - " ----------------- ---------------------- 82.5/192.3 MB 10.2 MB/s eta 0:00:11\n", - " ----------------- ---------------------- 82.9/192.3 MB 10.2 MB/s eta 0:00:11\n", - " ----------------- ---------------------- 83.5/192.3 MB 10.4 MB/s eta 0:00:11\n", - " ----------------- ---------------------- 84.1/192.3 MB 10.9 MB/s eta 0:00:10\n", - " ----------------- ---------------------- 84.7/192.3 MB 11.3 MB/s eta 0:00:10\n", - " ----------------- ---------------------- 85.5/192.3 MB 11.1 MB/s eta 0:00:10\n", - " ----------------- ---------------------- 86.0/192.3 MB 11.3 MB/s eta 0:00:10\n", - " ----------------- ---------------------- 86.5/192.3 MB 11.1 MB/s eta 0:00:10\n", - " ------------------ --------------------- 87.1/192.3 MB 11.1 MB/s eta 0:00:10\n", - " ------------------ --------------------- 87.5/192.3 MB 10.9 MB/s eta 0:00:10\n", - " ------------------ --------------------- 88.1/192.3 MB 11.1 MB/s eta 0:00:10\n", - " ------------------ --------------------- 88.6/192.3 MB 11.3 MB/s eta 0:00:10\n", - " ------------------ --------------------- 89.3/192.3 MB 11.1 MB/s eta 0:00:10\n", - " ------------------ --------------------- 89.9/192.3 MB 11.1 MB/s eta 0:00:10\n", - " ------------------ --------------------- 90.5/192.3 MB 11.5 MB/s eta 0:00:09\n", - " ------------------ --------------------- 91.1/192.3 MB 11.5 MB/s eta 0:00:09\n", - " ------------------- -------------------- 91.6/192.3 MB 11.5 MB/s eta 0:00:09\n", - " ------------------- -------------------- 91.9/192.3 MB 11.5 MB/s eta 0:00:09\n", - " ------------------- -------------------- 92.7/192.3 MB 11.7 MB/s eta 0:00:09\n", - " ------------------- -------------------- 93.2/192.3 MB 12.1 MB/s eta 0:00:09\n", - " ------------------- -------------------- 93.8/192.3 MB 12.1 MB/s eta 0:00:09\n", - " ------------------- -------------------- 94.2/192.3 MB 11.9 MB/s eta 0:00:09\n", - " ------------------- -------------------- 94.7/192.3 MB 11.9 MB/s eta 0:00:09\n", - " ------------------- -------------------- 95.2/192.3 MB 11.9 MB/s eta 0:00:09\n", - " ------------------- -------------------- 95.7/192.3 MB 11.7 MB/s eta 0:00:09\n", - " -------------------- ------------------- 96.2/192.3 MB 11.5 MB/s eta 0:00:09\n", - " -------------------- ------------------- 96.5/192.3 MB 11.5 MB/s eta 0:00:09\n", - " -------------------- ------------------- 97.1/192.3 MB 11.7 MB/s eta 0:00:09\n", - " -------------------- ------------------- 97.6/192.3 MB 11.9 MB/s eta 0:00:08\n", - " -------------------- ------------------- 98.1/192.3 MB 11.7 MB/s eta 0:00:09\n", - " -------------------- ------------------- 98.9/192.3 MB 12.1 MB/s eta 0:00:08\n", - " -------------------- ------------------- 99.5/192.3 MB 11.9 MB/s eta 0:00:08\n", - " -------------------- ------------------ 100.1/192.3 MB 11.9 MB/s eta 0:00:08\n", - " -------------------- ------------------ 100.6/192.3 MB 12.1 MB/s eta 0:00:08\n", - " -------------------- ------------------ 101.1/192.3 MB 12.1 MB/s eta 0:00:08\n", - " -------------------- ------------------ 101.8/192.3 MB 12.1 MB/s eta 0:00:08\n", - " -------------------- ------------------ 102.4/192.3 MB 12.6 MB/s eta 0:00:08\n", - " -------------------- ------------------ 103.3/192.3 MB 12.6 MB/s eta 0:00:08\n", - " --------------------- ----------------- 103.8/192.3 MB 12.4 MB/s eta 0:00:08\n", - " --------------------- ----------------- 104.2/192.3 MB 12.4 MB/s eta 0:00:08\n", - " --------------------- ----------------- 104.6/192.3 MB 12.1 MB/s eta 0:00:08\n", - " --------------------- ----------------- 105.1/192.3 MB 11.9 MB/s eta 0:00:08\n", - " --------------------- ----------------- 105.9/192.3 MB 11.9 MB/s eta 0:00:08\n", - " --------------------- ----------------- 106.4/192.3 MB 12.1 MB/s eta 0:00:08\n", - " --------------------- ----------------- 106.9/192.3 MB 12.1 MB/s eta 0:00:08\n", - " --------------------- ----------------- 107.7/192.3 MB 12.1 MB/s eta 0:00:07\n", - " --------------------- ----------------- 108.3/192.3 MB 12.4 MB/s eta 0:00:07\n", - " ---------------------- ---------------- 108.9/192.3 MB 12.1 MB/s eta 0:00:07\n", - " ---------------------- ---------------- 109.5/192.3 MB 12.4 MB/s eta 0:00:07\n", - " ---------------------- ---------------- 110.1/192.3 MB 12.1 MB/s eta 0:00:07\n", - " ---------------------- ---------------- 110.7/192.3 MB 12.4 MB/s eta 0:00:07\n", - " ---------------------- ---------------- 111.0/192.3 MB 12.1 MB/s eta 0:00:07\n", - " ---------------------- ---------------- 111.8/192.3 MB 12.1 MB/s eta 0:00:07\n", - " ---------------------- ---------------- 112.7/192.3 MB 12.4 MB/s eta 0:00:07\n", - " ---------------------- ---------------- 113.2/192.3 MB 12.1 MB/s eta 0:00:07\n", - " ----------------------- --------------- 114.0/192.3 MB 12.1 MB/s eta 0:00:07\n", - " ----------------------- --------------- 114.4/192.3 MB 12.1 MB/s eta 0:00:07\n", - " ----------------------- --------------- 115.0/192.3 MB 12.8 MB/s eta 0:00:07\n", - " ----------------------- --------------- 115.5/192.3 MB 13.1 MB/s eta 0:00:06\n", - " ----------------------- --------------- 116.0/192.3 MB 12.6 MB/s eta 0:00:07\n", - " ----------------------- --------------- 116.8/192.3 MB 13.1 MB/s eta 0:00:06\n", - " ----------------------- --------------- 117.4/192.3 MB 12.6 MB/s eta 0:00:06\n", - " ----------------------- --------------- 118.0/192.3 MB 12.6 MB/s eta 0:00:06\n", - " ------------------------ -------------- 118.6/192.3 MB 12.6 MB/s eta 0:00:06\n", - " ------------------------ -------------- 119.1/192.3 MB 12.6 MB/s eta 0:00:06\n", - " ------------------------ -------------- 119.6/192.3 MB 12.4 MB/s eta 0:00:06\n", - " ------------------------ -------------- 120.2/192.3 MB 12.4 MB/s eta 0:00:06\n", - " ------------------------ -------------- 120.7/192.3 MB 12.1 MB/s eta 0:00:06\n", - " ------------------------ -------------- 121.2/192.3 MB 12.1 MB/s eta 0:00:06\n", - " ------------------------ -------------- 121.8/192.3 MB 11.9 MB/s eta 0:00:06\n", - " ------------------------ -------------- 122.3/192.3 MB 11.9 MB/s eta 0:00:06\n", - " ------------------------ -------------- 122.8/192.3 MB 11.9 MB/s eta 0:00:06\n", - " ------------------------- ------------- 123.4/192.3 MB 11.5 MB/s eta 0:00:07\n", - " ------------------------- ------------- 124.2/192.3 MB 11.3 MB/s eta 0:00:07\n", - " ------------------------- ------------- 124.7/192.3 MB 11.3 MB/s eta 0:00:06\n", - " ------------------------- ------------- 125.4/192.3 MB 11.7 MB/s eta 0:00:06\n", - " ------------------------- ------------- 126.2/192.3 MB 11.7 MB/s eta 0:00:06\n", - " ------------------------- ------------- 126.6/192.3 MB 11.9 MB/s eta 0:00:06\n", - " ------------------------- ------------- 127.3/192.3 MB 11.9 MB/s eta 0:00:06\n", - " ------------------------- ------------- 127.8/192.3 MB 11.9 MB/s eta 0:00:06\n", - " -------------------------- ------------ 128.7/192.3 MB 12.1 MB/s eta 0:00:06\n", - " -------------------------- ------------ 129.2/192.3 MB 12.1 MB/s eta 0:00:06\n", - " -------------------------- ------------ 129.9/192.3 MB 11.9 MB/s eta 0:00:06\n", - " -------------------------- ------------ 130.4/192.3 MB 11.9 MB/s eta 0:00:06\n", - " -------------------------- ------------ 130.9/192.3 MB 11.9 MB/s eta 0:00:06\n", - " -------------------------- ------------ 131.5/192.3 MB 12.3 MB/s eta 0:00:05\n", - " -------------------------- ------------ 131.9/192.3 MB 12.4 MB/s eta 0:00:05\n", - " -------------------------- ------------ 132.5/192.3 MB 12.4 MB/s eta 0:00:05\n", - " -------------------------- ------------ 133.0/192.3 MB 12.1 MB/s eta 0:00:05\n", - " --------------------------- ----------- 133.6/192.3 MB 12.1 MB/s eta 0:00:05\n", - " --------------------------- ----------- 134.0/192.3 MB 12.1 MB/s eta 0:00:05\n", - " --------------------------- ----------- 134.4/192.3 MB 11.9 MB/s eta 0:00:05\n", - " --------------------------- ----------- 134.5/192.3 MB 11.7 MB/s eta 0:00:05\n", - " --------------------------- ----------- 135.1/192.3 MB 11.7 MB/s eta 0:00:05\n", - " --------------------------- ----------- 135.5/192.3 MB 11.5 MB/s eta 0:00:05\n", - " --------------------------- ----------- 135.6/192.3 MB 10.9 MB/s eta 0:00:06\n", - " --------------------------- ----------- 136.1/192.3 MB 10.7 MB/s eta 0:00:06\n", - " --------------------------- ----------- 136.3/192.3 MB 10.4 MB/s eta 0:00:06\n", - " --------------------------- ----------- 136.9/192.3 MB 10.2 MB/s eta 0:00:06\n", - " --------------------------- ----------- 137.1/192.3 MB 10.1 MB/s eta 0:00:06\n", - " ---------------------------- ----------- 137.5/192.3 MB 9.8 MB/s eta 0:00:06\n", - " ---------------------------- ----------- 137.9/192.3 MB 9.8 MB/s eta 0:00:06\n", - " ---------------------------- ----------- 138.5/192.3 MB 9.5 MB/s eta 0:00:06\n", - " ---------------------------- ----------- 138.7/192.3 MB 9.2 MB/s eta 0:00:06\n", - " ---------------------------- ----------- 139.2/192.3 MB 9.4 MB/s eta 0:00:06\n", - " ----------------------------- ---------- 139.6/192.3 MB 9.4 MB/s eta 0:00:06\n", - " ----------------------------- ---------- 140.0/192.3 MB 9.1 MB/s eta 0:00:06\n", - " ----------------------------- ---------- 140.0/192.3 MB 8.7 MB/s eta 0:00:06\n", - " ----------------------------- ---------- 140.5/192.3 MB 8.5 MB/s eta 0:00:07\n", - " ----------------------------- ---------- 140.9/192.3 MB 8.6 MB/s eta 0:00:06\n", - " ----------------------------- ---------- 141.4/192.3 MB 8.5 MB/s eta 0:00:06\n", - " ----------------------------- ---------- 141.9/192.3 MB 8.6 MB/s eta 0:00:06\n", - " ----------------------------- ---------- 142.0/192.3 MB 8.3 MB/s eta 0:00:07\n", - " ----------------------------- ---------- 142.5/192.3 MB 8.3 MB/s eta 0:00:07\n", - " ----------------------------- ---------- 142.8/192.3 MB 8.2 MB/s eta 0:00:07\n", - " ----------------------------- ---------- 143.3/192.3 MB 8.3 MB/s eta 0:00:06\n", - " ----------------------------- ---------- 143.6/192.3 MB 8.1 MB/s eta 0:00:07\n", - " ----------------------------- ---------- 144.2/192.3 MB 8.1 MB/s eta 0:00:06\n", - " ------------------------------ --------- 144.7/192.3 MB 8.1 MB/s eta 0:00:06\n", - " ------------------------------ --------- 145.3/192.3 MB 8.2 MB/s eta 0:00:06\n", - " ------------------------------ --------- 145.8/192.3 MB 8.5 MB/s eta 0:00:06\n", - " ------------------------------ --------- 146.3/192.3 MB 8.4 MB/s eta 0:00:06\n", - " ------------------------------ --------- 146.9/192.3 MB 8.6 MB/s eta 0:00:06\n", - " ------------------------------ --------- 147.4/192.3 MB 8.8 MB/s eta 0:00:06\n", - " ------------------------------ --------- 147.9/192.3 MB 9.0 MB/s eta 0:00:05\n", - " ------------------------------ --------- 148.3/192.3 MB 8.7 MB/s eta 0:00:06\n", - " ------------------------------ --------- 148.6/192.3 MB 8.5 MB/s eta 0:00:06\n", - " ------------------------------ --------- 149.0/192.3 MB 8.6 MB/s eta 0:00:06\n", - " ------------------------------- -------- 149.5/192.3 MB 8.5 MB/s eta 0:00:06\n", - " ------------------------------- -------- 149.9/192.3 MB 8.7 MB/s eta 0:00:05\n", - " ------------------------------- -------- 150.3/192.3 MB 9.0 MB/s eta 0:00:05\n", - " ------------------------------- -------- 150.7/192.3 MB 9.0 MB/s eta 0:00:05\n", - " ------------------------------- -------- 151.0/192.3 MB 8.7 MB/s eta 0:00:05\n", - " ------------------------------- -------- 151.6/192.3 MB 8.8 MB/s eta 0:00:05\n", - " ------------------------------- -------- 152.0/192.3 MB 8.7 MB/s eta 0:00:05\n", - " ------------------------------- -------- 152.4/192.3 MB 9.0 MB/s eta 0:00:05\n", - " ------------------------------- -------- 153.0/192.3 MB 8.8 MB/s eta 0:00:05\n", - " ------------------------------- -------- 153.5/192.3 MB 9.0 MB/s eta 0:00:05\n", - " ------------------------------- -------- 153.8/192.3 MB 8.8 MB/s eta 0:00:05\n", - " -------------------------------- ------- 154.3/192.3 MB 9.1 MB/s eta 0:00:05\n", - " -------------------------------- ------- 154.7/192.3 MB 9.2 MB/s eta 0:00:05\n", - " -------------------------------- ------- 155.2/192.3 MB 9.2 MB/s eta 0:00:05\n", - " -------------------------------- ------- 155.6/192.3 MB 9.1 MB/s eta 0:00:05\n", - " -------------------------------- ------- 156.0/192.3 MB 9.0 MB/s eta 0:00:05\n", - " -------------------------------- ------- 156.4/192.3 MB 9.0 MB/s eta 0:00:05\n", - " -------------------------------- ------- 156.8/192.3 MB 9.0 MB/s eta 0:00:04\n", - " -------------------------------- ------- 157.3/192.3 MB 9.0 MB/s eta 0:00:04\n", - " -------------------------------- ------- 157.8/192.3 MB 9.0 MB/s eta 0:00:04\n", - " -------------------------------- ------- 158.5/192.3 MB 9.1 MB/s eta 0:00:04\n", - " --------------------------------- ------ 158.9/192.3 MB 9.4 MB/s eta 0:00:04\n", - " --------------------------------- ------ 159.4/192.3 MB 9.5 MB/s eta 0:00:04\n", - " --------------------------------- ------ 159.8/192.3 MB 9.4 MB/s eta 0:00:04\n", - " --------------------------------- ------ 160.2/192.3 MB 9.6 MB/s eta 0:00:04\n", - " --------------------------------- ------ 160.7/192.3 MB 9.8 MB/s eta 0:00:04\n", - " --------------------------------- ------ 161.1/192.3 MB 9.9 MB/s eta 0:00:04\n", - " --------------------------------- ------ 161.6/192.3 MB 9.8 MB/s eta 0:00:04\n", - " --------------------------------- ------ 162.0/192.3 MB 9.9 MB/s eta 0:00:04\n", - " -------------------------------- ------ 162.6/192.3 MB 10.1 MB/s eta 0:00:03\n", - " --------------------------------- ----- 163.1/192.3 MB 10.1 MB/s eta 0:00:03\n", - " --------------------------------- ----- 163.6/192.3 MB 10.2 MB/s eta 0:00:03\n", - " --------------------------------- ----- 164.0/192.3 MB 10.4 MB/s eta 0:00:03\n", - " --------------------------------- ----- 164.2/192.3 MB 10.1 MB/s eta 0:00:03\n", - " ---------------------------------- ----- 164.6/192.3 MB 9.9 MB/s eta 0:00:03\n", - " ---------------------------------- ----- 165.0/192.3 MB 9.8 MB/s eta 0:00:03\n", - " ---------------------------------- ----- 165.3/192.3 MB 9.8 MB/s eta 0:00:03\n", - " ---------------------------------- ----- 165.7/192.3 MB 9.8 MB/s eta 0:00:03\n", - " ---------------------------------- ----- 166.1/192.3 MB 9.8 MB/s eta 0:00:03\n", - " ---------------------------------- ----- 166.4/192.3 MB 9.6 MB/s eta 0:00:03\n", - " ---------------------------------- ----- 166.9/192.3 MB 9.8 MB/s eta 0:00:03\n", - " ---------------------------------- ----- 167.3/192.3 MB 9.6 MB/s eta 0:00:03\n", - " ---------------------------------- ----- 167.6/192.3 MB 9.6 MB/s eta 0:00:03\n", - " ----------------------------------- ---- 168.3/192.3 MB 9.8 MB/s eta 0:00:03\n", - " ----------------------------------- ---- 168.6/192.3 MB 9.6 MB/s eta 0:00:03\n", - " ----------------------------------- ---- 169.1/192.3 MB 9.8 MB/s eta 0:00:03\n", - " ----------------------------------- ---- 169.4/192.3 MB 9.5 MB/s eta 0:00:03\n", - " ----------------------------------- ---- 169.9/192.3 MB 9.6 MB/s eta 0:00:03\n", - " ----------------------------------- ---- 170.3/192.3 MB 9.6 MB/s eta 0:00:03\n", - " ----------------------------------- ---- 170.7/192.3 MB 9.5 MB/s eta 0:00:03\n", - " ----------------------------------- ---- 171.4/192.3 MB 9.6 MB/s eta 0:00:03\n", - " ----------------------------------- ---- 171.7/192.3 MB 9.4 MB/s eta 0:00:03\n", - " ----------------------------------- ---- 172.1/192.3 MB 9.4 MB/s eta 0:00:03\n", - " ----------------------------------- ---- 172.3/192.3 MB 9.4 MB/s eta 0:00:03\n", - " ----------------------------------- ---- 172.9/192.3 MB 9.2 MB/s eta 0:00:03\n", - " ------------------------------------ --- 173.3/192.3 MB 9.1 MB/s eta 0:00:03\n", - " ------------------------------------ --- 173.8/192.3 MB 9.1 MB/s eta 0:00:03\n", - " ------------------------------------ --- 174.0/192.3 MB 8.8 MB/s eta 0:00:03\n", - " ------------------------------------ --- 174.4/192.3 MB 8.8 MB/s eta 0:00:03\n", - " ------------------------------------ --- 174.8/192.3 MB 8.7 MB/s eta 0:00:03\n", - " ------------------------------------ --- 175.4/192.3 MB 9.0 MB/s eta 0:00:02\n", - " ------------------------------------ --- 175.7/192.3 MB 8.7 MB/s eta 0:00:02\n", - " ------------------------------------ --- 176.1/192.3 MB 8.8 MB/s eta 0:00:02\n", - " ------------------------------------ --- 176.4/192.3 MB 8.7 MB/s eta 0:00:02\n", - " ------------------------------------ --- 176.6/192.3 MB 8.6 MB/s eta 0:00:02\n", - " ------------------------------------ --- 177.0/192.3 MB 8.6 MB/s eta 0:00:02\n", - " ------------------------------------ --- 177.1/192.3 MB 8.5 MB/s eta 0:00:02\n", - " ------------------------------------ --- 177.6/192.3 MB 8.4 MB/s eta 0:00:02\n", - " ------------------------------------- -- 178.0/192.3 MB 8.4 MB/s eta 0:00:02\n", - " ------------------------------------- -- 178.5/192.3 MB 8.4 MB/s eta 0:00:02\n", - " ------------------------------------- -- 178.8/192.3 MB 8.3 MB/s eta 0:00:02\n", - " ------------------------------------- -- 179.3/192.3 MB 8.2 MB/s eta 0:00:02\n", - " ------------------------------------- -- 179.6/192.3 MB 8.3 MB/s eta 0:00:02\n", - " ------------------------------------- -- 179.9/192.3 MB 8.2 MB/s eta 0:00:02\n", - " ------------------------------------- -- 179.9/192.3 MB 8.2 MB/s eta 0:00:02\n", - " ------------------------------------- -- 179.9/192.3 MB 8.2 MB/s eta 0:00:02\n", - " ------------------------------------- -- 181.3/192.3 MB 8.0 MB/s eta 0:00:02\n", - " ------------------------------------- -- 181.6/192.3 MB 7.9 MB/s eta 0:00:02\n", - " ------------------------------------- -- 182.1/192.3 MB 8.1 MB/s eta 0:00:02\n", - " ------------------------------------- -- 182.6/192.3 MB 8.2 MB/s eta 0:00:02\n", - " -------------------------------------- - 183.2/192.3 MB 8.3 MB/s eta 0:00:02\n", - " -------------------------------------- - 183.6/192.3 MB 8.3 MB/s eta 0:00:02\n", - " -------------------------------------- - 184.2/192.3 MB 8.4 MB/s eta 0:00:01\n", - " -------------------------------------- - 184.6/192.3 MB 8.6 MB/s eta 0:00:01\n", - " -------------------------------------- - 185.2/192.3 MB 8.8 MB/s eta 0:00:01\n", - " -------------------------------------- - 185.7/192.3 MB 8.7 MB/s eta 0:00:01\n", - " -------------------------------------- - 186.4/192.3 MB 9.2 MB/s eta 0:00:01\n", - " -------------------------------------- - 186.6/192.3 MB 9.4 MB/s eta 0:00:01\n", - " -------------------------------------- - 187.0/192.3 MB 9.2 MB/s eta 0:00:01\n", - " --------------------------------------- 187.5/192.3 MB 9.6 MB/s eta 0:00:01\n", - " --------------------------------------- 187.7/192.3 MB 9.2 MB/s eta 0:00:01\n", - " --------------------------------------- 188.2/192.3 MB 9.5 MB/s eta 0:00:01\n", - " --------------------------------------- 188.4/192.3 MB 9.4 MB/s eta 0:00:01\n", - " --------------------------------------- 189.0/192.3 MB 9.5 MB/s eta 0:00:01\n", - " --------------------------------------- 189.4/192.3 MB 9.6 MB/s eta 0:00:01\n", - " --------------------------------------- 189.9/192.3 MB 9.6 MB/s eta 0:00:01\n", - " -------------------------------------- 190.3/192.3 MB 11.1 MB/s eta 0:00:01\n", - " -------------------------------------- 190.5/192.3 MB 10.6 MB/s eta 0:00:01\n", - " -------------------------------------- 191.1/192.3 MB 10.2 MB/s eta 0:00:01\n", - " --------------------------------------- 191.5/192.3 MB 9.9 MB/s eta 0:00:01\n", - " -------------------------------------- 192.2/192.3 MB 10.2 MB/s eta 0:00:01\n", - " -------------------------------------- 192.3/192.3 MB 10.1 MB/s eta 0:00:01\n", - " -------------------------------------- 192.3/192.3 MB 10.1 MB/s eta 0:00:01\n", - " -------------------------------------- 192.3/192.3 MB 10.1 MB/s eta 0:00:01\n", - " -------------------------------------- 192.3/192.3 MB 10.1 MB/s eta 0:00:01\n", - " -------------------------------------- 192.3/192.3 MB 10.1 MB/s eta 0:00:01\n", - " -------------------------------------- 192.3/192.3 MB 10.1 MB/s eta 0:00:01\n", - " -------------------------------------- 192.3/192.3 MB 10.1 MB/s eta 0:00:01\n", - " -------------------------------------- 192.3/192.3 MB 10.1 MB/s eta 0:00:01\n", - " -------------------------------------- 192.3/192.3 MB 10.1 MB/s eta 0:00:01\n", - " -------------------------------------- 192.3/192.3 MB 10.1 MB/s eta 0:00:01\n", - " -------------------------------------- 192.3/192.3 MB 10.1 MB/s eta 0:00:01\n", - " -------------------------------------- 192.3/192.3 MB 10.1 MB/s eta 0:00:01\n", - " -------------------------------------- 192.3/192.3 MB 10.1 MB/s eta 0:00:01\n", - " ---------------------------------------- 192.3/192.3 MB 5.0 MB/s eta 0:00:00\n", - "Downloading torchvision-0.16.0-cp311-cp311-win_amd64.whl (1.3 MB)\n", - " ---------------------------------------- 0.0/1.3 MB ? eta -:--:--\n", - " ---------------- ----------------------- 0.5/1.3 MB 16.8 MB/s eta 0:00:01\n", - " ------------------------------- -------- 1.0/1.3 MB 12.6 MB/s eta 0:00:01\n", - " ------------------------------------- -- 1.2/1.3 MB 10.8 MB/s eta 0:00:01\n", - " --------------------------------------- 1.3/1.3 MB 8.9 MB/s eta 0:00:01\n", - " ---------------------------------------- 1.3/1.3 MB 6.7 MB/s eta 0:00:00\n", - "Installing collected packages: torch, torchvision\n", - "Successfully installed torch-2.1.0 torchvision-0.16.0\n" + "Requirement already satisfied: mpmath>=0.19 in c:\\users\\lucil\\anaconda3\\lib\\site-packages (from sympy->torch) (1.3.0)\n" ] } ], @@ -522,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "id": "b1950f0a", "metadata": {}, "outputs": [ @@ -530,34 +85,34 @@ "name": "stdout", "output_type": "stream", "text": [ - "tensor([[-0.5590, 0.0223, -1.3629, -0.0712, -0.0811, -1.0198, -0.6710, 0.6662,\n", - " -0.4135, -0.7682],\n", - " [-0.3788, -0.5212, 1.5901, -1.6412, -1.4692, 0.5179, 0.2937, 0.1298,\n", - " 0.3047, 0.6055],\n", - " [ 1.1444, -1.4719, -1.0651, -0.5195, -0.1080, 1.2362, -0.5340, -1.5194,\n", - " 0.5697, -0.0712],\n", - " [-0.2669, -0.2955, 0.3943, -0.4908, -0.0824, -0.7807, -0.6449, 1.7665,\n", - " -0.4184, 1.8781],\n", - " [-0.6805, 0.5209, 1.4021, -0.7482, -1.2518, -1.1131, -0.3745, 0.3111,\n", - " -0.4300, -1.4486],\n", - " [ 0.8597, 0.2176, 0.5050, 1.5575, -1.3997, -0.3556, 0.0095, -1.0047,\n", - " 0.1812, -2.1366],\n", - " [-0.8317, -0.3655, -1.9062, -0.2113, -0.0775, -2.0856, 0.6570, 0.1237,\n", - " -0.4803, 1.1739],\n", - " [-0.4989, -0.3616, -0.3040, 0.3132, -1.8121, -0.8851, 0.3537, 1.0816,\n", - " 0.8415, -0.4832],\n", - " [-0.0065, -0.2944, 1.6118, 0.6703, 0.1384, -0.2574, -0.4115, 1.4924,\n", - " 0.6424, 0.0972],\n", - " [-1.3176, 0.2592, -1.0234, 0.5661, 1.4795, -0.5998, -0.6225, -1.0549,\n", - " -1.0088, -0.8094],\n", - " [-1.8260, 1.3453, -0.4638, 1.3726, -0.3037, 2.3788, -0.2675, -0.3423,\n", - " -0.1766, -0.1942],\n", - " [ 0.7868, 0.5788, 1.4841, 1.4351, -0.8620, -0.9789, -2.1356, 0.2023,\n", - " -0.9085, 0.3125],\n", - " [ 0.2260, 0.7650, -0.0113, 1.3397, -0.9443, -0.0378, 0.0918, -1.0006,\n", - " 1.5495, 0.0207],\n", - " [-1.5631, -0.4878, 0.5245, -1.0272, -0.7922, -0.9191, 1.3496, 1.2549,\n", - " -1.2790, 0.5605]])\n", + "tensor([[ 0.3653, 0.6776, 1.4290, 1.3045, -0.1440, -1.9016, 0.1427, 0.6754,\n", + " 0.0791, 0.6423],\n", + " [-1.3009, 0.1227, 0.4001, 0.6688, 0.1672, -0.5949, 0.3957, -0.6071,\n", + " -0.7747, 0.6197],\n", + " [-0.7347, -1.5540, 2.3525, 0.1084, 0.1178, 0.5596, 0.6267, 2.1786,\n", + " -0.5310, -0.6559],\n", + " [ 0.6326, -1.0263, 0.3332, -0.1291, 0.1675, -0.1014, 1.3175, 0.3264,\n", + " -0.1400, 0.7431],\n", + " [ 0.4699, 0.9845, -1.4050, 1.1468, 0.7983, 1.0263, -1.6672, 0.1562,\n", + " -0.0875, -1.9664],\n", + " [-0.3761, -0.8523, 1.5731, -2.0885, -1.5779, 0.6759, 0.4770, 1.5133,\n", + " -1.4350, -0.5716],\n", + " [ 0.0985, -0.1337, -0.3850, 0.3503, -0.4130, -0.7820, -1.1305, 1.0061,\n", + " 0.0298, -1.4626],\n", + " [-0.0387, -1.7999, -2.1245, 0.2555, 0.1214, 0.5655, 0.5005, 1.0409,\n", + " 0.8113, -0.2322],\n", + " [ 2.1456, 0.3775, 0.8248, 0.8468, 0.8631, -0.0429, -1.5679, -0.6221,\n", + " -1.1605, 0.5963],\n", + " [ 0.1601, 0.2023, -0.9813, 0.1316, 0.1114, -1.8421, 0.6188, -0.3290,\n", + " 0.6238, 0.3155],\n", + " [-0.3864, -0.5559, 0.4249, -1.0155, -0.9137, 0.1228, -0.3569, 1.1107,\n", + " -0.5542, 1.2470],\n", + " [-0.6112, -0.5138, 1.1420, -0.0729, 1.1220, -0.1792, 1.0880, 0.8450,\n", + " 0.6158, -0.9575],\n", + " [ 0.9272, 0.1329, 0.4858, -0.5643, -0.1636, -0.2209, 0.9413, 0.1729,\n", + " 0.4400, 0.2477],\n", + " [-0.2307, 2.0693, 0.0898, 1.8634, 0.1166, 0.2212, 0.9382, -0.6915,\n", + " -1.9567, 0.2097]])\n", "AlexNet(\n", " (features): Sequential(\n", " (0): Conv2d(3, 64, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2))\n", @@ -627,7 +182,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "id": "6e18f2fd", "metadata": {}, "outputs": [ @@ -661,7 +216,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "id": "462666a2", "metadata": {}, "outputs": [ @@ -742,7 +297,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "id": "317bf070", "metadata": {}, "outputs": [ @@ -806,7 +361,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "id": "4b53f229", "metadata": {}, "outputs": [ @@ -814,32 +369,30 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch: 0 \tTraining Loss: 42.949870 \tValidation Loss: 37.584614\n", - "Validation loss decreased (inf --> 37.584614). Saving model ...\n", - "Epoch: 1 \tTraining Loss: 33.817952 \tValidation Loss: 31.186220\n", - "Validation loss decreased (37.584614 --> 31.186220). Saving model ...\n", - "Epoch: 2 \tTraining Loss: 30.420298 \tValidation Loss: 28.741311\n", - "Validation loss decreased (31.186220 --> 28.741311). Saving model ...\n", - "Epoch: 3 \tTraining Loss: 28.518569 \tValidation Loss: 27.046289\n", - "Validation loss decreased (28.741311 --> 27.046289). Saving model ...\n", - "Epoch: 4 \tTraining Loss: 26.906243 \tValidation Loss: 25.455830\n", - "Validation loss decreased (27.046289 --> 25.455830). Saving model ...\n", - "Epoch: 5 \tTraining Loss: 25.378933 \tValidation Loss: 26.223423\n", - "Epoch: 6 \tTraining Loss: 24.107086 \tValidation Loss: 23.348146\n", - "Validation loss decreased (25.455830 --> 23.348146). Saving model ...\n", - "Epoch: 7 \tTraining Loss: 23.004827 \tValidation Loss: 23.824093\n", - "Epoch: 8 \tTraining Loss: 22.047786 \tValidation Loss: 22.660026\n", - "Validation loss decreased (23.348146 --> 22.660026). Saving model ...\n", - "Epoch: 9 \tTraining Loss: 21.114166 \tValidation Loss: 22.566304\n", - "Validation loss decreased (22.660026 --> 22.566304). Saving model ...\n", - "Epoch: 10 \tTraining Loss: 20.385692 \tValidation Loss: 21.482606\n", - "Validation loss decreased (22.566304 --> 21.482606). Saving model ...\n", - "Epoch: 11 \tTraining Loss: 19.569045 \tValidation Loss: 22.839890\n", - "Epoch: 12 \tTraining Loss: 18.854037 \tValidation Loss: 20.897455\n", - "Validation loss decreased (21.482606 --> 20.897455). Saving model ...\n", - "Epoch: 13 \tTraining Loss: 18.168339 \tValidation Loss: 21.228469\n", - "Epoch: 14 \tTraining Loss: 17.576220 \tValidation Loss: 21.396578\n", - "Epoch: 15 \tTraining Loss: 16.911857 \tValidation Loss: 21.200629\n" + "Epoch: 0 \tTraining Loss: 43.453638 \tValidation Loss: 38.117901\n", + "Validation loss decreased (inf --> 38.117901). Saving model ...\n", + "Epoch: 1 \tTraining Loss: 33.786905 \tValidation Loss: 30.608687\n", + "Validation loss decreased (38.117901 --> 30.608687). Saving model ...\n", + "Epoch: 2 \tTraining Loss: 29.978750 \tValidation Loss: 28.626190\n", + "Validation loss decreased (30.608687 --> 28.626190). Saving model ...\n", + "Epoch: 3 \tTraining Loss: 27.777584 \tValidation Loss: 27.198099\n", + "Validation loss decreased (28.626190 --> 27.198099). Saving model ...\n", + "Epoch: 4 \tTraining Loss: 26.117933 \tValidation Loss: 26.415911\n", + "Validation loss decreased (27.198099 --> 26.415911). Saving model ...\n", + "Epoch: 5 \tTraining Loss: 24.786261 \tValidation Loss: 24.554481\n", + "Validation loss decreased (26.415911 --> 24.554481). Saving model ...\n", + "Epoch: 6 \tTraining Loss: 23.703873 \tValidation Loss: 24.357461\n", + "Validation loss decreased (24.554481 --> 24.357461). Saving model ...\n", + "Epoch: 7 \tTraining Loss: 22.748076 \tValidation Loss: 24.332178\n", + "Validation loss decreased (24.357461 --> 24.332178). Saving model ...\n", + "Epoch: 8 \tTraining Loss: 21.790853 \tValidation Loss: 23.261406\n", + "Validation loss decreased (24.332178 --> 23.261406). Saving model ...\n", + "Epoch: 9 \tTraining Loss: 20.925274 \tValidation Loss: 23.353505\n", + "Epoch: 10 \tTraining Loss: 20.174014 \tValidation Loss: 22.972180\n", + "Validation loss decreased (23.261406 --> 22.972180). Saving model ...\n", + "Epoch: 11 \tTraining Loss: 19.419566 \tValidation Loss: 22.647662\n", + "Validation loss decreased (22.972180 --> 22.647662). Saving model ...\n", + "Epoch: 12 \tTraining Loss: 18.719525 \tValidation Loss: 22.919457\n" ] }, { @@ -849,7 +402,7 @@ "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[1;32md:\\Users\\lucil\\Documents\\S9\\Apprentissage profond\\mod_4_6-td2\\TD2 Deep Learning.ipynb Cell 15\u001b[0m line \u001b[0;36m1\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/Users/lucil/Documents/S9/Apprentissage%20profond/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=14'>15</a>\u001b[0m \u001b[39m# Train the model\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/Users/lucil/Documents/S9/Apprentissage%20profond/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=15'>16</a>\u001b[0m model\u001b[39m.\u001b[39mtrain()\n\u001b[1;32m---> <a href='vscode-notebook-cell:/d%3A/Users/lucil/Documents/S9/Apprentissage%20profond/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=16'>17</a>\u001b[0m \u001b[39mfor\u001b[39;00m data, target \u001b[39min\u001b[39;00m train_loader:\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/Users/lucil/Documents/S9/Apprentissage%20profond/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=17'>18</a>\u001b[0m \u001b[39m# Move tensors to GPU if CUDA is available\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/Users/lucil/Documents/S9/Apprentissage%20profond/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=18'>19</a>\u001b[0m \u001b[39mif\u001b[39;00m train_on_gpu:\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/Users/lucil/Documents/S9/Apprentissage%20profond/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=19'>20</a>\u001b[0m data, target \u001b[39m=\u001b[39m data\u001b[39m.\u001b[39mcuda(), target\u001b[39m.\u001b[39mcuda()\n", + "\u001b[1;32md:\\Users\\lucil\\Documents\\S9\\Apprentissage profond\\mod_4_6-td2\\TD2 Deep Learning.ipynb Cell 15\u001b[0m line \u001b[0;36m3\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/Users/lucil/Documents/S9/Apprentissage%20profond/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=33'>34</a>\u001b[0m \u001b[39m# Validate the model\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/Users/lucil/Documents/S9/Apprentissage%20profond/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=34'>35</a>\u001b[0m model\u001b[39m.\u001b[39meval()\n\u001b[1;32m---> <a href='vscode-notebook-cell:/d%3A/Users/lucil/Documents/S9/Apprentissage%20profond/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=35'>36</a>\u001b[0m \u001b[39mfor\u001b[39;00m data, target \u001b[39min\u001b[39;00m valid_loader:\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/Users/lucil/Documents/S9/Apprentissage%20profond/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=36'>37</a>\u001b[0m \u001b[39m# Move tensors to GPU if CUDA is available\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/Users/lucil/Documents/S9/Apprentissage%20profond/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=37'>38</a>\u001b[0m \u001b[39mif\u001b[39;00m train_on_gpu:\n\u001b[0;32m <a href='vscode-notebook-cell:/d%3A/Users/lucil/Documents/S9/Apprentissage%20profond/mod_4_6-td2/TD2%20Deep%20Learning.ipynb#X20sZmlsZQ%3D%3D?line=38'>39</a>\u001b[0m data, target \u001b[39m=\u001b[39m data\u001b[39m.\u001b[39mcuda(), target\u001b[39m.\u001b[39mcuda()\n", "File \u001b[1;32mc:\\Users\\lucil\\anaconda3\\Lib\\site-packages\\torch\\utils\\data\\dataloader.py:630\u001b[0m, in \u001b[0;36m_BaseDataLoaderIter.__next__\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 627\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_sampler_iter \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m 628\u001b[0m \u001b[39m# TODO(https://github.com/pytorch/pytorch/issues/76750)\u001b[39;00m\n\u001b[0;32m 629\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_reset() \u001b[39m# type: ignore[call-arg]\u001b[39;00m\n\u001b[1;32m--> 630\u001b[0m data \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_next_data()\n\u001b[0;32m 631\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_num_yielded \u001b[39m+\u001b[39m\u001b[39m=\u001b[39m \u001b[39m1\u001b[39m\n\u001b[0;32m 632\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_dataset_kind \u001b[39m==\u001b[39m _DatasetKind\u001b[39m.\u001b[39mIterable \u001b[39mand\u001b[39;00m \\\n\u001b[0;32m 633\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_IterableDataset_len_called \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mand\u001b[39;00m \\\n\u001b[0;32m 634\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_num_yielded \u001b[39m>\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_IterableDataset_len_called:\n", "File \u001b[1;32mc:\\Users\\lucil\\anaconda3\\Lib\\site-packages\\torch\\utils\\data\\dataloader.py:674\u001b[0m, in \u001b[0;36m_SingleProcessDataLoaderIter._next_data\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 672\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m_next_data\u001b[39m(\u001b[39mself\u001b[39m):\n\u001b[0;32m 673\u001b[0m index \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_next_index() \u001b[39m# may raise StopIteration\u001b[39;00m\n\u001b[1;32m--> 674\u001b[0m data \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_dataset_fetcher\u001b[39m.\u001b[39mfetch(index) \u001b[39m# may raise StopIteration\u001b[39;00m\n\u001b[0;32m 675\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_pin_memory:\n\u001b[0;32m 676\u001b[0m data \u001b[39m=\u001b[39m _utils\u001b[39m.\u001b[39mpin_memory\u001b[39m.\u001b[39mpin_memory(data, \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_pin_memory_device)\n", "File \u001b[1;32mc:\\Users\\lucil\\anaconda3\\Lib\\site-packages\\torch\\utils\\data\\_utils\\fetch.py:51\u001b[0m, in \u001b[0;36m_MapDatasetFetcher.fetch\u001b[1;34m(self, possibly_batched_index)\u001b[0m\n\u001b[0;32m 49\u001b[0m data \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdataset\u001b[39m.\u001b[39m__getitems__(possibly_batched_index)\n\u001b[0;32m 50\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m---> 51\u001b[0m data \u001b[39m=\u001b[39m [\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdataset[idx] \u001b[39mfor\u001b[39;00m idx \u001b[39min\u001b[39;00m possibly_batched_index]\n\u001b[0;32m 52\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m 53\u001b[0m data \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdataset[possibly_batched_index]\n", @@ -942,13 +495,13 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 9, "id": "d39df818", "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAHFCAYAAAAHcXhbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABJ1UlEQVR4nO3deXxU1d3H8e9km+wBErJBCAHCDgHZ90VBFHHBqigq6PO4IkLVipVatwpqrY+tKEpbqVYp1KoIWhBUVgEBWQVlXwIhJISEhOzLef4IGWdkMYQkdyb5vF+vedXce2fml4lNvt5zfufYjDFGAAAAHsrL6gIAAAAuBWEGAAB4NMIMAADwaIQZAADg0QgzAADAoxFmAACARyPMAAAAj0aYAQAAHo0wAwAAPBphBqiif/zjH7LZbI6Hj4+PmjZtqrvuuktHjx6t1vcqKirS/fffr5iYGHl7e6tLly7V+vo4v3nz5qlDhw4KCAiQzWbTli1bznnd8uXLHf8u/OMf/zjnNUOHDpXNZlPz5s2rtcbmzZtr/PjxVXquzWbTM88884vXvffeexozZozatGkjLy+vav8egEvhY3UBgKebPXu22rZtq/z8fK1cuVLTp0/XihUrtH37dgUFBVXLe8ycOVNvv/22Xn/9dXXr1k3BwcHV8rq4sPT0dN1xxx0aMWKE3nzzTdntdrVu3fqCzwkJCdHf//73s8LFgQMHtHz5coWGhtZgxTXnn//8p1JTU9WzZ0+VlZWpuLjY6pIAB8IMcIk6duyo7t27S5KGDBmi0tJSPf/885o/f77Gjh17Sa+dl5enwMBAff/99woICNBDDz1UHSVLkvLz8xUQEFBtr1cX7d69W8XFxbr99ts1aNCgSj3nlltu0d/+9jft2bNHiYmJjuPvvPOOmjRpok6dOmnnzp01VXKN+eKLL+TlVX4z/5prrtH3339vcUXATxhmAqpZ7969JUmHDh2SJBlj9Oabb6pLly4KCAhQw4YN9atf/Ur79+93ed7gwYPVsWNHrVy5Un379lVgYKDuvvtu2Ww2/e1vf1N+fv5ZwxgFBQX67W9/q4SEBPn5+alJkyaaMGGCsrKyXF67efPmuuaaa/Txxx+ra9eu8vf317PPPusYGpkzZ46mTJmimJgYBQcHa9SoUTp+/LhycnJ07733KiIiQhEREbrrrrt0+vRpl9d+4403NHDgQEVGRiooKEidOnXSyy+/fNZ/uVd8fxs2bNCAAQMUGBioFi1a6MUXX1RZWZnLtVlZWXr00UfVokUL2e12RUZG6uqrr9aPP/7ouKaoqEh/+MMf1LZtW9ntdjVu3Fh33XWX0tPTK/VzWrBggfr06aPAwECFhIRo2LBhWrt2reP8+PHj1b9/f0nlAcVms2nw4MG/+LrDhg1TXFyc3nnnHcexsrIyvfvuuxo3bpwjEDir7M+xuLhYjz/+uKKjoxUYGKj+/ftr/fr156wjNTVV9913n5o2bSo/Pz8lJCTo2WefVUlJSSU+nbOdq27AbRgAVTJ79mwjyWzYsMHl+J///GcjycyaNcsYY8w999xjfH19zaOPPmoWL15s5syZY9q2bWuioqJMamqq43mDBg0yjRo1MnFxceb11183y5YtMytWrDBr1641V199tQkICDBr1641a9euNWlpaaasrMxceeWVxsfHxzz11FNmyZIl5pVXXjFBQUGma9eupqCgwPHa8fHxJiYmxrRo0cK88847ZtmyZWb9+vVm2bJlRpKJj48348ePN4sXLzZvvfWWCQ4ONkOGDDHDhg0zjz32mFmyZIl56aWXjLe3t5k4caLL9/vrX//azJw50yxevNh8/fXX5v/+7/9MRESEueuuu1yuGzRokAkPDzeJiYnmrbfeMkuXLjUPPvigkWTeffddx3XZ2dmmQ4cOJigoyDz33HPmiy++MB999JGZNGmS+frrr40xxpSWlpoRI0aYoKAg8+yzz5qlS5eav/3tb6ZJkyamffv2Ji8v74I/uw8++MBIMsOHDzfz58838+bNM926dTN+fn5m1apVxhhj9u7da9544w0jyUybNs2sXbvW7Nix47yvWfFZfvjhh+app54ysbGxpqSkxBhjzKJFi4zNZjN79+41I0eONPHx8Y7nXczPcdy4ccZms5nf/OY3ZsmSJebVV181TZo0MaGhoWbcuHGO644dO2bi4uJMfHy8efvtt82XX35pnn/+eWO328348eNd6pZknn766Qt+Xj/38+8BsBphBqiiijCzbt06U1xcbHJycsxnn31mGjdubEJCQkxqaqpZu3atkWT+9Kc/uTw3OTnZBAQEmMcff9xxbNCgQUaS+eqrr856r3HjxpmgoCCXY4sXLzaSzMsvv+xyfN68eS5hypjyMOPt7W127drlcm3FH+BRo0a5HJ88ebKRZB5++GGX49dff71p1KjReT+T0tJSU1xcbN577z3j7e1tTp48edb39+2337o8p3379ubKK690fP3cc88ZSWbp0qXnfZ9//etfRpL56KOPXI5v2LDBSDJvvvnmBWuMjY01nTp1MqWlpY7jOTk5JjIy0vTt29dxzDmg/BLna/fv329sNpv57LPPjDHG3HTTTWbw4MHGmLODQGV/jj/88IORZH7961+7XFcRzJzDzH333WeCg4PNoUOHXK595ZVXjCSXUEaYQV3AfUPgEvXu3Vu+vr4KCQnRNddco+joaC1atEhRUVH67LPPZLPZdPvtt6ukpMTxiI6OVlJSkpYvX+7yWg0bNtTQoUMr9b5ff/21JJ010fSmm25SUFCQvvrqK5fjnTt3Pu/k1Wuuucbl63bt2kmSRo4cedbxkydPugw1bd68Wddee63Cw8Pl7e0tX19f3XnnnSotLdXu3btdnh8dHa2ePXueVVfFkJwkLVq0SK1bt9YVV1xxvm9dn332mRo0aKBRo0a5fK5dunRRdHT0WZ+rs127diklJUV33HGHy9BJcHCwbrzxRq1bt055eXnnfX5lJCQkaPDgwXrnnXeUkZGhTz/9VHffffc5r63sz3HZsmWSdNY8rJtvvlk+Pq7THz/77DMNGTJEsbGxLp/PVVddJUlasWLFJX1/gLthAjBwid577z21a9dOPj4+ioqKUkxMjOPc8ePHZYxRVFTUOZ/bokULl6+dn/tLMjIy5OPjo8aNG7sct9lsio6OVkZGRqVfu1GjRi5f+/n5XfB4QUGBgoODdfjwYQ0YMEBt2rTRn//8ZzVv3lz+/v5av369JkyYoPz8fJfnh4eHn/Xedrvd5br09HQ1a9bsvLVK5Z9rVlaWo56fO3HixHmfW/G5nOvziI2NVVlZmTIzMxUYGHjBGn7J//zP/+iuu+7Sq6++qoCAAP3qV786bz2V+TlW/G90dLTLdT4+Pmd9rsePH9fChQvl6+t7zve80OcDeCLCDHCJ2rVr5+hm+rmIiAjZbDatWrVKdrv9rPM/P2az2Sr9vuHh4SopKVF6errLH0JjjFJTU9WjR48qv3ZlzZ8/X7m5ufr4448VHx/vOH6+tVgqo3Hjxjpy5MgFr4mIiFB4eLgWL158zvMhISHnfW7FH/5jx46ddS4lJUVeXl5q2LDhRVR8bqNHj9aECRP04osv6p577jlv51hlf44VdaempqpJkyaO60pKSs4KrhEREercubNeeOGFc75nbGzsJX1vgLthmAmoQddcc42MMTp69Ki6d+9+1qNTp05Vfu3LL79ckvT++++7HP/oo4+Um5vrOF+TKgKScygzxuivf/1rlV/zqquu0u7dux3DL+dyzTXXKCMjQ6Wlpef8XNu0aXPe57Zp00ZNmjTRnDlzZIxxHM/NzdVHH33k6HC6VAEBAfr973+vUaNG6YEHHjjvdZX9OVZ0Un3wwQcu1/373/8+q0OponW6ZcuW5/x8CDOoa7gzA9Sgfv366d5779Vdd92ljRs3auDAgQoKCtKxY8e0evVqderU6YJ/6C5k2LBhuvLKKzVlyhRlZ2erX79+2rZtm55++ml17dpVd9xxRzV/N+euwc/PT7feeqsef/xxFRQUaObMmcrMzKzya06ePFnz5s3TddddpyeeeEI9e/ZUfn6+VqxYoWuuuUZDhgzRmDFj9MEHH+jqq6/WpEmT1LNnT/n6+urIkSNatmyZrrvuOt1www3nfH0vLy+9/PLLGjt2rK655hrdd999Kiws1B//+EdlZWXpxRdfrHLtP/fII4/okUceueA1lf05tmvXTrfffrtee+01+fr66oorrtD333+vV1555ayF+J577jktXbpUffv21cMPP6w2bdqooKBABw8e1H//+1+99dZbatq06UV9Lzt37nSsj5Oamqq8vDz95z//kSS1b99e7du3v6jXA6qVlbOPAU92vtbsc3nnnXdMr169TFBQkAkICDAtW7Y0d955p9m4caPjmkGDBpkOHTqc8/nn6mYyxpj8/HwzZcoUEx8fb3x9fU1MTIx54IEHTGZmpst18fHxZuTIkWc9/3zdOuf73p5++mkjyaSnpzuOLVy40CQlJRl/f3/TpEkT85vf/MYsWrTISDLLli37xe9v3LhxZ3XGZGZmmkmTJplmzZoZX19fExkZaUaOHGl+/PFHxzXFxcXmlVdecbx3cHCwadu2rbnvvvvMnj17znqfn5s/f77p1auX8ff3N0FBQebyyy8333zzTaU+n3Op7LXn6gSq7M+xsLDQPProoyYyMtL4+/ub3r17m7Vr15r4+HiXbiZjjElPTzcPP/ywSUhIML6+vqZRo0amW7duZurUqeb06dOO61TJbqaKn/25HhfbDQVUN5sxTvdZ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Zsbf39+0aNHCTJ061RQWFlpdmuWWLVt2zt9R48aNM8aUt2c//fTTJjo62tjtdjNw4ECzfft2a4u2yIU+qwMHDpz39/2yZctqpT6bMcbUfGQCAACoGcyZAQAAHo0wAwAAPBphBgAAeDTCDAAA8GiEGQAA4NEIMwAAwKMRZgAAgEcjzACod2w2m+bPn291GQCqCWEGQK0aP368bDbbWY8RI0ZYXRoAD8XeTABq3YgRIzR79myXY3a73aJqAHg67swAqHV2u13R0dEuj4YNG0oqHwKaOXOmrrrqKgUEBCghIUEffvihy/O3b9+uoUOHKiAgQOHh4br33nt1+vRpl2veeecddejQQXa7XTExMXrooYdczp84cUI33HCDAgMDlZiYqAULFtTsNw2gxhBmALidp556SjfeeKO2bt2q22+/Xbfeeqt++OEHSVJeXp5GjBihhg0basOGDfrwww/15ZdfuoSVmTNnasKECbr33nu1fft2LViwQK1atXJ5j2effVY333yztm3bpquvvlpjx47VyZMna/X7BFBNamU7SwA4Y9y4ccbb29sEBQW5PJ577jljTPlu6/fff7/Lc3r16mUeeOABY4wxs2bNMg0bNjSnT592nP/888+Nl5eXSU1NNcYYExsba6ZOnXreGiSZ3/3ud46vT58+bWw2m1m0aFG1fZ8Aag9zZgDUuiFDhmjmzJkuxxo1auT45z59+ric69Onj7Zs2SJJ+uGHH5SUlKSgoCDH+X79+qmsrEy7du2SzWZTSkqKLr/88gvW0LlzZ8c/BwUFKSQkRGlpaVX9lgBYiDADoNYFBQWdNezzS2w2myTJGOP453NdExAQUKnX8/X1Peu5ZWVlF1UTAPfAnBkAbmfdunVnfd22bVtJUvv27bVlyxbl5uY6zn/zzTfy8vJS69atFRISoubNm+urr76q1ZoBWIc7MwBqXWFhoVJTU12O+fj4KCIiQpL04Ycfqnv37urfv78++OADrV+/Xn//+98lSWPHjtXTTz+tcePG6ZlnnlF6eromTpyoO+64Q1FRUZKkZ555Rvfff78iIyN11VVXKScnR998840mTpxYu98ogFpBmAFQ6xYvXqyYmBiXY23atNGPP/4oqbzTaO7cuXrwwQcVHR2tDz74QO3bt5ckBQYG6osvvtCkSZPUo0cPBQYG6sYbb9Srr77qeK1x48apoKBA//d//6fHHntMERER+tWvflV73yCAWmUzxhiriwCACjabTZ988omuv/56q0sB4CGYMwMAADwaYQYAAHg05swAcCuMfAO4WNyZAQAAHo0wAwAAPBphBgAAeDTCDAAA8GiEGQAA4NEIMwAAwKMRZgAAgEcjzAAAAI9GmAEAAB7t/wFQm6Qw92JT5AAAAABJRU5ErkJggg==", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] @@ -960,7 +513,7 @@ "source": [ "import matplotlib.pyplot as plt\n", "\n", - "n_epochs_overfit = 16 #Otherwise len(train_lost_list) < n_epochs\n", + "n_epochs_overfit = 13 #Otherwise len(train_lost_list) < n_epochs\n", "plt.plot(range(n_epochs_overfit), train_loss_list)\n", "plt.xlabel(\"Epoch\")\n", "plt.ylabel(\"Loss\")\n", @@ -978,7 +531,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 10, "id": "e93efdfc", "metadata": {}, "outputs": [ @@ -986,20 +539,20 @@ "name": "stdout", "output_type": "stream", "text": [ - "Test Loss: 21.487796\n", + "Test Loss: 22.235297\n", "\n", - "Test Accuracy of airplane: 65% (657/1000)\n", - "Test Accuracy of automobile: 74% (742/1000)\n", - "Test Accuracy of bird: 50% (508/1000)\n", - "Test Accuracy of cat: 39% (398/1000)\n", - "Test Accuracy of deer: 57% (571/1000)\n", - "Test Accuracy of dog: 47% (471/1000)\n", - "Test Accuracy of frog: 78% (785/1000)\n", - "Test Accuracy of horse: 67% (673/1000)\n", - "Test Accuracy of ship: 76% (762/1000)\n", - "Test Accuracy of truck: 69% (699/1000)\n", + "Test Accuracy of airplane: 52% (523/1000)\n", + "Test Accuracy of automobile: 84% (849/1000)\n", + "Test Accuracy of bird: 34% (341/1000)\n", + "Test Accuracy of cat: 43% (432/1000)\n", + "Test Accuracy of deer: 66% (662/1000)\n", + "Test Accuracy of dog: 44% (448/1000)\n", + "Test Accuracy of frog: 74% (746/1000)\n", + "Test Accuracy of horse: 64% (647/1000)\n", + "Test Accuracy of ship: 83% (836/1000)\n", + "Test Accuracy of truck: 64% (649/1000)\n", "\n", - "Test Accuracy (Overall): 62% (6266/10000)\n" + "Test Accuracy (Overall): 61% (6133/10000)\n" ] } ], @@ -1092,7 +645,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -1181,46 +734,38 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Epoch: 0 \tTraining Loss: 45.824805 \tValidation Loss: 44.098061\n", - "Validation loss decreased (inf --> 44.098061). Saving model ...\n", - "Epoch: 1 \tTraining Loss: 41.092585 \tValidation Loss: 36.748989\n", - "Validation loss decreased (44.098061 --> 36.748989). Saving model ...\n", - "Epoch: 2 \tTraining Loss: 35.776831 \tValidation Loss: 32.416112\n", - "Validation loss decreased (36.748989 --> 32.416112). Saving model ...\n", - "Epoch: 3 \tTraining Loss: 32.982180 \tValidation Loss: 29.739034\n", - "Validation loss decreased (32.416112 --> 29.739034). Saving model ...\n", - "Epoch: 4 \tTraining Loss: 30.876129 \tValidation Loss: 28.481162\n", - "Validation loss decreased (29.739034 --> 28.481162). Saving model ...\n", - "Epoch: 5 \tTraining Loss: 29.058467 \tValidation Loss: 25.692209\n", - "Validation loss decreased (28.481162 --> 25.692209). Saving model ...\n", - "Epoch: 6 \tTraining Loss: 27.521015 \tValidation Loss: 24.506301\n", - "Validation loss decreased (25.692209 --> 24.506301). Saving model ...\n", - "Epoch: 7 \tTraining Loss: 26.234757 \tValidation Loss: 23.046333\n", - "Validation loss decreased (24.506301 --> 23.046333). Saving model ...\n", - "Epoch: 8 \tTraining Loss: 25.024110 \tValidation Loss: 22.182746\n", - "Validation loss decreased (23.046333 --> 22.182746). Saving model ...\n", - "Epoch: 9 \tTraining Loss: 23.719521 \tValidation Loss: 21.154988\n", - "Validation loss decreased (22.182746 --> 21.154988). Saving model ...\n", - "Epoch: 10 \tTraining Loss: 22.675286 \tValidation Loss: 20.148329\n", - "Validation loss decreased (21.154988 --> 20.148329). Saving model ...\n", - "Epoch: 11 \tTraining Loss: 21.529691 \tValidation Loss: 19.110659\n", - "Validation loss decreased (20.148329 --> 19.110659). Saving model ...\n", - "Epoch: 12 \tTraining Loss: 20.730257 \tValidation Loss: 18.273050\n", - "Validation loss decreased (19.110659 --> 18.273050). Saving model ...\n", - "Epoch: 13 \tTraining Loss: 19.809760 \tValidation Loss: 17.508739\n", - "Validation loss decreased (18.273050 --> 17.508739). Saving model ...\n", - "Epoch: 14 \tTraining Loss: 18.948443 \tValidation Loss: 17.371757\n", - "Validation loss decreased (17.508739 --> 17.371757). Saving model ...\n", - "Epoch: 15 \tTraining Loss: 18.049396 \tValidation Loss: 16.754709\n", - "Validation loss decreased (17.371757 --> 16.754709). Saving model ...\n", - "Epoch: 16 \tTraining Loss: 17.303731 \tValidation Loss: 16.921118\n" + "Epoch: 0 \tTraining Loss: 45.348058 \tValidation Loss: 41.718214\n", + "Validation loss decreased (inf --> 41.718214). Saving model_1 ...\n", + "Epoch: 1 \tTraining Loss: 39.649087 \tValidation Loss: 35.754235\n", + "Validation loss decreased (41.718214 --> 35.754235). Saving model_1 ...\n", + "Epoch: 2 \tTraining Loss: 35.008029 \tValidation Loss: 31.420939\n", + "Validation loss decreased (35.754235 --> 31.420939). Saving model_1 ...\n", + "Epoch: 3 \tTraining Loss: 32.138094 \tValidation Loss: 28.863286\n", + "Validation loss decreased (31.420939 --> 28.863286). Saving model_1 ...\n", + "Epoch: 4 \tTraining Loss: 30.218731 \tValidation Loss: 28.003921\n", + "Validation loss decreased (28.863286 --> 28.003921). Saving model_1 ...\n", + "Epoch: 5 \tTraining Loss: 28.807953 \tValidation Loss: 26.228902\n", + "Validation loss decreased (28.003921 --> 26.228902). Saving model_1 ...\n", + "Epoch: 6 \tTraining Loss: 27.365782 \tValidation Loss: 25.497843\n", + "Validation loss decreased (26.228902 --> 25.497843). Saving model_1 ...\n", + "Epoch: 7 \tTraining Loss: 26.038266 \tValidation Loss: 23.508494\n", + "Validation loss decreased (25.497843 --> 23.508494). Saving model_1 ...\n", + "Epoch: 8 \tTraining Loss: 24.863525 \tValidation Loss: 23.421283\n", + "Validation loss decreased (23.508494 --> 23.421283). Saving model_1 ...\n", + "Epoch: 9 \tTraining Loss: 23.610995 \tValidation Loss: 21.928674\n", + "Validation loss decreased (23.421283 --> 21.928674). Saving model_1 ...\n", + "Epoch: 10 \tTraining Loss: 22.689530 \tValidation Loss: 21.890606\n", + "Validation loss decreased (21.928674 --> 21.890606). Saving model_1 ...\n", + "Epoch: 11 \tTraining Loss: 21.605674 \tValidation Loss: 20.122198\n", + "Validation loss decreased (21.890606 --> 20.122198). Saving model_1 ...\n", + "Epoch: 12 \tTraining Loss: 20.795100 \tValidation Loss: 20.151628\n" ] }, { @@ -1247,7 +792,7 @@ "train_loss_list_1 = [] # list to store loss to visualize\n", "valid_loss_min_1 = np.Inf # track change in validation loss\n", "\n", - "for epoch in range(n_epochs):\n", + "for epoch in range(n_epochs_1):\n", " # Keep track of training and validation loss\n", " train_loss = 0.0\n", " valid_loss = 0.0\n", @@ -1299,11 +844,11 @@ " # Save model if validation loss has decreased\n", " if valid_loss <= valid_loss_min_1:\n", " print(\n", - " \"Validation loss decreased ({:.6f} --> {:.6f}). Saving model ...\".format(\n", + " \"Validation loss decreased ({:.6f} --> {:.6f}). Saving model_1 ...\".format(\n", " valid_loss_min_1, valid_loss\n", " )\n", " )\n", - " torch.save(model_1.state_dict(), \"model_cifar.pt\")\n", + " torch.save(model_1.state_dict(), \"model_1_cifar.pt\")\n", " valid_loss_min_1 = valid_loss" ] }, @@ -1311,7 +856,54 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Comparison with the previous model's results" + "Compare the results with the previous model's results" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "n_epochs_overfit_1 = 13 #Otherwise len(train_lost_list) < n_epochs\n", + "plt.plot(range(n_epochs_overfit), train_loss_list, label = \"Model 0\")\n", + "plt.plot(range(n_epochs_overfit), train_loss_list_1, color = \"green\", label = \"Model 1\")\n", + "plt.xlabel(\"Epoch\")\n", + "plt.ylabel(\"Loss\")\n", + "plt.title(\"Comparison of Performande for of Model 0 and Model 1\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[43.45363824605942, 33.786904842853545, 29.978750259280204, 27.777584496736527, 26.11793281197548, 24.786260991096498, 23.703872640132904, 22.74807582437992, 21.79085268616676, 20.92527386188507, 20.174014331400393, 19.419565526545046, 18.71952503979206]\n", + "[45.348057844638824, 39.64908684611321, 35.00802879333496, 32.13809435069561, 30.21873086452484, 28.807953109145163, 27.365781868696214, 26.038266357183456, 24.863524509072302, 23.610995230078696, 22.689530485272407, 21.60567447721958, 20.795099827349187]\n" + ] + } + ], + "source": [ + "print(train_loss_list)\n", + "print(train_loss_list_1)" ] }, { @@ -1331,10 +923,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "ef623c26", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "model: fp32 \t Size (KB): 251.278\n" + ] + }, + { + "data": { + "text/plain": [ + "251278" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import os\n", "\n", @@ -1360,10 +970,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "c4c65d4b", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "model: int8 \t Size (KB): 76.522\n" + ] + }, + { + "data": { + "text/plain": [ + "76522" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import torch.quantization\n", "\n", @@ -1388,6 +1016,179 @@ "Try training aware quantization to mitigate the impact on the accuracy (doc available here https://pytorch.org/docs/stable/quantization.html#torch.quantization.quantize_dynamic)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First for the initial model :" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test Loss: 22.235297\n", + "\n", + "Test Accuracy of airplane: 52% (523/1000)\n", + "Test Accuracy of automobile: 84% (849/1000)\n", + "Test Accuracy of bird: 34% (341/1000)\n", + "Test Accuracy of cat: 43% (432/1000)\n", + "Test Accuracy of deer: 66% (662/1000)\n", + "Test Accuracy of dog: 44% (448/1000)\n", + "Test Accuracy of frog: 74% (746/1000)\n", + "Test Accuracy of horse: 64% (647/1000)\n", + "Test Accuracy of ship: 83% (836/1000)\n", + "Test Accuracy of truck: 64% (649/1000)\n", + "\n", + "Test Accuracy (Overall): 61% (6133/10000)\n" + ] + } + ], + "source": [ + "# import model\n", + "model.load_state_dict(torch.load(\"./model_cifar.pt\"))\n", + "\n", + "# track test loss\n", + "test_loss = 0.0\n", + "class_correct = list(0.0 for i in range(10))\n", + "class_total = list(0.0 for i in range(10))\n", + "\n", + "model.eval()\n", + "# iterate over test data\n", + "for data, target in test_loader:\n", + " # move tensors to GPU if CUDA is available\n", + " if train_on_gpu:\n", + " data, target = data.cuda(), target.cuda()\n", + " # forward pass: compute predicted outputs by passing inputs to the model\n", + " output = model(data)\n", + " # calculate the batch loss\n", + " loss = criterion(output, target)\n", + " # update test loss\n", + " test_loss += loss.item() * data.size(0)\n", + " # convert output probabilities to predicted class\n", + " _, pred = torch.max(output, 1)\n", + " # compare predictions to true label\n", + " correct_tensor = pred.eq(target.data.view_as(pred))\n", + " correct = (\n", + " np.squeeze(correct_tensor.numpy())\n", + " if not train_on_gpu\n", + " else np.squeeze(correct_tensor.cpu().numpy())\n", + " )\n", + " # calculate test accuracy for each object class\n", + " for i in range(batch_size):\n", + " label = target.data[i]\n", + " class_correct[label] += correct[i].item()\n", + " class_total[label] += 1\n", + "\n", + "# average test loss\n", + "test_loss = test_loss / len(test_loader)\n", + "print(\"Test Loss: {:.6f}\\n\".format(test_loss))\n", + "\n", + "for i in range(10):\n", + " if class_total[i] > 0:\n", + " print(\n", + " \"Test Accuracy of %5s: %2d%% (%2d/%2d)\"\n", + " % (\n", + " classes[i],\n", + " 100 * class_correct[i] / class_total[i],\n", + " np.sum(class_correct[i]),\n", + " np.sum(class_total[i]),\n", + " )\n", + " )\n", + " else:\n", + " print(\"Test Accuracy of %5s: N/A (no training examples)\" % (classes[i]))\n", + "\n", + "print(\n", + " \"\\nTest Accuracy (Overall): %2d%% (%2d/%2d)\"\n", + " % (\n", + " 100.0 * np.sum(class_correct) / np.sum(class_total),\n", + " np.sum(class_correct),\n", + " np.sum(class_total),\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then for the quantized model :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# quantize model\n", + "quantized_model = torch.quantization.quantize_dynamic(model, dtype=torch.qint8)\n", + "\n", + "# track test loss\n", + "quantized_test_loss = 0.0\n", + "quantized_class_correct = list(0.0 for i in range(10))\n", + "quantized_class_total = list(0.0 for i in range(10))\n", + "\n", + "model.eval()\n", + "# iterate over test data\n", + "for data, target in test_loader:\n", + " # move tensors to GPU if CUDA is available\n", + " if train_on_gpu:\n", + " data, target = data.cuda(), target.cuda()\n", + " # forward pass: compute predicted outputs by passing inputs to the model\n", + " output = model(data)\n", + " # calculate the batch loss\n", + " loss = criterion(output, target)\n", + " # update test loss\n", + " test_loss += loss.item() * data.size(0)\n", + " # convert output probabilities to predicted class\n", + " _, pred = torch.max(output, 1)\n", + " # compare predictions to true label\n", + " correct_tensor = pred.eq(target.data.view_as(pred))\n", + " correct = (\n", + " np.squeeze(correct_tensor.numpy())\n", + " if not train_on_gpu\n", + " else np.squeeze(correct_tensor.cpu().numpy())\n", + " )\n", + " # calculate test accuracy for each object class\n", + " for i in range(batch_size):\n", + " label = target.data[i]\n", + " class_correct[label] += correct[i].item()\n", + " class_total[label] += 1\n", + "\n", + "# average test loss\n", + "test_loss = test_loss / len(test_loader)\n", + "print(\"Test Loss: {:.6f}\\n\".format(test_loss))\n", + "\n", + "for i in range(10):\n", + " if class_total[i] > 0:\n", + " print(\n", + " \"Test Accuracy of %5s: %2d%% (%2d/%2d)\"\n", + " % (\n", + " classes[i],\n", + " 100 * class_correct[i] / class_total[i],\n", + " np.sum(class_correct[i]),\n", + " np.sum(class_total[i]),\n", + " )\n", + " )\n", + " else:\n", + " print(\"Test Accuracy of %5s: N/A (no training examples)\" % (classes[i]))\n", + "\n", + "print(\n", + " \"\\nTest Accuracy (Overall): %2d%% (%2d/%2d)\"\n", + " % (\n", + " 100.0 * np.sum(class_correct) / np.sum(class_total),\n", + " np.sum(class_correct),\n", + " np.sum(class_total),\n", + " )\n", + ")" + ] + }, { "cell_type": "markdown", "id": "201470f9",