├── README.md └── structuredData └── StructuredDeepLearning_Manthan.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # NeuralNetworks 2 | NeuralNetworks 3 | -------------------------------------------------------------------------------- /structuredData/StructuredDeepLearning_Manthan.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Structured Data Learning Template for deep Neural Networks Using fast AI library" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 1, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "%matplotlib inline\n", 17 | "%reload_ext autoreload\n", 18 | "%autoreload 2" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 2, 24 | "metadata": {}, 25 | "outputs": [], 26 | "source": [ 27 | "from fastai.structured import *\n", 28 | "from fastai.column_data import *\n", 29 | "from sklearn.datasets import load_boston\n", 30 | "\n", 31 | "np.set_printoptions(threshold=50, edgeitems=20)\n", 32 | "\n", 33 | "PATH='data/manthan/'" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "## Create datasets" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 100, 46 | "metadata": {}, 47 | "outputs": [ 48 | { 49 | "name": "stdout", 50 | "output_type": "stream", 51 | "text": [ 52 | "13\n" 53 | ] 54 | } 55 | ], 56 | "source": [ 57 | "data= load_boston()\n", 58 | "print(len(data.feature_names))" 59 | ] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": {}, 64 | "source": [ 65 | "## Data Cleaning / Feature Engineering" 66 | ] 67 | }, 68 | { 69 | "cell_type": "markdown", 70 | "metadata": {}, 71 | "source": [ 72 | "## Durations" 73 | ] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": {}, 78 | "source": [ 79 | "## Create features\n" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [ 86 | "## Linear Regression" 87 | ] 88 | }, 89 | { 90 | "cell_type": "markdown", 91 | "metadata": {}, 92 | "source": [ 93 | "Let's first apply a simple linear regression by scikit learn and see the baseline results and try using deep learning library to see if we can beat those results.\n" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 55, 99 | "metadata": {}, 100 | "outputs": [ 101 | { 102 | "name": "stdout", 103 | "output_type": "stream", 104 | "text": [ 105 | "training error 22.9834937317 test_error 20.7471433603\n" 106 | ] 107 | } 108 | ], 109 | "source": [ 110 | "from sklearn.linear_model import LinearRegression\n", 111 | "from sklearn.model_selection import train_test_split\n", 112 | "from sklearn.metrics import mean_squared_error\n", 113 | "import numpy as np\n", 114 | "X=data.data\n", 115 | "y=data.target\n", 116 | "\n", 117 | "X_train,X_test,y_train,y_test=train_test_split(X, y, test_size=0.33, random_state=42)\n", 118 | "model=LinearRegression().fit(X_train,y_train)\n", 119 | "\n", 120 | "train_error= mean_squared_error(model.predict(X_train),y_train)\n", 121 | "test_error= mean_squared_error(model.predict(X_test),y_test)\n", 122 | "print('training error',train_error,'test_error',test_error)" 123 | ] 124 | }, 125 | { 126 | "cell_type": "markdown", 127 | "metadata": {}, 128 | "source": [ 129 | "## DeepLearning" 130 | ] 131 | }, 132 | { 133 | "cell_type": "markdown", 134 | "metadata": {}, 135 | "source": [ 136 | "RMSE being the evaluation criteria" 137 | ] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "execution_count": 179, 142 | "metadata": {}, 143 | "outputs": [ 144 | { 145 | "data": { 146 | "text/plain": [ 147 | "506" 148 | ] 149 | }, 150 | "execution_count": 179, 151 | "metadata": {}, 152 | "output_type": "execute_result" 153 | } 154 | ], 155 | "source": [ 156 | "def inv_y(a): return np.exp(a)\n", 157 | "\n", 158 | "def exp_rmspe(y_pred, targ):\n", 159 | " targ = inv_y(targ)\n", 160 | " pct_var = (targ - inv_y(y_pred))/targ\n", 161 | " return math.sqrt((pct_var**2).mean())\n", 162 | "\n", 163 | "len(data.target.astype(np.float32))" 164 | ] 165 | }, 166 | { 167 | "cell_type": "markdown", 168 | "metadata": {}, 169 | "source": [ 170 | "Boston Dataset with chas being the categorical attribute" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": 190, 176 | "metadata": {}, 177 | "outputs": [ 178 | { 179 | "name": "stdout", 180 | "output_type": "stream", 181 | "text": [ 182 | " CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX \\\n", 183 | "0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 \n", 184 | "1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 \n", 185 | "2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0 \n", 186 | "3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0 \n", 187 | "4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0 \n", 188 | "\n", 189 | " PTRATIO B LSTAT \n", 190 | "0 15.3 396.90 4.98 \n", 191 | "1 17.8 396.90 9.14 \n", 192 | "2 17.8 392.83 4.03 \n", 193 | "3 18.7 394.63 2.94 \n", 194 | "4 18.7 396.90 5.33 \n" 195 | ] 196 | } 197 | ], 198 | "source": [ 199 | "print(dl_data.head())" 200 | ] 201 | }, 202 | { 203 | "cell_type": "markdown", 204 | "metadata": {}, 205 | "source": [ 206 | "Cross Validation Indexes should be choosed randomly from the dataset " 207 | ] 208 | }, 209 | { 210 | "cell_type": "code", 211 | "execution_count": 196, 212 | "metadata": {}, 213 | "outputs": [], 214 | "source": [ 215 | "import random\n", 216 | "validation_indexes=random.sample(range(0,len(data.data)),math.floor (len(data.data)/4))\n", 217 | "dl_data=pd.DataFrame(data.data,columns=data.feature_names)" 218 | ] 219 | }, 220 | { 221 | "cell_type": "markdown", 222 | "metadata": {}, 223 | "source": [ 224 | "Loads the columnar data with categorical values
\n", 225 | "PATH - all intermediate model or temp will be stored. make sure its empty.
\n", 226 | "validation_index - indexes with validation_indexes will be used for validation
\n", 227 | "dl_data - dataframe to train
\n", 228 | "data.target - label
\n", 229 | "cat_flds - categorocial attributes
\n", 230 | "bs batch size for stochastic gradient descent
" 231 | ] 232 | }, 233 | { 234 | "cell_type": "code", 235 | "execution_count": 197, 236 | "metadata": {}, 237 | "outputs": [], 238 | "source": [ 239 | "model=ColumnarModelData.from_data_frame(PATH,validation_indexes,dl_data,data.target.astype(np.float32),cat_flds=['CHAS'],bs=2)" 240 | ] 241 | }, 242 | { 243 | "cell_type": "markdown", 244 | "metadata": {}, 245 | "source": [ 246 | "embd for categorical attributes and their mapping like for (100 categories map -> 10) - Embedding
\n", 247 | "number_of_non_categorical_value - number of non_categorical_values
\n", 248 | "layers - Number of hidden layers in sequence
\n", 249 | "drop_outs - Dropouts for each hidden layer
" 250 | ] 251 | }, 252 | { 253 | "cell_type": "code", 254 | "execution_count": 198, 255 | "metadata": {}, 256 | "outputs": [], 257 | "source": [ 258 | "embd=[(2,1)]\n", 259 | "number_of_non_categorical_value=12\n", 260 | "layers=[500]\n", 261 | "drop_outs=[0.01]\n", 262 | "model=model.get_learner(embd,number_of_non_categorical_value, 0.04, 1, layers,drop_outs)" 263 | ] 264 | }, 265 | { 266 | "cell_type": "markdown", 267 | "metadata": {}, 268 | "source": [ 269 | "This is new so take a breath. Hyperparameter tuning: Learning rate. Fast Ai runs a sample of algorithm with learning rate growing very fast. So we run the same training algorithm not to optimize the loss but to find the learning rate. Would be in seconds. Plotting the graph we can find the perfect learning rate and use that. Kudos FastAI! " 270 | ] 271 | }, 272 | { 273 | "cell_type": "code", 274 | "execution_count": 184, 275 | "metadata": {}, 276 | "outputs": [ 277 | { 278 | "data": { 279 | "application/vnd.jupyter.widget-view+json": { 280 | "model_id": "b8a167a887d64820862609e09f9933d6", 281 | "version_major": 2, 282 | "version_minor": 0 283 | }, 284 | "text/html": [ 285 | "

Failed to display Jupyter Widget of type HBox.

\n", 286 | "

\n", 287 | " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", 288 | " that the widgets JavaScript is still loading. If this message persists, it\n", 289 | " likely means that the widgets JavaScript library is either not installed or\n", 290 | " not enabled. See the Jupyter\n", 291 | " Widgets Documentation for setup instructions.\n", 292 | "

\n", 293 | "

\n", 294 | " If you're reading this message in another frontend (for example, a static\n", 295 | " rendering on GitHub or NBViewer),\n", 296 | " it may mean that your frontend doesn't currently support widgets.\n", 297 | "

\n" 298 | ], 299 | "text/plain": [ 300 | "HBox(children=(IntProgress(value=0, description='Epoch', max=1), HTML(value='')))" 301 | ] 302 | }, 303 | "metadata": {}, 304 | "output_type": "display_data" 305 | }, 306 | { 307 | "name": "stdout", 308 | "output_type": "stream", 309 | "text": [ 310 | " 66%|██████▌ | 125/190 [00:00<00:00, 282.90it/s, loss=1.31e+04]\n", 311 | " \r" 312 | ] 313 | } 314 | ], 315 | "source": [ 316 | "model.lr_find()" 317 | ] 318 | }, 319 | { 320 | "cell_type": "code", 321 | "execution_count": 163, 322 | "metadata": {}, 323 | "outputs": [ 324 | { 325 | "data": { 326 | "image/png": "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\n", 327 | "text/plain": [ 328 | "" 329 | ] 330 | }, 331 | "metadata": {}, 332 | "output_type": "display_data" 333 | } 334 | ], 335 | "source": [ 336 | "model.sched.plot()" 337 | ] 338 | }, 339 | { 340 | "cell_type": "markdown", 341 | "metadata": {}, 342 | "source": [ 343 | "In the above graph, as you can see clearly that the learning rate after 0.01 increases the loss exponentially, we see that loss turns to be minimum when 10^-1 to 10^-2 somewhere in between. So let's take average and use that as learning rate." 344 | ] 345 | }, 346 | { 347 | "cell_type": "markdown", 348 | "metadata": {}, 349 | "source": [ 350 | "Run the training Algorithm with learning rate=0.055" 351 | ] 352 | }, 353 | { 354 | "cell_type": "code", 355 | "execution_count": 170, 356 | "metadata": {}, 357 | "outputs": [ 358 | { 359 | "data": { 360 | "application/vnd.jupyter.widget-view+json": { 361 | "model_id": "0227bc2411934127baf213b2863f286e", 362 | "version_major": 2, 363 | "version_minor": 0 364 | }, 365 | "text/html": [ 366 | "

