diff --git a/CYFI445/lectures/01_linear_regression_concept/0_review_np_array.ipynb b/CYFI445/lectures/01_linear_regression_concept/0_review_np_array.ipynb index 543305a..cc1d12f 100644 --- a/CYFI445/lectures/01_linear_regression_concept/0_review_np_array.ipynb +++ b/CYFI445/lectures/01_linear_regression_concept/0_review_np_array.ipynb @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 152, "id": "323b62e8", "metadata": {}, "outputs": [ @@ -29,7 +29,7 @@ "6" ] }, - "execution_count": 62, + "execution_count": 152, "metadata": {}, "output_type": "execute_result" } @@ -40,7 +40,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 153, "id": "6cdd612e", "metadata": {}, "outputs": [ @@ -50,7 +50,7 @@ "8" ] }, - "execution_count": 63, + "execution_count": 153, "metadata": {}, "output_type": "execute_result" } @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 154, "id": "5e7c9a36", "metadata": {}, "outputs": [ @@ -71,7 +71,7 @@ "1" ] }, - "execution_count": 64, + "execution_count": 154, "metadata": {}, "output_type": "execute_result" } @@ -82,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 155, "id": "c497160d", "metadata": {}, "outputs": [ @@ -101,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 156, "id": "e81329e5", "metadata": {}, "outputs": [ @@ -111,7 +111,7 @@ "[1, 2, 3]" ] }, - "execution_count": 66, + "execution_count": 156, "metadata": {}, "output_type": "execute_result" } @@ -123,7 +123,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 157, "id": "0f886f3a", "metadata": {}, "outputs": [ @@ -133,7 +133,7 @@ "1" ] }, - "execution_count": 67, + "execution_count": 157, "metadata": {}, "output_type": "execute_result" } @@ -144,7 +144,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 158, "id": "bd694c5c", "metadata": {}, "outputs": [ @@ -154,7 +154,7 @@ "[1, 2, 3, 4]" ] }, - "execution_count": 68, + "execution_count": 158, "metadata": {}, "output_type": "execute_result" } @@ -166,7 +166,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 159, "id": "f47c854d", "metadata": {}, "outputs": [ @@ -176,7 +176,7 @@ "4" ] }, - "execution_count": 69, + "execution_count": 159, "metadata": {}, "output_type": "execute_result" } @@ -187,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 160, "id": "e2d7b456", "metadata": {}, "outputs": [ @@ -197,7 +197,7 @@ "(1, 2, 3)" ] }, - "execution_count": 70, + "execution_count": 160, "metadata": {}, "output_type": "execute_result" } @@ -209,7 +209,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 161, "id": "4e37998a", "metadata": {}, "outputs": [ @@ -219,7 +219,7 @@ "1" ] }, - "execution_count": 71, + "execution_count": 161, "metadata": {}, "output_type": "execute_result" } @@ -238,7 +238,7 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 162, "id": "d9c0f925", "metadata": {}, "outputs": [ @@ -248,7 +248,7 @@ "[1, 4, 9]" ] }, - "execution_count": 72, + "execution_count": 162, "metadata": {}, "output_type": "execute_result" } @@ -259,7 +259,7 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 163, "id": "799c1063", "metadata": {}, "outputs": [ @@ -269,7 +269,7 @@ "[1, 4, 9, 16, 25]" ] }, - "execution_count": 73, + "execution_count": 163, "metadata": {}, "output_type": "execute_result" } @@ -282,7 +282,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 164, "id": "7a9d00ab", "metadata": {}, "outputs": [ @@ -292,7 +292,7 @@ "[0, 2, 4, 6, 8]" ] }, - "execution_count": 74, + "execution_count": 164, "metadata": {}, "output_type": "execute_result" } @@ -305,7 +305,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 165, "id": "0b3a893b", "metadata": {}, "outputs": [ @@ -315,7 +315,7 @@ "[1, 2]" ] }, - "execution_count": 75, + "execution_count": 165, "metadata": {}, "output_type": "execute_result" } @@ -337,7 +337,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 166, "id": "0df3abc9", "metadata": {}, "outputs": [], @@ -347,7 +347,7 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 167, "id": "2a7a1daf", "metadata": {}, "outputs": [ @@ -357,7 +357,7 @@ "array([1, 2, 3, 4, 5, 6])" ] }, - "execution_count": 77, + "execution_count": 167, "metadata": {}, "output_type": "execute_result" } @@ -369,7 +369,7 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 168, "id": "1f8e61c2", "metadata": {}, "outputs": [ @@ -379,7 +379,7 @@ "np.int64(1)" ] }, - "execution_count": 78, + "execution_count": 168, "metadata": {}, "output_type": "execute_result" } @@ -390,7 +390,7 @@ }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 169, "id": "61e20947", "metadata": {}, "outputs": [], @@ -400,7 +400,7 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 170, "id": "18251de4", "metadata": {}, "outputs": [ @@ -410,7 +410,7 @@ "np.float32(2.0)" ] }, - "execution_count": 80, + "execution_count": 170, "metadata": {}, "output_type": "execute_result" } @@ -421,7 +421,7 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 171, "id": "11f35a16", "metadata": {}, "outputs": [ @@ -431,7 +431,7 @@ "array([1, 2, 3])" ] }, - "execution_count": 81, + "execution_count": 171, "metadata": {}, "output_type": "execute_result" } @@ -442,7 +442,7 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 172, "id": "57ef6d6c", "metadata": {}, "outputs": [ @@ -452,7 +452,7 @@ "array([4, 5, 6])" ] }, - "execution_count": 82, + "execution_count": 172, "metadata": {}, "output_type": "execute_result" } @@ -463,7 +463,7 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 173, "id": "db3cc4e7", "metadata": {}, "outputs": [ @@ -475,7 +475,7 @@ " [ 9, 10, 11, 12]])" ] }, - "execution_count": 83, + "execution_count": 173, "metadata": {}, "output_type": "execute_result" } @@ -487,7 +487,7 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 174, "id": "7ca7a696", "metadata": {}, "outputs": [ @@ -497,7 +497,7 @@ "np.int64(8)" ] }, - "execution_count": 84, + "execution_count": 174, "metadata": {}, "output_type": "execute_result" } @@ -518,7 +518,7 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 175, "id": "53d75c62", "metadata": {}, "outputs": [ @@ -528,7 +528,7 @@ "array([-10., -8., -6., -4., -2., 0., 2., 4., 6., 8., 10.])" ] }, - "execution_count": 85, + "execution_count": 175, "metadata": {}, "output_type": "execute_result" } @@ -552,7 +552,7 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 176, "id": "25a9b316", "metadata": {}, "outputs": [ @@ -592,7 +592,7 @@ }, { "cell_type": "code", - "execution_count": 87, + "execution_count": 177, "id": "d86d32ee", "metadata": {}, "outputs": [ @@ -648,7 +648,7 @@ }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 178, "id": "ba1d7074", "metadata": {}, "outputs": [ @@ -658,7 +658,7 @@ "True" ] }, - "execution_count": 88, + "execution_count": 178, "metadata": {}, "output_type": "execute_result" } @@ -669,7 +669,7 @@ }, { "cell_type": "code", - "execution_count": 89, + "execution_count": 179, "id": "124e1812", "metadata": {}, "outputs": [ @@ -679,7 +679,7 @@ "4" ] }, - "execution_count": 89, + "execution_count": 179, "metadata": {}, "output_type": "execute_result" } @@ -691,7 +691,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 180, "id": "f300cebf", "metadata": {}, "outputs": [ @@ -701,7 +701,7 @@ "3" ] }, - "execution_count": 90, + "execution_count": 180, "metadata": {}, "output_type": "execute_result" } @@ -719,7 +719,7 @@ }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 181, "id": "6e9dceae", "metadata": {}, "outputs": [ @@ -729,7 +729,7 @@ "(3, 2, 4)" ] }, - "execution_count": 91, + "execution_count": 181, "metadata": {}, "output_type": "execute_result" } @@ -740,7 +740,7 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 182, "id": "a5ee181d", "metadata": {}, "outputs": [ @@ -750,7 +750,7 @@ "24" ] }, - "execution_count": 92, + "execution_count": 182, "metadata": {}, "output_type": "execute_result" } @@ -761,7 +761,7 @@ }, { "cell_type": "code", - "execution_count": 93, + "execution_count": 183, "id": "b251a416", "metadata": {}, "outputs": [ @@ -771,7 +771,7 @@ "dtype('int64')" ] }, - "execution_count": 93, + "execution_count": 183, "metadata": {}, "output_type": "execute_result" } @@ -783,7 +783,7 @@ }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 184, "id": "a043cd1c", "metadata": {}, "outputs": [ @@ -793,7 +793,7 @@ "dtype('float32')" ] }, - "execution_count": 94, + "execution_count": 184, "metadata": {}, "output_type": "execute_result" } @@ -813,7 +813,7 @@ }, { "cell_type": "code", - "execution_count": 95, + "execution_count": 185, "id": "75b22e31", "metadata": {}, "outputs": [ @@ -823,7 +823,7 @@ "array([0., 0.])" ] }, - "execution_count": 95, + "execution_count": 185, "metadata": {}, "output_type": "execute_result" } @@ -834,7 +834,7 @@ }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 186, "id": "4b542c1f", "metadata": {}, "outputs": [ @@ -844,7 +844,7 @@ "array([1., 1.])" ] }, - "execution_count": 96, + "execution_count": 186, "metadata": {}, "output_type": "execute_result" } @@ -855,7 +855,7 @@ }, { "cell_type": "code", - "execution_count": 97, + "execution_count": 187, "id": "c22cdd54", "metadata": {}, "outputs": [ @@ -865,7 +865,7 @@ "array([0, 1, 2, 3])" ] }, - "execution_count": 97, + "execution_count": 187, "metadata": {}, "output_type": "execute_result" } @@ -876,7 +876,7 @@ }, { "cell_type": "code", - "execution_count": 98, + "execution_count": 188, "id": "367eacd6", "metadata": {}, "outputs": [ @@ -886,7 +886,7 @@ "array([2, 4, 6, 8])" ] }, - "execution_count": 98, + "execution_count": 188, "metadata": {}, "output_type": "execute_result" } @@ -897,19 +897,19 @@ }, { "cell_type": "code", - "execution_count": 99, + "execution_count": 189, "id": "0fa059e6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[0.84849457, 0.2408882 , 0.26897315, 0.88789736],\n", - " [0.17325996, 0.06966163, 0.81198917, 0.24941808],\n", - " [0.70722305, 0.64643472, 0.07015388, 0.19063198]])" + "array([[0.38240945, 0.11043883, 0.50139229, 0.17452479],\n", + " [0.78513498, 0.33784318, 0.55672234, 0.56790213],\n", + " [0.89555496, 0.17454204, 0.07973506, 0.30038232]])" ] }, - "execution_count": 99, + "execution_count": 189, "metadata": {}, "output_type": "execute_result" } @@ -920,19 +920,19 @@ }, { "cell_type": "code", - "execution_count": 100, + "execution_count": 190, "id": "eae03b14", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[ 1, 1, 10, 1],\n", - " [ 8, 10, 1, 1],\n", - " [ 8, 1, 4, 8]], dtype=int32)" + "array([[ 9, 3, 5, 9],\n", + " [10, 10, 5, 3],\n", + " [ 1, 10, 7, 4]], dtype=int32)" ] }, - "execution_count": 100, + "execution_count": 190, "metadata": {}, "output_type": "execute_result" } @@ -943,18 +943,18 @@ }, { "cell_type": "code", - "execution_count": 101, + "execution_count": 191, "id": "86c88e48", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[-0.06960131, 0.94400631, -0.05980746, -0.81806564],\n", - " [-0.06661582, -0.71274669, 0.9149406 , 0.63540989]])" + "array([[-1.41440474, 0.09745154, -0.14707384, 0.54301773],\n", + " [-1.00944703, 2.22044378, 1.48886965, 0.02239155]])" ] }, - "execution_count": 101, + "execution_count": 191, "metadata": {}, "output_type": "execute_result" } @@ -977,7 +977,7 @@ }, { "cell_type": "code", - "execution_count": 102, + "execution_count": 192, "id": "b26242be", "metadata": {}, "outputs": [ @@ -987,7 +987,7 @@ "(6,)" ] }, - "execution_count": 102, + "execution_count": 192, "metadata": {}, "output_type": "execute_result" } @@ -999,7 +999,7 @@ }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 193, "id": "18db087b", "metadata": {}, "outputs": [ @@ -1009,7 +1009,7 @@ "(1, 6)" ] }, - "execution_count": 103, + "execution_count": 193, "metadata": {}, "output_type": "execute_result" } @@ -1021,7 +1021,7 @@ }, { "cell_type": "code", - "execution_count": 104, + "execution_count": 194, "id": "f213bce6", "metadata": {}, "outputs": [ @@ -1031,7 +1031,7 @@ "array([[1, 2, 3, 4, 5, 6]])" ] }, - "execution_count": 104, + "execution_count": 194, "metadata": {}, "output_type": "execute_result" } @@ -1042,7 +1042,7 @@ }, { "cell_type": "code", - "execution_count": 105, + "execution_count": 195, "id": "25c7b822", "metadata": {}, "outputs": [ @@ -1057,7 +1057,7 @@ " [6]])" ] }, - "execution_count": 105, + "execution_count": 195, "metadata": {}, "output_type": "execute_result" } @@ -1068,7 +1068,7 @@ }, { "cell_type": "code", - "execution_count": 106, + "execution_count": 196, "id": "bbd43b79", "metadata": {}, "outputs": [ @@ -1079,7 +1079,7 @@ " [4, 5, 6]])" ] }, - "execution_count": 106, + "execution_count": 196, "metadata": {}, "output_type": "execute_result" } @@ -1104,7 +1104,7 @@ }, { "cell_type": "code", - "execution_count": 107, + "execution_count": 197, "id": "9af72192", "metadata": {}, "outputs": [ @@ -1115,7 +1115,7 @@ " [4, 5]])" ] }, - "execution_count": 107, + "execution_count": 197, "metadata": {}, "output_type": "execute_result" } @@ -1131,7 +1131,7 @@ }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 198, "id": "4216c512", "metadata": {}, "outputs": [ @@ -1142,7 +1142,7 @@ " [ 4, 14]])" ] }, - "execution_count": 108, + "execution_count": 198, "metadata": {}, "output_type": "execute_result" } @@ -1157,7 +1157,7 @@ }, { "cell_type": "code", - "execution_count": 109, + "execution_count": 199, "id": "0eec244e", "metadata": {}, "outputs": [ @@ -1169,7 +1169,7 @@ " [6, 6]])" ] }, - "execution_count": 109, + "execution_count": 199, "metadata": {}, "output_type": "execute_result" } @@ -1185,7 +1185,7 @@ }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 200, "id": "bb8d128a", "metadata": {}, "outputs": [ @@ -1195,7 +1195,7 @@ "array([1.6, 3.2])" ] }, - "execution_count": 110, + "execution_count": 200, "metadata": {}, "output_type": "execute_result" } @@ -1212,7 +1212,7 @@ }, { "cell_type": "code", - "execution_count": 111, + "execution_count": 201, "id": "af55cce3", "metadata": {}, "outputs": [ @@ -1224,7 +1224,7 @@ " [10, 20, 30]])" ] }, - "execution_count": 111, + "execution_count": 201, "metadata": {}, "output_type": "execute_result" } @@ -1277,7 +1277,7 @@ }, { "cell_type": "code", - "execution_count": 112, + "execution_count": 202, "id": "0194c4b4", "metadata": {}, "outputs": [ @@ -1287,7 +1287,7 @@ "np.int64(1)" ] }, - "execution_count": 112, + "execution_count": 202, "metadata": {}, "output_type": "execute_result" } @@ -1300,7 +1300,7 @@ }, { "cell_type": "code", - "execution_count": 113, + "execution_count": 203, "id": "5b201131", "metadata": {}, "outputs": [ @@ -1310,7 +1310,7 @@ "6" ] }, - "execution_count": 113, + "execution_count": 203, "metadata": {}, "output_type": "execute_result" } @@ -1323,7 +1323,7 @@ }, { "cell_type": "code", - "execution_count": 114, + "execution_count": 204, "id": "e73fbd22", "metadata": {}, "outputs": [ @@ -1333,7 +1333,7 @@ "array([5, 7])" ] }, - "execution_count": 114, + "execution_count": 204, "metadata": {}, "output_type": "execute_result" } @@ -1347,19 +1347,31 @@ }, { "cell_type": "code", - "execution_count": 115, + "execution_count": 205, "id": "01229cfb", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([7, 4, 6])" + ] + }, + "execution_count": 205, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "data=np.array([[1, 7], \n", " [3, 4], \n", - " [5, 6]]).max(axis=1) # collaps columns" + " [5, 6]]).max(axis=1) # collaps columns\n", + "data" ] }, { "cell_type": "code", - "execution_count": 116, + "execution_count": 206, "id": "fd882d6c", "metadata": {}, "outputs": [ @@ -1369,7 +1381,7 @@ "np.float64(2.5)" ] }, - "execution_count": 116, + "execution_count": 206, "metadata": {}, "output_type": "execute_result" } @@ -1381,7 +1393,7 @@ }, { "cell_type": "code", - "execution_count": 117, + "execution_count": 207, "id": "ba88c2f7", "metadata": {}, "outputs": [ @@ -1391,7 +1403,7 @@ "array([2., 3.])" ] }, - "execution_count": 117, + "execution_count": 207, "metadata": {}, "output_type": "execute_result" } @@ -1403,7 +1415,7 @@ }, { "cell_type": "code", - "execution_count": 118, + "execution_count": 208, "id": "b49ff53c", "metadata": {}, "outputs": [ @@ -1413,7 +1425,7 @@ "array([1.5, 3.5])" ] }, - "execution_count": 118, + "execution_count": 208, "metadata": {}, "output_type": "execute_result" } @@ -1425,7 +1437,7 @@ }, { "cell_type": "code", - "execution_count": 119, + "execution_count": 209, "id": "fa48f9a5", "metadata": {}, "outputs": [ @@ -1435,7 +1447,7 @@ "array([1.5, 3.5])" ] }, - "execution_count": 119, + "execution_count": 209, "metadata": {}, "output_type": "execute_result" } @@ -1448,17 +1460,29 @@ }, { "cell_type": "code", - "execution_count": 120, + "execution_count": 210, "id": "3ee7e4c9", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "np.int64(5)" + ] + }, + "execution_count": 210, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Example array\n", "array = np.array([[4, 1, 3],\n", " [2, 5, 0]])\n", "\n", "# Find index of minimum value in the entire array (flattened)\n", - "min_index_flat = np.argmin(array)" + "min_index_flat = np.argmin(array)\n", + "min_index_flat" ] }, { @@ -1473,13 +1497,13 @@ }, { "cell_type": "code", - "execution_count": 121, + "execution_count": 211, "id": "6d37c412", "metadata": {}, "outputs": [ { "data": { - "image/png": "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mT/+8Y8qLS2VJG3fvl333XefrrnmGhUWFrofMQAAAOALDX7WUmFhobp06SJJ+tvf/qb/+I//0GOPPabPP/9c11xzTaMXCAAAUJcGj8gEBQXpp59+kiStWrVKAwYMkCSFh4e7R2oAAAB8ocEjMr1791ZmZqZ69eqlzZs3680335QkffPNN4qNjW30AgEAAOrS4BGZ3NxcNW3aVEuWLNHcuXPVrl07SdLy5cs1aNCgRi8QAACgLg7Lsiy7i/Cm+j4GHAAA+I/6/n7X69JSaWmp+ySnmgdDWAAAAL5SryDTqlUrFRcXq23btmrZsqUcDkeNPpZlyeFwqLKystGLBAAAqE29gsyaNWsUHh7u/nNtQQYAAMDXmCMDAAD8Tn1/vxt819L06dNVVVVVo93lcmnEiBENPR0AAMBpa3CQmTdvnnr37q1vv/3W3fbRRx/pkksu0Z49exq1OAAAgJNpcJDZtm2bYmNj1bNnT7300kv64x//qAEDBui2227Thg0bvFEjAABArRq8sm+rVq301ltv6U9/+pPGjh2rpk2bavny5brqqqu8UR8AAECdGjwiI0nPPvusZs+erREjRqhjx46655579OWXXzZ2bQAAACfV4CAzaNAgZWdn65VXXtHrr7+uL774Qn369NHvf/97PfHEE96oEQAAoFYNDjKVlZXatm2bhg8fLklq3ry55s6dqyVLlmjWrFmNXiAAAEBdGnUdmR9++EFt2rRprNM1CtaRAQDAPF5bR6Y233zzje6//35dcskljXE6AACAejntIPPTTz9p/vz5Sk1NVZcuXZSfn6/MzMzGrA0AAOCkGnz79aZNm/S///u/Wrx4sdq3b6+vvvpKa9euVWpqqjfqAwAAqFO9R2T+8pe/qGvXrho+fLhatWqldevWafv27XI4HGrdurU3awQAAKhVvUdk7r//ft1///3685//LKfT6c2aAAAA6qXeIzKPPPKIFi9erISEBN1///3asWOHN+sCAAA4pXoHmaysLH3zzTf661//qpKSEiUnJ6tHjx6yLEs//vijN2sEAACoVYPvWurbt69eeeUVlZSU6O6771ZiYqL69u2rK664Qk8//bQ3agQAAKhVoyyIt337ds2bN08LFy7UoUOHGqOuRsOCeAAAmKe+v9+NurLvL7/8onPOOaexTtcoCDIAAJjHpyv7nuBvIQYAAAS2Rg0y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qXv37u4nSldUVOjSSy/VyJEjJdW8tPTjjz/qlltuUUREhJo3b64LLrhA8+fPb/wPDcBrCDIAfG7ChAnq0aOHbrvtNt15552aOnWqevToccrXzZ8/X9dee63CwsJ06623at68eR7Hn3nmGZWVlemBBx6QJD344IM6evSocnNzaz3fww8/rP/3//6fli9frq+++kpz585VmzZtzvwDAvAZnn4NwOccDofmzp2riy++WJdccok7eJxMVVWVFixYoGeffVaSdNNNN+m+++5TYWGhEhISJEktWrTQa6+9pr59+yokJEQ5OTlau3atQkNDaz3n999/r0svvVSXXXaZJKlDhw6N8wEB+AwjMgBs8fLLL+vcc89VYWGh9u3bd8r+K1euVFlZma655hpJUps2bXT11Vfr5Zdf9uiXkpKiyZMn65FHHtF9992n3r1713nOcePGadGiRerZs6emTJmiDRs2nNmHAuBzBBkAPrdhwwbNmjVL7777ri6//HKNGTNGp7rvYN68efrnP/+p5s2bq2nTpmratKnef/99vfLKK6qqqnL3q6qq0ieffCKn06ndu3ef9JyDBw/Wd999p3vvvVcHDhzQVVddpcmTJzfKZwTgGwQZAD71008/afTo0Ro3bpz69++vefPmafPmzXr++efrfM2RI0fck4ILCgrc2xdffKEff/xRH374obvvk08+qa+//lr5+flasWLFKSfvRkREaNSoUXrttdeUk5OjF198sdE+KwDvY44MAJ/KysqSZVl6/PHHJVXPS3nqqac0efJkDR48uNZ5Kn/961/VunVr3XjjjXI4HB7HrrnmGs2bN0+DBg3SF198oalTp2rJkiXq1auXnn76aU2cOFF9+/ZVx44da5x36tSpSkxMVNeuXVVeXq53331XF198sVc+NwDvYEQGgM/k5+drzpw5mj9/vs4991x3+9ixY3XFFVfUeYnp5Zdf1vXXX18jxEjSDTfcoHfeeUf79u3TrbfeqtGjR2vIkCGSpDvvvFP9+/fXbbfdpsrKyhqvDQoKUlZWlrp3764+ffrI6XRq0aJFjfiJAXgbC+IBAABjMSIDAACMRZABAADGIsgAAABjEWQAAICxCDIAAMBYBBkAAGAsggwAADAWQQYAABiLIAMAAIxFkAEAAMYiyAAAAGMRZAAAgLH+P881yKflHSBwAAAAAElFTkSuQmCC", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAL41JREFUeJzt3XtcVWW+x/HvZpuICgiKIoKApnlLbZQIFS95JY9HI6dJKy85UzloGZnGqVSyspNN6qTZZUytxrQctMukZV7Q8pqGly7ewkIFNSdBccIOrPMHL/a4AxQM9t7P9vN+vdYr17OetfZvbV/j/s6znrWWzbIsSwAAAAbycXcBAAAAV4ogAwAAjEWQAQAAxiLIAAAAYxFkAACAsQgyAADAWAQZAABgLIIMAAAwFkEGAAAYiyADGCgqKkqjRo1yy2dPmzZNNpvNLZ99tTty5IhsNpsWLVrk7lIAj0GQATzI3r17NXToUEVGRqpWrVpq0qSJ+vbtqxdffNHdpVUrd5z3kiVLNHv27FLtx48f17Rp05SRkVFtn/1rGzZskM1mcyzXXHONmjVrphEjRui7776rks/YvHmzpk2bpjNnzlTJ8QBPQZABPMTmzZvVuXNn7d69W3/60580d+5c/fGPf5SPj4/mzJnj1Hf//v167bXX3FRp1arMeVelSwWZ1NRUlwaZEg888IDefPNNvfrqqxo4cKCWLVummJgYHT9+/Dcfe/PmzUpNTSXIwOvUcHcBAIo9/fTTCgwM1I4dO1SvXj2nbSdPnnRa9/X1dWFl1asy522y/Px81alT55J94uPjNXToUEnS6NGj1bJlSz3wwANavHixUlJSXFEmYBxGZAAPcfjwYbVt27bUj7kkNWzY0Gn913NkFi1aJJvNps8++0wPPPCAQkJCVK9ePd133326cOGCzpw5oxEjRigoKEhBQUGaNGmSLn7xfcnci+eff16zZs1SZGSk/Pz81KNHD+3bt69C9b/11lvq1KmT/Pz8FBwcrDvuuENZWVlVet4ln3PjjTeqdu3aCgoKUvfu3fXJJ584tr/33nsaOHCgwsLC5Ovrq+bNm2v69OkqLCx09OnZs6f++c9/6vvvv3dczomKitKGDRsUExMjqThIlGy7eE7Ktm3bNGDAAAUGBqp27drq0aOHPv/8c6caS+YRff311xo+fLiCgoLUrVu3y34Xv3bzzTdLkjIzMy/Zb926dYqPj1edOnVUr149DR48WN98841TPY888ogkKTo62nFeR44cqXRNgKdhRAbwEJGRkdqyZYv27dundu3aXdExxo8fr9DQUKWmpmrr1q169dVXVa9ePW3evFlNmzbVM888o48++kgzZ85Uu3btNGLECKf933jjDZ09e1ZJSUn6+eefNWfOHN18883au3evGjVqVO7nPv3003riiSd0++23649//KNOnTqlF198Ud27d9eXX35ZZki5kvNOTU3VtGnT1KVLFz355JOqWbOmtm3bpnXr1qlfv36SikNd3bp1lZycrLp162rdunWaMmWK8vLyNHPmTEnSY489ptzcXB09elSzZs2SJNWtW1etW7fWk08+qSlTpujee+9VfHy8JKlLly6SigNDQkKCOnXqpKlTp8rHx0cLFy7UzTffrE2bNunGG290qvf3v/+9WrRooWeeecYpOFbU4cOHJUn169cvt8+nn36qhIQENWvWTNOmTdO///1vvfjii+ratat27dqlqKgoJSYm6sCBA3r77bc1a9YsNWjQQJIUEhJS6ZoAj2MB8AiffPKJZbfbLbvdbsXFxVmTJk2yPv74Y+vChQul+kZGRlojR450rC9cuNCSZPXv398qKipytMfFxVk2m826//77HW3/93//Z4WHh1s9evRwtGVmZlqSLD8/P+vo0aOO9m3btlmSrIceesjRNnXqVOvifzqOHDli2e126+mnn3aqce/evVaNGjVKtV/peR88eNDy8fGxbr31VquwsNBp28XnfP78+VKfcd9991m1a9e2fv75Z0fbwIEDrcjIyFJ9d+zYYUmyFi5cWOozWrRoUeo7Pn/+vBUdHW317dvX0VbyHQ0bNuyS515i/fr1liTr9ddft06dOmUdP37c+uc//2lFRUVZNpvN2rFjh2VZ//l7uri2jh07Wg0bNrROnz7taNu9e7fl4+NjjRgxwtE2c+ZMS5KVmZlZoZoAU3BpCfAQffv21ZYtW/Tf//3f2r17t5577jn1799fTZo00fvvv1+hY4wZM8bp1ujY2FhZlqUxY8Y42ux2uzp37lzm3TBDhgxRkyZNHOs33nijYmNj9dFHH5X7mWlpaSoqKtLtt9+uH3/80bGEhoaqRYsWWr9+fZWc98qVK1VUVKQpU6bIx8f5n66Lz9nPz8/x57Nnz+rHH39UfHy8zp8/r2+//faStVxKRkaGDh48qOHDh+v06dOO88zPz1fv3r21ceNGFRUVOe1z//33V+oz7rnnHoWEhCgsLEwDBw5Ufn6+Fi9erM6dO5fZPzs7WxkZGRo1apSCg4Md7e3bt1ffvn0v+fcGeAsuLQEeJCYmRmlpabpw4YJ2796tFStWaNasWRo6dKgyMjLUpk2bS+7ftGlTp/XAwEBJUkRERKn2n376qdT+LVq0KNXWsmVLvfPOO+V+5sGDB2VZVpn7StI111xzyZqlip334cOH5ePjc9nv4KuvvtLjjz+udevWKS8vz2lbbm7uZWspz8GDByVJI0eOLLdPbm6ugoKCHOvR0dGV+owpU6YoPj5edrtdDRo0UOvWrVWjRvn/TH///feSpOuuu67UttatW+vjjz+u0CRjwGQEGcAD1axZUzExMYqJiVHLli01evRovfvuu5o6deol97Pb7RVut65gzkZZioqKZLPZtGrVqjI/p27duhU+1pWed4kzZ86oR48eCggI0JNPPqnmzZurVq1a2rVrlyZPnlxqxKQySvadOXOmOnbsWGafX5/rxaNDFXH99derT58+V1QfcLUiyAAeruSyQnZ2drV/Vsmow8UOHDigqKiocvdp3ry5LMtSdHS0WrZsWWW1/Pq8mzdvrqKiIn399dflBokNGzbo9OnTSktLU/fu3R3tZd31U97Tictrb968uSQpICDAY8JGZGSkpOLnCv3at99+qwYNGjhGY3gaM7wVc2QAD7F+/foyR0lK5jmUdfmgqq1cuVLHjh1zrG/fvl3btm1TQkJCufskJibKbrcrNTW1VP2WZen06dOX/MyKnveQIUPk4+OjJ598stTISsn+JSNCFx/vwoULeumll0odv06dOmVeair54f/1g+M6deqk5s2b6/nnn9e5c+dK7Xfq1Klyz7G6NG7cWB07dtTixYud6t23b58++eQT3XLLLY628s4LMB0jMoCHGD9+vM6fP69bb71VrVq10oULF7R582YtW7ZMUVFRGj16dLXXcO2116pbt24aO3asCgoKNHv2bNWvX1+TJk0qd5/mzZvrqaeeUkpKio4cOaIhQ4bI399fmZmZWrFihe69915NnDix3P0ret7XXnutHnvsMU2fPl3x8fFKTEyUr6+vduzYobCwMM2YMUNdunRRUFCQRo4cqQceeEA2m01vvvlmmUGp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zMxMHT169LL916xZo/z8fN1yyy2SpAYNGqhv3756/fXXnfrFxcVp4sSJmj59uh5++GF169at3GOOHTtWS5cuVceOHTVp0iRt3rz5t50UAJcjyABwuc2bN2vWrFn68MMPdeONN2rMmDG63H0HCxYs0L/+9S/5+fmpRo0aqlGjhj766CMtXrxYRUVFjn5FRUX6/PPPZbfbdejQoUseMyEhQd9//70eeughHT9+XL1799bEiROr5BwBuAZBBoBLnT9/XqNGjdLYsWPVq1cvLViwQNu3b9fLL79c7j6nT592TArOyMhwLF9++aV++uknffLJJ46+M2fO1Lfffqv09HStXr36spN3Q0JCNHLkSL311luaPXu2Xn311So7VwDVjzkyAFwqJSVFlmXp2WeflVQ8L+X555/XxIkTlZCQUOY8lTfffFP169fX7bffLpvN5rTtlltu0YIFCzRgwAB9+eWXmjJlipYvX66uXbvqhRde0IMPPqgePXqoWbNmpY47ZcoUderUSW3btlVBQYE+/PBDtW7dulrOG0D1YEQGgMukp6dr3rx5WrhwoWrXru1ov++++9SlS5dyLzG9/vrruvXWW0uFGEm67bbb9P777+vo0aO66667NGrUKA0aNEiSdO+996pXr166++67VVhYWGrfmjVrKiUlRe3bt1f37t1lt9u1dOnSKjxjANWNB+IBAABjMSIDAACMRZABAADGIsgAAABjEWQAAICxCDIAAMBYBBkAAGAsggwAADAWQQYAABiLIAMAAIxFkAEAAMYiyAAAAGMRZAAAgLH+H7iJgd/9o7otAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -1501,7 +1525,7 @@ "# Add labels and title\n", "plt.xlabel('X Axis')\n", "plt.ylabel('Y Axis')\n", - "plt.title('Simple Line Plot')\n", + "plt.title('Simple Scatter Plot')\n", "\n", "# Show the plot\n", "plt.show()\n" @@ -1509,7 +1533,7 @@ }, { "cell_type": "code", - "execution_count": 122, + "execution_count": 212, "id": "b0a7a95f", "metadata": {}, "outputs": [ @@ -1543,7 +1567,7 @@ }, { "cell_type": "code", - "execution_count": 123, + "execution_count": 213, "id": "713cbe61", "metadata": {}, "outputs": [ @@ -1586,7 +1610,7 @@ }, { "cell_type": "code", - "execution_count": 124, + "execution_count": 214, "id": "0ef952bd", "metadata": {}, "outputs": [ @@ -1634,7 +1658,7 @@ }, { "cell_type": "code", - "execution_count": 125, + "execution_count": 215, "id": "5afe68f8", "metadata": {}, "outputs": [ @@ -1667,7 +1691,7 @@ }, { "cell_type": "code", - "execution_count": 126, + "execution_count": 216, "id": "a1c381ad", "metadata": {}, "outputs": [ @@ -1703,7 +1727,7 @@ }, { "cell_type": "code", - "execution_count": 127, + "execution_count": 217, "id": "5085fc72", "metadata": {}, "outputs": [ @@ -1743,7 +1767,7 @@ }, { "cell_type": "code", - "execution_count": 128, + "execution_count": 218, "id": "37870aa6", "metadata": {}, "outputs": [ diff --git a/CYFI445/lectures/01_linear_regression_concept/1_plot_linear_regression.ipynb b/CYFI445/lectures/01_linear_regression_concept/1_plot_linear_regression.ipynb index d2411cf..d5a3379 100644 --- a/CYFI445/lectures/01_linear_regression_concept/1_plot_linear_regression.ipynb +++ b/CYFI445/lectures/01_linear_regression_concept/1_plot_linear_regression.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 1, "id": "08a3e0d1", "metadata": {}, "outputs": [ @@ -65,7 +65,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 2, "id": "76e04a69", "metadata": {}, "outputs": [ @@ -90,12 +90,32 @@ "metadata": {}, "source": [ "#### Calcuate Mean Squared Error when slope range between [-5, 9.05] with 0.05 inteval\n", - "- w to reprsent the slope" + "- w to reprsent the slope\n", + "\n", + "\n", + "$$\n", + "\\begin{bmatrix}-5 & -5 & -5 & -5 \\\\\n", + "-4.95 & -4.95 & -4.95 & -4.95 \\\\\n", + "-4.9 & -4.9 & -4.9 & -4.9 \n", + "\\end{bmatrix}\n", + "\\times\n", + "\\begin{bmatrix}\n", + "1 & 2 & 3 & 4 \\\\\n", + "1 & 2 & 3 & 4\\\\\n", + "1 & 2 & 3 & 4\n", + "\\end{bmatrix}\n", + "=\n", + "\\begin{bmatrix}\n", + "1 \\cdot -5 & 2 \\cdot -5 & 3 \\cdot -5 & 4 \\cdot -5\\\\\n", + "1 \\cdot -4.95 & 2 \\cdot -4.95 & 3 \\cdot -4.95 & 4 \\cdot -4.95\\\\\n", + "1 \\cdot -4.9 & 2 \\cdot -4.9 & 3 \\cdot -4.9 & 4 \\cdot -4.9\n", + "\\end{bmatrix}\n", + "$$" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "34821a6b", "metadata": {}, "outputs": [ @@ -119,12 +139,12 @@ "Y = np.array([2.3, 3.4, 6.5, 6.8], dtype=np.float32)\n", "\n", "# Generate weights from -5 to 5\n", - "w_values = np.arange(-5, 9.05, 0.05)\n", + "w_values = np.arange(-5, 9.05, 0.05) # 281 values (281,)\n", "\n", "# Calculate MSE for each weight\n", - "y_preds = w_values[:, np.newaxis] * X\n", - "errors = Y - y_preds\n", - "mse_values = np.mean(errors**2, axis=1)\n", + "y_preds = w_values[:, np.newaxis] * X # (281,1) *(4) = (281,1) * (1,4) = (281,4)\n", + "errors = Y - y_preds # (281,4) = (4) - (281,4) = (1,4) - (281,4) \n", + "mse_values = np.mean(errors**2, axis=1) # (281,) mean over columns\n", "\n", "# Find optimal weight\n", "min_idx = np.argmin(mse_values)\n", @@ -144,6 +164,27 @@ "plt.show()\n" ] }, + { + "cell_type": "code", + "execution_count": 8, + "id": "1870d1e3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(281, 4)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_preds.shape" + ] + }, { "cell_type": "markdown", "id": "4c4f352e", @@ -154,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "id": "39d1d373", "metadata": {}, "outputs": [ diff --git a/CYFI445/lectures/01_linear_regression_concept/linear_regression.pptx b/CYFI445/lectures/01_linear_regression_concept/linear_regression.pptx index 7f3a4b4..3a9091f 100644 Binary files a/CYFI445/lectures/01_linear_regression_concept/linear_regression.pptx and b/CYFI445/lectures/01_linear_regression_concept/linear_regression.pptx differ diff --git a/CYFI445/lectures/02_linear_regression_gradient_np/compute_gradient.pptx b/CYFI445/lectures/02_linear_regression_gradient_np/compute_gradient.pptx index 45d61b4..126b9fb 100644 Binary files a/CYFI445/lectures/02_linear_regression_gradient_np/compute_gradient.pptx and b/CYFI445/lectures/02_linear_regression_gradient_np/compute_gradient.pptx differ diff --git a/CYFI445/lectures/03_linear_regressioin_autogradient/0_pytorch_fundamentals_A.ipynb b/CYFI445/lectures/03_linear_regressioin_autogradient/0_pytorch_fundamentals_A.ipynb index 966b321..e14d111 100644 --- a/CYFI445/lectures/03_linear_regressioin_autogradient/0_pytorch_fundamentals_A.ipynb +++ b/CYFI445/lectures/03_linear_regressioin_autogradient/0_pytorch_fundamentals_A.ipynb @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 68, "id": "739c5173", "metadata": {}, "outputs": [ @@ -23,7 +23,7 @@ "'2.6.0+cu126'" ] }, - "execution_count": 43, + "execution_count": 68, "metadata": {}, "output_type": "execute_result" } @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 69, "id": "0e82be1e", "metadata": {}, "outputs": [ @@ -55,7 +55,7 @@ "tensor(5)" ] }, - "execution_count": 44, + "execution_count": 69, "metadata": {}, "output_type": "execute_result" } @@ -68,7 +68,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 70, "id": "7c239759", "metadata": {}, "outputs": [ @@ -78,7 +78,7 @@ "0" ] }, - "execution_count": 45, + "execution_count": 70, "metadata": {}, "output_type": "execute_result" } @@ -98,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 71, "id": "d176548d", "metadata": {}, "outputs": [ @@ -108,7 +108,7 @@ "torch.Size([])" ] }, - "execution_count": 46, + "execution_count": 71, "metadata": {}, "output_type": "execute_result" } @@ -119,7 +119,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 72, "id": "07e03145", "metadata": {}, "outputs": [ @@ -129,7 +129,7 @@ "5" ] }, - "execution_count": 47, + "execution_count": 72, "metadata": {}, "output_type": "execute_result" } @@ -140,7 +140,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 73, "id": "41fcc46e", "metadata": {}, "outputs": [ @@ -150,7 +150,7 @@ "tensor([1, 2, 3])" ] }, - "execution_count": 48, + "execution_count": 73, "metadata": {}, "output_type": "execute_result" } @@ -163,7 +163,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 74, "id": "f9894c37", "metadata": {}, "outputs": [ @@ -173,7 +173,7 @@ "1" ] }, - "execution_count": 49, + "execution_count": 74, "metadata": {}, "output_type": "execute_result" } @@ -184,7 +184,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 75, "id": "7dc166eb", "metadata": {}, "outputs": [ @@ -194,7 +194,7 @@ "torch.Size([3])" ] }, - "execution_count": 50, + "execution_count": 75, "metadata": {}, "output_type": "execute_result" } @@ -206,7 +206,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 76, "id": "2581817b", "metadata": {}, "outputs": [ @@ -217,7 +217,7 @@ " [ 9, 10]])" ] }, - "execution_count": 51, + "execution_count": 76, "metadata": {}, "output_type": "execute_result" } @@ -231,7 +231,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 77, "id": "46961042", "metadata": {}, "outputs": [ @@ -241,7 +241,7 @@ "2" ] }, - "execution_count": 52, + "execution_count": 77, "metadata": {}, "output_type": "execute_result" } @@ -252,7 +252,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 78, "id": "9669fda8", "metadata": {}, "outputs": [ @@ -262,18 +262,20 @@ "torch.Size([2, 2])" ] }, - "execution_count": 53, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "MATRIX.shape" + "MATRIX.shape\n", + "\n", + "# torch.Size is a subclass of Python’s tuple" ] }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 79, "id": "15297945", "metadata": {}, "outputs": [ @@ -285,7 +287,7 @@ " [2, 4, 5]]])" ] }, - "execution_count": 54, + "execution_count": 79, "metadata": {}, "output_type": "execute_result" } @@ -300,7 +302,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 80, "id": "5bbed071", "metadata": {}, "outputs": [ @@ -310,7 +312,7 @@ "3" ] }, - "execution_count": 55, + "execution_count": 80, "metadata": {}, "output_type": "execute_result" } @@ -321,7 +323,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 81, "id": "483d25c7", "metadata": {}, "outputs": [ @@ -331,7 +333,7 @@ "torch.Size([1, 3, 3])" ] }, - "execution_count": 56, + "execution_count": 81, "metadata": {}, "output_type": "execute_result" } @@ -342,7 +344,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 82, "id": "c4e76ef2", "metadata": {}, "outputs": [ @@ -352,7 +354,7 @@ "torch.Size([1, 3, 3])" ] }, - "execution_count": 57, + "execution_count": 82, "metadata": {}, "output_type": "execute_result" } @@ -363,7 +365,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 83, "id": "b56abf50", "metadata": {}, "outputs": [ @@ -375,7 +377,7 @@ " [6, 9]])" ] }, - "execution_count": 58, + "execution_count": 83, "metadata": {}, "output_type": "execute_result" } @@ -387,7 +389,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 84, "id": "cdd39ae8", "metadata": {}, "outputs": [ @@ -402,7 +404,7 @@ " [9]])" ] }, - "execution_count": 59, + "execution_count": 84, "metadata": {}, "output_type": "execute_result" } @@ -414,7 +416,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 85, "id": "adf1ab41", "metadata": {}, "outputs": [ @@ -426,7 +428,7 @@ " [2., 4., 5.]]])" ] }, - "execution_count": 60, + "execution_count": 85, "metadata": {}, "output_type": "execute_result" } @@ -441,7 +443,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 86, "id": "a368079f", "metadata": {}, "outputs": [ @@ -451,7 +453,7 @@ "torch.float32" ] }, - "execution_count": 61, + "execution_count": 86, "metadata": {}, "output_type": "execute_result" } @@ -462,20 +464,20 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 87, "id": "4d00ea95", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(tensor([[0.1741, 0.5130],\n", - " [0.5667, 0.7953]]),\n", - " tensor([[0.0304, 0.4022],\n", - " [0.2714, 0.4571]]))" + "(tensor([[0.3659, 0.3998],\n", + " [0.5739, 0.9143]]),\n", + " tensor([[0.8399, 0.0195],\n", + " [0.4555, 0.4751]]))" ] }, - "execution_count": 62, + "execution_count": 87, "metadata": {}, "output_type": "execute_result" } @@ -496,7 +498,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 88, "id": "2a2b9503", "metadata": {}, "outputs": [ @@ -508,20 +510,20 @@ " [3]])" ] }, - "execution_count": 63, + "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# dds a new dimension at the last position (-1 means \"last axis\")\n", + "# adds a new dimension at the last position (-1 means \"last axis\")\n", "# → shape changes from (3,) to (3, 1)\n", "torch.tensor([1, 2, 3]).unsqueeze(-1) " ] }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 89, "id": "0410ff02", "metadata": {}, "outputs": [ @@ -531,7 +533,7 @@ "tensor([[1, 2, 3]])" ] }, - "execution_count": 64, + "execution_count": 89, "metadata": {}, "output_type": "execute_result" } @@ -543,7 +545,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 90, "id": "59a98657", "metadata": {}, "outputs": [ @@ -553,7 +555,7 @@ "tensor([1, 2, 3])" ] }, - "execution_count": 65, + "execution_count": 90, "metadata": {}, "output_type": "execute_result" } @@ -566,7 +568,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 91, "id": "0abe9f66", "metadata": {}, "outputs": [ @@ -576,7 +578,7 @@ "tensor([1, 2, 3])" ] }, - "execution_count": 66, + "execution_count": 91, "metadata": {}, "output_type": "execute_result" } @@ -600,7 +602,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 92, "id": "9033f667", "metadata": {}, "outputs": [ @@ -636,7 +638,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 93, "id": "aeed7a0a", "metadata": {}, "outputs": [ @@ -646,7 +648,7 @@ "tensor([1, 2])" ] }, - "execution_count": 68, + "execution_count": 93, "metadata": {}, "output_type": "execute_result" } @@ -658,7 +660,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 94, "id": "721ce7eb", "metadata": {}, "outputs": [ @@ -668,7 +670,7 @@ "tensor([1, 2])" ] }, - "execution_count": 69, + "execution_count": 94, "metadata": {}, "output_type": "execute_result" } @@ -680,7 +682,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 95, "id": "6423f4d2", "metadata": {}, "outputs": [ @@ -690,7 +692,7 @@ "tensor(6)" ] }, - "execution_count": 70, + "execution_count": 95, "metadata": {}, "output_type": "execute_result" } @@ -702,7 +704,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 96, "id": "0125386f", "metadata": {}, "outputs": [ @@ -712,7 +714,7 @@ "tensor([3, 4, 5, 6])" ] }, - "execution_count": 71, + "execution_count": 96, "metadata": {}, "output_type": "execute_result" } @@ -724,7 +726,7 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 97, "id": "97373387", "metadata": {}, "outputs": [ @@ -735,7 +737,7 @@ " [4, 5]])" ] }, - "execution_count": 72, + "execution_count": 97, "metadata": {}, "output_type": "execute_result" } @@ -755,7 +757,7 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 98, "id": "bba6b1b4", "metadata": {}, "outputs": [ @@ -765,7 +767,7 @@ "tensor([4, 5, 6])" ] }, - "execution_count": 73, + "execution_count": 98, "metadata": {}, "output_type": "execute_result" } @@ -777,7 +779,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 99, "id": "12a96c84", "metadata": {}, "outputs": [ @@ -787,7 +789,7 @@ "tensor([3, 6, 9])" ] }, - "execution_count": 74, + "execution_count": 99, "metadata": {}, "output_type": "execute_result" } @@ -799,7 +801,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 100, "id": "a0f73c88", "metadata": {}, "outputs": [ @@ -809,7 +811,7 @@ "tensor([[5, 6]])" ] }, - "execution_count": 75, + "execution_count": 100, "metadata": {}, "output_type": "execute_result" } @@ -826,7 +828,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 101, "id": "485c115b", "metadata": {}, "outputs": [ @@ -859,6 +861,7 @@ "- torch.cat — Concatenate along an existing dimension\n", "- Think: Extend an axis (like adding more rows to a table).\n", "- Requirement: Tensors must have the same shape in all dimensions except the one you're concatenating along.\n", + "- There is an error in the figure\n", "\n", "![Cat](https://user-images.githubusercontent.com/111734605/235976058-d23f9b75-401c-4547-9e17-6655f3baf957.png)\n", "\n", @@ -871,7 +874,7 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 102, "id": "8de8b40d", "metadata": {}, "outputs": [ @@ -884,7 +887,7 @@ " [10, 11, 12]])" ] }, - "execution_count": 77, + "execution_count": 102, "metadata": {}, "output_type": "execute_result" } @@ -900,7 +903,7 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 103, "id": "7febf2dd", "metadata": {}, "outputs": [ @@ -911,7 +914,7 @@ " [ 4, 5, 6, 10, 11, 12]])" ] }, - "execution_count": 78, + "execution_count": 103, "metadata": {}, "output_type": "execute_result" } @@ -920,9 +923,33 @@ "torch.cat([a, b], dim = 1)" ] }, + { + "cell_type": "markdown", + "id": "8c52760e", + "metadata": {}, + "source": [ + "torch.stack(tensors, dim=0)\n", + "- tensors: Sequence of tensors to stack (must have the same shape)\n", + "- dim: Dimension along which to stack (default: 0)\n", + "\n", + "dim=0: Stack entire tensors (creates batches)\n", + "- torch.stack([a, b], dim=0) # Shape: [2, 2, 3]\n", + "- [tensor_a, tensor_b] - whole tensors stacked\n", + "\n", + "dim=1: Stack rows within each position\n", + "- torch.stack([a, b], dim=1) # Shape: [2, 2, 3] \n", + "- For each original row position, stack corresponding rows\n", + "\n", + "dim=2: Stack elements within each position \n", + "- torch.stack([a, b], dim=2) # Shape: [2, 3, 2]\n", + "- For each original element position, stack corresponding elements\n", + "\n", + "![Cat](https://i-blog.csdnimg.cn/blog_migrate/5a2e52f150092645baf4b56ee682c0f1.png)" + ] + }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 104, "id": "a4e5163b", "metadata": {}, "outputs": [ @@ -936,7 +963,7 @@ " [10, 11, 12]]])" ] }, - "execution_count": 79, + "execution_count": 104, "metadata": {}, "output_type": "execute_result" } @@ -948,12 +975,13 @@ "b = torch.tensor([[7, 8, 9],\n", " [10, 11, 12]])\n", "\n", - "torch.stack([a, b], dim = 0)" + "torch.stack([a, b], dim = 0)\n", + "# shape changes from (2, 3) to (2, 2, 3)" ] }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 105, "id": "ecdbf141", "metadata": {}, "outputs": [ @@ -967,7 +995,7 @@ " [10, 11, 12]]])" ] }, - "execution_count": 80, + "execution_count": 105, "metadata": {}, "output_type": "execute_result" } @@ -975,12 +1003,13 @@ "source": [ "# each pair of rows (from a and b) are grouped side by side along dimension 1.\n", "# This stacks the tensors along a new dimension (dim=0).\n", + "# shape changes from (2, 3) to (2, 2, 3)\n", "torch.stack([a, b], dim = 1)" ] }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 106, "id": "21e03bc6", "metadata": {}, "outputs": [ @@ -996,13 +1025,14 @@ " [ 6, 12]]])" ] }, - "execution_count": 81, + "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# This stacks along dim=2 — the last dimension, meaning the numbers from a and b are paired elementwise.\n", + "# This stacks along dim=2 — the last dimension, meaning the numbers from a and b are paired elementwise.\\\n", + "# shape changes from (2, 3) to (2, 3, 2)\n", "torch.stack([a, b], dim = 2)" ] }, @@ -1016,7 +1046,7 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 107, "id": "da5391eb", "metadata": {}, "outputs": [ @@ -1026,7 +1056,7 @@ "tensor([False, False, True, True])" ] }, - "execution_count": 82, + "execution_count": 107, "metadata": {}, "output_type": "execute_result" } @@ -1039,7 +1069,7 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 108, "id": "78ed8e4b", "metadata": {}, "outputs": [ @@ -1049,7 +1079,7 @@ "tensor(2)" ] }, - "execution_count": 83, + "execution_count": 108, "metadata": {}, "output_type": "execute_result" } @@ -1061,7 +1091,7 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 109, "id": "4698dc38", "metadata": {}, "outputs": [ @@ -1071,7 +1101,7 @@ "tensor(6)" ] }, - "execution_count": 84, + "execution_count": 109, "metadata": {}, "output_type": "execute_result" } @@ -1082,7 +1112,7 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 110, "id": "cfa1dcae", "metadata": {}, "outputs": [ @@ -1092,7 +1122,7 @@ "tensor(6)" ] }, - "execution_count": 85, + "execution_count": 110, "metadata": {}, "output_type": "execute_result" } @@ -1104,7 +1134,7 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 111, "id": "f27ae72f", "metadata": {}, "outputs": [ @@ -1114,7 +1144,7 @@ "tensor(3)" ] }, - "execution_count": 86, + "execution_count": 111, "metadata": {}, "output_type": "execute_result" } @@ -1126,7 +1156,7 @@ }, { "cell_type": "code", - "execution_count": 87, + "execution_count": 112, "id": "e10312d5", "metadata": {}, "outputs": [], @@ -1138,7 +1168,7 @@ }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 113, "id": "7f887d49", "metadata": {}, "outputs": [ @@ -1148,7 +1178,7 @@ "tensor([2.5000, 3.2000])" ] }, - "execution_count": 88, + "execution_count": 113, "metadata": {}, "output_type": "execute_result" } @@ -1159,7 +1189,7 @@ }, { "cell_type": "code", - "execution_count": 89, + "execution_count": 114, "id": "600af54b", "metadata": {}, "outputs": [ @@ -1169,7 +1199,7 @@ "tensor([0, 1])" ] }, - "execution_count": 89, + "execution_count": 114, "metadata": {}, "output_type": "execute_result" } @@ -1180,7 +1210,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 115, "id": "f4ce3e53", "metadata": {}, "outputs": [ @@ -1190,7 +1220,7 @@ "tensor([2., 5.])" ] }, - "execution_count": 90, + "execution_count": 115, "metadata": {}, "output_type": "execute_result" } @@ -1211,7 +1241,7 @@ }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 116, "id": "45267f2f", "metadata": {}, "outputs": [ @@ -1224,7 +1254,7 @@ " [7, 8]]))" ] }, - "execution_count": 91, + "execution_count": 116, "metadata": {}, "output_type": "execute_result" } @@ -1239,7 +1269,7 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 117, "id": "193a7828", "metadata": {}, "outputs": [ @@ -1250,7 +1280,7 @@ " [10, 12]])" ] }, - "execution_count": 92, + "execution_count": 117, "metadata": {}, "output_type": "execute_result" } @@ -1261,7 +1291,7 @@ }, { "cell_type": "code", - "execution_count": 93, + "execution_count": 118, "id": "1ce81689", "metadata": {}, "outputs": [ @@ -1272,7 +1302,7 @@ " [21, 32]])" ] }, - "execution_count": 93, + "execution_count": 118, "metadata": {}, "output_type": "execute_result" } @@ -1284,7 +1314,7 @@ }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 119, "id": "62f8cde3", "metadata": {}, "outputs": [ @@ -1294,7 +1324,7 @@ "tensor([11, 12, 13])" ] }, - "execution_count": 94, + "execution_count": 119, "metadata": {}, "output_type": "execute_result" } @@ -1309,7 +1339,7 @@ }, { "cell_type": "code", - "execution_count": 95, + "execution_count": 120, "id": "2098ad78", "metadata": {}, "outputs": [ @@ -1320,7 +1350,7 @@ " [4, 5, 6]])" ] }, - "execution_count": 95, + "execution_count": 120, "metadata": {}, "output_type": "execute_result" } @@ -1333,7 +1363,7 @@ }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 121, "id": "883321f8", "metadata": {}, "outputs": [ @@ -1345,7 +1375,7 @@ " [5, 6]])" ] }, - "execution_count": 96, + "execution_count": 121, "metadata": {}, "output_type": "execute_result" } @@ -1356,7 +1386,7 @@ }, { "cell_type": "code", - "execution_count": 97, + "execution_count": 122, "id": "9ceace9b", "metadata": {}, "outputs": [ @@ -1366,7 +1396,7 @@ "tensor([False, True, True, False, True, False])" ] }, - "execution_count": 97, + "execution_count": 122, "metadata": {}, "output_type": "execute_result" } @@ -1378,7 +1408,7 @@ }, { "cell_type": "code", - "execution_count": 98, + "execution_count": 123, "id": "96ea0d2f", "metadata": {}, "outputs": [ @@ -1388,7 +1418,7 @@ "tensor([ True, False, True, True, False, False])" ] }, - "execution_count": 98, + "execution_count": 123, "metadata": {}, "output_type": "execute_result" } @@ -1400,7 +1430,7 @@ }, { "cell_type": "code", - "execution_count": 99, + "execution_count": 124, "id": "c1d9f060", "metadata": {}, "outputs": [ @@ -1410,7 +1440,7 @@ "tensor([False, False, True, False, False, False])" ] }, - "execution_count": 99, + "execution_count": 124, "metadata": {}, "output_type": "execute_result" } @@ -1421,7 +1451,7 @@ }, { "cell_type": "code", - "execution_count": 100, + "execution_count": 125, "id": "796d977f", "metadata": {}, "outputs": [ @@ -1431,7 +1461,7 @@ "tensor(1)" ] }, - "execution_count": 100, + "execution_count": 125, "metadata": {}, "output_type": "execute_result" } @@ -1442,7 +1472,7 @@ }, { "cell_type": "code", - "execution_count": 101, + "execution_count": 126, "id": "60402427", "metadata": {}, "outputs": [ @@ -1452,7 +1482,7 @@ "tensor(1)" ] }, - "execution_count": 101, + "execution_count": 126, "metadata": {}, "output_type": "execute_result" } @@ -1475,7 +1505,7 @@ }, { "cell_type": "code", - "execution_count": 102, + "execution_count": 127, "id": "2a3fd4ae", "metadata": {}, "outputs": [ @@ -1485,7 +1515,7 @@ "tensor([1, 2, 3])" ] }, - "execution_count": 102, + "execution_count": 127, "metadata": {}, "output_type": "execute_result" } @@ -1498,7 +1528,7 @@ }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 128, "id": "df247bd3", "metadata": {}, "outputs": [ @@ -1508,7 +1538,7 @@ "array([1, 2, 3])" ] }, - "execution_count": 103, + "execution_count": 128, "metadata": {}, "output_type": "execute_result" } @@ -1520,7 +1550,7 @@ }, { "cell_type": "code", - "execution_count": 104, + "execution_count": 129, "id": "9ada07ab", "metadata": {}, "outputs": [ @@ -1530,7 +1560,7 @@ "tensor([1, 2, 3])" ] }, - "execution_count": 104, + "execution_count": 129, "metadata": {}, "output_type": "execute_result" } @@ -1550,7 +1580,7 @@ }, { "cell_type": "code", - "execution_count": 105, + "execution_count": 130, "id": "30c9ea9f", "metadata": {}, "outputs": [ @@ -1560,7 +1590,7 @@ "True" ] }, - "execution_count": 105, + "execution_count": 130, "metadata": {}, "output_type": "execute_result" } @@ -1573,7 +1603,7 @@ }, { "cell_type": "code", - "execution_count": 106, + "execution_count": 131, "id": "dd523b3e", "metadata": {}, "outputs": [ @@ -1583,7 +1613,7 @@ "'cuda'" ] }, - "execution_count": 106, + "execution_count": 131, "metadata": {}, "output_type": "execute_result" } @@ -1596,7 +1626,7 @@ }, { "cell_type": "code", - "execution_count": 107, + "execution_count": 132, "id": "11d1a029", "metadata": {}, "outputs": [ @@ -1613,7 +1643,7 @@ "tensor([1, 2, 3], device='cuda:0')" ] }, - "execution_count": 107, + "execution_count": 132, "metadata": {}, "output_type": "execute_result" } @@ -1632,7 +1662,7 @@ }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 133, "id": "db5249d0", "metadata": {}, "outputs": [ @@ -1640,7 +1670,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\Weife\\AppData\\Local\\Temp\\ipykernel_87744\\3540074575.py:6: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", + "C:\\Users\\Weife\\AppData\\Local\\Temp\\ipykernel_39016\\3540074575.py:6: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", " y = torch.tensor(x, device=device) # directly create a tensor on GPU\n" ] } diff --git a/CYFI445/lectures/03_linear_regressioin_autogradient/compute_autogradient.pptx b/CYFI445/lectures/03_linear_regressioin_autogradient/compute_autogradient.pptx index d7d17c5..4d40e52 100644 Binary files a/CYFI445/lectures/03_linear_regressioin_autogradient/compute_autogradient.pptx and b/CYFI445/lectures/03_linear_regressioin_autogradient/compute_autogradient.pptx differ