Created
September 10, 2018 13:51
-
-
Save bfarzin/392520b5aec111b0f0874f84a8db7aab to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"/home/farzin/anaconda3/envs/pytorch37_cuda92/lib/python3.7/site-packages/sklearn/utils/__init__.py:4: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working\n", | |
" from collections import Sequence\n", | |
"/home/farzin/anaconda3/envs/pytorch37_cuda92/lib/python3.7/site-packages/sklearn/ensemble/weight_boosting.py:29: DeprecationWarning: numpy.core.umath_tests is an internal NumPy module and should not be imported. It will be removed in a future NumPy release.\n", | |
" from numpy.core.umath_tests import inner1d\n" | |
] | |
} | |
], | |
"source": [ | |
"import numpy as np\n", | |
"np.random.seed(12345)\n", | |
"import matplotlib.pyplot as plt\n", | |
"%matplotlib inline\n", | |
"\n", | |
"from fastai import dataset\n", | |
"from fastai.dataset import ModelData,ArraysIndexDataset\n", | |
"from fastai.dataloader import DataLoader\n", | |
"from fastai.learner import Learner\n", | |
"\n", | |
"import torch\n", | |
"import torch.nn as nn" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 1. Create toy data set & dataloader objects" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"heading_collapsed": true | |
}, | |
"source": [ | |
"### 1.a Create double-XOR data set as a toy example" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"hidden": true | |
}, | |
"source": [ | |
"Setting up XOR data <b>not</b> because it is interesting, but just to demonstrate what you do with NUMPY input data passed into the Learner() pipeline" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"hidden": true | |
}, | |
"outputs": [], | |
"source": [ | |
"def data_generator(data_size=1024):\n", | |
" while 1:\n", | |
" x1 = np.random.randint(0, 2, size=data_size)\n", | |
" x2 = np.random.randint(0, 2, size=data_size)\n", | |
" x3 = np.random.randint(0, 2, size=data_size)\n", | |
" x4 = np.random.randint(0, 2, size=data_size)\n", | |
" x = np.concatenate((x1[:, None],\n", | |
" x2[:, None],\n", | |
" x3[:, None],\n", | |
" x4[:,None]), axis=1).astype(float)\n", | |
" #encode y as one-hot so we can easily scale to multi-class problems.\n", | |
" y0 = (x1 != x2).astype(float)\n", | |
" y1 = (x3 != x4).astype(float)\n", | |
" y = np.concatenate((y0[:,None],y1[:,None]),axis=1).astype(float)\n", | |
" y = y.sum(axis=1) #creates classes 0,1,2\n", | |
" yield x, y" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"hidden": true | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[[0. 0. 1. 0.]\n", | |
" [1. 0. 0. 0.]\n", | |
" [1. 1. 0. 0.]\n", | |
" ...\n", | |
" [0. 1. 1. 1.]\n", | |
" [0. 0. 0. 1.]\n", | |
" [1. 0. 0. 0.]]\n", | |
"[1. 1. 0. ... 1. 1. 1.]\n" | |
] | |
} | |
], | |
"source": [ | |
"X,y = next(data_generator(data_size=1024))\n", | |
"X_val,y_val = next(data_generator(data_size=512))\n", | |
"X_test,y_test = next(data_generator(data_size=100))\n", | |
"print(X)\n", | |
"print(y)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 1.b Map the data to float/int as appropriate" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Classification requires that targets are type INT" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"X,X_val,X_test = map(lambda x: x.astype(float),(X,X_val,X_test))\n", | |
"y,y_val,y_test = map(lambda x: x.astype(int).squeeze(),(y,y_val,y_test))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 1.c Create fast.ai objects from Numpy data" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"batch_size = 32\n", | |
"\n", | |
"## fast.ai dataset\n", | |
"fastai_dataset = ArraysIndexDataset(X,y,transform=None)\n", | |
"v_fastai_dataset = ArraysIndexDataset(X_val,y_val,transform=None)\n", | |
"\n", | |
"## fast.ai dataloader\n", | |
"fastai_dl = DataLoader(fastai_dataset,batch_size=batch_size)\n", | |
"v_fastai_dl = DataLoader(v_fastai_dataset,batch_size=batch_size)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Define an object that will wrap the data and return the correct flags for is_reg() and is_multi()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"class SimpleModelData(ModelData):\n", | |
" @property\n", | |
" def is_reg(self): return False\n", | |
" @property\n", | |
" def is_multi(self): return True" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"smd = SimpleModelData('./',fastai_dl,v_fastai_dl)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 2. Define Loss & Model" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"criterion = nn.NLLLoss() # NLL + Log_softmax layer = multi-class Cross-entropy" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 2.a nn.Sequential way to define a model" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def count_model_params(net):\n", | |
" return sum(p.numel() for p in net.parameters() if p.requires_grad)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Sequential(\n", | |
" (0): Linear(in_features=4, out_features=10, bias=True)\n", | |
" (1): ReLU()\n", | |
" (2): Linear(in_features=10, out_features=10, bias=True)\n", | |
" (3): ReLU()\n", | |
" (4): Linear(in_features=10, out_features=3, bias=True)\n", | |
" (5): LogSoftmax()\n", | |
")\n", | |
"trainable params: 193\n" | |
] | |
} | |
], | |
"source": [ | |
"H = 10\n", | |
"net = nn.Sequential(\n", | |
" nn.Linear(4, H),\n", | |
" nn.ReLU(),\n", | |
" nn.Linear(H, H),\n", | |
" nn.ReLU(),\n", | |
" nn.Linear(H, 3),\n", | |
" nn.LogSoftmax(dim=1)\n", | |
").cuda()\n", | |
"print(net)\n", | |
"print( 'trainable params: {}'.format(count_model_params(net)) )" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### 2.b Class definition of model" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Net(\n", | |
" (fc_0): Linear(in_features=4, out_features=10, bias=True)\n", | |
" (relu_0): ReLU()\n", | |
" (fc_1): Linear(in_features=10, out_features=10, bias=True)\n", | |
" (relu_1): ReLU()\n", | |
" (last): Linear(in_features=10, out_features=3, bias=True)\n", | |
" (log_softmax_layer): LogSoftmax()\n", | |
")\n", | |
"trainable params: 193\n" | |
] | |
} | |
], | |
"source": [ | |
"class Net(nn.Module):\n", | |
" def __init__(self, input_size=21, hidden_size=10, num_classes=10):\n", | |
" super(Net, self).__init__()\n", | |
" self.fc_0 = nn.Linear(input_size, hidden_size) \n", | |
" self.relu_0 = nn.ReLU()\n", | |
" self.fc_1 = nn.Linear(hidden_size,hidden_size) \n", | |
" self.relu_1 = nn.ReLU()\n", | |
" self.last = nn.Linear(hidden_size,num_classes)\n", | |
" self.log_softmax_layer = nn.LogSoftmax(dim=1)\n", | |
" \n", | |
" def forward(self, x):\n", | |
" out = self.relu_0(self.fc_0(x))\n", | |
" out = self.relu_1(self.fc_1(out))\n", | |
" out = self.log_softmax_layer(self.last(out))\n", | |
" \n", | |
" return out\n", | |
" \n", | |
"#create instance of model\n", | |
"net = Net(input_size=4,hidden_size=10,num_classes=3).cuda()\n", | |
"print(net) \n", | |
"print( 'trainable params: {}'.format(count_model_params(net)) )" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 3. Build Learner" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"fast.ai Learner() expects an object with a list of models. We create a shell object to return this type." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"class LearnerModelBuilder():\n", | |
" def __init__(self,model):\n", | |
" self.model = model\n", | |
" def get_layer_groups(self):\n", | |
" return [self.model]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"my_learner = Learner(smd,\n", | |
" LearnerModelBuilder(net),\n", | |
" opt_fn=torch.optim.Adam,\n", | |
" crit=criterion)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"#### From here we can use the learner just like any other Fast.ai learner" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "8c48d0c072af4d7c95c73a682c953e81", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
"HBox(children=(IntProgress(value=0, description='Epoch', max=1), HTML(value='')))" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"epoch trn_loss val_loss \n", | |
" 0 1.173476 2.384628 \n", | |
"\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"my_learner.lr_find()\n", | |
"plt.plot(my_learner.sched.lrs,my_learner.sched.losses)\n", | |
"plt.xscale(\"log\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "36d2f5fad50a485d87ecd0f135343159", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
"HBox(children=(IntProgress(value=0, description='Epoch', max=20), HTML(value='')))" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"epoch trn_loss val_loss \n", | |
" 0 1.057447 0.994331 \n", | |
" 1 0.938248 0.82734 \n", | |
" 2 0.829229 0.677351 \n", | |
" 3 0.69576 0.52932 \n", | |
" 4 0.593561 0.465567 \n", | |
" 5 0.519252 0.44281 \n", | |
" 6 0.487812 0.456323 \n", | |
" 7 0.459844 0.424811 \n", | |
" 8 0.440573 0.425148 \n", | |
" 9 0.428619 0.4172 \n", | |
" 10 0.423214 0.443899 \n", | |
" 11 0.417285 0.412956 \n", | |
" 12 0.419065 0.429084 \n", | |
" 13 0.41214 0.407231 \n", | |
" 14 0.410908 0.459868 \n", | |
" 15 0.408588 0.405 \n", | |
" 16 0.404975 0.403857 \n", | |
" 17 0.40265 0.400865 \n", | |
" 18 0.398565 0.397226 \n", | |
" 19 0.395054 0.396587 \n", | |
"\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"[0.396587073802948]" | |
] | |
}, | |
"execution_count": 15, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"my_learner.fit([1e-1],10,cycle_len=2,use_clr=(20,5))\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"my_learner.sched.plot_lr()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x7fc0d02857b8>]" | |
] | |
}, | |
"execution_count": 17, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"plt.plot(my_learner.sched.losses[::len(fastai_dl)]) #losses for each batch. Take at end of epoch only\n", | |
"plt.plot(my_learner.sched.val_losses)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python (pytorch python 3.6 CUDA 9.2", | |
"language": "python", | |
"name": "pytorch37_cuda92" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.7.0" | |
}, | |
"varInspector": { | |
"cols": { | |
"lenName": 16, | |
"lenType": 16, | |
"lenVar": 40 | |
}, | |
"kernels_config": { | |
"python": { | |
"delete_cmd_postfix": "", | |
"delete_cmd_prefix": "del ", | |
"library": "var_list.py", | |
"varRefreshCmd": "print(var_dic_list())" | |
}, | |
"r": { | |
"delete_cmd_postfix": ") ", | |
"delete_cmd_prefix": "rm(", | |
"library": "var_list.r", | |
"varRefreshCmd": "cat(var_dic_list()) " | |
} | |
}, | |
"types_to_exclude": [ | |
"module", | |
"function", | |
"builtin_function_or_method", | |
"instance", | |
"_Feature" | |
], | |
"window_display": false | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thank you this was really helpfull