Failed to display Jupyter Widget of type HBox.

\n", 367 | "

\n", 368 | " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", 369 | " that the widgets JavaScript is still loading. If this message persists, it\n", 370 | " likely means that the widgets JavaScript library is either not installed or\n", 371 | " not enabled. See the Jupyter\n", 372 | " Widgets Documentation for setup instructions.\n", 373 | "

\n", 374 | "

\n", 375 | " If you're reading this message in another frontend (for example, a static\n", 376 | " rendering on GitHub or NBViewer),\n", 377 | " it may mean that your frontend doesn't currently support widgets.\n", 378 | "

\n" 379 | ], 380 | "text/plain": [ 381 | "HBox(children=(IntProgress(value=0, description='Epoch', max=10), HTML(value='')))" 382 | ] 383 | }, 384 | "metadata": {}, 385 | "output_type": "display_data" 386 | }, 387 | { 388 | "name": "stdout", 389 | "output_type": "stream", 390 | "text": [ 391 | "[ 0. 2851.906 108.26713] \n", 392 | "[ 1. 141.87092 74.62755] \n", 393 | "[ 2. 80.8053 74.09294] \n", 394 | "[ 3. 62.1405 48.24689] \n", 395 | "[ 4. 72.05487 42.68179] \n", 396 | "[ 5. 66.26097 38.59779] \n", 397 | "[ 6. 56.03842 51.331 ] \n", 398 | "[ 7. 76.14901 53.62796] \n", 399 | "[ 8. 62.7081 48.69091] \n", 400 | "[ 9. 66.54783 36.87793] \n", 401 | "\n" 402 | ] 403 | } 404 | ], 405 | "source": [ 406 | "lr = 0.055\n", 407 | "model.fit(lr, 10)" 408 | ] 409 | }, 410 | { 411 | "cell_type": "code", 412 | "execution_count": 201, 413 | "metadata": {}, 414 | "outputs": [ 415 | { 416 | "data": { 417 | "application/vnd.jupyter.widget-view+json": { 418 | "model_id": "740ef2d6727b4b0287b47866c610585d", 419 | "version_major": 2, 420 | "version_minor": 0 421 | }, 422 | "text/html": [ 423 | "

Failed to display Jupyter Widget of type HBox.

\n", 424 | "

\n", 425 | " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", 426 | " that the widgets JavaScript is still loading. If this message persists, it\n", 427 | " likely means that the widgets JavaScript library is either not installed or\n", 428 | " not enabled. See the Jupyter\n", 429 | " Widgets Documentation for setup instructions.\n", 430 | "

\n", 431 | "

\n", 432 | " If you're reading this message in another frontend (for example, a static\n", 433 | " rendering on GitHub or NBViewer),\n", 434 | " it may mean that your frontend doesn't currently support widgets.\n", 435 | "

\n" 436 | ], 437 | "text/plain": [ 438 | "HBox(children=(IntProgress(value=0, description='Epoch', max=10), HTML(value='')))" 439 | ] 440 | }, 441 | "metadata": {}, 442 | "output_type": "display_data" 443 | }, 444 | { 445 | "name": "stdout", 446 | "output_type": "stream", 447 | "text": [ 448 | "[ 0. 3161.95849 250.97244] \n", 449 | "[ 1. 175.02604 58.23714] \n", 450 | "[ 2. 143.91199 121.4847 ] \n", 451 | "[ 3. 100.64932 56.82617] \n", 452 | "[ 4. 100.48409 306.14642] \n", 453 | "[ 5. 54.53278 51.57714] \n", 454 | "[ 6. 62.98428 49.65561] \n", 455 | "[ 7. 107.00727 137.59152] \n", 456 | "[ 8. 50.99336 41.78915] \n", 457 | "[ 9. 58.22794 43.40128] \n", 458 | "\n" 459 | ] 460 | } 461 | ], 462 | "source": [ 463 | "lr = 0.055\n", 464 | "model.fit(lr, 10)" 465 | ] 466 | }, 467 | { 468 | "cell_type": "markdown", 469 | "metadata": {}, 470 | "source": [ 471 | "Quite Impressive! Without any tuning, we achieved accuracy of 36.877 which is still bad as compared to linear regression. Note for this tutorial. Our goal is to learn and not optimize for the best accuracy.
\n", 472 | "Let's see what can we do further." 473 | ] 474 | }, 475 | { 476 | "cell_type": "markdown", 477 | "metadata": {}, 478 | "source": [ 479 | "There is onr problem with learning rate: As we get closer to the minima we should dynamically change the learning rate to slow down as we are approaching the bottom as we might skip the minima.\n", 480 | " But also, we dont want it to get stuck at local minima and sway away from a better solution if possible. \n", 481 | " we come up with a solution so that we repeat the training process with lr=0.05 and keep decreasing for X number of cycles then reinitalize our lerarning rate to be \n", 482 | " 0.05 so that we can explore for other minimas too.\n", 483 | " Cycle_len=3 means repeat 10 cycles 3 times." 484 | ] 485 | }, 486 | { 487 | "cell_type": "markdown", 488 | "metadata": {}, 489 | "source": [ 490 | "As you see the learning rate keeps decreasing and then suddenly jumps up. Let's see if this gives us any better results" 491 | ] 492 | }, 493 | { 494 | "cell_type": "code", 495 | "execution_count": 175, 496 | "metadata": {}, 497 | "outputs": [ 498 | { 499 | "data": { 500 | "image/png": "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\n", 501 | "text/plain": [ 502 | "" 503 | ] 504 | }, 505 | "metadata": {}, 506 | "output_type": "display_data" 507 | } 508 | ], 509 | "source": [ 510 | "model.sched.plot_lr()" 511 | ] 512 | }, 513 | { 514 | "cell_type": "code", 515 | "execution_count": 202, 516 | "metadata": {}, 517 | "outputs": [ 518 | { 519 | "name": "stdout", 520 | "output_type": "stream", 521 | "text": [ 522 | "[ 14. 26.19841 29.11098] \n", 523 | "[ 15. 26.13135 25.84457] \n", 524 | "[ 16. 34.23843 39.32041] \n", 525 | "[ 17. 45.23869 43.52927] \n", 526 | "[ 18. 36.31802 28.51469] \n", 527 | "[ 19. 24.40752 24.15434] \n", 528 | "[ 20. 93.52787 98.36993] \n", 529 | "[ 21. 76.76582 90.19366] \n", 530 | "[ 22. 96.38318 89.78685] \n", 531 | "[ 23. 78.99907 89.70096] \n", 532 | "[ 24. 74.8405 89.2742] \n", 533 | "[ 25. 66.09479 88.88304] \n", 534 | "[ 26. 76.044 88.72765] \n", 535 | "[ 27. 78.88459 88.64732] \n", 536 | "[ 28. 82.5089 88.76509] \n", 537 | "[ 29. 96.25265 88.98195] \n", 538 | "[ 30. 89.17433 88.90871] \n", 539 | "[ 31. 87.93463 88.77647] \n", 540 | "[ 32. 99.30406 88.21326] \n", 541 | "[ 33. 89.47387 88.58575] \n", 542 | "[ 34. 87.69512 88.41162] \n", 543 | "[ 35. 92.32717 88.46887] \n", 544 | "[ 36. 78.08824 88.70508] \n", 545 | "[ 37. 87.96055 88.55913] \n", 546 | "[ 38. 98.32275 88.58079] \n", 547 | "[ 39. 74.67167 88.54105] \n", 548 | "[ 40. 77.59222 88.41911] \n", 549 | "[ 41. 90.92798 88.61746] \n", 550 | "[ 42. 91.45523 88.58055] \n", 551 | "[ 43. 93.08238 88.50362] \n", 552 | "[ 44. 76.94329 88.33128] \n", 553 | "[ 45. 83.83884 88.59381] \n", 554 | "[ 46. 87.79986 88.56339] \n", 555 | "[ 47. 96.46752 88.48431] \n", 556 | "[ 48. 74.22414 88.30722] \n", 557 | "[ 49. 83.96093 88.68872] \n", 558 | "[ 50. 95.91294 88.69501] \n", 559 | "[ 51. 76.14745 88.5813 ] \n", 560 | "[ 52. 78.41558 88.32252] \n", 561 | "[ 53. 67.72093 88.64788] \n", 562 | "[ 54. 82.1607 88.76482] \n", 563 | "[ 55. 86.33243 88.73027] \n", 564 | "[ 56. 83.7271 88.48898] \n", 565 | "[ 57. 87.47591 88.54156] \n", 566 | "[ 58. 69.75239 88.35446] \n", 567 | "[ 59. 88.54013 88.33215] \n", 568 | "\n" 569 | ] 570 | } 571 | ], 572 | "source": [] 573 | }, 574 | { 575 | "cell_type": "code", 576 | "execution_count": 171, 577 | "metadata": {}, 578 | "outputs": [ 579 | { 580 | "data": { 581 | "application/vnd.jupyter.widget-view+json": { 582 | "model_id": "36b8e35571a34f29872daeb5ab25501c", 583 | "version_major": 2, 584 | "version_minor": 0 585 | }, 586 | "text/html": [ 587 | "

