Created
November 20, 2018 06:57
-
-
Save drscotthawley/2288e92f23b02e7fd5352708fc6cd125 to your computer and use it in GitHub Desktop.
FastAICustomModelExample
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": "markdown", | |
"metadata": {}, | |
"source": [ | |
"A mixture of [@eslavich's post](https://forums.fast.ai/t/learner-layer-groups-parameter/30212) and the Lesson 5 lesson5-sgd-mnist.ipynb" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"%reload_ext autoreload\n", | |
"%autoreload 2\n", | |
"%matplotlib inline" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"\n", | |
"import torch\n", | |
"import torch.nn.functional as F\n", | |
"import torch.nn as nn\n", | |
"\n", | |
"from torch.utils.data import DataLoader\n", | |
"from torch.utils.data.dataset import TensorDataset\n", | |
"\n", | |
"from fastai import *\n", | |
"from fastai.vision import *" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(torch.Size([10000, 1]), tensor(8.7930e-05), tensor(1.9997))" | |
] | |
}, | |
"execution_count": 21, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"class SimpleModel(nn.Module):\n", | |
" def __init__(self):\n", | |
" super().__init__()\n", | |
"\n", | |
" self.linear1 = nn.Linear(1, 5)\n", | |
" self.linear2 = nn.Linear(5, 1)\n", | |
"\n", | |
" def forward(self, x):\n", | |
" x = self.linear1(x)\n", | |
" x = self.linear2(x)\n", | |
"\n", | |
" return x\n", | |
" \n", | |
"def generate_data(size):\n", | |
" x = np.random.uniform(size=(size, 1))\n", | |
" y = x * 2.0\n", | |
" return x.astype(np.float32), y.astype(np.float32)\n", | |
"\n", | |
"x_train, y_train = generate_data(10000)\n", | |
"x_valid, y_valid = generate_data(1000)\n", | |
"\n", | |
"x_train,y_train,x_valid,y_valid = map(torch.tensor, (x_train,y_train,x_valid,y_valid))\n", | |
"n,c = x_train.shape\n", | |
"x_train.shape, y_train.min(), y_train.max()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 22, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"bs=50\n", | |
"train_ds = TensorDataset(x_train, y_train)\n", | |
"valid_ds = TensorDataset(x_valid, y_valid)\n", | |
"data = DataBunch.create(train_ds, valid_ds, bs=bs)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 23, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(torch.Size([50, 1]), torch.Size([50, 1]))" | |
] | |
}, | |
"execution_count": 23, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"x,y = next(iter(data.train_dl))\n", | |
"x.shape,y.shape" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 24, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"model = SimpleModel().cuda()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 25, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"torch.Size([50, 1])" | |
] | |
}, | |
"execution_count": 25, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"model(x).shape" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 26, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"loss_func = nn.MSELoss()\n", | |
"learn = Learner(data, SimpleModel(), loss_func=loss_func)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 27, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"LR Finder complete, type {learner_name}.recorder.plot() to see the graph.\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\niEiV/w+o71JS8309uwAAAABJRU5ErkJggg==\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x7f7483b89710>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"learn.lr_find()\n", | |
"learn.recorder.plot()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 28, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Total time: 00:01\n", | |
"epoch train_loss valid_loss\n", | |
"1 0.009130 0.000002 (00:01)\n", | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"learn.fit_one_cycle(1, 1e-1)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 29, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAswAAAD8CAYAAABjNPKeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xd81eX5//HXlZMdQkJIIJDNJiRs\nAgEUFavgAAUHiAzRr1122lqplba4arW1y7baggxFRHGgoqg4KhD2Cntkh5GEhCRkJ+f+/cGxvzRG\nCJDkc8b1fDzy8OTzuc8576Mmuc7n3Pd9iTEGpZRSSimlVPO8rA6glFJKKaWUM9OCWSmllFJKqfPQ\nglkppZRSSqnz0IJZKaWUUkqp89CCWSmllFJKqfPQglkppZRSSqnz0IJZKaWUUkqp89CCWSmllFJK\nqfPQglkppZRSSqnz8LY6QFPh4eEmPj7e6hhKKXVJtm/fXmSMibA6R3vS39tKKVfV0t/ZTlcwx8fH\ns23bNqtjKKXUJRGRbKsztDf9va2UclUt/Z2tUzKUUkoppZQ6Dy2YlVJKKaWUOg8tmJVSSimllDoP\nLZiVUkoppZQ6Dy2YlVJKKaWUOo8WFcwiMkFEDonIURF5uJnzV4rIDhGpF5HbmpybLSJHHF+zWyu4\nUkoppZRS7eGCBbOI2IDngYlAIjBdRBKbDMsB5gDLm9w3DPg1MBJIAX4tIp0uP7ZSSimllFLtoyX7\nMKcAR40xGQAisgKYDOz/aoAxJstxzt7kvtcDHxtjih3nPwYmAK9ednLVJuob7CzemEV1XQP+PjaC\n/Lzp2tGPyI4BRIcF0NHfx+qISikXd7SgnOWbc/nlDf3wtunMQKXUxamqbSC7uIL8kipKKus4U1mL\nv4+Nu0fFtdlztqRgjgJyG32fx7krxi3R3H2jmg4SkfuB+wFiY2Nb+NCqLbyffoLH3z/wjeejQgPo\nFxnMwOhQRvYIY3BMKP4+tnZMqJRydccKK1i0IZOUhDAmJEVaHUcp5cRq6+3syClhe3YJu3LPsDe/\nlBOl1V8blxAeZHnBLM0cMy18/Bbd1xjzIvAiwPDhw1v62KqVGWNYuD6THuFBrPnRFdTU26moqedU\nWTUnS6vJOl3JoZNlHDhRzqeHCjCfgK+3F2N7hTNhQCTXJnYlLMjX6pehlHJy4/t1ISo0gKVpWVow\n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\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x7f7483b0a748>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"learn.recorder.plot_lr(show_moms=True)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 30, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\npgAAAABJRU5ErkJggg==\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x7f748392f278>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"learn.recorder.plot_losses()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"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.6.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
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
# coding: utf-8 | |
# A mixture of [@eslavich's post](https://forums.fast.ai/t/learner-layer-groups-parameter/30212) and the Lesson 5 lesson5-sgd-mnist.ipynb | |
# In[ ]: | |
get_ipython().run_line_magic('reload_ext', 'autoreload') | |
get_ipython().run_line_magic('autoreload', '2') | |
get_ipython().run_line_magic('matplotlib', 'inline') | |
# In[2]: | |
import numpy as np | |
import torch | |
import torch.nn.functional as F | |
import torch.nn as nn | |
from torch.utils.data import DataLoader | |
from torch.utils.data.dataset import TensorDataset | |
from fastai import * | |
from fastai.vision import * | |
# In[21]: | |
class SimpleModel(nn.Module): | |
def __init__(self): | |
super().__init__() | |
self.linear1 = nn.Linear(1, 5) | |
self.linear2 = nn.Linear(5, 1) | |
def forward(self, x): | |
x = self.linear1(x) | |
x = self.linear2(x) | |
return x | |
def generate_data(size): | |
x = np.random.uniform(size=(size, 1)) | |
y = x * 2.0 | |
return x.astype(np.float32), y.astype(np.float32) | |
x_train, y_train = generate_data(10000) | |
x_valid, y_valid = generate_data(1000) | |
x_train,y_train,x_valid,y_valid = map(torch.tensor, (x_train,y_train,x_valid,y_valid)) | |
n,c = x_train.shape | |
x_train.shape, y_train.min(), y_train.max() | |
# In[22]: | |
bs=50 | |
train_ds = TensorDataset(x_train, y_train) | |
valid_ds = TensorDataset(x_valid, y_valid) | |
data = DataBunch.create(train_ds, valid_ds, bs=bs) | |
# In[23]: | |
x,y = next(iter(data.train_dl)) | |
x.shape,y.shape | |
# In[24]: | |
model = SimpleModel().cuda() | |
# In[25]: | |
model(x).shape | |
# In[26]: | |
loss_func = nn.MSELoss() | |
learn = Learner(data, SimpleModel(), loss_func=loss_func) | |
# In[27]: | |
learn.lr_find() | |
learn.recorder.plot() | |
# In[28]: | |
learn.fit_one_cycle(1, 1e-1) | |
# In[29]: | |
learn.recorder.plot_lr(show_moms=True) | |
# In[30]: | |
learn.recorder.plot_losses() | |
# In[ ]: | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment