├── LICENSE
├── Notebook
├── Section 1 - Introduction to PyTorch-v2-soln.ipynb
├── Section 1 - Introduction to PyTorch-v2.ipynb
├── Section 2 - Feedforward Neural Network_v2c.ipynb
├── Section 3 - Practical Aspects of Building Deep Learning Models-v3.ipynb
├── Section 3 - Practical Aspects of Building Deep Learning Models-v3_soln.ipynb
├── Section 4 - CNN Example.ipynb
├── Section 5 - RNN and NLP - Car Example v3b.ipynb
├── Section 5 - RNN and NLP v2-experiment2.ipynb
├── Section 6 - RNN for TSA Example - v2.ipynb
└── data
│ ├── section5
│ ├── cache
│ │ ├── testing.csv
│ │ └── training.csv
│ └── car_review.csv
│ └── section6
│ ├── series1_Xtrain.csv
│ └── series1_ytrain.csv
└── README.md
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Packt
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Notebook/Section 3 - Practical Aspects of Building Deep Learning Models-v3.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "
\n",
8 | "
Section 3 \n",
9 | " \n",
10 | " Practical Aspects of Building Deep Learning Models \n",
11 | ""
12 | ]
13 | },
14 | {
15 | "cell_type": "markdown",
16 | "metadata": {},
17 | "source": [
18 | "**In this example, we will illustrate the comparison between training and validation losses and regularization techniques using dropout and L2-norm regularization.**"
19 | ]
20 | },
21 | {
22 | "cell_type": "markdown",
23 | "metadata": {},
24 | "source": [
25 | "\n",
26 | "
"
27 | ]
28 | },
29 | {
30 | "cell_type": "markdown",
31 | "metadata": {},
32 | "source": [
33 | "# Notations for Regularization"
34 | ]
35 | },
36 | {
37 | "cell_type": "markdown",
38 | "metadata": {
39 | "ExecuteTime": {
40 | "end_time": "2019-04-06T15:09:37.958331Z",
41 | "start_time": "2019-04-06T15:09:37.950241Z"
42 | }
43 | },
44 | "source": [
45 | "Regularized objective function:\n",
46 | "\n",
47 | "$ C = C_0 + \\text{Penalty Term} $\n",
48 | "\n",
49 | "where $C_0$ is the unregularized objective function\n",
50 | "\n",
51 | "$L^2$ norm penalty term typically take the form of $ \\frac{1}{2} ||w||^2_2 $"
52 | ]
53 | },
54 | {
55 | "cell_type": "markdown",
56 | "metadata": {},
57 | "source": [
58 | "### Equation by equation"
59 | ]
60 | },
61 | {
62 | "cell_type": "markdown",
63 | "metadata": {},
64 | "source": [
65 | "**Inputs to hidden layer 1**\n",
66 | "\n",
67 | "$z_1(\\mathbf{x}; \\mathbf{w_1},b_1) = \\sum_{j=1}^4 w_{1,j}^{(1)} x_j + b_1^{(1)}$\n",
68 | "\n",
69 | "\n",
70 | "$z_2(\\mathbf{x}; \\mathbf{w_2},b_2) = \\sum_{j=1}^4 w_{2,j}^{(1)} x_j + b_2^{(1)}$\n",
71 | "\n",
72 | "$\\vdots$\n",
73 | "\n",
74 | "$z_6(\\mathbf{x}; \\mathbf{w_6},b_6) = \\sum_{j=1}^4 w_{6,j}^{(1)} x_j + b_6^{(1)}$\n",
75 | "\n",
76 | "where $j=1,2,3,4$ (in this example) is the index for the inputs\n",
77 | "\n",
78 | "$h_k(\\mathbf{x}; \\mathbf{w_k},b_k) = g_1(z_k)$ where $k=1,2,\\dots,6$ is the index for the hidden units\n",
79 | "\n",
80 | "\n",
81 | "**Hidden layer 1 to output**\n",
82 | "\n",
83 | "$y_1 = g_2 \\left( \\sum_{k=1}^6 w_{1,k}^{(2)} + b_1^{(2)} \\right)$\n",
84 | "\n",
85 | "$y_2 = g_2 \\left( \\sum_{k=1}^6 w_{2,k}^{(2)} + b_2^{(2)} \\right)$"
86 | ]
87 | },
88 | {
89 | "cell_type": "markdown",
90 | "metadata": {},
91 | "source": [
92 | "### Sequential layerwise architecture"
93 | ]
94 | },
95 | {
96 | "cell_type": "markdown",
97 | "metadata": {},
98 | "source": [
99 | "First layer:\n",
100 | "$$ \\mathbf{h}^{(1)} = g^{(1)} \\left(\\mathbf{W}^{(1)} \\mathbf{x} + \\mathbf{b}^{(1)} \\right) $$\n",
101 | "\n",
102 | "Second layer:\n",
103 | "$$ \\mathbf{h}^{(2)} = g^{(2)} \\left(\\mathbf{W}^{(2)T} \\mathbf{h}^{(1)} + \\mathbf{b}^{(2)} \\right) $$\n",
104 | "\n",
105 | "\n",
106 | "\n",
107 | "$\\vdots$\n",
108 | "\n",
109 | "\n",
110 | "$l^{th}$ layer:\n",
111 | "$$ \\mathbf{h}^{(l)} = g^{(l)} \\left(\\mathbf{W}^{(l)T} \\mathbf{h}^{(l-1)} + \\mathbf{b}^{(l)} \\right) $$\n",
112 | "\n"
113 | ]
114 | },
115 | {
116 | "cell_type": "markdown",
117 | "metadata": {},
118 | "source": [
119 | "\n",
120 | "
"
121 | ]
122 | },
123 | {
124 | "cell_type": "markdown",
125 | "metadata": {},
126 | "source": [
127 | "# Example 1: Feedforward Network Without Regularization"
128 | ]
129 | },
130 | {
131 | "cell_type": "markdown",
132 | "metadata": {},
133 | "source": [
134 | "## Simulate and Visualize Data"
135 | ]
136 | },
137 | {
138 | "cell_type": "markdown",
139 | "metadata": {},
140 | "source": [
141 | "The output is related to the input using the following function\n",
142 | "\n",
143 | "$$y_i = 3x_{i,1} + x^2 exp(x_{i,1}) + \\epsilon_i$$\n",
144 | "\n",
145 | "where $\\epsilon$ is an independently and identically distributed (i.i.d.) random variable and $i = 1,2,\\dots,n$ is an index of examples (or observations)"
146 | ]
147 | },
148 | {
149 | "cell_type": "code",
150 | "execution_count": null,
151 | "metadata": {
152 | "ExecuteTime": {
153 | "end_time": "2019-04-11T03:10:45.835205Z",
154 | "start_time": "2019-04-11T03:10:43.675905Z"
155 | }
156 | },
157 | "outputs": [],
158 | "source": [
159 | "import numpy as np\n",
160 | "import pandas as pd\n",
161 | "import matplotlib.pyplot as plt\n",
162 | "import seaborn as sns\n",
163 | "%matplotlib inline\n",
164 | "\n",
165 | "n = 200 # number of examples (or observations)\n",
166 | "\n",
167 | "# Generate a set of n random numbers from a standard normal distribution\n",
168 | "epsilon = np.random.randn(n)\n",
169 | "\n",
170 | "# Generate a set of n random numbers from a uniform[0,1] distribution; name it x1\n",
171 | "# and create another variable, which we name x2, from x1\n",
172 | "x1 = np.random.uniform(0,1,n)\n",
173 | "x2 = 1. / (1. + np.exp(-np.power(x1,3))) + 0.5*epsilon\n",
174 | "x3 = np.random.randn(n)\n",
175 | "\n",
176 | "X = pd.DataFrame({'x1':x1, 'x2':x2})\n",
177 | "\n",
178 | "# Create the data generating mechanism\n",
179 | "y = 3*x1 + np.power(x1,2)*np.exp(x1) + 0.8*x2 + 0.5*x3 + epsilon"
180 | ]
181 | },
182 | {
183 | "cell_type": "markdown",
184 | "metadata": {},
185 | "source": [
186 | "## Split the data into a Training and Validation Set"
187 | ]
188 | },
189 | {
190 | "cell_type": "code",
191 | "execution_count": null,
192 | "metadata": {
193 | "ExecuteTime": {
194 | "end_time": "2019-04-11T03:10:45.897007Z",
195 | "start_time": "2019-04-11T03:10:45.837374Z"
196 | }
197 | },
198 | "outputs": [],
199 | "source": [
200 | "from sklearn.model_selection import train_test_split\n",
201 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.5)"
202 | ]
203 | },
204 | {
205 | "cell_type": "markdown",
206 | "metadata": {},
207 | "source": [
208 | "### Basic Descriptive Analysis"
209 | ]
210 | },
211 | {
212 | "cell_type": "code",
213 | "execution_count": null,
214 | "metadata": {
215 | "ExecuteTime": {
216 | "end_time": "2019-04-11T03:10:45.938411Z",
217 | "start_time": "2019-04-11T03:10:45.899566Z"
218 | }
219 | },
220 | "outputs": [],
221 | "source": [
222 | "print(X_train.describe().T.round(4), \"\\n\")\n",
223 | "print(pd.DataFrame({'y':y_train}).describe().T.round(4))"
224 | ]
225 | },
226 | {
227 | "cell_type": "code",
228 | "execution_count": null,
229 | "metadata": {
230 | "ExecuteTime": {
231 | "end_time": "2019-04-11T03:10:45.954432Z",
232 | "start_time": "2019-04-11T03:10:45.940933Z"
233 | }
234 | },
235 | "outputs": [],
236 | "source": [
237 | "# Correlation between x1 and x2 in the training set\n",
238 | "np.corrcoef(X_train.iloc[:,0], X_train.iloc[:,1])[0][1].round(2)"
239 | ]
240 | },
241 | {
242 | "cell_type": "code",
243 | "execution_count": null,
244 | "metadata": {
245 | "ExecuteTime": {
246 | "end_time": "2019-04-11T03:10:46.989883Z",
247 | "start_time": "2019-04-11T03:10:45.957582Z"
248 | }
249 | },
250 | "outputs": [],
251 | "source": [
252 | "fig = plt.figure(figsize=(15,10))\n",
253 | "\n",
254 | "plt.subplot(3, 3, 1)\n",
255 | "plt.hist(y_train)\n",
256 | "plt.title(\"y (Training Set)\")\n",
257 | "\n",
258 | "plt.subplot(3, 3, 2)\n",
259 | "plt.scatter(X_train.iloc[:,0], y_train)\n",
260 | "plt.title(\"y vs x1 (Training Set)\")\n",
261 | "\n",
262 | "plt.subplot(3, 3, 3)\n",
263 | "plt.scatter(X_train.iloc[:,1], y_train)\n",
264 | "plt.title(\"y vs x2 (Training Set)\")\n",
265 | "\n",
266 | "plt.subplot(3, 3, 5)\n",
267 | "plt.hist(X_train.iloc[:,0])\n",
268 | "plt.title(\"x1 (Training Set)\")\n",
269 | "\n",
270 | "plt.subplot(3, 3, 6)\n",
271 | "plt.scatter(X_train.iloc[:,0], X_train.iloc[:,1])\n",
272 | "plt.title(\"x2 vs x1 (Training Set)\")\n",
273 | "\n",
274 | "plt.subplot(3, 3, 9)\n",
275 | "plt.hist(X_train.iloc[:,1])\n",
276 | "plt.title(\"x2 (Training Set)\")\n",
277 | "\n",
278 | "plt.tight_layout()"
279 | ]
280 | },
281 | {
282 | "cell_type": "markdown",
283 | "metadata": {},
284 | "source": [
285 | "\n",
286 | "Note: Before training, `numpy array` and `pandas dataframe` need to be converted to `PyTorch's tensors`\n",
287 | "
"
288 | ]
289 | },
290 | {
291 | "cell_type": "code",
292 | "execution_count": null,
293 | "metadata": {
294 | "ExecuteTime": {
295 | "end_time": "2019-04-11T03:10:47.223917Z",
296 | "start_time": "2019-04-11T03:10:46.992792Z"
297 | }
298 | },
299 | "outputs": [],
300 | "source": [
301 | "# convert numpy array to tensor in shape of input size\n",
302 | "import torch \n",
303 | "\n",
304 | "X_train_ts = torch.from_numpy(X_train.values.reshape(-1,2)).float()\n",
305 | "y_train_ts = torch.from_numpy(y_train.reshape(-1,1)).float()\n",
306 | "\n",
307 | "X_test_ts = torch.from_numpy(X_test.values.reshape(-1,2)).float()\n",
308 | "y_test_ts = torch.from_numpy(y_test.reshape(-1,1)).float() # y_test is a numpy array"
309 | ]
310 | },
311 | {
312 | "cell_type": "code",
313 | "execution_count": null,
314 | "metadata": {
315 | "ExecuteTime": {
316 | "end_time": "2019-04-11T03:10:47.234580Z",
317 | "start_time": "2019-04-11T03:10:47.226455Z"
318 | }
319 | },
320 | "outputs": [],
321 | "source": [
322 | "print(\"X_train_ts is of %s type\" %type(X_train_ts))\n",
323 | "print(\"y_train_ts is of %s type\" %type(y_train_ts))\n",
324 | "print(\"X_test_ts is of %s type\" %type(X_test_ts))\n",
325 | "print(\"y_test_ts is of %s type\" %type(y_test_ts))"
326 | ]
327 | },
328 | {
329 | "cell_type": "code",
330 | "execution_count": null,
331 | "metadata": {
332 | "ExecuteTime": {
333 | "end_time": "2019-04-11T03:10:47.250339Z",
334 | "start_time": "2019-04-11T03:10:47.237666Z"
335 | }
336 | },
337 | "outputs": [],
338 | "source": [
339 | "print(X_train_ts.shape)\n",
340 | "print(y_train_ts.shape)\n",
341 | "print(X_test_ts.shape)\n",
342 | "print(y_test_ts.shape)"
343 | ]
344 | },
345 | {
346 | "cell_type": "code",
347 | "execution_count": null,
348 | "metadata": {
349 | "ExecuteTime": {
350 | "end_time": "2019-04-11T03:10:47.265520Z",
351 | "start_time": "2019-04-11T03:10:47.254969Z"
352 | }
353 | },
354 | "outputs": [],
355 | "source": [
356 | "# First 5 rows of tensor X\n",
357 | "print(\"First 5 rows of tensor X_train_ts\", \"\\n\", X_train_ts[:5], \"\\n\")\n",
358 | "print(\"First 5 rows of tensor y_train_ts\", \"\\n\", y_train_ts[:5], \"\\n\")"
359 | ]
360 | },
361 | {
362 | "cell_type": "markdown",
363 | "metadata": {},
364 | "source": [
365 | "## Define a Feed-forward network with 1 hidden layers"
366 | ]
367 | },
368 | {
369 | "cell_type": "code",
370 | "execution_count": null,
371 | "metadata": {
372 | "ExecuteTime": {
373 | "end_time": "2019-04-11T03:10:47.277111Z",
374 | "start_time": "2019-04-11T03:10:47.268471Z"
375 | }
376 | },
377 | "outputs": [],
378 | "source": [
379 | "# Let's confirm the dimensions of the inputs and outpu\n",
380 | "print(\"train_size: \", len(X_train_ts), \"\\n\")\n",
381 | "print(\"X shape:\", X_train_ts.shape, \"\\n\")\n",
382 | "print(\"y shape:\", y_train_ts.shape, \"\\n\")\n",
383 | "print(X_train_ts.shape[1])"
384 | ]
385 | },
386 | {
387 | "cell_type": "code",
388 | "execution_count": null,
389 | "metadata": {
390 | "ExecuteTime": {
391 | "end_time": "2019-04-11T03:10:47.290824Z",
392 | "start_time": "2019-04-11T03:10:47.279901Z"
393 | }
394 | },
395 | "outputs": [],
396 | "source": [
397 | "from __future__ import print_function\n",
398 | "\n",
399 | "import torch\n",
400 | "import torch.nn as nn\n",
401 | "import torch.nn.functional as F\n",
402 | "from torch.autograd import Variable\n",
403 | "\n",
404 | "class ffNet(nn.Module):\n",
405 | " \"\"\"\n",
406 | " D_in: input dimension\n",
407 | " D_h1: dimension of hidden layer 1\n",
408 | " D_out: output dimension\n",
409 | " \"\"\"\n",
410 | " \n",
411 | " def __init__(self, D_in, D_h1, D_h2, D_out):\n",
412 | " super(ffNet, self).__init__()\n",
413 | " self.linear1 = torch.nn.Linear(D_in, D_h1)\n",
414 | " self.linear2 = torch.nn.Linear(D_h1, D_out)\n",
415 | "\n",
416 | " def forward(self, x):\n",
417 | " h1 = F.relu(self.linear1(x))\n",
418 | " y_pred = self.linear2(h1)\n",
419 | " return y_pred"
420 | ]
421 | },
422 | {
423 | "cell_type": "markdown",
424 | "metadata": {},
425 | "source": [
426 | "## Construct the model by instantiating the class defined above"
427 | ]
428 | },
429 | {
430 | "cell_type": "code",
431 | "execution_count": null,
432 | "metadata": {
433 | "ExecuteTime": {
434 | "end_time": "2019-04-11T03:10:47.299700Z",
435 | "start_time": "2019-04-11T03:10:47.293785Z"
436 | }
437 | },
438 | "outputs": [],
439 | "source": [
440 | "X_train.shape[1]"
441 | ]
442 | },
443 | {
444 | "cell_type": "code",
445 | "execution_count": null,
446 | "metadata": {
447 | "ExecuteTime": {
448 | "end_time": "2019-04-11T03:10:47.310647Z",
449 | "start_time": "2019-04-11T03:10:47.303388Z"
450 | }
451 | },
452 | "outputs": [],
453 | "source": [
454 | "# Construct the model by instantiating the class defined above\n",
455 | "D_in = X_train.shape[1]\n",
456 | "D_h1, D_h2 = 8,4\n",
457 | "D_out = 1\n",
458 | "\n",
459 | "ffnet = ffNet(D_in, D_h1, D_h2, D_out)\n",
460 | "print(ffnet)"
461 | ]
462 | },
463 | {
464 | "cell_type": "markdown",
465 | "metadata": {},
466 | "source": [
467 | "## Define loss function and optimization algorithm"
468 | ]
469 | },
470 | {
471 | "cell_type": "code",
472 | "execution_count": null,
473 | "metadata": {
474 | "ExecuteTime": {
475 | "end_time": "2019-04-11T03:10:47.318512Z",
476 | "start_time": "2019-04-11T03:10:47.313929Z"
477 | }
478 | },
479 | "outputs": [],
480 | "source": [
481 | "# Define Optimizer and Loss Function\n",
482 | "\n",
483 | "optimizer = torch.optim.SGD(ffnet.parameters(), lr=0.01)\n",
484 | "\n",
485 | "loss_func = torch.nn.MSELoss()"
486 | ]
487 | },
488 | {
489 | "cell_type": "markdown",
490 | "metadata": {},
491 | "source": [
492 | "## Model Training"
493 | ]
494 | },
495 | {
496 | "cell_type": "code",
497 | "execution_count": null,
498 | "metadata": {
499 | "ExecuteTime": {
500 | "end_time": "2019-04-11T03:10:49.535855Z",
501 | "start_time": "2019-04-11T03:10:47.321226Z"
502 | },
503 | "scrolled": false
504 | },
505 | "outputs": [],
506 | "source": [
507 | "X_data = X_train_ts\n",
508 | "y_data = y_train_ts\n",
509 | "\n",
510 | "X_data_val = X_test_ts\n",
511 | "y_data_val = y_test_ts\n",
512 | "\n",
513 | "n_epoch = 500\n",
514 | "\n",
515 | "train_loss, val_loss = [],[]\n",
516 | "\n",
517 | "for epoch in range(1, n_epoch + 1):\n",
518 | " y_pred = ffnet(X_data) \n",
519 | " epoch_loss_train = loss_func(y_pred, y_data) \n",
520 | " \n",
521 | " y_pred_val = ffnet(X_data_val)\n",
522 | " epoch_loss_val = loss_func(y_pred_val, y_data_val) \n",
523 | " \n",
524 | " optimizer.zero_grad()\n",
525 | " epoch_loss_train.backward() \n",
526 | " optimizer.step() \n",
527 | " \n",
528 | " train_loss.append(epoch_loss_train)\n",
529 | " val_loss.append(epoch_loss_val)\n",
530 | " \n",
531 | " #if epoch <= 5 or epoch % 100 == 0:\n",
532 | " if epoch % 100 == 0:\n",
533 | " print('Epoch {}, Training loss {}, Validation loss {}'.format(epoch, round(float(epoch_loss_train),4), round(float(epoch_loss_val),4)))\n",
534 | " \n",
535 | " #plt.cla()\n",
536 | " \n",
537 | " fig = plt.figure(figsize=(16,6))\n",
538 | " plt.subplot(1, 2, 1)\n",
539 | " plt.scatter(X_train.iloc[:,0], y_train, label=\"actual\")\n",
540 | " plt.scatter(X_train.iloc[:,0], y_pred.detach().numpy(), label=\"prediction\")\n",
541 | " plt.title(\"Training\")\n",
542 | " plt.legend()\n",
543 | "\n",
544 | " plt.subplot(1, 2, 2)\n",
545 | " plt.scatter(X_test.iloc[:,0], y_test, label=\"actual\")\n",
546 | " plt.scatter(X_test.iloc[:,0], y_pred_val.detach().numpy(),label=\"prediction\")\n",
547 | " plt.title(\"Validation\")\n",
548 | " plt.legend()\n",
549 | " \n",
550 | " #plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 10, 'color': 'red'})\n",
551 | " #plt.pause(0.1)\n",
552 | "\n",
553 | " plt.show()"
554 | ]
555 | },
556 | {
557 | "cell_type": "markdown",
558 | "metadata": {},
559 | "source": [
560 | "## Plot loss curves"
561 | ]
562 | },
563 | {
564 | "cell_type": "code",
565 | "execution_count": null,
566 | "metadata": {
567 | "ExecuteTime": {
568 | "end_time": "2019-04-11T03:10:49.847213Z",
569 | "start_time": "2019-04-11T03:10:49.538950Z"
570 | }
571 | },
572 | "outputs": [],
573 | "source": [
574 | "fig = plt.figure(figsize=(12,8))\n",
575 | "plt.plot(range(1,len(train_loss)+1),train_loss,'b',label = 'training loss')\n",
576 | "plt.plot(range(1,len(val_loss)+1),val_loss,'g',label = 'validation loss')\n",
577 | "plt.legend()\n",
578 | "plt.title(\"Training and Validation Loss Curves\")"
579 | ]
580 | },
581 | {
582 | "cell_type": "markdown",
583 | "metadata": {},
584 | "source": [
585 | "# Example 2: Feedforward Network With a Dropout Layer"
586 | ]
587 | },
588 | {
589 | "cell_type": "code",
590 | "execution_count": null,
591 | "metadata": {
592 | "ExecuteTime": {
593 | "end_time": "2019-04-11T03:10:49.862640Z",
594 | "start_time": "2019-04-11T03:10:49.850775Z"
595 | }
596 | },
597 | "outputs": [],
598 | "source": [
599 | "from __future__ import print_function\n",
600 | "\n",
601 | "import torch\n",
602 | "import torch.nn as nn\n",
603 | "import torch.nn.functional as F\n",
604 | "from torch.autograd import Variable\n",
605 | "\n",
606 | "class ffNet(nn.Module):\n",
607 | " \"\"\"\n",
608 | " D_in: input dimension\n",
609 | " D_h1: dimension of hidden layer 1\n",
610 | " D_out: output dimension\n",
611 | " \"\"\"\n",
612 | " \n",
613 | " def __init__(self, D_in, D_h1, D_h2, D_out):\n",
614 | " super(ffNet, self).__init__()\n",
615 | " self.linear1 = torch.nn.Linear(D_in, D_h1)\n",
616 | " self.linear1_drop = torch.nn.Dropout(p=0.8)\n",
617 | " self.linear2 = torch.nn.Linear(D_h1, D_out)\n",
618 | "\n",
619 | " def forward(self, x):\n",
620 | " h1 = F.relu(self.linear1(x))\n",
621 | " y_pred = self.linear2(h1)\n",
622 | " return y_pred"
623 | ]
624 | },
625 | {
626 | "cell_type": "markdown",
627 | "metadata": {},
628 | "source": [
629 | "## Construct the model by instantiating the class defined above"
630 | ]
631 | },
632 | {
633 | "cell_type": "code",
634 | "execution_count": null,
635 | "metadata": {
636 | "ExecuteTime": {
637 | "end_time": "2019-04-11T03:10:49.875428Z",
638 | "start_time": "2019-04-11T03:10:49.866520Z"
639 | }
640 | },
641 | "outputs": [],
642 | "source": [
643 | "# Construct the model by instantiating the class defined above\n",
644 | "D_in = X_train.shape[1]\n",
645 | "D_h1, D_h2 = 8,4\n",
646 | "D_out = 1\n",
647 | "\n",
648 | "ffnet = ffNet(D_in, D_h1, D_h2, D_out)\n",
649 | "print(ffnet)"
650 | ]
651 | },
652 | {
653 | "cell_type": "markdown",
654 | "metadata": {},
655 | "source": [
656 | "## Define loss function and optimization algorithm"
657 | ]
658 | },
659 | {
660 | "cell_type": "code",
661 | "execution_count": null,
662 | "metadata": {
663 | "ExecuteTime": {
664 | "end_time": "2019-04-11T03:10:49.884274Z",
665 | "start_time": "2019-04-11T03:10:49.878488Z"
666 | }
667 | },
668 | "outputs": [],
669 | "source": [
670 | "# Define Optimizer and Loss Function\n",
671 | "\n",
672 | "#optimizer = torch.optim.SGD(ffnet.parameters(), lr=0.01, weight_decay=1e-4)\n",
673 | "optimizer = torch.optim.SGD(ffnet.parameters(), lr=0.01)\n",
674 | "\n",
675 | "loss_func = torch.nn.MSELoss()"
676 | ]
677 | },
678 | {
679 | "cell_type": "markdown",
680 | "metadata": {},
681 | "source": [
682 | "## Model Training"
683 | ]
684 | },
685 | {
686 | "cell_type": "code",
687 | "execution_count": null,
688 | "metadata": {
689 | "ExecuteTime": {
690 | "end_time": "2019-04-11T03:10:52.557954Z",
691 | "start_time": "2019-04-11T03:10:49.889285Z"
692 | },
693 | "scrolled": false
694 | },
695 | "outputs": [],
696 | "source": [
697 | "X_data = X_train_ts\n",
698 | "y_data = y_train_ts\n",
699 | "\n",
700 | "X_data_val = X_test_ts\n",
701 | "y_data_val = y_test_ts\n",
702 | "\n",
703 | "n_epoch = 500\n",
704 | "\n",
705 | "train_loss, val_loss = [],[]\n",
706 | "\n",
707 | "for epoch in range(1, n_epoch + 1):\n",
708 | " y_pred = ffnet(X_data) \n",
709 | " epoch_loss_train = loss_func(y_pred, y_data) \n",
710 | " \n",
711 | " y_pred_val = ffnet(X_data_val)\n",
712 | " epoch_loss_val = loss_func(y_pred_val, y_data_val) \n",
713 | " \n",
714 | " optimizer.zero_grad()\n",
715 | " epoch_loss_train.backward() \n",
716 | " optimizer.step() \n",
717 | " \n",
718 | " train_loss.append(epoch_loss_train)\n",
719 | " val_loss.append(epoch_loss_val)\n",
720 | " \n",
721 | " #if epoch <= 5 or epoch % 100 == 0:\n",
722 | " if epoch % 100 == 0:\n",
723 | " print('Epoch {}, Training loss {}, Validation loss {}'.format(epoch, round(float(epoch_loss_train),4), round(float(epoch_loss_val),4)))\n",
724 | " \n",
725 | " #plt.cla()\n",
726 | " \n",
727 | " fig = plt.figure(figsize=(16,6))\n",
728 | " plt.subplot(1, 2, 1)\n",
729 | " plt.scatter(X_train.iloc[:,0], y_train, label=\"actual\")\n",
730 | " plt.scatter(X_train.iloc[:,0], y_pred.detach().numpy(), label=\"prediction\")\n",
731 | " plt.title(\"Training\")\n",
732 | " plt.legend()\n",
733 | "\n",
734 | " plt.subplot(1, 2, 2)\n",
735 | " plt.scatter(X_test.iloc[:,0], y_test, label=\"actual\")\n",
736 | " plt.scatter(X_test.iloc[:,0], y_pred_val.detach().numpy(),label=\"prediction\")\n",
737 | " plt.title(\"Validation\")\n",
738 | " plt.legend()\n",
739 | " \n",
740 | " #plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 10, 'color': 'red'})\n",
741 | " #plt.pause(0.1)\n",
742 | "\n",
743 | " plt.show()"
744 | ]
745 | },
746 | {
747 | "cell_type": "markdown",
748 | "metadata": {},
749 | "source": [
750 | "## Plot loss curves"
751 | ]
752 | },
753 | {
754 | "cell_type": "code",
755 | "execution_count": null,
756 | "metadata": {
757 | "ExecuteTime": {
758 | "end_time": "2019-04-11T03:10:52.848996Z",
759 | "start_time": "2019-04-11T03:10:52.560684Z"
760 | },
761 | "scrolled": false
762 | },
763 | "outputs": [],
764 | "source": [
765 | "fig = plt.figure(figsize=(12,8))\n",
766 | "plt.plot(range(1,len(train_loss)+1),train_loss,'b',label = 'training loss')\n",
767 | "plt.plot(range(1,len(val_loss)+1),val_loss,'g',label = 'validation loss')\n",
768 | "plt.legend()\n",
769 | "plt.title(\"Training and Validation Loss Curves\")"
770 | ]
771 | },
772 | {
773 | "cell_type": "markdown",
774 | "metadata": {},
775 | "source": [
776 | "# Lab 3"
777 | ]
778 | },
779 | {
780 | "cell_type": "markdown",
781 | "metadata": {},
782 | "source": [
783 | "In this lab, you will replicate the above exercise with a different simulated dataset. \n",
784 | "\n",
785 | " - You will simply run the codes to simulate the data and conduct some descriptive analysis.\n",
786 | "\n",
787 | " - Then, you will design a network, instantiate it, run the training loop, and evaluate the model by plotting computing the loss of the training and validation sets."
788 | ]
789 | },
790 | {
791 | "cell_type": "markdown",
792 | "metadata": {},
793 | "source": [
794 | "## Simulate and Visualize Data"
795 | ]
796 | },
797 | {
798 | "cell_type": "code",
799 | "execution_count": null,
800 | "metadata": {
801 | "ExecuteTime": {
802 | "end_time": "2019-04-11T03:16:46.617514Z",
803 | "start_time": "2019-04-11T03:16:46.602265Z"
804 | }
805 | },
806 | "outputs": [],
807 | "source": [
808 | "import numpy as np\n",
809 | "import pandas as pd\n",
810 | "import matplotlib.pyplot as plt\n",
811 | "import seaborn as sns\n",
812 | "%matplotlib inline\n",
813 | "\n",
814 | "n = 200 # number of examples (or observations)\n",
815 | "\n",
816 | "# Generate a set of n random numbers from a standard normal distribution\n",
817 | "epsilon = np.random.randn(n)\n",
818 | "\n",
819 | "# Generate a set of n random numbers from a uniform[0,1] distribution; name it x1\n",
820 | "# and create another variable, which we name x2, from x1\n",
821 | "x1 = np.random.uniform(0,1,n)\n",
822 | "\n",
823 | "X = pd.DataFrame({'x1':x1})\n",
824 | "\n",
825 | "# Create the data generating mechanism\n",
826 | "y = 1.5*x1 + np.power(x1,3)*np.exp(x1) + epsilon"
827 | ]
828 | },
829 | {
830 | "cell_type": "markdown",
831 | "metadata": {},
832 | "source": [
833 | "## Split the data into a Training and Validation Set"
834 | ]
835 | },
836 | {
837 | "cell_type": "code",
838 | "execution_count": null,
839 | "metadata": {
840 | "ExecuteTime": {
841 | "end_time": "2019-04-11T03:16:54.276737Z",
842 | "start_time": "2019-04-11T03:16:54.271811Z"
843 | }
844 | },
845 | "outputs": [],
846 | "source": [
847 | "from sklearn.model_selection import train_test_split\n",
848 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.5)"
849 | ]
850 | },
851 | {
852 | "cell_type": "markdown",
853 | "metadata": {},
854 | "source": [
855 | "### Basic Descriptive Analysis"
856 | ]
857 | },
858 | {
859 | "cell_type": "code",
860 | "execution_count": null,
861 | "metadata": {
862 | "ExecuteTime": {
863 | "end_time": "2019-04-11T03:16:55.938611Z",
864 | "start_time": "2019-04-11T03:16:55.912778Z"
865 | }
866 | },
867 | "outputs": [],
868 | "source": [
869 | "print(X_train.describe().T.round(4), \"\\n\")\n",
870 | "print(pd.DataFrame({'y':y_train}).describe().T.round(4))"
871 | ]
872 | },
873 | {
874 | "cell_type": "code",
875 | "execution_count": null,
876 | "metadata": {
877 | "ExecuteTime": {
878 | "end_time": "2019-04-11T03:18:03.534505Z",
879 | "start_time": "2019-04-11T03:18:02.739133Z"
880 | }
881 | },
882 | "outputs": [],
883 | "source": [
884 | "fig = plt.figure(figsize=(15,10))\n",
885 | "\n",
886 | "plt.subplot(2, 2, 1)\n",
887 | "plt.hist(y_train)\n",
888 | "plt.title(\"y (Training Set)\")\n",
889 | "\n",
890 | "plt.subplot(2, 2, 2)\n",
891 | "plt.scatter(X_train.iloc[:,0], y_train)\n",
892 | "plt.title(\"y vs x1 (Training Set)\")\n",
893 | "\n",
894 | "plt.subplot(2, 2, 4)\n",
895 | "plt.hist(X_train.iloc[:,0])\n",
896 | "plt.title(\"x1 (Training Set)\")\n",
897 | "\n",
898 | "plt.tight_layout()"
899 | ]
900 | },
901 | {
902 | "cell_type": "markdown",
903 | "metadata": {},
904 | "source": [
905 | "\n",
906 | "Note: Before training, `numpy array` and `pandas dataframe` need to be converted to `PyTorch's tensors`\n",
907 | "
"
908 | ]
909 | },
910 | {
911 | "cell_type": "code",
912 | "execution_count": null,
913 | "metadata": {
914 | "ExecuteTime": {
915 | "end_time": "2019-04-11T03:19:11.141327Z",
916 | "start_time": "2019-04-11T03:19:11.134477Z"
917 | }
918 | },
919 | "outputs": [],
920 | "source": [
921 | "# convert numpy array to tensor in shape of input size\n",
922 | "import torch \n",
923 | "\n",
924 | "X_train_ts = torch.from_numpy(X_train.values.reshape(-1,1)).float()\n",
925 | "y_train_ts = torch.from_numpy(y_train.reshape(-1,1)).float()\n",
926 | "\n",
927 | "X_test_ts = torch.from_numpy(X_test.values.reshape(-1,1)).float()\n",
928 | "y_test_ts = torch.from_numpy(y_test.reshape(-1,1)).float() # y_test is a numpy array"
929 | ]
930 | },
931 | {
932 | "cell_type": "code",
933 | "execution_count": null,
934 | "metadata": {
935 | "ExecuteTime": {
936 | "end_time": "2019-04-11T03:19:11.587381Z",
937 | "start_time": "2019-04-11T03:19:11.579680Z"
938 | }
939 | },
940 | "outputs": [],
941 | "source": [
942 | "print(\"X_train_ts is of %s type\" %type(X_train_ts))\n",
943 | "print(\"y_train_ts is of %s type\" %type(y_train_ts))\n",
944 | "print(\"X_test_ts is of %s type\" %type(X_test_ts))\n",
945 | "print(\"y_test_ts is of %s type\" %type(y_test_ts))"
946 | ]
947 | },
948 | {
949 | "cell_type": "markdown",
950 | "metadata": {},
951 | "source": [
952 | "**Question: Do the shape of these tensors make sense to you?**"
953 | ]
954 | },
955 | {
956 | "cell_type": "code",
957 | "execution_count": null,
958 | "metadata": {
959 | "ExecuteTime": {
960 | "end_time": "2019-04-11T03:19:12.467957Z",
961 | "start_time": "2019-04-11T03:19:12.461054Z"
962 | }
963 | },
964 | "outputs": [],
965 | "source": [
966 | "print(X_train_ts.shape)\n",
967 | "print(y_train_ts.shape)\n",
968 | "print(X_test_ts.shape)\n",
969 | "print(y_test_ts.shape)"
970 | ]
971 | },
972 | {
973 | "cell_type": "markdown",
974 | "metadata": {},
975 | "source": [
976 | "## Define a Feed-forward network with 1 hidden layers"
977 | ]
978 | },
979 | {
980 | "cell_type": "markdown",
981 | "metadata": {},
982 | "source": [
983 | "**Question: Do the shape in the following tensors confirm your expectation?**"
984 | ]
985 | },
986 | {
987 | "cell_type": "code",
988 | "execution_count": null,
989 | "metadata": {
990 | "ExecuteTime": {
991 | "end_time": "2019-04-11T03:22:37.613546Z",
992 | "start_time": "2019-04-11T03:22:37.605072Z"
993 | }
994 | },
995 | "outputs": [],
996 | "source": [
997 | "# Let's confirm the dimensions of the inputs and outpu\n",
998 | "print(\"train_size: \", len(X_train_ts), \"\\n\")\n",
999 | "print(\"X shape:\", X_train_ts.shape, \"\\n\")\n",
1000 | "print(\"y shape:\", y_train_ts.shape, \"\\n\")\n",
1001 | "print(X_train_ts.shape[1])"
1002 | ]
1003 | },
1004 | {
1005 | "cell_type": "markdown",
1006 | "metadata": {},
1007 | "source": [
1008 | "**Run the following code to design a one hidden-layer feedforward network.**"
1009 | ]
1010 | },
1011 | {
1012 | "cell_type": "code",
1013 | "execution_count": null,
1014 | "metadata": {
1015 | "ExecuteTime": {
1016 | "end_time": "2019-04-11T03:22:51.808779Z",
1017 | "start_time": "2019-04-11T03:22:51.797935Z"
1018 | }
1019 | },
1020 | "outputs": [],
1021 | "source": [
1022 | "from __future__ import print_function\n",
1023 | "\n",
1024 | "import torch\n",
1025 | "import torch.nn as nn\n",
1026 | "import torch.nn.functional as F\n",
1027 | "from torch.autograd import Variable\n",
1028 | "\n",
1029 | "class ffNet(nn.Module):\n",
1030 | " \"\"\"\n",
1031 | " D_in: input dimension\n",
1032 | " D_h1: dimension of hidden layer 1\n",
1033 | " D_out: output dimension\n",
1034 | " \"\"\"\n",
1035 | " \n",
1036 | " def __init__(self, D_in, D_h1, D_out):\n",
1037 | " super(ffNet, self).__init__()\n",
1038 | " self.linear1 = torch.nn.Linear(D_in, D_h1)\n",
1039 | " self.linear2 = torch.nn.Linear(D_h1, D_out)\n",
1040 | "\n",
1041 | " def forward(self, x):\n",
1042 | " h1 = F.relu(self.linear1(x))\n",
1043 | " y_pred = self.linear2(h1)\n",
1044 | " return y_pred"
1045 | ]
1046 | },
1047 | {
1048 | "cell_type": "markdown",
1049 | "metadata": {},
1050 | "source": [
1051 | "## Construct the model by instantiating the class defined above"
1052 | ]
1053 | },
1054 | {
1055 | "cell_type": "code",
1056 | "execution_count": null,
1057 | "metadata": {
1058 | "ExecuteTime": {
1059 | "end_time": "2019-04-11T03:22:57.818421Z",
1060 | "start_time": "2019-04-11T03:22:57.812728Z"
1061 | }
1062 | },
1063 | "outputs": [],
1064 | "source": [
1065 | "X_train.shape[1]"
1066 | ]
1067 | },
1068 | {
1069 | "cell_type": "markdown",
1070 | "metadata": {},
1071 | "source": [
1072 | "**Choose your parameters**"
1073 | ]
1074 | },
1075 | {
1076 | "cell_type": "code",
1077 | "execution_count": null,
1078 | "metadata": {
1079 | "ExecuteTime": {
1080 | "end_time": "2019-04-11T03:23:14.005390Z",
1081 | "start_time": "2019-04-11T03:23:13.998497Z"
1082 | }
1083 | },
1084 | "outputs": [],
1085 | "source": [
1086 | "# Construct the model by instantiating the class defined above\n",
1087 | "D_in = 0 # Replace 0 with your code here\n",
1088 | "D_h1 = 0 # Replace 0 with an integer\n",
1089 | "D_out = 0 # Replace 0 with the dimension of the output\n",
1090 | "\n",
1091 | "ffnet = ffNet(D_in, D_h1, D_out)\n",
1092 | "print(ffnet)"
1093 | ]
1094 | },
1095 | {
1096 | "cell_type": "markdown",
1097 | "metadata": {},
1098 | "source": [
1099 | "## Define loss function and optimization algorithm"
1100 | ]
1101 | },
1102 | {
1103 | "cell_type": "markdown",
1104 | "metadata": {},
1105 | "source": [
1106 | "**You can specify the learning rate if you want.**"
1107 | ]
1108 | },
1109 | {
1110 | "cell_type": "code",
1111 | "execution_count": null,
1112 | "metadata": {
1113 | "ExecuteTime": {
1114 | "end_time": "2019-04-11T03:23:18.073980Z",
1115 | "start_time": "2019-04-11T03:23:18.067792Z"
1116 | }
1117 | },
1118 | "outputs": [],
1119 | "source": [
1120 | "# Define Optimizer and Loss Function\n",
1121 | "\n",
1122 | "learning_rate = 0.01 #You can specify the learning rate\n",
1123 | "\n",
1124 | "optimizer = torch.optim.SGD(ffnet.parameters(), lr=learning_rate)\n",
1125 | "\n",
1126 | "loss_func = torch.nn.MSELoss()"
1127 | ]
1128 | },
1129 | {
1130 | "cell_type": "markdown",
1131 | "metadata": {},
1132 | "source": [
1133 | "## Model Training"
1134 | ]
1135 | },
1136 | {
1137 | "cell_type": "markdown",
1138 | "metadata": {},
1139 | "source": [
1140 | "**1. Choose the number of epochs for your training**\n",
1141 | "**2. Fill in some details in the code below.**"
1142 | ]
1143 | },
1144 | {
1145 | "cell_type": "code",
1146 | "execution_count": null,
1147 | "metadata": {
1148 | "ExecuteTime": {
1149 | "end_time": "2019-04-11T03:23:49.190594Z",
1150 | "start_time": "2019-04-11T03:23:43.707774Z"
1151 | },
1152 | "scrolled": false
1153 | },
1154 | "outputs": [],
1155 | "source": [
1156 | "X_data = X_train_ts\n",
1157 | "y_data = y_train_ts\n",
1158 | "\n",
1159 | "X_data_val = X_test_ts\n",
1160 | "y_data_val = y_test_ts\n",
1161 | "\n",
1162 | "n_epoch = 0 # Choose the number of epochs for your training\n",
1163 | "\n",
1164 | "train_loss, val_loss = [],[]\n",
1165 | "\n",
1166 | "for epoch in range(1, n_epoch + 1):\n",
1167 | " y_pred = ffnet(A) # Fill in the blank by replacing A \n",
1168 | " epoch_loss_train = loss_func(y_pred, y_data) \n",
1169 | " \n",
1170 | " y_pred_val = ffnet(B) # Fill in the blank by replacing B\n",
1171 | " epoch_loss_val = loss_func(C, D) # Fill in the blank by replacing C and D\n",
1172 | " \n",
1173 | " optimizer.zero_grad()\n",
1174 | " epoch_loss_train.backward() \n",
1175 | " optimizer.step() \n",
1176 | " \n",
1177 | " train_loss.append(epoch_loss_train)\n",
1178 | " val_loss.append(epoch_loss_val)\n",
1179 | " \n",
1180 | " #if epoch <= 5 or epoch % 100 == 0:\n",
1181 | " if epoch % 100 == 0:\n",
1182 | " print('Epoch {}, Training loss {}, Validation loss {}'.format(epoch, round(float(epoch_loss_train),4), round(float(epoch_loss_val),4)))\n",
1183 | " \n",
1184 | " fig = plt.figure(figsize=(16,6))\n",
1185 | " plt.subplot(1, 2, 1)\n",
1186 | " plt.scatter(X_train.iloc[:,0], y_train, label=\"actual\")\n",
1187 | " plt.scatter(X_train.iloc[:,0], y_pred.detach().numpy(), label=\"prediction\")\n",
1188 | " plt.title(\"Training\")\n",
1189 | " plt.legend()\n",
1190 | "\n",
1191 | " plt.subplot(1, 2, 2)\n",
1192 | " plt.scatter(X_test.iloc[:,0], y_test, label=\"actual\")\n",
1193 | " plt.scatter(X_test.iloc[:,0], y_pred_val.detach().numpy(),label=\"prediction\")\n",
1194 | " plt.title(\"Validation\")\n",
1195 | " plt.legend()\n",
1196 | " \n",
1197 | " plt.show()"
1198 | ]
1199 | },
1200 | {
1201 | "cell_type": "markdown",
1202 | "metadata": {},
1203 | "source": [
1204 | "## Plot loss curves"
1205 | ]
1206 | },
1207 | {
1208 | "cell_type": "code",
1209 | "execution_count": null,
1210 | "metadata": {
1211 | "ExecuteTime": {
1212 | "end_time": "2019-04-11T03:23:56.504952Z",
1213 | "start_time": "2019-04-11T03:23:56.146179Z"
1214 | }
1215 | },
1216 | "outputs": [],
1217 | "source": [
1218 | "fig = plt.figure(figsize=(12,8))\n",
1219 | "plt.plot(range(1,len(train_loss)+1),train_loss,'b',label = 'training loss')\n",
1220 | "plt.plot(range(1,len(val_loss)+1),val_loss,'g',label = 'validation loss')\n",
1221 | "plt.legend()\n",
1222 | "plt.title(\"Training and Validation Loss Curves\")"
1223 | ]
1224 | },
1225 | {
1226 | "cell_type": "markdown",
1227 | "metadata": {},
1228 | "source": [
1229 | "# Feedforward Network With a Dropout Layer"
1230 | ]
1231 | },
1232 | {
1233 | "cell_type": "markdown",
1234 | "metadata": {},
1235 | "source": [
1236 | "**Specify the dropout layer.**"
1237 | ]
1238 | },
1239 | {
1240 | "cell_type": "code",
1241 | "execution_count": null,
1242 | "metadata": {
1243 | "ExecuteTime": {
1244 | "end_time": "2019-04-11T03:24:32.979044Z",
1245 | "start_time": "2019-04-11T03:24:32.961831Z"
1246 | }
1247 | },
1248 | "outputs": [],
1249 | "source": [
1250 | "from __future__ import print_function\n",
1251 | "\n",
1252 | "import torch\n",
1253 | "import torch.nn as nn\n",
1254 | "import torch.nn.functional as F\n",
1255 | "from torch.autograd import Variable\n",
1256 | "\n",
1257 | "class ffNet(nn.Module):\n",
1258 | " \"\"\"\n",
1259 | " D_in: input dimension\n",
1260 | " D_h1: dimension of hidden layer 1\n",
1261 | " D_out: output dimension\n",
1262 | " \"\"\"\n",
1263 | " \n",
1264 | " def __init__(self, D_in, D_h1, D_out):\n",
1265 | " super(ffNet, self).__init__()\n",
1266 | " self.linear1 = torch.nn.Linear(D_in, D_h1)\n",
1267 | " self.linear1_drop = DROPOUT_LAYER # Specify the dropout layer by replacing DROPOUT_LAYER\n",
1268 | " self.linear2 = torch.nn.Linear(D_h1, D_out)\n",
1269 | "\n",
1270 | " def forward(self, x):\n",
1271 | " h1 = F.relu(self.linear1(x))\n",
1272 | " y_pred = self.linear2(h1)\n",
1273 | " return y_pred"
1274 | ]
1275 | },
1276 | {
1277 | "cell_type": "markdown",
1278 | "metadata": {},
1279 | "source": [
1280 | "## Construct the model by instantiating the class defined above"
1281 | ]
1282 | },
1283 | {
1284 | "cell_type": "markdown",
1285 | "metadata": {},
1286 | "source": [
1287 | "**Specify the dimensions.**"
1288 | ]
1289 | },
1290 | {
1291 | "cell_type": "code",
1292 | "execution_count": null,
1293 | "metadata": {
1294 | "ExecuteTime": {
1295 | "end_time": "2019-04-11T03:24:46.707041Z",
1296 | "start_time": "2019-04-11T03:24:46.700576Z"
1297 | }
1298 | },
1299 | "outputs": [],
1300 | "source": [
1301 | "# Construct the model by instantiating the class defined above\n",
1302 | "D_in = 0 # Specify D_in\n",
1303 | "D_h1 = 0 # Specify D_h1\n",
1304 | "D_out = 0 # Specify D_out\n",
1305 | "\n",
1306 | "ffnet = ffNet(D_in, D_h1, D_out)\n",
1307 | "print(ffnet)"
1308 | ]
1309 | },
1310 | {
1311 | "cell_type": "markdown",
1312 | "metadata": {},
1313 | "source": [
1314 | "## Define loss function and optimization algorithm"
1315 | ]
1316 | },
1317 | {
1318 | "cell_type": "markdown",
1319 | "metadata": {},
1320 | "source": [
1321 | "**Change the learning rate.**"
1322 | ]
1323 | },
1324 | {
1325 | "cell_type": "code",
1326 | "execution_count": null,
1327 | "metadata": {
1328 | "ExecuteTime": {
1329 | "end_time": "2019-04-11T03:24:57.014872Z",
1330 | "start_time": "2019-04-11T03:24:57.009627Z"
1331 | }
1332 | },
1333 | "outputs": [],
1334 | "source": [
1335 | "# Define Optimizer and Loss Function\n",
1336 | "\n",
1337 | "\n",
1338 | "optimizer = torch.optim.SGD(ffnet.parameters(), lr=1e-6) # Change the learning rate \n",
1339 | "\n",
1340 | "loss_func = torch.nn.MSELoss()"
1341 | ]
1342 | },
1343 | {
1344 | "cell_type": "markdown",
1345 | "metadata": {},
1346 | "source": [
1347 | "## Model Training"
1348 | ]
1349 | },
1350 | {
1351 | "cell_type": "code",
1352 | "execution_count": null,
1353 | "metadata": {
1354 | "ExecuteTime": {
1355 | "end_time": "2019-04-11T03:25:11.970793Z",
1356 | "start_time": "2019-04-11T03:25:06.273365Z"
1357 | },
1358 | "scrolled": false
1359 | },
1360 | "outputs": [],
1361 | "source": [
1362 | "X_data = X_train_ts\n",
1363 | "y_data = y_train_ts\n",
1364 | "\n",
1365 | "X_data_val = X_test_ts\n",
1366 | "y_data_val = y_test_ts\n",
1367 | "\n",
1368 | "n_epoch = 1000\n",
1369 | "\n",
1370 | "train_loss, val_loss = [],[]\n",
1371 | "\n",
1372 | "for epoch in range(1, n_epoch + 1):\n",
1373 | " y_pred = ffnet(X_data) \n",
1374 | " epoch_loss_train = loss_func(y_pred, y_data) \n",
1375 | " \n",
1376 | " y_pred_val = ffnet(X_data_val)\n",
1377 | " epoch_loss_val = loss_func(y_pred_val, y_data_val) \n",
1378 | " \n",
1379 | " optimizer.zero_grad()\n",
1380 | " epoch_loss_train.backward() \n",
1381 | " optimizer.step() \n",
1382 | " \n",
1383 | " train_loss.append(epoch_loss_train)\n",
1384 | " val_loss.append(epoch_loss_val)\n",
1385 | " \n",
1386 | " #if epoch <= 5 or epoch % 100 == 0:\n",
1387 | " if epoch % 100 == 0:\n",
1388 | " print('Epoch {}, Training loss {}, Validation loss {}'.format(epoch, round(float(epoch_loss_train),4), round(float(epoch_loss_val),4)))\n",
1389 | " \n",
1390 | " #plt.cla()\n",
1391 | " \n",
1392 | " fig = plt.figure(figsize=(16,6))\n",
1393 | " plt.subplot(1, 2, 1)\n",
1394 | " plt.scatter(X_train.iloc[:,0], y_train, label=\"actual\")\n",
1395 | " plt.scatter(X_train.iloc[:,0], y_pred.detach().numpy(), label=\"prediction\")\n",
1396 | " plt.title(\"Training\")\n",
1397 | " plt.legend()\n",
1398 | "\n",
1399 | " plt.subplot(1, 2, 2)\n",
1400 | " plt.scatter(X_test.iloc[:,0], y_test, label=\"actual\")\n",
1401 | " plt.scatter(X_test.iloc[:,0], y_pred_val.detach().numpy(),label=\"prediction\")\n",
1402 | " plt.title(\"Validation\")\n",
1403 | " plt.legend()\n",
1404 | " \n",
1405 | " #plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 10, 'color': 'red'})\n",
1406 | " #plt.pause(0.1)\n",
1407 | "\n",
1408 | " plt.show()"
1409 | ]
1410 | },
1411 | {
1412 | "cell_type": "markdown",
1413 | "metadata": {},
1414 | "source": [
1415 | "## Plot loss curves"
1416 | ]
1417 | },
1418 | {
1419 | "cell_type": "code",
1420 | "execution_count": null,
1421 | "metadata": {
1422 | "ExecuteTime": {
1423 | "end_time": "2019-04-11T03:25:23.339872Z",
1424 | "start_time": "2019-04-11T03:25:22.998287Z"
1425 | },
1426 | "scrolled": false
1427 | },
1428 | "outputs": [],
1429 | "source": [
1430 | "fig = plt.figure(figsize=(12,8))\n",
1431 | "plt.plot(range(1,len(train_loss)+1),train_loss,'b',label = 'training loss')\n",
1432 | "plt.plot(range(1,len(val_loss)+1),val_loss,'g',label = 'validation loss')\n",
1433 | "plt.legend()\n",
1434 | "plt.title(\"Training and Validation Loss Curves\")"
1435 | ]
1436 | },
1437 | {
1438 | "cell_type": "code",
1439 | "execution_count": null,
1440 | "metadata": {},
1441 | "outputs": [],
1442 | "source": []
1443 | }
1444 | ],
1445 | "metadata": {
1446 | "kernelspec": {
1447 | "display_name": "Python [conda env:dl]",
1448 | "language": "python",
1449 | "name": "conda-env-dl-py"
1450 | },
1451 | "language_info": {
1452 | "codemirror_mode": {
1453 | "name": "ipython",
1454 | "version": 3
1455 | },
1456 | "file_extension": ".py",
1457 | "mimetype": "text/x-python",
1458 | "name": "python",
1459 | "nbconvert_exporter": "python",
1460 | "pygments_lexer": "ipython3",
1461 | "version": "3.6.7"
1462 | },
1463 | "toc": {
1464 | "base_numbering": 1,
1465 | "nav_menu": {},
1466 | "number_sections": true,
1467 | "sideBar": true,
1468 | "skip_h1_title": false,
1469 | "title_cell": "Table of Contents",
1470 | "title_sidebar": "Contents",
1471 | "toc_cell": false,
1472 | "toc_position": {},
1473 | "toc_section_display": true,
1474 | "toc_window_display": false
1475 | },
1476 | "varInspector": {
1477 | "cols": {
1478 | "lenName": 16,
1479 | "lenType": 16,
1480 | "lenVar": 40
1481 | },
1482 | "kernels_config": {
1483 | "python": {
1484 | "delete_cmd_postfix": "",
1485 | "delete_cmd_prefix": "del ",
1486 | "library": "var_list.py",
1487 | "varRefreshCmd": "print(var_dic_list())"
1488 | },
1489 | "r": {
1490 | "delete_cmd_postfix": ") ",
1491 | "delete_cmd_prefix": "rm(",
1492 | "library": "var_list.r",
1493 | "varRefreshCmd": "cat(var_dic_list()) "
1494 | }
1495 | },
1496 | "types_to_exclude": [
1497 | "module",
1498 | "function",
1499 | "builtin_function_or_method",
1500 | "instance",
1501 | "_Feature"
1502 | ],
1503 | "window_display": false
1504 | }
1505 | },
1506 | "nbformat": 4,
1507 | "nbformat_minor": 2
1508 | }
1509 |
--------------------------------------------------------------------------------
/Notebook/Section 4 - CNN Example.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "\n",
8 | "
Section 4 \n",
9 | " \n",
10 | " Image classification Using a Convolutional Neural Retwork in PyTorch \n",
11 | ""
12 | ]
13 | },
14 | {
15 | "cell_type": "markdown",
16 | "metadata": {},
17 | "source": [
18 | "Credit: This example is obtained from the following book:\n",
19 | "\n",
20 | "Subramanian, Vishnu. 2018. \"*Deep Learning with PyTorch: A Practical Approach to Building Neural Network Models Using PyTorch.*\" Birmingham, U.K., Packt Publishing."
21 | ]
22 | },
23 | {
24 | "cell_type": "markdown",
25 | "metadata": {},
26 | "source": [
27 | "# Example 1: Classifying Hand-written Digits"
28 | ]
29 | },
30 | {
31 | "cell_type": "markdown",
32 | "metadata": {},
33 | "source": [
34 | "[The MNIST Database of Handwritten Digits](http://yann.lecun.com/exdb/mnist/)\n",
35 | "\n",
36 | " * A training set of 60,000 examples\n",
37 | " * A test set of 10,000 examples\n",
38 | " * The digits have been size-normalized and centered in a fixed-size image"
39 | ]
40 | },
41 | {
42 | "cell_type": "code",
43 | "execution_count": 1,
44 | "metadata": {
45 | "ExecuteTime": {
46 | "end_time": "2019-04-07T22:51:29.077218Z",
47 | "start_time": "2019-04-07T22:51:27.273347Z"
48 | }
49 | },
50 | "outputs": [],
51 | "source": [
52 | "import torch\n",
53 | "import torch.nn as nn\n",
54 | "import torch.nn.functional as F\n",
55 | "import torch.optim as optim\n",
56 | "\n",
57 | "from torchvision import datasets,transforms\n",
58 | "from torch.autograd import Variable\n",
59 | "\n",
60 | "import matplotlib.pyplot as plt\n",
61 | "%matplotlib inline"
62 | ]
63 | },
64 | {
65 | "cell_type": "markdown",
66 | "metadata": {},
67 | "source": [
68 | "## Check if a CUDA compatible devise is available"
69 | ]
70 | },
71 | {
72 | "cell_type": "code",
73 | "execution_count": 2,
74 | "metadata": {
75 | "ExecuteTime": {
76 | "end_time": "2019-04-07T22:51:29.086417Z",
77 | "start_time": "2019-04-07T22:51:29.081068Z"
78 | }
79 | },
80 | "outputs": [],
81 | "source": [
82 | "is_cuda=False\n",
83 | "if torch.cuda.is_available():\n",
84 | " is_cuda = True"
85 | ]
86 | },
87 | {
88 | "cell_type": "markdown",
89 | "metadata": {},
90 | "source": [
91 | "## Load, Transform, and Feed the Transformed Data into `DataLoader`"
92 | ]
93 | },
94 | {
95 | "cell_type": "code",
96 | "execution_count": 3,
97 | "metadata": {
98 | "ExecuteTime": {
99 | "end_time": "2019-04-07T22:51:32.557711Z",
100 | "start_time": "2019-04-07T22:51:29.090554Z"
101 | }
102 | },
103 | "outputs": [
104 | {
105 | "name": "stdout",
106 | "output_type": "stream",
107 | "text": [
108 | "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz\n",
109 | "Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz\n",
110 | "Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz\n",
111 | "Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz\n",
112 | "Processing...\n",
113 | "Done!\n"
114 | ]
115 | }
116 | ],
117 | "source": [
118 | "transformation = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))])\n",
119 | "\n",
120 | "train_dataset = datasets.MNIST('data/section4/',train=True,transform=transformation,download=True)\n",
121 | "test_dataset = datasets.MNIST('data/section4/',train=False,transform=transformation,download=True)\n",
122 | "\n",
123 | "train_loader = torch.utils.data.DataLoader(train_dataset,batch_size=32,shuffle=True)\n",
124 | "test_loader = torch.utils.data.DataLoader(test_dataset,batch_size=32,shuffle=True)"
125 | ]
126 | },
127 | {
128 | "cell_type": "markdown",
129 | "metadata": {},
130 | "source": [
131 | "## Examine the a batch of examples from the original data"
132 | ]
133 | },
134 | {
135 | "cell_type": "code",
136 | "execution_count": 4,
137 | "metadata": {
138 | "ExecuteTime": {
139 | "end_time": "2019-04-07T22:51:32.594456Z",
140 | "start_time": "2019-04-07T22:51:32.569677Z"
141 | }
142 | },
143 | "outputs": [],
144 | "source": [
145 | "sample_data = next(iter(train_loader))"
146 | ]
147 | },
148 | {
149 | "cell_type": "code",
150 | "execution_count": 5,
151 | "metadata": {
152 | "ExecuteTime": {
153 | "end_time": "2019-04-07T22:51:32.611083Z",
154 | "start_time": "2019-04-07T22:51:32.601326Z"
155 | }
156 | },
157 | "outputs": [
158 | {
159 | "data": {
160 | "text/plain": [
161 | "list"
162 | ]
163 | },
164 | "execution_count": 5,
165 | "metadata": {},
166 | "output_type": "execute_result"
167 | }
168 | ],
169 | "source": [
170 | "type(sample_data)"
171 | ]
172 | },
173 | {
174 | "cell_type": "code",
175 | "execution_count": 6,
176 | "metadata": {
177 | "ExecuteTime": {
178 | "end_time": "2019-04-07T22:51:32.623369Z",
179 | "start_time": "2019-04-07T22:51:32.614194Z"
180 | }
181 | },
182 | "outputs": [
183 | {
184 | "data": {
185 | "text/plain": [
186 | "2"
187 | ]
188 | },
189 | "execution_count": 6,
190 | "metadata": {},
191 | "output_type": "execute_result"
192 | }
193 | ],
194 | "source": [
195 | "len(sample_data)"
196 | ]
197 | },
198 | {
199 | "cell_type": "code",
200 | "execution_count": 7,
201 | "metadata": {
202 | "ExecuteTime": {
203 | "end_time": "2019-04-07T22:51:32.638445Z",
204 | "start_time": "2019-04-07T22:51:32.628056Z"
205 | }
206 | },
207 | "outputs": [
208 | {
209 | "name": "stdout",
210 | "output_type": "stream",
211 | "text": [
212 | "torch.Size([32, 1, 28, 28])\n",
213 | "torch.Size([32])\n"
214 | ]
215 | }
216 | ],
217 | "source": [
218 | "print(sample_data[0].size())\n",
219 | "print(sample_data[1].size())"
220 | ]
221 | },
222 | {
223 | "cell_type": "code",
224 | "execution_count": 8,
225 | "metadata": {
226 | "ExecuteTime": {
227 | "end_time": "2019-04-07T22:51:32.652934Z",
228 | "start_time": "2019-04-07T22:51:32.645245Z"
229 | }
230 | },
231 | "outputs": [
232 | {
233 | "data": {
234 | "text/plain": [
235 | "tensor([3, 0, 0, 3, 5, 2, 1, 7, 5, 4, 1, 0, 7, 3, 6, 9, 2, 2, 5, 2, 2, 6, 8, 1,\n",
236 | " 8, 4, 1, 8, 2, 7, 0, 8])"
237 | ]
238 | },
239 | "execution_count": 8,
240 | "metadata": {},
241 | "output_type": "execute_result"
242 | }
243 | ],
244 | "source": [
245 | "# The labels of the 32 images\n",
246 | "sample_data[1]"
247 | ]
248 | },
249 | {
250 | "cell_type": "code",
251 | "execution_count": 9,
252 | "metadata": {
253 | "ExecuteTime": {
254 | "end_time": "2019-04-07T22:51:32.677995Z",
255 | "start_time": "2019-04-07T22:51:32.655952Z"
256 | }
257 | },
258 | "outputs": [
259 | {
260 | "data": {
261 | "text/plain": [
262 | "tensor([[[-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
263 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
264 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
265 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
266 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
267 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
268 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
269 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
270 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
271 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
272 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
273 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
274 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
275 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
276 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
277 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
278 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
279 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
280 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
281 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
282 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
283 | " -0.4242, -0.4242, 0.1486, 1.1668, 1.6632, 2.8088, 2.8088,\n",
284 | " 2.8088, 1.6123, 0.0595, -0.4242, -0.4242, -0.4242, -0.4242,\n",
285 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
286 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
287 | " 0.9759, 1.7141, 2.7578, 2.7960, 2.7960, 2.7960, 2.7960,\n",
288 | " 2.7960, 2.7960, 1.5996, 0.0722, -0.4242, -0.4242, -0.4242,\n",
289 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
290 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, 0.1995,\n",
291 | " 2.6687, 2.7960, 2.7960, 2.7960, 2.7960, 2.7960, 2.7960,\n",
292 | " 2.7960, 2.7960, 2.7960, 0.6450, -0.4242, -0.4242, -0.4242,\n",
293 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
294 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.3097,\n",
295 | " 2.5797, 2.7960, 2.7960, 1.6632, 0.1104, -0.1824, 0.2504,\n",
296 | " 2.4651, 2.7960, 2.7960, 1.3196, -0.4242, -0.4242, -0.4242,\n",
297 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
298 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
299 | " -0.1187, -0.1060, -0.1060, -0.3733, -0.4242, -0.4242, -0.4242,\n",
300 | " 0.4922, 2.7960, 2.7960, 2.2996, -0.4242, -0.4242, -0.4242,\n",
301 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
302 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
303 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
304 | " 0.3268, 2.7960, 2.7960, 2.2996, -0.4242, -0.4242, -0.4242,\n",
305 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
306 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
307 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
308 | " 0.3268, 2.7960, 2.7960, 2.2996, -0.4242, -0.4242, -0.4242,\n",
309 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
310 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
311 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
312 | " 1.6887, 2.7960, 2.7960, 1.7905, -0.4242, -0.4242, -0.4242,\n",
313 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
314 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
315 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, 1.5614,\n",
316 | " 2.6306, 2.7960, 2.6306, 0.3395, -0.4242, -0.4242, -0.4242,\n",
317 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
318 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
319 | " -0.0806, 0.4159, 0.4159, 1.8160, 1.5487, 1.7269, 2.6306,\n",
320 | " 2.7960, 2.7960, 0.9377, -0.4242, -0.4242, -0.4242, -0.4242,\n",
321 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
322 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
323 | " 2.1469, 2.7960, 2.7960, 2.7960, 2.7960, 2.7960, 2.7960,\n",
324 | " 2.7960, 2.7960, 2.2360, 1.7269, 0.2377, -0.4242, -0.4242,\n",
325 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
326 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
327 | " 2.5669, 2.7960, 2.7960, 2.7960, 2.7960, 2.2614, 2.6433,\n",
328 | " 2.7960, 2.7960, 2.7960, 2.7960, 2.6815, 0.4668, -0.4242,\n",
329 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
330 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
331 | " 0.4922, 0.5686, 0.5686, 0.5686, 0.5686, -0.2206, 0.3395,\n",
332 | " 0.5686, 0.9123, 2.6178, 2.7960, 2.7960, 2.0196, -0.1824,\n",
333 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
334 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
335 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
336 | " -0.4242, -0.4242, 0.6195, 2.6306, 2.7960, 2.7960, 0.8995,\n",
337 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
338 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
339 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
340 | " -0.4242, -0.4242, -0.3478, 1.8669, 2.7960, 2.7960, 1.7396,\n",
341 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
342 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
343 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
344 | " -0.4242, -0.3478, 1.2814, 2.7960, 2.7960, 2.7960, 0.8995,\n",
345 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
346 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
347 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.2206,\n",
348 | " 0.2122, 1.7523, 2.7960, 2.7960, 2.7960, 2.4778, 0.1231,\n",
349 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
350 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
351 | " -0.4242, -0.4242, -0.4242, -0.2715, 0.6068, 0.2249, 2.4778,\n",
352 | " 2.7960, 2.7960, 2.7960, 2.7706, 1.5614, 0.1104, -0.4242,\n",
353 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
354 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
355 | " -0.4242, -0.4242, -0.4242, 2.2742, 2.7960, 2.7960, 2.7324,\n",
356 | " 2.7197, 2.7197, 2.4142, 0.8359, -0.4242, -0.4242, -0.4242,\n",
357 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
358 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
359 | " -0.4242, -0.4242, -0.4242, 0.1104, 1.6505, 1.4723, -0.0678,\n",
360 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
361 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
362 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
363 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
364 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
365 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
366 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
367 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
368 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
369 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242],\n",
370 | " [-0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
371 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
372 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242,\n",
373 | " -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242, -0.4242]]])"
374 | ]
375 | },
376 | "execution_count": 9,
377 | "metadata": {},
378 | "output_type": "execute_result"
379 | }
380 | ],
381 | "source": [
382 | "# the pixels representing in a a 28 x 28 matrix corresponding to the first image\n",
383 | "sample_data[0][0]"
384 | ]
385 | },
386 | {
387 | "cell_type": "code",
388 | "execution_count": 10,
389 | "metadata": {
390 | "ExecuteTime": {
391 | "end_time": "2019-04-07T22:51:32.698511Z",
392 | "start_time": "2019-04-07T22:51:32.691147Z"
393 | }
394 | },
395 | "outputs": [
396 | {
397 | "data": {
398 | "text/plain": [
399 | "tensor(3)"
400 | ]
401 | },
402 | "execution_count": 10,
403 | "metadata": {},
404 | "output_type": "execute_result"
405 | }
406 | ],
407 | "source": [
408 | "# the label corresponding to the first image\n",
409 | "sample_data[1][0]"
410 | ]
411 | },
412 | {
413 | "cell_type": "code",
414 | "execution_count": 11,
415 | "metadata": {
416 | "ExecuteTime": {
417 | "end_time": "2019-04-07T22:51:32.709136Z",
418 | "start_time": "2019-04-07T22:51:32.701929Z"
419 | }
420 | },
421 | "outputs": [],
422 | "source": [
423 | "def plot_img(image):\n",
424 | " image = image.numpy()[0]\n",
425 | " mean = 0.1307\n",
426 | " std = 0.3081\n",
427 | " image = ((mean * image) + std)\n",
428 | " plt.imshow(image,cmap='gray')"
429 | ]
430 | },
431 | {
432 | "cell_type": "markdown",
433 | "metadata": {},
434 | "source": [
435 | "### Visualize the Labels"
436 | ]
437 | },
438 | {
439 | "cell_type": "code",
440 | "execution_count": 12,
441 | "metadata": {
442 | "ExecuteTime": {
443 | "end_time": "2019-04-07T22:51:33.256195Z",
444 | "start_time": "2019-04-07T22:51:32.712021Z"
445 | }
446 | },
447 | "outputs": [
448 | {
449 | "data": {
450 | "image/png": "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\nUIQfCOqvpr9u0/bCLQUAAAAASUVORK5CYII=\n",
451 | "text/plain": [
452 | ""
453 | ]
454 | },
455 | "metadata": {},
456 | "output_type": "display_data"
457 | }
458 | ],
459 | "source": [
460 | "# Plot the first image\n",
461 | "plot_img(sample_data[0][0])"
462 | ]
463 | },
464 | {
465 | "cell_type": "code",
466 | "execution_count": 13,
467 | "metadata": {
468 | "ExecuteTime": {
469 | "end_time": "2019-04-07T22:51:33.547187Z",
470 | "start_time": "2019-04-07T22:51:33.271961Z"
471 | },
472 | "scrolled": true
473 | },
474 | "outputs": [
475 | {
476 | "data": {
477 | "image/png": "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\ntwAAAABJRU5ErkJggg==\n",
478 | "text/plain": [
479 | ""
480 | ]
481 | },
482 | "metadata": {},
483 | "output_type": "display_data"
484 | }
485 | ],
486 | "source": [
487 | "# Plot the second image\n",
488 | "plot_img(sample_data[0][1])"
489 | ]
490 | },
491 | {
492 | "cell_type": "code",
493 | "execution_count": 14,
494 | "metadata": {
495 | "ExecuteTime": {
496 | "end_time": "2019-04-07T22:51:33.888404Z",
497 | "start_time": "2019-04-07T22:51:33.559125Z"
498 | }
499 | },
500 | "outputs": [
501 | {
502 | "data": {
503 | "image/png": "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\n",
504 | "text/plain": [
505 | ""
506 | ]
507 | },
508 | "metadata": {},
509 | "output_type": "display_data"
510 | }
511 | ],
512 | "source": [
513 | "# Plot the 32nd image\n",
514 | "plot_img(sample_data[0][31])"
515 | ]
516 | },
517 | {
518 | "cell_type": "markdown",
519 | "metadata": {},
520 | "source": [
521 | "## Specify a CNN"
522 | ]
523 | },
524 | {
525 | "cell_type": "code",
526 | "execution_count": 15,
527 | "metadata": {
528 | "ExecuteTime": {
529 | "end_time": "2019-04-07T22:51:33.919660Z",
530 | "start_time": "2019-04-07T22:51:33.894165Z"
531 | }
532 | },
533 | "outputs": [],
534 | "source": [
535 | "class Net(nn.Module):\n",
536 | " def __init__(self):\n",
537 | " super().__init__()\n",
538 | " self.conv1 = nn.Conv2d(1, 10, kernel_size=5)\n",
539 | " self.conv2 = nn.Conv2d(10, 20, kernel_size=5)\n",
540 | " self.conv2_drop = nn.Dropout2d()\n",
541 | " self.fc1 = nn.Linear(320, 50)\n",
542 | " self.fc2 = nn.Linear(50, 10)\n",
543 | "\n",
544 | " def forward(self, x):\n",
545 | " x = F.relu(F.max_pool2d(self.conv1(x), 2))\n",
546 | " x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))\n",
547 | " x = x.view(-1, 320)\n",
548 | " x = F.relu(self.fc1(x))\n",
549 | " #x = F.dropout(x,p=0.1, training=self.training)\n",
550 | " x = self.fc2(x)\n",
551 | " return F.log_softmax(x,dim=1)"
552 | ]
553 | },
554 | {
555 | "cell_type": "code",
556 | "execution_count": 16,
557 | "metadata": {
558 | "ExecuteTime": {
559 | "end_time": "2019-04-07T22:51:33.934889Z",
560 | "start_time": "2019-04-07T22:51:33.925826Z"
561 | }
562 | },
563 | "outputs": [],
564 | "source": [
565 | "model = Net()\n",
566 | "if is_cuda:\n",
567 | " model.cuda()"
568 | ]
569 | },
570 | {
571 | "cell_type": "code",
572 | "execution_count": 17,
573 | "metadata": {
574 | "ExecuteTime": {
575 | "end_time": "2019-04-07T22:51:33.951738Z",
576 | "start_time": "2019-04-07T22:51:33.942183Z"
577 | }
578 | },
579 | "outputs": [
580 | {
581 | "data": {
582 | "text/plain": [
583 | "False"
584 | ]
585 | },
586 | "execution_count": 17,
587 | "metadata": {},
588 | "output_type": "execute_result"
589 | }
590 | ],
591 | "source": [
592 | "is_cuda"
593 | ]
594 | },
595 | {
596 | "cell_type": "markdown",
597 | "metadata": {},
598 | "source": [
599 | "## Define an Optimization Algorithm"
600 | ]
601 | },
602 | {
603 | "cell_type": "code",
604 | "execution_count": 18,
605 | "metadata": {
606 | "ExecuteTime": {
607 | "end_time": "2019-04-07T22:51:33.969283Z",
608 | "start_time": "2019-04-07T22:51:33.954646Z"
609 | }
610 | },
611 | "outputs": [],
612 | "source": [
613 | "optimizer = optim.SGD(model.parameters(),lr=0.01)"
614 | ]
615 | },
616 | {
617 | "cell_type": "code",
618 | "execution_count": 19,
619 | "metadata": {
620 | "ExecuteTime": {
621 | "end_time": "2019-04-07T22:51:34.013607Z",
622 | "start_time": "2019-04-07T22:51:33.980168Z"
623 | }
624 | },
625 | "outputs": [],
626 | "source": [
627 | "data , target = next(iter(train_loader))"
628 | ]
629 | },
630 | {
631 | "cell_type": "code",
632 | "execution_count": 20,
633 | "metadata": {
634 | "ExecuteTime": {
635 | "end_time": "2019-04-07T22:51:34.062296Z",
636 | "start_time": "2019-04-07T22:51:34.019115Z"
637 | }
638 | },
639 | "outputs": [
640 | {
641 | "name": "stdout",
642 | "output_type": "stream",
643 | "text": [
644 | "\n",
645 | "\n"
646 | ]
647 | }
648 | ],
649 | "source": [
650 | "print(type(data))\n",
651 | "print(type(target))"
652 | ]
653 | },
654 | {
655 | "cell_type": "code",
656 | "execution_count": 21,
657 | "metadata": {
658 | "ExecuteTime": {
659 | "end_time": "2019-04-07T22:51:34.088605Z",
660 | "start_time": "2019-04-07T22:51:34.073281Z"
661 | }
662 | },
663 | "outputs": [
664 | {
665 | "name": "stdout",
666 | "output_type": "stream",
667 | "text": [
668 | "torch.Size([32, 1, 28, 28])\n",
669 | "torch.Size([32])\n"
670 | ]
671 | }
672 | ],
673 | "source": [
674 | "print(data.shape)\n",
675 | "print(target.shape)"
676 | ]
677 | },
678 | {
679 | "cell_type": "code",
680 | "execution_count": 22,
681 | "metadata": {
682 | "ExecuteTime": {
683 | "end_time": "2019-04-07T22:51:34.254267Z",
684 | "start_time": "2019-04-07T22:51:34.097000Z"
685 | }
686 | },
687 | "outputs": [],
688 | "source": [
689 | "#output = model(Variable(data.cuda()))\n",
690 | "output = model(Variable(data))"
691 | ]
692 | },
693 | {
694 | "cell_type": "code",
695 | "execution_count": 23,
696 | "metadata": {
697 | "ExecuteTime": {
698 | "end_time": "2019-04-07T22:51:34.264290Z",
699 | "start_time": "2019-04-07T22:51:34.257896Z"
700 | }
701 | },
702 | "outputs": [
703 | {
704 | "data": {
705 | "text/plain": [
706 | "torch.Size([32, 10])"
707 | ]
708 | },
709 | "execution_count": 23,
710 | "metadata": {},
711 | "output_type": "execute_result"
712 | }
713 | ],
714 | "source": [
715 | "output.size()"
716 | ]
717 | },
718 | {
719 | "cell_type": "code",
720 | "execution_count": 24,
721 | "metadata": {
722 | "ExecuteTime": {
723 | "end_time": "2019-04-07T22:51:34.274650Z",
724 | "start_time": "2019-04-07T22:51:34.268396Z"
725 | }
726 | },
727 | "outputs": [
728 | {
729 | "data": {
730 | "text/plain": [
731 | "torch.Size([32])"
732 | ]
733 | },
734 | "execution_count": 24,
735 | "metadata": {},
736 | "output_type": "execute_result"
737 | }
738 | ],
739 | "source": [
740 | "target.size()"
741 | ]
742 | },
743 | {
744 | "cell_type": "markdown",
745 | "metadata": {},
746 | "source": [
747 | "## Train the model"
748 | ]
749 | },
750 | {
751 | "cell_type": "code",
752 | "execution_count": 25,
753 | "metadata": {
754 | "ExecuteTime": {
755 | "end_time": "2019-04-07T22:51:34.312342Z",
756 | "start_time": "2019-04-07T22:51:34.279843Z"
757 | }
758 | },
759 | "outputs": [],
760 | "source": [
761 | "def fit(epoch,model,data_loader,phase='training',volatile=False):\n",
762 | " if phase == 'training':\n",
763 | " model.train()\n",
764 | " if phase == 'validation':\n",
765 | " model.eval()\n",
766 | " volatile=True\n",
767 | " running_loss = 0.0\n",
768 | " running_correct = 0\n",
769 | " for batch_idx , (data,target) in enumerate(data_loader):\n",
770 | " if is_cuda:\n",
771 | " data,target = data.cuda(),target.cuda()\n",
772 | " data , target = Variable(data,volatile),Variable(target)\n",
773 | " if phase == 'training':\n",
774 | " optimizer.zero_grad()\n",
775 | " output = model(data)\n",
776 | " loss = F.nll_loss(output,target)\n",
777 | " \n",
778 | " running_loss += F.nll_loss(output,target,size_average=False).data[0]\n",
779 | " preds = output.data.max(dim=1,keepdim=True)[1]\n",
780 | " running_correct += preds.eq(target.data.view_as(preds)).cpu().sum()\n",
781 | " if phase == 'training':\n",
782 | " loss.backward()\n",
783 | " optimizer.step()\n",
784 | " \n",
785 | " loss = running_loss/len(data_loader.dataset)\n",
786 | " accuracy = 100. * running_correct/len(data_loader.dataset)\n",
787 | " #print(\"Loss: %2.2f, Accuracy: %2.2f\" % (loss, accuracy))\n",
788 | " #print(f'{phase} loss is {loss:{5}.{2}} and {phase} accuracy is {running_correct}/{len(data_loader.dataset)}{accuracy:{10}.{4}}')\n",
789 | " return loss,accuracy"
790 | ]
791 | },
792 | {
793 | "cell_type": "code",
794 | "execution_count": 26,
795 | "metadata": {
796 | "ExecuteTime": {
797 | "end_time": "2019-04-07T22:51:34.318393Z",
798 | "start_time": "2019-04-07T22:51:34.315302Z"
799 | }
800 | },
801 | "outputs": [],
802 | "source": [
803 | "#loss, acc = fit(epoch,model,train_loader, phase='training')"
804 | ]
805 | },
806 | {
807 | "cell_type": "code",
808 | "execution_count": 27,
809 | "metadata": {
810 | "ExecuteTime": {
811 | "end_time": "2019-04-07T23:45:58.691953Z",
812 | "start_time": "2019-04-07T22:51:34.321783Z"
813 | },
814 | "scrolled": false
815 | },
816 | "outputs": [
817 | {
818 | "name": "stderr",
819 | "output_type": "stream",
820 | "text": [
821 | "/Users/jeffrey/anaconda2/envs/dl/lib/python3.6/site-packages/torch/nn/functional.py:52: UserWarning: size_average and reduce args will be deprecated, please use reduction='sum' instead.\n",
822 | " warnings.warn(warning.format(ret))\n",
823 | "/Users/jeffrey/anaconda2/envs/dl/lib/python3.6/site-packages/ipykernel/__main__.py:18: UserWarning: invalid index of a 0-dim tensor. This will be an error in PyTorch 0.5. Use tensor.item() to convert a 0-dim tensor to a Python number\n"
824 | ]
825 | },
826 | {
827 | "name": "stdout",
828 | "output_type": "stream",
829 | "text": [
830 | "Execution Time: 54.41\n"
831 | ]
832 | }
833 | ],
834 | "source": [
835 | "import time\n",
836 | "start = time.time()\n",
837 | "\n",
838 | "n_epoch = 50\n",
839 | "\n",
840 | "train_losses , train_accuracy = [],[]\n",
841 | "val_losses , val_accuracy = [],[]\n",
842 | "for epoch in range(1, n_epoch):\n",
843 | " epoch_loss, epoch_accuracy = fit(epoch,model,train_loader,phase='training')\n",
844 | " val_epoch_loss , val_epoch_accuracy = fit(epoch,model,test_loader,phase='validation')\n",
845 | " train_losses.append(epoch_loss)\n",
846 | " train_accuracy.append(epoch_accuracy)\n",
847 | " val_losses.append(val_epoch_loss)\n",
848 | " val_accuracy.append(val_epoch_accuracy)\n",
849 | " \n",
850 | "end = time.time()\n",
851 | "print(\"Execution Time: \", round(((end-start)/60.0),2))"
852 | ]
853 | },
854 | {
855 | "cell_type": "code",
856 | "execution_count": 28,
857 | "metadata": {
858 | "ExecuteTime": {
859 | "end_time": "2019-04-07T23:45:58.723283Z",
860 | "start_time": "2019-04-07T23:45:58.710559Z"
861 | }
862 | },
863 | "outputs": [
864 | {
865 | "name": "stdout",
866 | "output_type": "stream",
867 | "text": [
868 | "54.41\n"
869 | ]
870 | }
871 | ],
872 | "source": [
873 | "print(round(((end-start)/60.0),2))"
874 | ]
875 | },
876 | {
877 | "cell_type": "markdown",
878 | "metadata": {},
879 | "source": [
880 | "## Plot the training and validation loss and accuracy curves"
881 | ]
882 | },
883 | {
884 | "cell_type": "code",
885 | "execution_count": 29,
886 | "metadata": {
887 | "ExecuteTime": {
888 | "end_time": "2019-04-07T23:45:59.124046Z",
889 | "start_time": "2019-04-07T23:45:58.727111Z"
890 | },
891 | "scrolled": false
892 | },
893 | "outputs": [
894 | {
895 | "data": {
896 | "text/plain": [
897 | ""
898 | ]
899 | },
900 | "execution_count": 29,
901 | "metadata": {},
902 | "output_type": "execute_result"
903 | },
904 | {
905 | "data": {
906 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3X90VPWd//HnmyQQws8IwSq/gltU\nCD8lpbSsBSt6QCyW1h+wcCo9Wk49uuqx9Surrm7poT896tpl7WJX1wVapVRbVFyqLa76/fqDoIi/\nKwJCQCUgBDAECHl//7gzYQgzk8lkkknuvB7n3DNz73zm3s+dTF733s+987nm7oiISLh0ynYFREQk\n8xTuIiIhpHAXEQkhhbuISAgp3EVEQkjhLiISQgp3EZEQUriLiISQwl1EJITys7Xgvn37emlpabYW\nLyLSIa1fv363u5c0VS5r4V5aWkpFRUW2Fi8i0iGZ2UeplFOzjIhICCncRURCSOEuIhJCWWtzF5G2\nd/ToUSorK6mtrc12VaQJhYWFDBgwgIKCgrTer3AXySGVlZX06NGD0tJSzCzb1ZEE3J09e/ZQWVnJ\nkCFD0ppHh2qWWb4cSkuhU6fgcfnybNdIpGOpra2lT58+CvZ2zszo06dPi46wOsye+/LlMH8+1NQE\n4x99FIwDzJmTvXqJdDQK9o6hpX+nDrPnftttx4M9qqYmmC4iIifqMOG+bVvzpotI+7Nv3z7+/d//\nPa33XnTRRezbty9pmTvuuINnn302rfk3Vlpayu7duzMyr2zoMOE+aFDzpotIy2X6PFeycK+rq0v6\n3tWrV9O7d++kZRYuXMiUKVPSrl+YpBTuZjbVzN43s01mtiBBmcvN7B0ze9vMfpvZasKiRVBUdOK0\noqJguohkXvQ810cfgfvx81wtCfgFCxbw4YcfMmbMGG6++Waee+45zj33XGbMmMHw4cMB+OY3v8m4\nceMoKytjyZIlDe+N7klv3bqVYcOG8b3vfY+ysjIuvPBCDh06BMC8efNYuXJlQ/k777yTc845h5Ej\nR/Lee+8BUFVVxQUXXEBZWRlXX301gwcPbnIP/e6772bEiBGMGDGCe++9F4DPP/+c6dOnM3r0aEaM\nGMGjjz7asI7Dhw9n1KhR/PCHP0z/w2opd086AHnAh8AZQGfgDWB4ozJDgdeB4sh4v6bmO27cOG+u\nZcvcBw92Nwsely1r9ixEcto777yTctnBg92DWD9xGDw4/eVv2bLFy8rKGsbXrl3rRUVFvnnz5oZp\ne/bscXf3mpoaLysr8927d0fqM9irqqp8y5YtnpeX56+//rq7u1922WW+dOlSd3e/8sor/fe//31D\n+fvuu8/d3RcvXuxXXXWVu7tfe+21/pOf/MTd3Z9++mkHvKqqKs76B8urqKjwESNG+MGDB/3AgQM+\nfPhwf+2113zlypV+9dVXN5Tft2+f7969288880yvr693d/e9e/em/2F5/L8XUOFN5Ku7p7TnPh7Y\n5O6b3f0I8AhwSaMy3wMWu/veyAZjVwu3OXHNmQNbt0J9ffCoq2REWk9bnecaP378Cddy33fffYwe\nPZoJEyawfft2Pvjgg5PeM2TIEMaMGQPAuHHj2Lp1a9x5f+tb3zqpzIsvvsisWbMAmDp1KsXFxUnr\n9+KLLzJz5ky6detG9+7d+da3vsULL7zAyJEjeeaZZ7jlllt44YUX6NWrF7169aKwsJCrrrqKxx57\njKLGzQ1tKJVw7w9sjxmvjEyLdSZwppn9XzN72cymZqqCIpIdbXWeq1u3bg3Pn3vuOZ599lleeukl\n3njjDcaOHRv3Wu8uXbo0PM/Ly0vYXh8tl6xMus4880xee+01Ro4cye23387ChQvJz8/n1Vdf5dJL\nL+XJJ59k6tTsRWGmTqjmEzTNTAZmAw+Y2UlnPsxsvplVmFlFVVVVhhYtIq2hNc5z9ejRgwMHDiR8\nvbq6muLiYoqKinjvvfd4+eWX019YAhMnTmTFihUA/PnPf2bv3r1Jy5977rn88Y9/pKamhs8//5zH\nH3+cc889l507d1JUVMTcuXO5+eabee211zh48CDV1dVcdNFF3HPPPbzxxhsZr3+qUvkR0w5gYMz4\ngMi0WJXAK+5+FNhiZn8jCPt1sYXcfQmwBKC8vNzTrbSItL5os+dttwVNMYMGBcHekubQPn36MHHi\nREaMGMG0adOYPn36Ca9PnTqVX//61wwbNoyzzjqLCRMmtGAN4rvzzjuZPXs2S5cu5Stf+Qpf+MIX\n6NGjR8Ly55xzDvPmzWP8+PEAXH311YwdO5Y1a9Zw880306lTJwoKCrj//vs5cOAAl1xyCbW1tbg7\nd999d8brnyoL2ueTFDDLB/4GnE8Q6uuAf3D3t2PKTAVmu/uVZtaX4OTqGHffk2i+5eXlrpt1iLSt\n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\ndxGREPr/NTY7L1mzB9YAAAAASUVORK5CYII=\n",
907 | "text/plain": [
908 | ""
909 | ]
910 | },
911 | "metadata": {},
912 | "output_type": "display_data"
913 | }
914 | ],
915 | "source": [
916 | "plt.plot(range(1,len(train_losses)+1),train_losses,'bo',label = 'training loss')\n",
917 | "plt.plot(range(1,len(val_losses)+1),val_losses,'r',label = 'validation loss')\n",
918 | "plt.legend()"
919 | ]
920 | },
921 | {
922 | "cell_type": "code",
923 | "execution_count": 30,
924 | "metadata": {
925 | "ExecuteTime": {
926 | "end_time": "2019-04-07T23:45:59.474304Z",
927 | "start_time": "2019-04-07T23:45:59.127737Z"
928 | }
929 | },
930 | "outputs": [
931 | {
932 | "data": {
933 | "text/plain": [
934 | ""
935 | ]
936 | },
937 | "execution_count": 30,
938 | "metadata": {},
939 | "output_type": "execute_result"
940 | },
941 | {
942 | "data": {
943 | "image/png": "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\n",
944 | "text/plain": [
945 | ""
946 | ]
947 | },
948 | "metadata": {},
949 | "output_type": "display_data"
950 | }
951 | ],
952 | "source": [
953 | "plt.plot(range(1,len(train_accuracy)+1),train_accuracy,'bo',label = 'train accuracy')\n",
954 | "plt.plot(range(1,len(val_accuracy)+1),val_accuracy,'r',label = 'val accuracy')\n",
955 | "plt.legend()"
956 | ]
957 | },
958 | {
959 | "cell_type": "markdown",
960 | "metadata": {},
961 | "source": [
962 | "# Exercise"
963 | ]
964 | },
965 | {
966 | "cell_type": "markdown",
967 | "metadata": {},
968 | "source": [
969 | "Re-define the model under Section 1.4 and see if you can achieve similar results using a simpler model."
970 | ]
971 | },
972 | {
973 | "cell_type": "code",
974 | "execution_count": null,
975 | "metadata": {},
976 | "outputs": [],
977 | "source": []
978 | }
979 | ],
980 | "metadata": {
981 | "kernelspec": {
982 | "display_name": "Python [conda env:dl]",
983 | "language": "python",
984 | "name": "conda-env-dl-py"
985 | },
986 | "language_info": {
987 | "codemirror_mode": {
988 | "name": "ipython",
989 | "version": 3
990 | },
991 | "file_extension": ".py",
992 | "mimetype": "text/x-python",
993 | "name": "python",
994 | "nbconvert_exporter": "python",
995 | "pygments_lexer": "ipython3",
996 | "version": "3.6.7"
997 | },
998 | "toc": {
999 | "base_numbering": 1,
1000 | "nav_menu": {},
1001 | "number_sections": true,
1002 | "sideBar": true,
1003 | "skip_h1_title": false,
1004 | "title_cell": "Table of Contents",
1005 | "title_sidebar": "Contents",
1006 | "toc_cell": false,
1007 | "toc_position": {},
1008 | "toc_section_display": true,
1009 | "toc_window_display": false
1010 | },
1011 | "varInspector": {
1012 | "cols": {
1013 | "lenName": 16,
1014 | "lenType": 16,
1015 | "lenVar": 40
1016 | },
1017 | "kernels_config": {
1018 | "python": {
1019 | "delete_cmd_postfix": "",
1020 | "delete_cmd_prefix": "del ",
1021 | "library": "var_list.py",
1022 | "varRefreshCmd": "print(var_dic_list())"
1023 | },
1024 | "r": {
1025 | "delete_cmd_postfix": ") ",
1026 | "delete_cmd_prefix": "rm(",
1027 | "library": "var_list.r",
1028 | "varRefreshCmd": "cat(var_dic_list()) "
1029 | }
1030 | },
1031 | "types_to_exclude": [
1032 | "module",
1033 | "function",
1034 | "builtin_function_or_method",
1035 | "instance",
1036 | "_Feature"
1037 | ],
1038 | "window_display": false
1039 | }
1040 | },
1041 | "nbformat": 4,
1042 | "nbformat_minor": 2
1043 | }
1044 |
--------------------------------------------------------------------------------
/Notebook/Section 5 - RNN and NLP v2-experiment2.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "\n",
8 | "
Section 5 \n",
9 | " \n",
10 | "Recurrent Neural Network in PyTorch with an Introduction to Natural Language Processing \n",
11 | ""
12 | ]
13 | },
14 | {
15 | "cell_type": "markdown",
16 | "metadata": {},
17 | "source": [
18 | "Credit: This example is obtained from the following book:\n",
19 | "\n",
20 | "Subramanian, Vishnu. 2018. \"*Deep Learning with PyTorch: A Practical Approach to Building Neural Network Models Using PyTorch.*\" Birmingham, U.K., Packt Publishing."
21 | ]
22 | },
23 | {
24 | "cell_type": "markdown",
25 | "metadata": {},
26 | "source": [
27 | "# Simple Text Processing"
28 | ]
29 | },
30 | {
31 | "cell_type": "markdown",
32 | "metadata": {},
33 | "source": [
34 | "## Typically Data Preprocessing Steps before Modeling Training for NLP Applications\n",
35 | "\n",
36 | "* Read the data from disk\n",
37 | "* Tokenize the text\n",
38 | "* Create a mapping from word to a unique integer\n",
39 | "* Convert the text into lists of integers\n",
40 | "* Load the data in whatever format your deep learning framework requires\n",
41 | "* Pad the text so that all the sequences are the same length, so you can process them in batch"
42 | ]
43 | },
44 | {
45 | "cell_type": "markdown",
46 | "metadata": {},
47 | "source": [
48 | "## Word Embedding"
49 | ]
50 | },
51 | {
52 | "cell_type": "markdown",
53 | "metadata": {},
54 | "source": [
55 | "Word embedding is a very popular way of representing text data in problems that are solved by deep learning algorithms\n",
56 | "\n",
57 | "Word embedding provides a dense representation of a word filled with floating numbers. \n",
58 | "\n",
59 | "It drastically reduces the dimension of the dictionary\n",
60 | "\n"
61 | ]
62 | },
63 | {
64 | "cell_type": "markdown",
65 | "metadata": {
66 | "heading_collapsed": true
67 | },
68 | "source": [
69 | "### `Torchtext` and Training word embedding by building a sentiment classifier"
70 | ]
71 | },
72 | {
73 | "cell_type": "markdown",
74 | "metadata": {
75 | "hidden": true
76 | },
77 | "source": [
78 | "Torchtext takes a declarative approach to loading its data: \n",
79 | "\n",
80 | " * you tell torchtext how you want the data to look like, and torchtext handles it for you\n",
81 | " \n",
82 | " * Declaring a Field: The Field specifies how you want a certain field to be processed\n",
83 | " \n",
84 | "The `Field` class is a fundamental component of torchtext and is what makes preprocessing very easy\n",
85 | "\n"
86 | ]
87 | },
88 | {
89 | "cell_type": "markdown",
90 | "metadata": {},
91 | "source": [
92 | "### Load `torchtext.datasets`"
93 | ]
94 | },
95 | {
96 | "cell_type": "markdown",
97 | "metadata": {},
98 | "source": [
99 | "# Use LSTM for Sentiment Classification"
100 | ]
101 | },
102 | {
103 | "cell_type": "markdown",
104 | "metadata": {},
105 | "source": [
106 | "1. Preparing the data\n",
107 | "2. Creating the batches \n",
108 | "3. Creating the network \n",
109 | "4. Training the model"
110 | ]
111 | },
112 | {
113 | "cell_type": "code",
114 | "execution_count": 1,
115 | "metadata": {
116 | "ExecuteTime": {
117 | "end_time": "2019-04-08T22:42:54.266651Z",
118 | "start_time": "2019-04-08T22:42:15.332306Z"
119 | }
120 | },
121 | "outputs": [],
122 | "source": [
123 | "from torchtext import data, datasets\n",
124 | "from torchtext.vocab import GloVe,FastText,CharNGram\n",
125 | "\n",
126 | "TEXT = data.Field(lower=True, fix_length=100,batch_first=False)\n",
127 | "LABEL = data.Field(sequential=False,)\n",
128 | "\n",
129 | "train, test = datasets.imdb.IMDB.splits(TEXT, LABEL)\n",
130 | "\n",
131 | "TEXT.build_vocab(train, vectors=GloVe(name='6B', dim=300),max_size=10000,min_freq=10)\n",
132 | "LABEL.build_vocab(train,)"
133 | ]
134 | },
135 | {
136 | "cell_type": "code",
137 | "execution_count": 2,
138 | "metadata": {
139 | "ExecuteTime": {
140 | "end_time": "2019-04-08T22:44:03.691481Z",
141 | "start_time": "2019-04-08T22:44:03.675373Z"
142 | }
143 | },
144 | "outputs": [
145 | {
146 | "data": {
147 | "text/plain": [
148 | "10002"
149 | ]
150 | },
151 | "execution_count": 2,
152 | "metadata": {},
153 | "output_type": "execute_result"
154 | }
155 | ],
156 | "source": [
157 | "len(TEXT.vocab.vectors)"
158 | ]
159 | },
160 | {
161 | "cell_type": "code",
162 | "execution_count": 3,
163 | "metadata": {
164 | "ExecuteTime": {
165 | "end_time": "2019-04-08T22:44:05.098565Z",
166 | "start_time": "2019-04-08T22:44:05.088897Z"
167 | }
168 | },
169 | "outputs": [
170 | {
171 | "name": "stderr",
172 | "output_type": "stream",
173 | "text": [
174 | "The `device` argument should be set by using `torch.device` or passing a string as an argument. This behavior will be deprecated soon and currently defaults to cpu.\n",
175 | "The `device` argument should be set by using `torch.device` or passing a string as an argument. This behavior will be deprecated soon and currently defaults to cpu.\n"
176 | ]
177 | }
178 | ],
179 | "source": [
180 | "train_iter, test_iter = data.BucketIterator.splits((train, test), batch_size=32, device=-1)\n",
181 | "train_iter.repeat = False\n",
182 | "test_iter.repeat = False"
183 | ]
184 | },
185 | {
186 | "cell_type": "code",
187 | "execution_count": 4,
188 | "metadata": {
189 | "ExecuteTime": {
190 | "end_time": "2019-04-08T22:44:06.275137Z",
191 | "start_time": "2019-04-08T22:44:06.270580Z"
192 | }
193 | },
194 | "outputs": [],
195 | "source": [
196 | "import torch.nn as nn\n",
197 | "import torch.optim as optim\n",
198 | "import torch.nn.functional as F\n",
199 | "from torch.autograd import Variable"
200 | ]
201 | },
202 | {
203 | "cell_type": "code",
204 | "execution_count": 5,
205 | "metadata": {
206 | "ExecuteTime": {
207 | "end_time": "2019-04-08T22:44:07.313294Z",
208 | "start_time": "2019-04-08T22:44:07.298139Z"
209 | }
210 | },
211 | "outputs": [],
212 | "source": [
213 | "class IMDBRnn(nn.Module):\n",
214 | " \n",
215 | " def __init__(self,vocab,hidden_size,n_cat,bs=1,nl=2):\n",
216 | " super().__init__()\n",
217 | " self.hidden_size = hidden_size\n",
218 | " self.bs = bs\n",
219 | " self.nl = nl\n",
220 | " self.e = nn.Embedding(n_vocab,hidden_size)\n",
221 | " self.rnn = nn.LSTM(hidden_size,hidden_size,nl)\n",
222 | " self.fc2 = nn.Linear(hidden_size,n_cat)\n",
223 | " self.softmax = nn.LogSoftmax(dim=-1)\n",
224 | "\n",
225 | " def forward(self,inp):\n",
226 | " bs = inp.size()[1]\n",
227 | " if bs != self.bs:\n",
228 | " self.bs = bs\n",
229 | " e_out = self.e(inp)\n",
230 | " h0 = c0 = Variable(e_out.data.new(*(self.nl,self.bs,self.hidden_size)).zero_())\n",
231 | " rnn_o,_ = self.rnn(e_out,(h0,c0))\n",
232 | " rnn_o = rnn_o[-1]\n",
233 | " fc = F.dropout(self.fc2(rnn_o),p=0.8)\n",
234 | " return self.softmax(fc)"
235 | ]
236 | },
237 | {
238 | "cell_type": "code",
239 | "execution_count": 6,
240 | "metadata": {
241 | "ExecuteTime": {
242 | "end_time": "2019-04-08T22:44:08.565456Z",
243 | "start_time": "2019-04-08T22:44:08.560302Z"
244 | }
245 | },
246 | "outputs": [],
247 | "source": [
248 | "n_vocab = len(TEXT.vocab)\n",
249 | "n_hidden = 100"
250 | ]
251 | },
252 | {
253 | "cell_type": "code",
254 | "execution_count": 7,
255 | "metadata": {
256 | "ExecuteTime": {
257 | "end_time": "2019-04-08T22:44:12.310520Z",
258 | "start_time": "2019-04-08T22:44:12.271214Z"
259 | },
260 | "code_folding": []
261 | },
262 | "outputs": [],
263 | "source": [
264 | "model = IMDBRnn(n_vocab,n_hidden,n_cat=3,bs=32)\n",
265 | "#model = model.cuda()\n",
266 | "\n",
267 | "optimizer = optim.Adam(model.parameters(),lr=1e-3)\n",
268 | "\n",
269 | "def fit(epoch,model,data_loader,phase='training',volatile=False):\n",
270 | " if phase == 'training':\n",
271 | " model.train()\n",
272 | " if phase == 'validation':\n",
273 | " model.eval()\n",
274 | " volatile=True\n",
275 | " running_loss = 0.0\n",
276 | " running_correct = 0\n",
277 | " for batch_idx , batch in enumerate(data_loader):\n",
278 | " text , target = batch.text , batch.label\n",
279 | "# if is_cuda:\n",
280 | "# text,target = text.cuda(),target.cuda()\n",
281 | " \n",
282 | " if phase == 'training':\n",
283 | " optimizer.zero_grad()\n",
284 | " output = model(text)\n",
285 | " loss = F.nll_loss(output,target)\n",
286 | " \n",
287 | " #running_loss += F.nll_loss(output,target,size_average=False).data[0]\n",
288 | " running_loss += F.nll_loss(output,target,size_average=False).data\n",
289 | " preds = output.data.max(dim=1,keepdim=True)[1]\n",
290 | " running_correct += preds.eq(target.data.view_as(preds)).cpu().sum()\n",
291 | " if phase == 'training':\n",
292 | " loss.backward()\n",
293 | " optimizer.step()\n",
294 | " \n",
295 | " loss = running_loss/len(data_loader.dataset)\n",
296 | " accuracy = 100. * running_correct/len(data_loader.dataset)\n",
297 | " print(\"epoch: \", epoch, \"loss: \", loss, \"accuracy: \", accuracy)\n",
298 | " #print(f'{phase} loss is {loss:{5}.{2}} and {phase} accuracy is {running_correct}/{len(data_loader.dataset)}{accuracy:{10}.{4}}')\n",
299 | " return loss,accuracy"
300 | ]
301 | },
302 | {
303 | "cell_type": "code",
304 | "execution_count": 8,
305 | "metadata": {
306 | "ExecuteTime": {
307 | "end_time": "2019-04-08T23:54:32.198000Z",
308 | "start_time": "2019-04-08T22:45:14.817732Z"
309 | }
310 | },
311 | "outputs": [
312 | {
313 | "name": "stderr",
314 | "output_type": "stream",
315 | "text": [
316 | "/Users/jeffrey/anaconda2/envs/dl/lib/python3.6/site-packages/torch/nn/_reduction.py:49: UserWarning: size_average and reduce args will be deprecated, please use reduction='sum' instead.\n",
317 | " warnings.warn(warning.format(ret))\n"
318 | ]
319 | },
320 | {
321 | "name": "stdout",
322 | "output_type": "stream",
323 | "text": [
324 | "epoch: 1 loss: tensor(1.0033) accuracy: tensor(49)\n",
325 | "epoch: 1 loss: tensor(1.0032) accuracy: tensor(49)\n",
326 | "epoch: 2 loss: tensor(0.9953) accuracy: tensor(50)\n",
327 | "epoch: 2 loss: tensor(1.0013) accuracy: tensor(50)\n",
328 | "epoch: 3 loss: tensor(1.0006) accuracy: tensor(50)\n",
329 | "epoch: 3 loss: tensor(1.0029) accuracy: tensor(49)\n",
330 | "epoch: 4 loss: tensor(1.0017) accuracy: tensor(49)\n",
331 | "epoch: 4 loss: tensor(1.0013) accuracy: tensor(50)\n",
332 | "epoch: 5 loss: tensor(0.9996) accuracy: tensor(49)\n",
333 | "epoch: 5 loss: tensor(1.0014) accuracy: tensor(49)\n",
334 | "epoch: 6 loss: tensor(1.0021) accuracy: tensor(49)\n",
335 | "epoch: 6 loss: tensor(0.9967) accuracy: tensor(50)\n",
336 | "epoch: 7 loss: tensor(0.9996) accuracy: tensor(50)\n",
337 | "epoch: 7 loss: tensor(1.0007) accuracy: tensor(50)\n",
338 | "epoch: 8 loss: tensor(0.9939) accuracy: tensor(51)\n",
339 | "epoch: 8 loss: tensor(0.9715) accuracy: tensor(54)\n",
340 | "epoch: 9 loss: tensor(0.9452) accuracy: tensor(57)\n",
341 | "epoch: 9 loss: tensor(0.9408) accuracy: tensor(57)\n",
342 | "epoch: 10 loss: tensor(0.9110) accuracy: tensor(59)\n",
343 | "epoch: 10 loss: tensor(0.9207) accuracy: tensor(58)\n",
344 | "epoch: 11 loss: tensor(0.8968) accuracy: tensor(61)\n",
345 | "epoch: 11 loss: tensor(0.9228) accuracy: tensor(59)\n",
346 | "epoch: 12 loss: tensor(0.8757) accuracy: tensor(62)\n",
347 | "epoch: 12 loss: tensor(0.9147) accuracy: tensor(60)\n",
348 | "epoch: 13 loss: tensor(0.8700) accuracy: tensor(62)\n",
349 | "epoch: 13 loss: tensor(0.9154) accuracy: tensor(59)\n",
350 | "epoch: 14 loss: tensor(0.8537) accuracy: tensor(63)\n",
351 | "epoch: 14 loss: tensor(0.9107) accuracy: tensor(60)\n",
352 | "epoch: 15 loss: tensor(0.8455) accuracy: tensor(63)\n",
353 | "epoch: 15 loss: tensor(0.9230) accuracy: tensor(60)\n",
354 | "epoch: 16 loss: tensor(0.8319) accuracy: tensor(64)\n",
355 | "epoch: 16 loss: tensor(0.9202) accuracy: tensor(60)\n",
356 | "epoch: 17 loss: tensor(0.8274) accuracy: tensor(64)\n",
357 | "epoch: 17 loss: tensor(0.9392) accuracy: tensor(60)\n",
358 | "epoch: 18 loss: tensor(0.8199) accuracy: tensor(65)\n",
359 | "epoch: 18 loss: tensor(0.9498) accuracy: tensor(60)\n",
360 | "epoch: 19 loss: tensor(0.8122) accuracy: tensor(65)\n",
361 | "epoch: 19 loss: tensor(0.9666) accuracy: tensor(60)\n",
362 | "69.28943564891816\n",
363 | "Execution Time: 69.3 minutes\n"
364 | ]
365 | }
366 | ],
367 | "source": [
368 | "import time\n",
369 | "start = time.time()\n",
370 | "\n",
371 | "train_losses , train_accuracy = [],[]\n",
372 | "val_losses , val_accuracy = [],[]\n",
373 | "\n",
374 | "for epoch in range(1,20):\n",
375 | "\n",
376 | " epoch_loss, epoch_accuracy = fit(epoch,model,train_iter,phase='training')\n",
377 | " val_epoch_loss , val_epoch_accuracy = fit(epoch,model,test_iter,phase='validation')\n",
378 | " train_losses.append(epoch_loss)\n",
379 | " train_accuracy.append(epoch_accuracy)\n",
380 | " val_losses.append(val_epoch_loss)\n",
381 | " val_accuracy.append(val_epoch_accuracy)\n",
382 | " \n",
383 | "end = time.time()\n",
384 | "print((end-start)/60)\n",
385 | "print(\"Execution Time: \", round(((end-start)/60),1), \"minutes\")"
386 | ]
387 | },
388 | {
389 | "cell_type": "code",
390 | "execution_count": 9,
391 | "metadata": {
392 | "ExecuteTime": {
393 | "end_time": "2019-04-09T00:34:59.546310Z",
394 | "start_time": "2019-04-09T00:34:58.418822Z"
395 | }
396 | },
397 | "outputs": [
398 | {
399 | "data": {
400 | "text/plain": [
401 | ""
402 | ]
403 | },
404 | "execution_count": 9,
405 | "metadata": {},
406 | "output_type": "execute_result"
407 | },
408 | {
409 | "data": {
410 | "image/png": "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\n",
411 | "text/plain": [
412 | ""
413 | ]
414 | },
415 | "metadata": {},
416 | "output_type": "display_data"
417 | }
418 | ],
419 | "source": [
420 | "import matplotlib.pyplot as plt\n",
421 | "%matplotlib inline\n",
422 | "\n",
423 | "plt.plot(range(1,len(train_losses)+1),train_losses,'bo',label = 'training loss')\n",
424 | "plt.plot(range(1,len(val_losses)+1),val_losses,'r',label = 'validation loss')\n",
425 | "plt.legend()"
426 | ]
427 | },
428 | {
429 | "cell_type": "code",
430 | "execution_count": 10,
431 | "metadata": {
432 | "ExecuteTime": {
433 | "end_time": "2019-04-09T00:34:59.840977Z",
434 | "start_time": "2019-04-09T00:34:59.638075Z"
435 | }
436 | },
437 | "outputs": [
438 | {
439 | "data": {
440 | "text/plain": [
441 | ""
442 | ]
443 | },
444 | "execution_count": 10,
445 | "metadata": {},
446 | "output_type": "execute_result"
447 | },
448 | {
449 | "data": {
450 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD8CAYAAABn919SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xl4VdW5x/Hvy2QMIpOoKEKwVlSQ\nMERFRcQiXovzgNbGiniVxwn1tmpxam2tncDWoeo1eh0osUFRqrZOjMVaHAKCWEBRCRJkCKAMBWTI\ne/9YJzFAQk6SM+f3eZ7znLP32XudNzvJm5W112DujoiIpL8myQ5ARERiQwldRCRDKKGLiGQIJXQR\nkQyhhC4ikiGU0EVEMoQSuohIhlBCFxHJEEroIiIZolkiP2y//fbznJycRH6kiEjamzVr1mp371Db\ncQlN6Dk5ORQXFyfyI0VE0p6ZLYnmODW5iIhkCCV0EZEMoYQuIpIhEtqGXp1t27ZRWlrKli1bkh2K\n1CIrK4tOnTrRvHnzZIciItVIekIvLS2lVatW5OTkYGbJDkdq4O6sWbOG0tJSunbtmuxwRKQaSW9y\n2bJlC+3bt1cyT3FmRvv27fWflDQqhYWQkwNNmoTnwsLklBGtpNfQASXzNKHvkzQmhYUwYgRs2hS2\nlywJ2wD5+Ykroy6SXkMXEUlFd9zxbSKusGlT2J/IMuqi0Sf0r7/+mkceeaRe5w4ZMoSvv/46xhGJ\nSCr44ou67Y9XGXWRdgk91u1Re0ro27dv3+O5r776Km3atGlYAHHg7pSXlyc7DJG01rlz3fbHq4y6\nSKuEXtEetWQJuH/bHtWQpD5q1Cg+++wzevXqxS233ML06dM56aSTOPvssznqqKMAOPfcc+nbty/d\nu3enoKCg8tycnBxWr15NSUkJRx55JFdddRXdu3fntNNOY/Pmzbt91iuvvMJxxx1H7969OfXUU1m5\nciUAGzduZPjw4Rx99NH07NmTF154AYDXX3+dPn36kJuby6BBgwC4++67GTNmTGWZPXr0oKSkhJKS\nErp168Zll11Gjx49WLp0Kddccw15eXl0796dn//855XnvP/++5xwwgnk5uZy7LHHsmHDBgYMGMCc\nOXMqj+nfvz9z586t/4UVSXP33gvZ2Tvvy84O+xNZRp24e8Ieffv29V3Nnz9/t3016dLFPaTynR9d\nukRdxG4WL17s3bt3r9yeNm2aZ2dn++eff165b82aNe7uvmnTJu/evbuvXr06Ek8XLysr88WLF3vT\npk39gw8+cHf3oUOH+p///OfdPmvt2rVeXl7u7u6PP/64//jHP3Z391tvvdVvvPHGnY5btWqVd+rU\nqTKOihh+/vOf++jRoyuP7d69uy9evNgXL17sZuYzZ87cLe7t27f7ySef7HPnzvVvvvnGu3bt6u+9\n9567u69bt863bdvmTz/9dGUMH3/8sVf3vXKv2/dLJN2NGxfyi1l4HjcuOWUAxR5Fjk2JXi7RSlR7\n1LHHHrtTX+sHH3yQiRMnArB06VIWLVpE+/btdzqna9eu9OrVC4C+fftSUlKyW7mlpaVcfPHFLF++\nnK1bt1Z+xuTJkykqKqo8rm3btrzyyisMGDCg8ph27drVGneXLl3o169f5fZzzz1HQUEB27dvZ/ny\n5cyfPx8zo2PHjhxzzDEA7LvvvgAMHTqUe+65h9GjR/Pkk09y+eWX1/p5IpkuP7/hvVFiUUa00qrJ\nJVHtUS1btqx8PX36dCZPnszMmTOZO3cuvXv3rrYv9l577VX5umnTptW2v48cOZLrr7+eefPm8dhj\nj9WrT3ezZs12ah+vWkbVuBcvXsyYMWOYMmUKH374IWecccYePy87O5vBgwfz0ksv8dxzz5GfqJ9A\nEYmZtEro8WiPatWqFRs2bKjx/XXr1tG2bVuys7NZuHAh77zzTr0/a926dRx88MEAPPPMM5X7Bw8e\nzMMPP1y5/dVXX9GvXz9mzJjB4sWLAVi7di0Q2u1nz54NwOzZsyvf39X69etp2bIlrVu3ZuXKlbz2\n2msAdOvWjeXLl/P+++8DsGHDhso/PldeeSU33HADxxxzDG3btq331ykiyZFWCT0/HwoKoEsXMAvP\nBQUN+3emffv2nHjiifTo0YNbbrllt/dPP/10tm/fzpFHHsmoUaN2atKoq7vvvpuhQ4fSt29f9ttv\nv8r9d955J1999RU9evQgNzeXadOm0aFDBwoKCjj//PPJzc3l4osvBuCCCy5g7dq1dO/enT/96U8c\nfvjh1X5Wbm4uvXv35ogjjuCHP/whJ554IgAtWrRg/PjxjBw5ktzcXAYPHlxZc+/bty/77rsvw4cP\nr/fXKCLJY6G9PTHy8vJ81wUuFixYwJFHHpmwGKRmX375JQMHDmThwoU0aVL933p9v0QSz8xmuXte\n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\nySVhIq16OO88cGArLZjMqZX7NbGWSJJFk/WrPoC7gZuBj4GOkX0dgY9rOzehNfTSUveBA93Bx/FD\nb8U6b8ZW/w0/dQdf2Ly7+7x5URXVoBr6Bx+4d+vmbuZ+113u27a5f/WV+4UXhkJOPdV9+fKGfKXR\neeUV9/bt3bOz3Z96yr28vN7AsJjnAAAI3klEQVRFxew/FhGJClHW0KNJ4C2BVlVe/ws4HRgNjIrs\nHwX8vrayEpbQqySvf414yrP3Lt8p8Zy515u+qfUB7llZ7o8+WmtyGzcu5MGqZWRnh/01Ki93f+AB\n9xYt3A86yH3q1N3ff+yxEEOHDu6vvdbwr7s6W7a433hjCLpXL/eFCxtcZL2uh4jUWywT+qHA3Mjj\n38Adkf3tCb1bFgGTgXa1lRX3hL5li/sNN+yWvMaNC7VHs/A8bpy7r1jhftpp4dgLLnBfu3aPRVdb\nRk3KytzPOivy1+PMsF2Tjz5y79EjHHvzze7ffFO3r3lPPv7YvXfvUPYNN7hv3hyzout0PUSkQWKW\n0GP5iGtCX7gwJPGK5LVlS+3n7Njh/vvfuzdr5t65s/s//9nwOKZNcz/44FAzv//+6Jo2Nm1yv/rq\nEPsxx7h/+mnDYigvd3/6afeWLcN/Ki+/3LDyRCSpGk9Cj0Xyevdd90MPdW/aNPQA2b697mVs2xba\nyM3cv/td99mz617GhAnubdqEnjCFhXU/3919/Xr3/PzwrT355HAvQUTSWuNI6OvWxS55rVvnfskl\noayBA+tW1hdfuPfvH84dNsx9w4b6x1FS4n7iiaGsyy+vW1nvv+/+ne+ELom/+EX9/jCJSMrJ/IRe\nNXn98pexSV7l5e5PPhnu8LVvH26u1ubFF93btnXfZ5/YNSRv2+Z+552htt+tW+gpsyc7driPGePe\nvLn7IYe4z5gRmzhEJCVkbkLfNXm99VbDy9zVggXuubnh8tx4Y/Xt8Zs2uV97bTimb1/3RYtiH8fU\nqaGHTIsWocdMde3xK1e6n356iOPcc93XrIl9HCKSVBmT0Kv2pujTaaUv6xlJXuedF9/ktXmz+8iR\n4bN69w49RirMn+9+9NHhvZ/8JOqeKfXqGVJWFnrKgPtZZ/nzj5ZVlnHJ/pN9U+sD3ffay/3hh6Pu\nW64eKiLpJSMSetX+zoOY5F9yoG9mL3/38kcaNDCmTl56yb1du3DT9emn3R9/3H3vvUPf8VdfjbqY\nBvXdLi93v/9+396shZfawT6ISX4vt/kOzOfbkf63X89NTBwikhQZkdArRiTezq98B+b/5kjvwYeJ\nH5G4dKn7gAHfZsBBg9y//LJORcRidOWQjrP9Y75beXIBV3o2G5MzL42IJEy0Cd3CsYmRl5fnxcXF\nUR/fpElINxcxnkFM4SbuZzPZmIU1iRNqxw64/35o2hRuuKHO869UfC27qsvX0qQJZPtG7uRXFJPH\nC1xYrzIaGoeIJJaZzfJvpy6v+bhUTug5OWGq2l116QIlJTELKyFi8bWkShkikljRJvSUXoLu3nvD\n1OFVZWeH/ekmFl9LqpQhIikqmnaZWD0a2ssl3XtkxOJrSZUyRCRxyIQ2dBERyZAmFxERiZ4SuohI\nhlBCFxHJEEroIiIZQgldRCRDJLSXi5mVAdUMa0kp+wGrkx1EFBRnbKVLnJA+sSrO2Oni7h1qOyih\nCT0dmFlxNN2Dkk1xxla6xAnpE6viTDw1uYiIZAgldBGRDKGEvruCZAcQJcUZW+kSJ6RPrIozwdSG\nLiKSIVRDFxHJEI0uoZvZIWY2zczmm9m/zezGao4ZaGbrzGxO5PGzZMQaiaXEzOZF4thtZjMLHjSz\nT83sQzPrk4QYu1W5VnPMbL2Z3bTLMUm5pmb2pJmtMrOPquxrZ2aTzGxR5LltDecOixyzyMyGJSnW\n0Wa2MPK9nWhmbWo4d48/JwmI824zW1bl+zukhnNPN7OPIz+vo5IQ5/gqMZaY2Zwazk3Y9YypaKZk\nzKQH0BHoE3ndCvgEOGqXYwYCf0t2rJFYSoD99vD+EOA1wIB+wLtJjrcpsILQbzbp1xQYAPQBPqqy\n7/fAqMjrUcDvqjmvHfB55Llt5HXbJMR6GtAs8vp31cUazc9JAuK8G7g5ip+Nz4BDgRbA3F1/9+Id\n5y7v3wf8LNnXM5aPRldDd/fl7j478noDsAA4OLlRNcg5wFgP3gHamFnHJMYzCPjM3VNiAJm7zwDW\n7rL7HOCZyOtngHOrOfW/gEnuvtbdvwImAafHLVCqj9Xd33T37ZHNd4BO8YwhGjVc02gcC3zq7p+7\n+1agiPC9iIs9xWlmBlwE/CVen58MjS6hV2VmOUBv4N1q3j7ezOaa2Wtm1j2hge3MgTfNbJaZjajm\n/YOBpVW2S0nuH6gfUPMvSapc0wPcfXnk9QrggGqOSbXrCnAF4b+x6tT2c5II10eahp6soRkrla7p\nScBKd19Uw/upcD3rrNEmdDPbB3gBuMnd1+/y9mxCk0Eu8BDw10THV0V/d+8DfB+4zswGJDGWPTKz\nFsDZwPPVvJ1K17SSh/+vU76rl5ndAWwHCms4JNk/J48C3wF6AcsJzRmp7BL2XDtP9vWsl0aZ0M2s\nOSGZF7r7i7u+7+7r3X1j5PWrQHMz2y/BYVbEsizyvAqYSPi3taplwCFVtjtF9iXD94HZ7r5y1zdS\n6ZoCKyuapSLPq6o5JmWuq5ldDpwJ5Ef+AO0mip+TuHL3le6+w93Lgcdr+PyUuKZm1gw4Hxhf0zHJ\nvp711egSeqTt7P+ABe7+hxqOOTByHGZ2LOE6rUlclJVxtDSzVhWvCTfIPtrlsJeByyK9XfoB66o0\nJyRajbWeVLmmES8DFb1WhgEvVXPMG8BpZtY20nxwWmRfQpnZ6cCtwNnuvqmGY6L5OYmrXe7bnFfD\n578PfNfMukb+m/sB4XuRaKcCC929tLo3U+F61luy78om+gH0J/yL/SEwJ/IYAlwNXB055nrg34S7\n8O8AJyQp1kMjMcyNxHNHZH/VWA14mNB7YB6Ql6RYWxISdOsq+5J+TQl/YJYD2whttv8NtAemAIuA\nyUC7yLF5wBNVzr0C+DTyGJ6kWD8ltDtX/Kz+b+TYg4BX9/RzkuA4/xz5+fuQkKQ77hpnZHsIoWfZ\nZ8mIM7L/6YqfyyrHJu16xvKhkaIiIhmi0TW5iIhkKiV0EZEMoYQuIpIhlNBFRDKEErqISIZQQhcR\nyRBK6CIiGUIJXUQkQ/w/BxiZeKzWLXYAAAAASUVORK5CYII=\n",
451 | "text/plain": [
452 | ""
453 | ]
454 | },
455 | "metadata": {},
456 | "output_type": "display_data"
457 | }
458 | ],
459 | "source": [
460 | "plt.plot(range(1,len(train_accuracy)+1),train_accuracy,'bo',label = 'train accuracy')\n",
461 | "plt.plot(range(1,len(val_accuracy)+1),val_accuracy,'r',label = 'val accuracy')\n",
462 | "plt.legend()"
463 | ]
464 | },
465 | {
466 | "cell_type": "code",
467 | "execution_count": null,
468 | "metadata": {},
469 | "outputs": [],
470 | "source": []
471 | }
472 | ],
473 | "metadata": {
474 | "kernelspec": {
475 | "display_name": "Python [conda env:dl]",
476 | "language": "python",
477 | "name": "conda-env-dl-py"
478 | },
479 | "language_info": {
480 | "codemirror_mode": {
481 | "name": "ipython",
482 | "version": 3
483 | },
484 | "file_extension": ".py",
485 | "mimetype": "text/x-python",
486 | "name": "python",
487 | "nbconvert_exporter": "python",
488 | "pygments_lexer": "ipython3",
489 | "version": "3.6.7"
490 | },
491 | "toc": {
492 | "base_numbering": 1,
493 | "nav_menu": {},
494 | "number_sections": true,
495 | "sideBar": true,
496 | "skip_h1_title": false,
497 | "title_cell": "Table of Contents",
498 | "title_sidebar": "Contents",
499 | "toc_cell": false,
500 | "toc_position": {},
501 | "toc_section_display": true,
502 | "toc_window_display": false
503 | },
504 | "varInspector": {
505 | "cols": {
506 | "lenName": 16,
507 | "lenType": 16,
508 | "lenVar": 40
509 | },
510 | "kernels_config": {
511 | "python": {
512 | "delete_cmd_postfix": "",
513 | "delete_cmd_prefix": "del ",
514 | "library": "var_list.py",
515 | "varRefreshCmd": "print(var_dic_list())"
516 | },
517 | "r": {
518 | "delete_cmd_postfix": ") ",
519 | "delete_cmd_prefix": "rm(",
520 | "library": "var_list.r",
521 | "varRefreshCmd": "cat(var_dic_list()) "
522 | }
523 | },
524 | "types_to_exclude": [
525 | "module",
526 | "function",
527 | "builtin_function_or_method",
528 | "instance",
529 | "_Feature"
530 | ],
531 | "window_display": false
532 | }
533 | },
534 | "nbformat": 4,
535 | "nbformat_minor": 2
536 | }
537 |
--------------------------------------------------------------------------------
/Notebook/data/section6/series1_Xtrain.csv:
--------------------------------------------------------------------------------
1 | -2.450477613392171294e-02,-1.755566312546923691e-01,-7.838639448072381999e-02,2.175259428451395693e-01,-3.244331469657286970e-02,2.846883176895338985e-01,-1.820889845938324647e-01,9.098424833831947334e-02,4.654354052957652144e-01,9.888777767065648483e-02,-1.269294512989796730e-01,-1.208791575705959187e-01,-2.740670233924963339e-03,3.890662283697150781e-02,9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02
2 | -1.755566312546923691e-01,-7.838639448072381999e-02,2.175259428451395693e-01,-3.244331469657286970e-02,2.846883176895338985e-01,-1.820889845938324647e-01,9.098424833831947334e-02,4.654354052957652144e-01,9.888777767065648483e-02,-1.269294512989796730e-01,-1.208791575705959187e-01,-2.740670233924963339e-03,3.890662283697150781e-02,9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01
3 | -7.838639448072381999e-02,2.175259428451395693e-01,-3.244331469657286970e-02,2.846883176895338985e-01,-1.820889845938324647e-01,9.098424833831947334e-02,4.654354052957652144e-01,9.888777767065648483e-02,-1.269294512989796730e-01,-1.208791575705959187e-01,-2.740670233924963339e-03,3.890662283697150781e-02,9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01
4 | 2.175259428451395693e-01,-3.244331469657286970e-02,2.846883176895338985e-01,-1.820889845938324647e-01,9.098424833831947334e-02,4.654354052957652144e-01,9.888777767065648483e-02,-1.269294512989796730e-01,-1.208791575705959187e-01,-2.740670233924963339e-03,3.890662283697150781e-02,9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02
5 | -3.244331469657286970e-02,2.846883176895338985e-01,-1.820889845938324647e-01,9.098424833831947334e-02,4.654354052957652144e-01,9.888777767065648483e-02,-1.269294512989796730e-01,-1.208791575705959187e-01,-2.740670233924963339e-03,3.890662283697150781e-02,9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01
6 | 2.846883176895338985e-01,-1.820889845938324647e-01,9.098424833831947334e-02,4.654354052957652144e-01,9.888777767065648483e-02,-1.269294512989796730e-01,-1.208791575705959187e-01,-2.740670233924963339e-03,3.890662283697150781e-02,9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01
7 | -1.820889845938324647e-01,9.098424833831947334e-02,4.654354052957652144e-01,9.888777767065648483e-02,-1.269294512989796730e-01,-1.208791575705959187e-01,-2.740670233924963339e-03,3.890662283697150781e-02,9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01
8 | 9.098424833831947334e-02,4.654354052957652144e-01,9.888777767065648483e-02,-1.269294512989796730e-01,-1.208791575705959187e-01,-2.740670233924963339e-03,3.890662283697150781e-02,9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01
9 | 4.654354052957652144e-01,9.888777767065648483e-02,-1.269294512989796730e-01,-1.208791575705959187e-01,-2.740670233924963339e-03,3.890662283697150781e-02,9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02
10 | 9.888777767065648483e-02,-1.269294512989796730e-01,-1.208791575705959187e-01,-2.740670233924963339e-03,3.890662283697150781e-02,9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01
11 | -1.269294512989796730e-01,-1.208791575705959187e-01,-2.740670233924963339e-03,3.890662283697150781e-02,9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02
12 | -1.208791575705959187e-01,-2.740670233924963339e-03,3.890662283697150781e-02,9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02
13 | -2.740670233924963339e-03,3.890662283697150781e-02,9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02
14 | 3.890662283697150781e-02,9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01
15 | 9.446635557782918913e-02,-2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01
16 | -2.373757951107593467e-01,-5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02
17 | -5.287728890671301168e-02,-1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02
18 | -1.237119568764060984e-01,-2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02
19 | -2.264681954506769512e-01,9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02
20 | 9.869829553160965052e-02,1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01
21 | 1.820782193763630374e-01,-1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01
22 | -1.686233766861378047e-01,5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01
23 | 5.431798219834728381e-02,1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02
24 | 1.890295703933203841e-01,1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02
25 | 1.286949950230161233e-01,1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01
26 | 1.556939009220553727e-01,-1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02
27 | -1.320145200312870526e-01,4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02
28 | 4.477180612332511134e-02,1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02
29 | 1.634939125073499588e-01,7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02
30 | 7.712144500935499969e-02,-7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02
31 | -7.400578863873377711e-02,2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02
32 | 2.266199820141617804e-02,-1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02
33 | -1.915772783543262248e-01,-1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02
34 | -1.856746267109581905e-01,2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01
35 | 2.210499907194347913e-02,-5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01
36 | -5.950034412144390022e-02,4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03
37 | 4.223250814338921216e-02,-7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02
38 | -7.726015650015510827e-02,-1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02
39 | -1.009016078948293260e-01,1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02
40 | 1.432909838879019016e-01,1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02
41 | 1.308926158980145971e-01,-8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01
42 | -8.947956278991478496e-02,9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01
43 | 9.205657966235250567e-02,1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02
44 | 1.421588936348644472e-01,8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02
45 | 8.966223224907717004e-02,9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02
46 | 9.675867426389285486e-02,1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02
47 | 1.145770484988862387e-02,-6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02
48 | -6.619252614385424949e-02,-4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02
49 | -4.880814523516521092e-02,-8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02
50 | -8.721007271931062454e-02,-3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02
51 | -3.460915048891051449e-02,9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01
52 | 9.025319433950558523e-02,-1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02
53 | -1.632052081599277837e-01,-1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02
54 | -1.181326122866943329e-01,-8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02
55 | -8.050129637396957749e-03,-1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04
56 | -1.973019804463441509e-02,2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02
57 | 2.193244276327200107e-02,1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02
58 | 1.781190620484248213e-02,3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02
59 | 3.103514255095075891e-02,1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02
60 | 1.330544384146788439e-01,1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02
61 | 1.115094287646074822e-01,-1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02
62 | -1.494407311730083961e-02,8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02
63 | 8.059363916605562228e-02,2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02
64 | 2.313535278373939422e-02,-5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02
65 | -5.599486132336146949e-02,5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02
66 | 5.136282737600912640e-02,4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01
67 | 4.974270823347717863e-02,-6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01,-2.653298352688192654e-02
68 | -6.248895197686359787e-02,-8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01,-2.653298352688192654e-02,-1.567233953349612963e-02
69 | -8.139705309052219784e-02,-1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01,-2.653298352688192654e-02,-1.567233953349612963e-02,-5.673691585334017518e-02
70 | -1.334271127830742587e-01,-4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01,-2.653298352688192654e-02,-1.567233953349612963e-02,-5.673691585334017518e-02,-2.517066424745018072e-02
71 | -4.745897853771704339e-02,1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01,-2.653298352688192654e-02,-1.567233953349612963e-02,-5.673691585334017518e-02,-2.517066424745018072e-02,-4.134389301899149549e-02
72 | 1.731873150439666373e-02,-7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01,-2.653298352688192654e-02,-1.567233953349612963e-02,-5.673691585334017518e-02,-2.517066424745018072e-02,-4.134389301899149549e-02,-2.669970920745882645e-02
73 | -7.255800503234495491e-02,5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01,-2.653298352688192654e-02,-1.567233953349612963e-02,-5.673691585334017518e-02,-2.517066424745018072e-02,-4.134389301899149549e-02,-2.669970920745882645e-02,-6.801703316738186983e-03
74 | 5.486038020152614325e-04,5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01,-2.653298352688192654e-02,-1.567233953349612963e-02,-5.673691585334017518e-02,-2.517066424745018072e-02,-4.134389301899149549e-02,-2.669970920745882645e-02,-6.801703316738186983e-03,-1.930791981497653742e-02
75 | 5.829412102344513208e-02,1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01,-2.653298352688192654e-02,-1.567233953349612963e-02,-5.673691585334017518e-02,-2.517066424745018072e-02,-4.134389301899149549e-02,-2.669970920745882645e-02,-6.801703316738186983e-03,-1.930791981497653742e-02,3.550238996852180667e-02
76 | 1.738615755022613479e-02,2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01,-2.653298352688192654e-02,-1.567233953349612963e-02,-5.673691585334017518e-02,-2.517066424745018072e-02,-4.134389301899149549e-02,-2.669970920745882645e-02,-6.801703316738186983e-03,-1.930791981497653742e-02,3.550238996852180667e-02,7.577017637904974456e-02
77 | 2.112576546993064769e-02,7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01,-2.653298352688192654e-02,-1.567233953349612963e-02,-5.673691585334017518e-02,-2.517066424745018072e-02,-4.134389301899149549e-02,-2.669970920745882645e-02,-6.801703316738186983e-03,-1.930791981497653742e-02,3.550238996852180667e-02,7.577017637904974456e-02,2.691879535049822997e-02
78 | 7.306140679844927432e-02,2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01,-2.653298352688192654e-02,-1.567233953349612963e-02,-5.673691585334017518e-02,-2.517066424745018072e-02,-4.134389301899149549e-02,-2.669970920745882645e-02,-6.801703316738186983e-03,-1.930791981497653742e-02,3.550238996852180667e-02,7.577017637904974456e-02,2.691879535049822997e-02,6.374986197453935688e-02
79 | 2.167369253259386619e-02,6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01,-2.653298352688192654e-02,-1.567233953349612963e-02,-5.673691585334017518e-02,-2.517066424745018072e-02,-4.134389301899149549e-02,-2.669970920745882645e-02,-6.801703316738186983e-03,-1.930791981497653742e-02,3.550238996852180667e-02,7.577017637904974456e-02,2.691879535049822997e-02,6.374986197453935688e-02,9.156146234057413458e-02
80 | 6.310540503079302421e-02,6.519694160081293544e-02,2.842745776743858116e-02,7.375395612694646275e-02,-4.075139811957750879e-02,-1.144381064408687837e-01,-2.653298352688192654e-02,-1.567233953349612963e-02,-5.673691585334017518e-02,-2.517066424745018072e-02,-4.134389301899149549e-02,-2.669970920745882645e-02,-6.801703316738186983e-03,-1.930791981497653742e-02,3.550238996852180667e-02,7.577017637904974456e-02,2.691879535049822997e-02,6.374986197453935688e-02,9.156146234057413458e-02,-2.548518833198146379e-03
81 |
--------------------------------------------------------------------------------
/Notebook/data/section6/series1_ytrain.csv:
--------------------------------------------------------------------------------
1 | 1.820782193763630374e-01
2 | -1.686233766861378047e-01
3 | 5.431798219834728381e-02
4 | 1.890295703933203841e-01
5 | 1.286949950230161233e-01
6 | 1.556939009220553727e-01
7 | -1.320145200312870526e-01
8 | 4.477180612332511134e-02
9 | 1.634939125073499588e-01
10 | 7.712144500935499969e-02
11 | -7.400578863873377711e-02
12 | 2.266199820141617804e-02
13 | -1.915772783543262248e-01
14 | -1.856746267109581905e-01
15 | 2.210499907194347913e-02
16 | -5.950034412144390022e-02
17 | 4.223250814338921216e-02
18 | -7.726015650015510827e-02
19 | -1.009016078948293260e-01
20 | 1.432909838879019016e-01
21 | 1.308926158980145971e-01
22 | -8.947956278991478496e-02
23 | 9.205657966235250567e-02
24 | 1.421588936348644472e-01
25 | 8.966223224907717004e-02
26 | 9.675867426389285486e-02
27 | 1.145770484988862387e-02
28 | -6.619252614385424949e-02
29 | -4.880814523516521092e-02
30 | -8.721007271931062454e-02
31 | -3.460915048891051449e-02
32 | 9.025319433950558523e-02
33 | -1.632052081599277837e-01
34 | -1.181326122866943329e-01
35 | -8.050129637396957749e-03
36 | -1.973019804463441509e-02
37 | 2.193244276327200107e-02
38 | 1.781190620484248213e-02
39 | 3.103514255095075891e-02
40 | 1.330544384146788439e-01
41 | 1.115094287646074822e-01
42 | -1.494407311730083961e-02
43 | 8.059363916605562228e-02
44 | 2.313535278373939422e-02
45 | -5.599486132336146949e-02
46 | 5.136282737600912640e-02
47 | 4.974270823347717863e-02
48 | -6.248895197686359787e-02
49 | -8.139705309052219784e-02
50 | -1.334271127830742587e-01
51 | -4.745897853771704339e-02
52 | 1.731873150439666373e-02
53 | -7.255800503234495491e-02
54 | 5.486038020152614325e-04
55 | 5.829412102344513208e-02
56 | 1.738615755022613479e-02
57 | 2.112576546993064769e-02
58 | 7.306140679844927432e-02
59 | 2.167369253259386619e-02
60 | 6.310540503079302421e-02
61 | 6.519694160081293544e-02
62 | 2.842745776743858116e-02
63 | 7.375395612694646275e-02
64 | -4.075139811957750879e-02
65 | -1.144381064408687837e-01
66 | -2.653298352688192654e-02
67 | -1.567233953349612963e-02
68 | -5.673691585334017518e-02
69 | -2.517066424745018072e-02
70 | -4.134389301899149549e-02
71 | -2.669970920745882645e-02
72 | -6.801703316738186983e-03
73 | -1.930791981497653742e-02
74 | 3.550238996852180667e-02
75 | 7.577017637904974456e-02
76 | 2.691879535049822997e-02
77 | 6.374986197453935688e-02
78 | 9.156146234057413458e-02
79 | -2.548518833198146379e-03
80 | -5.522199146434654538e-03
81 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ## [Get this title for $10 on Packt's Spring Sale](https://www.packt.com/C13555?utm_source=github&utm_medium=packt-github-repo&utm_campaign=spring_10_dollar_2022)
5 | -----
6 | For a limited period, all eBooks and Videos are only $10. All the practical content you need \- by developers, for developers
7 |
8 | # Practical-Deep-Learning-with-PyTorch
9 | Live Training by Packt, with Jeffrey Yau.
10 | ### Download a free PDF
11 |
12 | If you have already purchased a print or Kindle version of this book, you can get a DRM-free PDF version at no cost. Simply click on the link to claim your free PDF.
13 | https://packt.link/free-ebook/9781838556839
--------------------------------------------------------------------------------