|
11 | 11 | "cell_type": "markdown",
|
12 | 12 | "metadata": {},
|
13 | 13 | "source": [
|
14 |
| - "First, we implement a gradient descent algorithm for reference" |
| 14 | + "First, we implement a gradient descent algorithm for reference, using numpy only" |
15 | 15 | ]
|
16 | 16 | },
|
17 | 17 | {
|
|
52 | 52 | "#y = np.array([9.14, 8.14, 8.74, 8.77, 9.26, 8.10, 6.13, 3.10, 9.13, 7.26, 4.74])\n",
|
53 | 53 | "x = np.array([10., 8., 13., 9., 11., 14., 6., 4., 12., 7., 5.])\n",
|
54 | 54 | "N = len(x)\n",
|
| 55 | + "\n", |
| 56 | + "# Design matrix\n", |
55 | 57 | "A = np.vstack((np.ones(N), x)).T\n",
|
56 | 58 | "\n",
|
| 59 | + "# Learning rate\n", |
57 | 60 | "eta = 0.01\n",
|
58 | 61 | " \n",
|
| 62 | + "# initial parameters\n", |
59 | 63 | "w = np.array([2., 1.])\n",
|
| 64 | + "\n", |
60 | 65 | "for epoch in range(10):\n",
|
| 66 | + " # Error\n", |
61 | 67 | " err = y-A.dot(w)\n",
|
| 68 | + " \n", |
| 69 | + " # Total error\n", |
62 | 70 | " E = np.sum(err**2)/N\n",
|
| 71 | + " \n", |
| 72 | + " # Gradient\n", |
63 | 73 | " dE = -2.*A.T.dot(err)/N\n",
|
64 | 74 | " \n",
|
65 | 75 | " if epoch%1 == 0: \n",
|
66 | 76 | " print(epoch,':',E)\n",
|
67 | 77 | " # print(w) \n",
|
68 |
| - " \n", |
| 78 | + "\n", |
| 79 | + " # Perfom one descent step\n", |
69 | 80 | " w = w - eta*dE"
|
70 | 81 | ]
|
71 | 82 | },
|
|
149 | 160 | "cell_type": "markdown",
|
150 | 161 | "metadata": {},
|
151 | 162 | "source": [
|
152 |
| - "## Implementation in pyTorch" |
| 163 | + "## Implementation in pyTorch\n", |
| 164 | + "\n", |
| 165 | + "### Fitting a line" |
153 | 166 | ]
|
154 | 167 | },
|
155 | 168 | {
|
|
198 | 211 | "# Set w_0\n",
|
199 | 212 | "f.bias.data = torch.FloatTensor([[2.]])\n",
|
200 | 213 | "\n",
|
201 |
| - "#print(f.weight.data)\n", |
202 |
| - "#print(f.bias.data)\n", |
203 |
| - "#u = f(Variable(x))\n", |
204 |
| - "#E = torch.nn.functional.mse_loss(u, Variable(y))\n", |
205 |
| - "#E\n", |
206 |
| - "\n", |
207 | 214 | "# learning rate\n",
|
208 | 215 | "eta = 0.01\n",
|
209 | 216 | "\n",
|
|
234 | 241 | "#print(f.weight.data, f.bias.data)"
|
235 | 242 | ]
|
236 | 243 | },
|
| 244 | + { |
| 245 | + "cell_type": "markdown", |
| 246 | + "metadata": {}, |
| 247 | + "source": [ |
| 248 | + "### Fitting a polynomial" |
| 249 | + ] |
| 250 | + }, |
237 | 251 | {
|
238 | 252 | "cell_type": "code",
|
239 | 253 | "execution_count": 204,
|
|
476 | 490 | "nbconvert_exporter": "python",
|
477 | 491 | "pygments_lexer": "ipython3",
|
478 | 492 | "version": "3.6.1"
|
| 493 | + }, |
| 494 | + "latex_envs": { |
| 495 | + "LaTeX_envs_menu_present": true, |
| 496 | + "autocomplete": true, |
| 497 | + "bibliofile": "biblio.bib", |
| 498 | + "cite_by": "apalike", |
| 499 | + "current_citInitial": 1, |
| 500 | + "eqLabelWithNumbers": true, |
| 501 | + "eqNumInitial": 1, |
| 502 | + "hotkeys": { |
| 503 | + "equation": "Ctrl-E", |
| 504 | + "itemize": "Ctrl-I" |
| 505 | + }, |
| 506 | + "labels_anchors": false, |
| 507 | + "latex_user_defs": false, |
| 508 | + "report_style_numbering": false, |
| 509 | + "user_envs_cfg": false |
479 | 510 | }
|
480 | 511 | },
|
481 | 512 | "nbformat": 4,
|
|
0 commit comments