Failed to display Jupyter Widget of type HBox.

\n", 588 | "

\n", 589 | " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", 590 | " that the widgets JavaScript is still loading. If this message persists, it\n", 591 | " likely means that the widgets JavaScript library is either not installed or\n", 592 | " not enabled. See the Jupyter\n", 593 | " Widgets Documentation for setup instructions.\n", 594 | "

\n", 595 | "

\n", 596 | " If you're reading this message in another frontend (for example, a static\n", 597 | " rendering on GitHub or NBViewer),\n", 598 | " it may mean that your frontend doesn't currently support widgets.\n", 599 | "

\n" 600 | ], 601 | "text/plain": [ 602 | "HBox(children=(IntProgress(value=0, description='Epoch', max=30), HTML(value='')))" 603 | ] 604 | }, 605 | "metadata": {}, 606 | "output_type": "display_data" 607 | }, 608 | { 609 | "name": "stdout", 610 | "output_type": "stream", 611 | "text": [ 612 | "[ 0. 180.57534 62.10049] \n", 613 | "[ 1. 83.37878 62.3999 ] \n", 614 | "[ 2. 55.49154 54.9498 ] \n", 615 | "[ 3. 75.46293 53.33086] \n", 616 | "[ 4. 53.62135 39.90169] \n", 617 | "[ 5. 42.08134 38.87128] \n", 618 | "[ 6. 48.64498 53.91854] \n", 619 | "[ 7. 40.48751 31.60863] \n", 620 | "[ 8. 34.10004 27.93206] \n", 621 | "[ 9. 96.70617 31.44825] \n", 622 | "[ 10. 50.85496 35.57478] \n", 623 | "[ 11. 30.64704 25.51137] \n", 624 | "[ 12. 42.23597 26.2089 ] \n", 625 | "[ 13. 39.26633 51.34911] \n", 626 | "[ 14. 26.69403 22.45991] \n", 627 | "[ 15. 41.2912 29.34616] \n", 628 | "[ 16. 36.38946 22.12777] \n", 629 | "[ 17. 26.93833 19.91111] \n", 630 | "[ 18. 47.19999 31.84199] \n", 631 | "[ 19. 40.45223 19.72345] \n", 632 | "[ 20. 35.95544 19.39541] \n", 633 | "[ 21. 27.79003 19.63288] \n", 634 | "[ 22. 38.93086 22.55372] \n", 635 | "[ 23. 24.2901 18.49149] \n", 636 | "[ 24. 43.61303 38.82179] \n", 637 | "[ 25. 43.32276 19.44667] \n", 638 | "[ 26. 27.38696 18.91724] \n", 639 | "[ 27. 39.65891 24.07587] \n", 640 | "[ 28. 31.019 21.41448] \n", 641 | "[ 29. 24.82787 20.38755] \n", 642 | "\n" 643 | ] 644 | } 645 | ], 646 | "source": [ 647 | "lr = 0.055\n", 648 | "model.fit(lr, 10,cycle_len=3)" 649 | ] 650 | }, 651 | { 652 | "cell_type": "markdown", 653 | "metadata": {}, 654 | "source": [ 655 | "Kudos! Wow! we get better than linear regression!" 656 | ] 657 | }, 658 | { 659 | "cell_type": "code", 660 | "execution_count": 188, 661 | "metadata": {}, 662 | "outputs": [ 663 | { 664 | "data": { 665 | "image/png": "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\n", 666 | "text/plain": [ 667 | "" 668 | ] 669 | }, 670 | "metadata": {}, 671 | "output_type": "display_data" 672 | } 673 | ], 674 | "source": [ 675 | "model.sched.plot_loss()" 676 | ] 677 | }, 678 | { 679 | "cell_type": "markdown", 680 | "metadata": {}, 681 | "source": [ 682 | "model" 683 | ] 684 | }, 685 | { 686 | "cell_type": "code", 687 | "execution_count": null, 688 | "metadata": {}, 689 | "outputs": [], 690 | "source": [] 691 | }, 692 | { 693 | "cell_type": "code", 694 | "execution_count": null, 695 | "metadata": {}, 696 | "outputs": [], 697 | "source": [] 698 | }, 699 | { 700 | "cell_type": "code", 701 | "execution_count": null, 702 | "metadata": {}, 703 | "outputs": [], 704 | "source": [] 705 | } 706 | ], 707 | "metadata": { 708 | "kernelspec": { 709 | "display_name": "Python 3", 710 | "language": "python", 711 | "name": "python3" 712 | }, 713 | "language_info": { 714 | "codemirror_mode": { 715 | "name": "ipython", 716 | "version": 3 717 | }, 718 | "file_extension": ".py", 719 | "mimetype": "text/x-python", 720 | "name": "python", 721 | "nbconvert_exporter": "python", 722 | "pygments_lexer": "ipython3", 723 | "version": "3.6.4" 724 | } 725 | }, 726 | "nbformat": 4, 727 | "nbformat_minor": 2 728 | } 729 | --------------------------------------------------------------------------------