Skip to content

Instantly share code, notes, and snippets.

Created February 7, 2018 20:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/ce35b90561d6ba6ef36404a10722aa70 to your computer and use it in GitHub Desktop.
Save anonymous/ce35b90561d6ba6ef36404a10722aa70 to your computer and use it in GitHub Desktop.
fastai/courses/dl1/lesson2_product_rva.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "raw",
"source": "# Products : super-charged!"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# Put these at the top of every notebook, to get automatic reloading and inline plotting\n%reload_ext autoreload\n%autoreload 2\n%matplotlib inline",
"execution_count": 17,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# This file contains all the main external libs we'll use\nfrom fastai.imports import *\nfrom fastai.torch_imports import *\nfrom fastai.transforms import *\nfrom fastai.conv_learner import *\nfrom fastai.model import *\nfrom fastai.dataset import *\nfrom fastai.sgdr import *\nfrom fastai.plots import *\n\n",
"execution_count": 18,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "torch.cuda.is_available()",
"execution_count": 19,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 19,
"data": {
"text/plain": "True"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "PATH = \"data/products/\"\nsz=224\nbs=5\narch=resnet34",
"execution_count": 20,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "!ls {PATH}",
"execution_count": 21,
"outputs": [
{
"output_type": "stream",
"text": "models\tstyle2.csv style.csv style.zip test\ttmp train\r\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "label_csv = f'{PATH}style2.csv'\nn = len(list(open(label_csv)))-1\nval_idxs = get_cv_idxs(n)",
"execution_count": 22,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "n",
"execution_count": 7,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 7,
"data": {
"text/plain": "894"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "len(val_idxs)",
"execution_count": 8,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 8,
"data": {
"text/plain": "178"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "label_df = pd.read_csv(label_csv)",
"execution_count": 9,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "label_df.head()",
"execution_count": 10,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 10,
"data": {
"text/plain": " id product_name\n0 0_0_001 shoes\n1 0_0_002 shoes\n2 0_0_003 shoes\n3 0_0_004 shoes\n4 0_0_005 shoes",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>id</th>\n <th>product_name</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>0_0_001</td>\n <td>shoes</td>\n </tr>\n <tr>\n <th>1</th>\n <td>0_0_002</td>\n <td>shoes</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0_0_003</td>\n <td>shoes</td>\n </tr>\n <tr>\n <th>3</th>\n <td>0_0_004</td>\n <td>shoes</td>\n </tr>\n <tr>\n <th>4</th>\n <td>0_0_005</td>\n <td>shoes</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"metadata": {}
}
]
},
{
"metadata": {
"scrolled": true,
"trusted": false
},
"cell_type": "code",
"source": "label_df.pivot_table(index='product_name', aggfunc=len).sort_values('file' , ascending=False)",
"execution_count": 14,
"outputs": [
{
"data": {
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>file</th>\n </tr>\n <tr>\n <th>product_name</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>handbag</th>\n <td>193</td>\n </tr>\n <tr>\n <th>shoes</th>\n <td>188</td>\n </tr>\n <tr>\n <th>ring</th>\n <td>88</td>\n </tr>\n <tr>\n <th>watches</th>\n <td>78</td>\n </tr>\n <tr>\n <th>lipstick</th>\n <td>66</td>\n </tr>\n <tr>\n <th>earrings</th>\n <td>63</td>\n </tr>\n <tr>\n <th>nail polish</th>\n <td>61</td>\n </tr>\n <tr>\n <th>boots</th>\n <td>60</td>\n </tr>\n <tr>\n <th>bracelet</th>\n <td>49</td>\n </tr>\n <tr>\n <th>necklace</th>\n <td>48</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " file\nproduct_name \nhandbag 193\nshoes 188\nring 88\nwatches 78\nlipstick 66\nearrings 63\nnail polish 61\nboots 60\nbracelet 49\nnecklace 48"
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "tfms = tfms_from_model(arch, sz, aug_tfms=transforms_side_on, max_zoom=1.1)\ndata = ImageClassifierData.from_csv(PATH, 'train', f'{PATH}style2.csv', test_name='test', \n val_idxs=val_idxs, suffix='.png', tfms=tfms, bs=bs)\n",
"execution_count": 23,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "fn = PATH+data.trn_ds.fnames[99];fn",
"execution_count": 24,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 24,
"data": {
"text/plain": "'data/products/train/1_0_009.png'"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "img = PIL.Image.open(fn); img",
"execution_count": 25,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 25,
"data": {
"text/plain": "<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=150x150 at 0x7F77F3A4DD68>",
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "img.size",
"execution_count": 22,
"outputs": [
{
"data": {
"text/plain": "(150, 150)"
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "size_d = {k: PIL.Image.open(PATH+k).size for k in data.trn_ds.fnames}\nrow_sz,col_sz = list(zip(*size_d.values()))\nrow_sz=np.array(row_sz); col_sz=np.array(col_sz)\nrow_sz[:5]",
"execution_count": 27,
"outputs": [
{
"data": {
"text/plain": "array([150, 150, 150, 150, 150])"
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "plt.hist(col_sz)",
"execution_count": 29,
"outputs": [
{
"data": {
"text/plain": "(array([ 0., 0., 0., 0., 0., 715., 0., 0., 0., 0.]),\n array([149.5, 149.6, 149.7, 149.8, 149.9, 150. , 150.1, 150.2, 150.3, 150.4, 150.5]),\n <a list of 10 Patch objects>)"
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": "<matplotlib.figure.Figure at 0x7f1f14bfa668>"
},
"metadata": {},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "len(data.trn_ds)",
"execution_count": 37,
"outputs": [
{
"data": {
"text/plain": "716"
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "len(data.classes)",
"execution_count": 38,
"outputs": [
{
"data": {
"text/plain": "11"
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "data.classes[:5]",
"execution_count": 39,
"outputs": [
{
"data": {
"text/plain": "['boots', 'bracelet', 'earrings', 'handbag', 'lipstick']"
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "learn = ConvLearner.pretrained(arch, data, precompute=True)",
"execution_count": 26,
"outputs": []
},
{
"metadata": {
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "learn.fit(0.02, 2)",
"execution_count": 29,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "HBox(children=(IntProgress(value=0, description='Epoch', max=2), HTML(value='')))",
"text/html": "<p>Failed to display Jupyter Widget of type <code>HBox</code>.</p>\n<p>\n If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n that the widgets JavaScript is still loading. If this message persists, it\n likely means that the widgets JavaScript library is either not installed or\n not enabled. See the <a href=\"https://ipywidgets.readthedocs.io/en/stable/user_install.html\">Jupyter\n Widgets Documentation</a> for setup instructions.\n</p>\n<p>\n If you're reading this message in another frontend (for example, a static\n rendering on GitHub or <a href=\"https://nbviewer.jupyter.org/\">NBViewer</a>),\n it may mean that your frontend doesn't currently support widgets.\n</p>\n",
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "85edfcc5a2c54ec4bb5c6cc5c5187439"
}
},
"metadata": {}
},
{
"output_type": "stream",
"text": " 98%|█████████▊| 141/144 [00:00<00:00, 144.79it/s, loss=0.146]\n",
"name": "stdout"
},
{
"output_type": "error",
"ename": "ValueError",
"evalue": "Expected more than 1 value per channel when training, got input size [1, 1024]",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-29-1ac3b38f5ac6>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mlearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0.02\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m~/fastai/courses/dl1/fastai/learner.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, lrs, n_cycle, wds, **kwargs)\u001b[0m\n\u001b[1;32m 207\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msched\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 208\u001b[0m \u001b[0mlayer_opt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_layer_opt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlrs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 209\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit_gen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlayer_opt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn_cycle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 210\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 211\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mwarm_up\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwds\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/fastai/courses/dl1/fastai/learner.py\u001b[0m in \u001b[0;36mfit_gen\u001b[0;34m(self, model, data, layer_opt, n_cycle, cycle_len, cycle_mult, cycle_save_name, use_clr, metrics, callbacks, use_wd_sched, norm_wds, wds_sched_mult, **kwargs)\u001b[0m\n\u001b[1;32m 154\u001b[0m \u001b[0mn_epoch\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msum_geom\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcycle_len\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcycle_len\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcycle_mult\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn_cycle\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 155\u001b[0m return fit(model, data, n_epoch, layer_opt.opt, self.crit,\n\u001b[0;32m--> 156\u001b[0;31m metrics=metrics, callbacks=callbacks, reg_fn=self.reg_fn, clip=self.clip, **kwargs)\n\u001b[0m\u001b[1;32m 157\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 158\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget_layer_groups\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodels\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_layer_groups\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/fastai/courses/dl1/fastai/model.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(model, data, epochs, opt, crit, metrics, callbacks, **kwargs)\u001b[0m\n\u001b[1;32m 94\u001b[0m \u001b[0mbatch_num\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 95\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mcb\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mcb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mon_batch_begin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 96\u001b[0;31m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstepper\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mV\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mV\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 97\u001b[0m \u001b[0mavg_loss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mavg_loss\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mavg_mom\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mloss\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mavg_mom\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 98\u001b[0m \u001b[0mdebias_loss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mavg_loss\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mavg_mom\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mbatch_num\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/fastai/courses/dl1/fastai/model.py\u001b[0m in \u001b[0;36mstep\u001b[0;34m(self, xs, y)\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[0mxtra\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 40\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mxs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 41\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtuple\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mxtra\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0moutput\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 42\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzero_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/envs/fastai/lib/python3.6/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 323\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_pre_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 324\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 325\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 326\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 327\u001b[0m \u001b[0mhook_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/envs/fastai/lib/python3.6/site-packages/torch/nn/modules/container.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mmodule\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_modules\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 67\u001b[0;31m \u001b[0minput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodule\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/envs/fastai/lib/python3.6/site-packages/torch/nn/modules/module.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 323\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_pre_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 324\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 325\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 326\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_forward_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 327\u001b[0m \u001b[0mhook_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/envs/fastai/lib/python3.6/site-packages/torch/nn/modules/batchnorm.py\u001b[0m in \u001b[0;36mforward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 35\u001b[0m return F.batch_norm(\n\u001b[1;32m 36\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrunning_mean\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrunning_var\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mweight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbias\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 37\u001b[0;31m self.training, self.momentum, self.eps)\n\u001b[0m\u001b[1;32m 38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__repr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/envs/fastai/lib/python3.6/site-packages/torch/nn/functional.py\u001b[0m in \u001b[0;36mbatch_norm\u001b[0;34m(input, running_mean, running_var, weight, bias, training, momentum, eps)\u001b[0m\n\u001b[1;32m 1009\u001b[0m \u001b[0msize\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1010\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mreduce\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmul\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msize\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msize\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1011\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Expected more than 1 value per channel when training, got input size {}'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1012\u001b[0m \u001b[0mf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_C\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_functions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mBatchNorm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrunning_mean\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrunning_var\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmomentum\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meps\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackends\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcudnn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menabled\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1013\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mweight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbias\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mValueError\u001b[0m: Expected more than 1 value per channel when training, got input size [1, 1024]"
]
},
{
"output_type": "stream",
"text": "\r 98%|█████████▊| 141/144 [00:20<00:00, 6.94it/s, loss=0.146] ",
"name": "stdout"
}
]
},
{
"metadata": {
"collapsed": true,
"trusted": false
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.6.4",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"toc": {
"colors": {
"hover_highlight": "#DAA520",
"navigate_num": "#000000",
"navigate_text": "#333333",
"running_highlight": "#FF0000",
"selected_highlight": "#FFD700",
"sidebar_border": "#EEEEEE",
"wrapper_background": "#FFFFFF"
},
"moveMenuLeft": true,
"nav_menu": {
"height": "266px",
"width": "252px"
},
"navigate_menu": true,
"number_sections": true,
"sideBar": true,
"threshold": 4,
"toc_cell": false,
"toc_section_display": "block",
"toc_window_display": false,
"widenNotebook": false
},
"gist": {
"id": "",
"data": {
"description": "fastai/courses/dl1/lesson2_product_rva.ipynb",
"public": true
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment