Skip to content

Instantly share code, notes, and snippets.

@a-safonau
Created November 15, 2018 20:07
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 a-safonau/7806c7aa923b42f0715b21f5a0838d6f to your computer and use it in GitHub Desktop.
Save a-safonau/7806c7aa923b42f0715b21f5a0838d6f to your computer and use it in GitHub Desktop.
Get predictions error out of bounds
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"## Google Quick Draw prediction"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%reload_ext autoreload\n",
"%autoreload 2\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from fastai import *\n",
"from fastai.vision import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Getting the data"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"#! sudo /opt/anaconda3/bin/pip install kaggle --upgrade"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"#! mkdir -p ~/.kaggle/\n",
"#! mv ~/kaggle.json ~/.kaggle/"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"PosixPath('/home/jupyter/.fastai/data/google-draw')"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"path = Path(Config.get_key('data_path')).expanduser()/'google-draw'\n",
"os.makedirs(path, exist_ok=True)\n",
"path"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"#! kaggle competitions download -c quickdraw-doodle-recognition -f train_simplified.zip -p {path} \n",
"#! kaggle competitions download -c quickdraw-doodle-recognition -f test_simplified.csv -p {path} "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"#! unzip {path}/train_simplified.zip -d {path}/train"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We only download the training data file for this lesson, but you can grab the test file if you want to make a late submission.\n",
"\n",
"To extract the content of this file, we'll need 7zip, so uncomment the following line if you need to install it."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[PosixPath('/home/jupyter/.fastai/data/google-draw/test_simplified.csv'),\n",
" PosixPath('/home/jupyter/.fastai/data/google-draw/txt'),\n",
" PosixPath('/home/jupyter/.fastai/data/google-draw/train'),\n",
" PosixPath('/home/jupyter/.fastai/data/google-draw/train_simplified.zip'),\n",
" PosixPath('/home/jupyter/.fastai/data/google-draw/classes.pkl'),\n",
" PosixPath('/home/jupyter/.fastai/data/google-draw/batch_stats_64.pkl'),\n",
" PosixPath('/home/jupyter/.fastai/data/google-draw/batch_stats_128.pkl')]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"path.ls()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"path_txt = path / 'txt'"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[PosixPath('/home/jupyter/models/tmp.pth'),\n",
" PosixPath('/home/jupyter/models/res34-128-stage-2.pth'),\n",
" PosixPath('/home/jupyter/models/res34-64-stage-1.pth'),\n",
" PosixPath('/home/jupyter/models/res34-64-stage-2.pth'),\n",
" PosixPath('/home/jupyter/models/res34-128-stage-1.pth')]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"path_models = Path('/home/jupyter/models'); path_models.ls()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Preprocessing"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"import cv2, json"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"BASE_SIZE = 256\n",
"def list2drawing(raw_strokes, size=256, lw=6, time_color=True):\n",
" img = np.zeros((BASE_SIZE, BASE_SIZE), np.uint8)\n",
" for t, stroke in enumerate(raw_strokes):\n",
" for i in range(len(stroke[0]) - 1):\n",
" color = 255 - min(t, 10) * 13 if time_color else 255\n",
" _ = cv2.line(img, (stroke[0][i], stroke[1][i]),\n",
" (stroke[0][i + 1], stroke[1][i + 1]), color, lw)\n",
" if size != BASE_SIZE:\n",
" return cv2.resize(img, (size, size), interpolation=cv2.INTER_LINEAR)\n",
" else:\n",
" return img\n",
"\n",
"def drawing2tensor(drawing):\n",
" rgb = cv2.cvtColor(drawing,cv2.COLOR_GRAY2RGB)\n",
" rgb = rgb.transpose(2,0,1).astype(np.float32)\n",
" return torch.from_numpy(rgb)\n",
"\n",
"# https://github.com/benhamner/Metrics/blob/master/Python/ml_metrics/average_precision.py\n",
"def apk(actual, predicted, k=10):\n",
" if len(predicted)>k:\n",
" predicted = predicted[:k]\n",
"\n",
" score = 0.0\n",
" num_hits = 0.0\n",
"\n",
" for i,p in enumerate(predicted):\n",
" if p in actual and p not in predicted[:i]:\n",
" num_hits += 1.0\n",
" score += num_hits / (i+1.0)\n",
"\n",
" if not actual:\n",
" return 0.0\n",
"\n",
" return score / min(len(actual), k)\n",
"\n",
"def mapk(actual, predicted, k=10):\n",
" return np.mean([apk(a,p,k) for a,p in zip(actual, predicted)])\n",
"\n",
"def map3(preds, targs):\n",
" predicted_idxs = preds.sort(descending=True)[1]\n",
" top_3 = predicted_idxs[:, :3]\n",
" res = mapk([[t] for t in targs.cpu().numpy()], top_3.cpu().numpy(), 3)\n",
" return torch.tensor(res)\n",
"\n",
"def top_3_preds(preds): return np.argsort(preds.numpy())[:, ::-1][:, :3]\n",
"\n",
"def top_3_pred_labels(preds, classes):\n",
" top_3 = top_3_preds(preds)\n",
" labels = []\n",
" for i in range(top_3.shape[0]):\n",
" labels.append(' '.join([classes[idx] for idx in top_3[i]]))\n",
" return labels\n",
"\n",
"def create_submission(test_preds, test_dl, name):\n",
" key_ids = [path.stem for path in test_dl.dataset.x.items]\n",
" labels = top_3_pred_labels(test_preds, classes)\n",
" sub = pd.DataFrame({'key_id': key_ids, 'word': labels})\n",
" sub.to_csv(f'{path}/subs/{name}.csv.gz', index=False, compression='gzip')"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"NUM_SAMPLES_PER_CLASS = 1_000"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"os.makedirs(path /'txt', exist_ok=True)\n",
"os.makedirs(path /'txt'/'train', exist_ok=True)\n",
"os.makedirs(path /'txt'/'test', exist_ok=True)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"def create_train_txts_from_df(path):\n",
" df = pd.read_csv(path)\n",
" klass = '_'.join(path.stem.split())\n",
" (path_txt/'train'/klass).mkdir(exist_ok=True)\n",
" for row in df.sample(NUM_SAMPLES_PER_CLASS).iterrows():\n",
" example = {\n",
" 'countrycode': row[1].countrycode,\n",
" 'drawing': json.loads(row[1].drawing),\n",
" 'key_id': row[1].key_id,\n",
" 'recognized': row[1].recognized\n",
" }\n",
" with open(path_txt/'train'/klass/f'{example[\"key_id\"]}.txt', mode='w') as f: json.dump(example, f)\n",
"\n",
"def create_test_txts_from_df(path):\n",
" df = pd.read_csv(path)\n",
" for row in df.iterrows():\n",
" example = {\n",
" 'countrycode': row[1].countrycode,\n",
" 'drawing': json.loads(row[1].drawing),\n",
" 'key_id': row[1].key_id\n",
" }\n",
" with open(path_txt/'test'/f'{example[\"key_id\"]}.txt', mode='w') as f: json.dump(example, f)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"#%time create_test_txts_from_df(path/'test_simplified.csv')"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"#%time for p in Path(path/'train').iterdir(): create_train_txts_from_df(p)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"src_size = 512 // 8"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"sz = src_size // 1\n",
"bs = 1024"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"def create_func(path):\n",
" with open(path) as f: j = json.load(f)\n",
" drawing = list2drawing(j['drawing'], size=src_size)\n",
" tensor = drawing2tensor(drawing)\n",
" return Image(tensor.div_(255))"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"#tfms = get_transforms(flip_vert=True, max_lighting=0.1, max_zoom=1.05, max_warp=0.)\n",
"tfms = get_transforms()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"src = (ItemList.from_folder(path_txt/'train', create_func=create_func)\n",
" .random_split_by_pct(0.2)\n",
" .label_from_folder()\n",
" .add_test(ItemList.from_folder(path_txt/'test', create_func=create_func))\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"src.x._bunch = ImageDataBunch"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"data = (src\n",
" .transform(tfms, sz=sz)\n",
" .databunch(bs=bs)\n",
" .normalize()\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(340, 340)"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#print(data.classes)\n",
"len(data.classes),data.c"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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eJ9Ssr1JzZ6d9ZqU0nPAh2S1d+9TGlN3l8dRNXYFJpXHwr6UJxmV60cvAV4slwvoUtwdlOqt7q/4eg6y2b0APwV+ExEfAMdQUSZTPogcAdxdvt81UkpXlL83llJd498oFfNb8Ux3/9iWlNLnlCa17U7pc3d74Oqe28TGF60vh5tZXxER51CaodneDDkzMysoN0c064MiYjFKZ7vfqe+WmJlZI/IlYLM+JiKOp3TJ9pSU0kv13h4zM2s8vgRsZmZmVjBOAM3MzMwKpldrACPCcWMdrbhiabnhU089FYBZZimtPLfrrrsC8MorpYVKvvjii5o+bkopOv6pntXR2Bs6dCgAY8eOBeCpp54CYJVVVmn3d6zxNcPY6w3/93+lXf0888wDwKqrrgrAHHOUOk/NPXdpMm3//qVuLp98UloM5KKLLgLgo48+AuCzzz4DoLtXjhZeeGEARowYAcAPf/hDAF54odTn+bjjjgPgn//8Z7cep54aYexBY4y/ell55VLntXPPPReAiy++GIDf//73ddum9sw111wALL/88gB84xvfAOAnP/kJAIsuWmrWMOOMMwLwxBNPANlz0ef3t79dapV55513djj+nACamZmZFYxnARfIfPPNB8DMM88MwL333gvASy95nsBXX33V6uvWzeLNmtv//ldaMfCNN94AYPz48a3+feDAgQB873vfA2DBBUvt/PbZZx8APv/8cwD+/e9/A/DYY48B8P7773dpe5Q8brXVVgC89dZbQJa4L7vssgD861+lFpZKHs0645FHHgFghx12AGD06NEALLDAAgAccsghvbYtSy65JABLL700AO+++y4AY8aMAbL3qD57lPD99a9/BeC///0vkH1u6+fzXn21vUVRpuUE0MzMzKxgnAAWwOqrl1a7WW+99QB46KGHALjiiivqtk2NJl/TNMMMPjey3qUaINXwqF5PNbm6VRr3zjvvAPCf//wHyBKFrnjmmWcAePHFFwGYc845gayGSnVJqh381rdKK7S9+eabADz//PNAdjUhn6jLIouUll7deOONAfjyy9JCJDfccAOQJYIrrbQSAEsttRQAjz/+eJefm9nEiRMBOOGE0oIhxx57LABnnHEGkNWiTpkyBYB+/foB2efABx980Or+NttsMwDWX399IHsffPzxxwCsueaafOc7pRasqqdVsqcrcOPGjQOy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gEMOOQSYdpv1OqsWUKn0fvvtB2T1pqo/OvPMMwG44447GnbsNTPVnSrt/93vfgdkNVzjxo0D4PTTTwfgqaeeArIZ6kpO9D7Smr+aFaxxo88njWX9nupjNdtYa80qOWqEFSCaLQHsrrnnnhuAHXbYASjVFKqGT7O0O0vjSQmgeszmr9ToCoC6BOjzsLt22mknIKuP1BWMztAKIEoNO7rV/lwdPdSLU5R2KjXt168fkL0ntDrOL3/5SyeAZmZmZtaaE8Amk+9/pXV8deaz55571mfDyNIA1QHpbH2dddap+5mwxp5eP60pqZnQ+r6SBL0vNDs1n/jlqQ5Ssx21hu3zzz9fs7PRZjPffPO1rA6z9dZbA1lKoDoX1fCow7+64HdEfw8lgkpwVXMm6623XsOMvb5EK3yollOzftVjdNdddwWy/n+6YqGET4me0uptt90WgJ/97GdAlm6rJ536AWqFEP39lXqoRktrC5922mkt21IvfS0B1D5SM3Z11UNUl7755psDpSRQKZWSNCX0XaVkWFcA9thjDyD7PFQdulbNUE18V2sEdYVo9913B7LnoXEo1157LZCN//79+7fUVOpWdZD5r3WrzxzNeNb6xvn7ET3X/EpfUs34cwJoZmZmVjBOAJuMzqTV/099lf7xj38AWc1Nb1JNoGbi6WxeKdv48ePrfiassadVS44//nggSyCU2K244opA1k9OdYw6A1QtSEe999SP7JxzzuHkk0+uzZNoMuuvvz4//elPgWz2p1YdUN2KklOtOqB60s7S30O1QieddBIAgwcPbpix1xco+dD74cgjjwSyFEJrkWv8qz+pEmAlN7o6oDRJSZ7SctWAXnnllUC2opESGSXISkX0vtTMyG222YYJEyZ0/wl3Q19LAJWu6z2mes58neYrr7wClNI6XWHRrN1jjjmmFpsyDfWnVBcB1YLq81A1iKrH666DDjoIyHom6n41W3306NEt61rXSzXjz0vBNRkdAOpA5e677wayZWHqYdFFFwWyA74nn3wSyFo4NAJNldfBqQptzz//fCBrQ6KDWE3A0AeSmmzqddai5roskqe2F2PGjGmZ6NBITWp7ki5pDBw4sGXHrDGRb2KtyTJdPfATXTLUEnH7778/kF0StOrowEp/Hx2I6VZN43Vgp9dbB4J634iW9NKlO12y06X7fKsLHSCq1GLHHXcE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+ndIffByqS8Bm5mZmRWMLwGbmZmZFUyvXgIuF6u3a621/r+9M4+Xsqz7/7vsJ6lP+iRlJoaauSCGgIpoKooo7rsmppaV6+OGllvlo4FPi5pLSiVugSK4hAuaC4q7KKSiYolbKqS2GFYmpcbvj/N6z8W5YDhzzpkzy7m/738u5nDOzD0z933NXJ/r8/18vwTAt771LQC2266l68sKK6wAwEEHtfg977nnHgD++Mc/dvhYdtppJwBGjhwJwIYbbgjAdde1dHY77bTTAHjvvfc6/BiNwtlnnw3Azju3NBz52Mda3va77roLgNtvb0n4eOKJluKrv/71rxXd7+qrt6TXPPzwwwCstlpLpqaq8n//d0vnsXfffbfuJfRf/OIXFwL87Gc/A9K51l7effddAN5/v6XYzNfy//2/lg5Eyy7b0qJ30Ri9mTNnAnDrrbcC8MILLwAwceLEDh1Dd8Br+tOfbumCOHToUCC9P76eL7/8MgBTp04FYPTo0QDMnTu3osdZuHBh3c+9888/fyHAwQe3NDF46KGHAHjzzZYs2QceeACAv/+9JfP2b3/721JHr88PP1xSgkXQVXhOLliwAEjX+IorrgjAP/7xj1a/3wjnHrT9uTtgwAAA9tuvJYnHefv+++8H4MYbbwTgP//5T6uxHCNGtDQhGjRoEL/+9a+BdI772fDvf/+71e164fy98cYbA7DVVlsBaX7q0aMHkN77csfr73/0o4trah988AGQrm/H115r2Y1+8MEHgXRd+1gem8dwwAEtzXXWW289AP71r5ai5Pnz5wPw4ostNYC33XYbAG+99Vab518ogEEQBEEQBAWjph7AciuRNdZoCX53hXz44YcD8OijjwLwk5/8BICnn34aqK4qp6r4f//3fwB8/OMfB9Kq56ijlpS52zxcddVV7LJLSxvXP/3pTwCMGTMGgFtuaWlT7Eqko7gCHjt2LJBWkiq49957b91XwieccMJCgCOPPBKAcePGATBr1iwgrUjbO6oELu33Qqlpm89+tiU2TmX2rLPOAuDzn2/JW3/88ceBdG5Vqv43ggrzpz/9aSHANde0ZNiqZno9+tyC5mDOnDkAfOELXwBgnXXWAeCll1q3lW2Ecw/aVgBlk002AWDffVuibT/5yU8CScHyvPVz+e233wbSXCd+3my88cZ84hMtjTw+9amWzpWe8+60vfHG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\n",
"text/plain": [
"<Figure size 648x720 with 16 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"data.show_batch(rows=4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Training: resnet"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"name = f'res34-{sz}'"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"#arch = models.resnet50\n",
"arch = models.resnet34"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"metrics = [accuracy,map3]\n",
"#metrics = accuracy"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"learn = create_cnn(data, arch, metrics=metrics, model_dir = path_models)#.to_fp16()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"#learn.load('res34-128-stage-2');"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [],
"source": [
"learn.freeze()"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"learn.lr_find()\n",
"learn.recorder.plot()"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [],
"source": [
"lr = 1e-02"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Total time: 09:37\n",
"epoch train_loss valid_loss accuracy map3 \n",
"1 1.358179 1.204422 0.682941 0.765922 (03:11)\n",
"2 1.259447 1.085682 0.716353 0.792961 (03:11)\n",
"3 1.140498 1.034698 0.729824 0.803059 (03:13)\n",
"\n"
]
}
],
"source": [
"learn.fit_one_cycle(3, slice(lr))"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAD8CAYAAABw1c+bAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xl8XGd97/HPbxbtuyXLsuQlXnC8JLaDSALOhUAgcdgCNPQmUKAtffnCTVlablvg3ksptPfeXlooZW0gKdCS0N4skKZkaxISkhAncuIkdmzHilfZliVZsvZtZn73jzl2ZFmyx/bII81836/XvDTnOc+Z+Z3x+Pecec5zzmPujoiI5I5QpgMQEZHzS4lfRCTHKPGLiOQYJX4RkRyjxC8ikmOU+EVEcowSv4hIjlHiFxHJMUr8IiI5JpLpACZSXV3tCxcuzHQYIiIzxqZNmzrcvSaVutMy8S9cuJCmpqZMhyEiMmOY2d5U66qrR0Qkxyjxi4jkGCV+EZEco8QvIpJjlPhFRHKMEr+ISI5R4hcRyTFZlfib23p56tWOTIchIjKtTcsLuM7W27/+OAB7/s+7MhyJiMj0lVVH/MckEppAXkRkMlmZ+I8OjmY6BBGRaSsrE39773CmQxARmbZOm/jNrMDMnjGzF8xsq5n9xQR18s3sX8ys2cw2mtnCMeu+EJTvMLNr0hv+xJT4RUQml8oR/zDwNndfDawB1pvZ5ePqfBzocvclwDeAvwYwsxXADcBKYD3wXTMLpyv4ybT3DU31W4iIzFinTfye1BcsRoPH+LOn1wE/Dp7fAVxlZhaU/8zdh919N9AMXJqWyCfw7ovrADjcoyN+EZHJpNTHb2ZhM9sMtAEPufvGcVXqgf0A7h4DuoFZY8sDLUHZlPjWjWtZMKuIR7a3TdVbiIjMeCklfnePu/saoAG41MxWjatiE212ivKTmNkGM2sys6b29vZUwproNbh6RS0v7D9KLJ44q9cQEcl2ZzSqx92PAr8i2V8/VgswD8DMIkA50Dm2PNAAHJzktW9290Z3b6ypSWn2sAmtnFvOcCzBq+39Z/0aIiLZLJVRPTVmVhE8LwTeDmwfV+0e4GPB8+uBR9zdg/IbglE/FwBLgWfSFfxEVs4tA2Drwe6pfBsRkRkrlSP+OuBRM3sReJZkH/+9ZvYVM3tvUOcWYJaZNQN/DHwewN23Av8KvAzcD9zk7vF078RYi2pKKC2IsHFX51S+jYjIjHXae/W4+4vA2gnKvzTm+RDwwUm2/yvgr84hxjMSDhlvWFjFCy1Hz9dbiojMKFl55W5deQFtuohLRGRCWZn4Z5cW0Nk/wkhMI3tERMbLysQ/pzwfgNZuXcErIjJeVib+JbNLAHjlcG+GIxERmX6yMvG/rraUkMGLBzSkU0RkvKxM/KUFUVbOLefpXUcyHYqIyLSTlYkf4E2LZ7F531GGRqf0sgERkRknaxP/RQ3ljMQT7O7QrRtERMbK2sR/QXUxALt0zx4RkRPkQOLvO01NEZHckrWJvygvQl15AbvU1SMicoKsTfwAC2YVsb9zINNhiIhMK1md+OeWF3JIV++KiJwgqxP/nPICWnuGiCcmnPRLRCQnZXXiX1RTQjzh7O7QCV4RkWNSmYFrnpk9ambbzGyrmX1mgjp/Ymabg8cWM4ubWVWwbo+ZvRSsa5qKnZjMRfXlALzYols3iIgck8oRfwz4nLsvBy4HbjKzFWMruPvX3H1NMCH7F4DH3H3sFFhvDdY3pi3yFCyuKaYwGuYl3bNHROS40yZ+dz/k7s8Fz3uBbUD9KTa5Ebg9PeGdm0g4xIV1pWw71JPpUEREpo0z6uM3s4Ukp2HcOMn6ImA9cOeYYgceNLNNZrbh7MI8e0tqSmhu01h+EZFjUk78ZlZCMqF/1t0nO4R+D/DkuG6ede5+CXAtyW6iN0/y+hvMrMnMmtrb21MN67SWzC6ho2+Y7oHRtL2miMhMllLiN7MoyaT/U3e/6xRVb2BcN4+7Hwz+tgF3A5dOtKG73+zuje7eWFNTk0pYKTk2KUuzbt0gIgKkNqrHgFuAbe7+9VPUKwfeAvxiTFmxmZUeew5cDWw516DPxOtqSwHUzy8iEoikUGcd8BHgJTPbHJR9EZgP4O7fD8reDzzo7mM71GuBu5NtBxHgNne/Px2Bp6qhspDKoigvaUiniAiQQuJ39ycAS6Hej4AfjSvbBaw+y9jSwsy4qKFC0zCKiASy+srdY1bOLWPn4V5i8USmQxERybicSPzzq4qIJZzDvcOZDkVEJONyIvHPqywCYN8R3aJZRCQnEv+yOcmRPS8dOJrhSEREMi8nEn9NaT71FYW8fFBDOkVEciLxA9RXFnLwqCZlERHJncRfUciBo4OZDkNEJONyJvHPrdBsXCIikFOJv5B4wmnrVXePiOS2nEr8AC1d6u4RkdyWM4n/glnFAOxu1735RSS35Uzin1dVRF4kxM623kyHIiKSUTmT+MMhY1F1Mc1tui+/iOS2nEn8AEtrS9mpxC8iOS6nEv+y2hJaugbpG45lOhQRkYxJZQaueWb2qJltM7OtZvaZCepcaWbdZrY5eHxpzLr1ZrbDzJrN7PPp3oEzsWxOGQCvHFY/v4jkrlRm4IoBn3P354JpFDeZ2UPu/vK4er9293ePLTCzMPAd4B1AC/Csmd0zwbbnxbJgGsYdrb1cMr8yEyGIiGTcaY/43f2Quz8XPO8FtgH1Kb7+pUCzu+9y9xHgZ8B1ZxvsuWqoLKQ4L8x2zb8rIjnsjPr4zWwhsBbYOMHqN5rZC2Z2n5mtDMrqgf1j6rSQeqORdqGQsWxOKdsOqatHRHJXyonfzEqAO4HPuvv4Q+bngAXuvhr4FvDzY5tN8FIT3izHzDaYWZOZNbW3t6ca1hlbMbeMba09uOuePSKSm1JK/GYWJZn0f+rud41f7+497t4XPP8lEDWzapJH+PPGVG0ADk70Hu5+s7s3untjTU3NGe5G6pbXldE7FNOtG0QkZ6UyqseAW4Bt7v71SerMCephZpcGr3sEeBZYamYXmFkecANwT7qCPxvL65Ije7apn19EclQqo3rWAR8BXjKzzUHZF4H5AO7+feB64JNmFgMGgRs82ZcSM7M/BB4AwsCt7r41zftwRi6cU4oZvHyoh6tXzslkKCIiGXHaxO/uTzBxX/3YOt8Gvj3Jul8Cvzyr6KZAUV6EhbOKdcQvIjkrp67cPWZFXZlG9ohIzsrJxL+8rpR9nQP0Do1mOhQRkfMuJxP/irnJE7zbW3XULyK5JycT/7GRPS8fVD+/iOSenEz8c8oKqCyK6gSviOSknEz8ZsbyujJeVuIXkRyUk4kfkiN7drT2EosnMh2KiMh5lbOJf3ldGcOxBLs7NPm6iOSWnE38x0b2qLtHRHJNzib+xTUlRMOmxC8iOSdnE39eJMTS2bo3v4jknpxN/JDs59dYfhHJNTmd+FfMLaOjb5i23qFMhyIict7kdOJfXpecfF3dPSKSS3I68a+sKwdgy4HuDEciInL+5HTiLy+Ksqi6mOf3Hc10KCIi500qUy/OM7NHzWybmW01s89MUOfDZvZi8HjKzFaPWbfHzF4ys81m1pTuHThXa+ZVsHn/UU2+LiI5I5Uj/hjwOXdfDlwO3GRmK8bV2Q28xd0vBr4K3Dxu/VvdfY27N55zxGm2Zn4FHX3DHDiqyddFJDecNvG7+yF3fy543gtsA+rH1XnK3buCxaeBhnQHOlXWzKsAYPN+dfeISG44oz5+M1sIrAU2nqLax4H7xiw78KCZbTKzDad47Q1m1mRmTe3t7WcS1jm5cE4ZeZEQm9XPLyI54rSTrR9jZiXAncBn3X3Cq57M7K0kE/8VY4rXuftBM5sNPGRm29398fHbuvvNBF1EjY2N563DPS8SYtXcMh3xi0jOSOmI38yiJJP+T939rknqXAz8ELjO3Y8cK3f3g8HfNuBu4NJzDTrd1syr5KUD3YzqFs0ikgNSGdVjwC3ANnf/+iR15gN3AR9x91fGlBebWemx58DVwJZ0BJ5Oa+dXMBxLsENz8IpIDkilq2cd8BHgJTPbHJR9EZgP4O7fB74EzAK+m2wniAUjeGqBu4OyCHCbu9+f1j1Ig2MneJ/ff5RV9eUZjkZEZGqdNvG7+xOAnabOHwB/MEH5LmD1yVtMLw2VhVSX5LF531E+cvmCTIcjIjKlcvrK3WPMLLiQq+v0lUVEZjgl/sCaeRW82t5P9+BopkMREZlSSvyBNfMqAXixRcM6RSS7KfEHLp5Xjhm6kEtEsp4Sf6CsIMrimhJdyCUiWU+JfwzdqVNEcoES/xhr5lVwpH+E/Z26U6eIZC8l/jHesLAKgN/s6shwJCIiU0eJf4zX1ZZQV17Ao9vP391BRUTONyX+McyMK5fN5onmDt2wTUSylhL/OFcuq6FvOEbTHl3FKyLZSYl/nHVLqomGjV/taMt0KCIiU0KJf5yS/AhvWFjFr3aon19EspMS/wSuXFbDjsO9HNQE7CKShZT4J/DWZbMBeFTdPSKShVKZgWuemT1qZtvMbKuZfWaCOmZmf29mzWb2opldMmbdx8xsZ/D4WLp3YCosmV1CQ2Uhj25X4heR7JPKEX8M+Jy7LwcuB24ysxXj6lwLLA0eG4DvAZhZFfDnwGUk59r9czOrTFPsU8bMuOrC5LDOodF4psMREUmr0yZ+dz/k7s8Fz3uBbUD9uGrXAT/xpKeBCjOrA64BHnL3TnfvAh4C1qd1D6bIVctrGRpN8GSzruIVkexyRn38ZrYQWAtsHLeqHtg/ZrklKJusfKLX3mBmTWbW1N6e+RE1ly2qojgvzH9sU3ePiGSXlBO/mZUAdwKfdfee8asn2MRPUX5yofvN7t7o7o01NTWphjVl8iNh1i2p5tc7M98IiYikU0qJ38yiJJP+T939rgmqtADzxiw3AAdPUT4jrFtSTUvXIPs7BzIdiohI2qQyqseAW4Bt7v71SardA3w0GN1zOdDt7oeAB4CrzawyOKl7dVA2I7xp8SwAnlA/v4hkkUgKddYBHwFeMrPNQdkXgfkA7v594JfAO4FmYAD4vWBdp5l9FXg22O4r7t6ZvvCn1rFhnf/x8mFuvHR+psMREUmL0yZ+d3+Cifvqx9Zx4KZJ1t0K3HpW0WWYmXH1ijn888a99A/HKM5PpZ0UEZnedOXuaVy9spaRWILHXtFJXhHJDkr8p9G4oJLKoij3bWnNdCgiImmhxH8akXCI96yeywNbW+nqH8l0OCIi50yJPwUfumw+I7EEdz7XkulQRETOmRJ/Ci6cU8Yl8yu47Zl9JM9ji4jMXEr8KfrQZQvY1d7P07tmzGhUEZEJKfGn6N0X11FWEOG2Z/ZlOhQRkXOixJ+igmiYD1zSwP1bDnGkbzjT4YiInDUl/jPw4cvmMxp37tikk7wiMnMp8Z+BpbWlXLqwituf2UcioZO8IjIzKfGfoQ9dNp89Rwb4za4jmQ5FROSsKPGfofWr5lBZFOW2jTrJKyIzkxL/GSqIhvmtSxp4YGsr7b06ySsiM48S/1m48bL5xBLOPz+9N9OhiIicMSX+s7C4poRrV83hB7/eRVvvUKbDERE5I6nMwHWrmbWZ2ZZJ1v+JmW0OHlvMLG5mVcG6PWb2UrCuKd3BZ9Kfrb+QodE4P3h8V6ZDERE5I6kc8f8IWD/ZSnf/mruvcfc1wBeAx8bNsvXWYH3juYU6vSysLua6NfX8dOM+OnXXThGZQU6b+N39cSDVG9TcCNx+ThHNIP/1ysUMjsa59YndmQ5FRCRlaevjN7Mikr8M7hxT7MCDZrbJzDak672mi6W1pVy7ag4/fmoP3YOjmQ5HRCQl6Ty5+x7gyXHdPOvc/RLgWuAmM3vzZBub2QYzazKzpvb2mTPN4U1vXULvcIwfPbkn06GIiKQknYn/BsZ187j7weBvG3A3cOlkG7v7ze7e6O6NNTU1aQxraq2cW841K2v53mPNGuEjIjNCWhK/mZUDbwF+Maas2MxKjz0HrgYmHBk0033+2uWMxp3//cvtmQ5FROS0UhnOeTvwG2CZmbWY2cfN7BNm9okx1d4PPOju/WPKaoEnzOwF4Bng3939/nQGP11cUF3Mp962hLufP8Cj29syHY6IyCnZdJxKsLGx0ZuaZtaw/9F4gqv+9jFKCyLc+6krMLNMhyQiOcTMNqU6bF5X7qZJNBzi01ctZevBHu5+/kCmwxERmZQSfxq9f209jQsq+Yt/e5mjA7qoS0SmJyX+NAqHjK++bxU9Q6N865HmTIcjIjIhJf40W15Xxn9unMc/Prmbh7cdznQ4IiInUeKfAl96zwpWzi3nU7c/T3Nbb6bDERE5gRL/FCjKi/DDjzVSGA3zqds3MzQaz3RIIiLHKfFPkdqyAr72wYvZdqiHr9z7MtNx2KyI5CYl/in0tgtr+S9vWcRtG/fxtw++kulwREQAJf4p9/n1F/K+NXO5+de7aNqT6t2tRUSmjhL/FDMzvvDO5dSU5POhH2xky4HuTIckIjlOif88qC0r4N8+dQVVxXl8+vbn6R+OZTokEclhSvznSVVxHn93wxp2H+nnf/5iC4mETvaKSGYo8Z9Hly+axafftpS7njvAj3+zJ9PhiEiOUuI/zz779qWsWzKLbz68k/2dA5kOR0RykBL/eWZmfOW6VcQTzvu/+xTP7+vKdEgikmNSmYjlVjNrM7MJZ88ysyvNrNvMNgePL41Zt97MdphZs5l9Pp2Bz2SLa0r48e9fSkE0xId/uJH7t7RmOiQRySGpHPH/CFh/mjq/dvc1weMrAGYWBr5DcqL1FcCNZrbiXILNJpfMr+SuT76JeZVFfOKfN/Hle7bq1g4icl6cNvG7++PA2Vx5dCnQ7O673H0E+Blw3Vm8TtaaXVbAL/5wHb/7poX86Kk9vO87T7LviPr9RWRqpauP/41m9oKZ3WdmK4OyemD/mDotQZmMURAN8+X3ruQHH21kz5F+3vPtJ9i460imwxKRLJaOxP8csMDdVwPfAn4elE806eykg9fNbIOZNZlZU3t7exrCmlnesaKWBz77ZmaV5PE7t2zk7udbMh2SiGSpc0787t7j7n3B818CUTOrJnmEP29M1Qbg4Cle52Z3b3T3xpqamnMNa0ZaMKuYuz+5jtcvqOSP/uUFvvHQK7rQS0TS7pwTv5nNMTMLnl8avOYR4FlgqZldYGZ5wA3APef6ftmuvCjKT37/Mq5/fQPffHgn7/3OExzuGcp0WCKSRVIZznk78BtgmZm1mNnHzewTZvaJoMr1wBYzewH4e+AGT4oBfwg8AGwD/tXdt07NbmSXvEiIr11/Md+8YQ272/u58eandWdPEUkbm44ThDQ2NnpTU1Omw5gWNu46wh//6wscODrIhjcv4jNXLaU4P5LpsERkmjGzTe7emEpdXbk7zV22aBYP/tGbufHS+dz8+C4u/18P8+1HdnLg6GCmQxORGUpH/DPIk80dfO2BHWzef5S8cIgPXz6fD1+2gCWzSzIdmohk2Jkc8SvxzzDuzub9R/n2I808vL0NM3jDwirevLSa+bOKaagspLasgPqKwkyHKiLnkRJ/jmjrGeKfnt7LA1tb2dnWx7F/ynDIuOEN8/jAJfW8fkFVZoMUkfNCiT8HdfWPsK21h/2dA9z9/AE27z/K0GiCC+eU8r619bzrojqK8sI8u6eLixrKqSsrIBSa6Bo7EZmJlPiF3qFRbn9mH//+4iFeaDl5nt/ivDA1pfmYGYMjceorC7movpy18yt4XW0pC2YVUZSn0UMiM4USv5xgT0c/921ppaNvmCWzS9h2qIfth3pJuFNRFCXhcKR/hFdaexkcc4fQ5XVlLJldQlE0zPxZRcQTzrol1SypKaG8KHrS+yQSrl8RIhmixC9nJRZPsONwL81tfezu6OeR7W30DsVo7R46oUEAqC3LxzBKCiK0dg8RMugbjtFQWUQsnqC+spBIKMT6VXN4z+q5VBXnZWivRHKDEr+k1eBInGf2dLKoupjHd7az98gAnf0jjMQStPYMsay2lFgiQV44RHN7HwWRMB19wwyNJhuSSMi4qKGcP7hiERc3lDO3ohB3JxLWZSQi6aLEL9PGtkM9/HzzAf5t80EOdr92z6Gq4jwuXVjFVctn8/619WoERM6REr9MO6PxBE/s7GDvkX6e23eU1u4hDnYP0tI1yOzSfNbOr0iea+gbJhwyVjdUUJwfIT8aojQ/QkE0zNLaUpbMLqE4L8zjOzv49Svt1FcWctkFs1gxtyzTuyiSUUr8MiO4Ow9sbeX/3r+D7sFRivLDNFQUMRJP8Py+Lia7I3XIIOFgxvFrFxbVFLNucTWLaoqZX1XEFUuryY+EgeRJ54Pdg0TDIfIjIcoLowQ3lBXJGmeS+DVeTzLGzFi/qo5rVs45KRHH4gl6hmIURsN0DYwwOBqnua2P5rY+WroGuKi+gutf38DhniEeevkwj+5o445NLSechG6oLKR7YJTB0TixMa3I0tklzCkvYHdHPz2Do1SX5FNVnEdhXpiLG8oZiSVIOAyMxKkrL2DJ7BJeV1vC4poSNRiSFXTEL1nD3WnvHeaFlm4e3dHG7vZ+asvyiYZDrJ5XQTzh9A3H+PcXDxEKJSe+GR6NEw4ZHX0j9A6N8srhPiLBkNS8SIiBkRNHM11UX841K2t5XW0pLx3oZnFNCYtqitne2ktr9xBXLK1mdUMFYQ1rlfNMXT0iZ2loNE5eOIQF3UkdfcM8tqOdba09xOLOjtZenjnN3AjzqgpZ3VBBNBwinnDCIePKZTXMKs5ncDRO18AI65ZUM7e8QL8gJG3S2tVjZrcC7wba3H3VBOs/DPxZsNgHfNLdXwjW7QF6gTgQSzUokUwpiIaPPw8b1JYV8NtvmHdCnZ2He3m1vZ/ldaUMjSbY3trD/Koi5lYU8mRzBz/ffJCNuzsZjSc4OjAKwN3PHzjpvRbMKmJZbSkr5pbxO5cvoLokf2p3TiRw2iN+M3szyYT+k0kS/5uAbe7eZWbXAl9298uCdXuARnfvOJOgdMQv2aJ7cJSmPZ3HTywf6wJ6dk8Xz+w+QtPeLnqHYhREQyyuKeGS+ZXMqyqkKC/Cc/u6KCuIsmR2yfGL6OrKC47fVqO04OSrpyV3pb2rx8wWAvdOlPjH1asEtrh7fbC8ByV+kUnF4gm2t/Zy53MtbD3Qw/P7uxiNn/x/MmQQDYcYjiUAiISMpbWlrJlXQffgCAMjcVq6BukfjlGUF6YoL0I4ZLxp8SwiIaNzYAR3qCnNp76ikH2dA3z0jQupKdWvjGyRyVE9HwfuG7PswINm5sA/uPvNaX4/kRktEg6xqr6cVfXlQHLoaUf/MG09wyybU8pwLMGBrkGWBpPtPLaznYHhOC+0HOXlgz3csWk/o3FnXlUhK+vKKS2IMDASZ2AkRkffCN/91auEQ0ZJfoRYPMHAaPz4ENibH99FfUUhq+dVsH7VHK5ZOSdTH4OcZ2k74jeztwLfBa5w9yNB2Vx3P2hms4GHgE+5++OTbL8B2AAwf/781+/du/cMd0UkN3X2j1BeGD1pJJG7c6h7iFklecevaWjrGaJ7MDnE9Y5NLWw71MOO1l56hmK8d/VcPn3VUs3oNkOd964eM7sYuBu41t1fmaTOl4E+d/+b072funpEzp+h0Th/++AObtu4j6FYgv+0tJp3XVTH25fXUqmb680Y57Wrx8zmA3cBHxmb9M2sGAi5e2/w/GrgK+f6fiKSXgXRMP/9XSv4xFsW891fvcrPnz/Ar3a0A7CqvozOvhEWzy7hiiXV/HbjPDUGWSCVUT23A1cC1cBh4M+BKIC7f9/Mfgj8FnCsbybm7o1mtojkrwBINjC3uftfpRKUjvizyJFXoecglNdDWT1EdDJxuhsajfPYK+3c99IhjvSPkHDn1bZ+WnuSN9m7fFEVH1jbwAcu0c31phNdwCXTxyN/CY9/7bXl4ppkA1DeEPytP3G5tA7CupPIdOPuvNDSzS1P7OY3rx6ho2+Y+VVF/On6ZbxjRe3xcwiSOUr8Mn30HIKOHdB9AHoOQHdL8DdYHu45sb6FoGTOyQ1CeT2UNST/Fs+GkI40MyWecG7buJdvPtxMR98w5YVR3r+2ntXzyqkqzmdWcR4Jd7oGRllcU0xDZVGmQ84JSvwycwx1T9IotLxWHhs6cZtQFMrqXmsIJmogiqqSt++UKdPVP8Idm1r41SttPPXqESZKJZGQsWJuGf3DMSKhEKOJ5HUIv904jw++voGhWIK6sgJCIcPdGYknjo9SGhiJM6s4T7e1SJESv2QPdxjoPLEhGN9A9ByCxOiJ20UKoWzuib8UxjcQBeWZ2acs1Ds0yuGeYdp6h+gbihEOGfGE88zuTnYc7qUkP8JoPEH34Cju0LS36/i24ZBRnBcmFLLjt7g4Ji8Sor6ikNqyfJbVlnLlstm8cfEsEu5EwyEiIVPDEFDil9ySSEB/28m/FMY2EH2t4IkTt8srHdMgTNJA5KmbYips2tvFEzs7KIiG6BkapW8oRu9QjDnlBZQVRnmltZehWJw5ZYUc7h2itXuIlw/2MDgaPz4fAyRviFdVnE9lUZR1i6tZWF1MVXGUlq5BHnr5MPmRMJcsqCAvHOKaVXNo6xliOJZgbnkh7X3DLKkpIZQld1JV4hcZLx6D3kMTn2c4ttzffvJ2hZUnNwhjfzWUzoWIhjeeD0OjcTbu7uSZ3UcojIbZ3tpL/3CMuMPLB7vp6Bs5oX51ST69Q6PHb3MxkZL8CJXFUa66sJbDPUOEQ0Z1ST5lBRGW1paSFwlREA1TVhChtCDCouoSHHh61xG2HuymJD/KwllFrJlfQVFeclDCaDzBno5+dnf0E084c8oL6B4cZe+RAYZG48TdMYyCaIj8SJirls9mdml+cja6svyzPlGuxC9yNkaHoPfg5Ceiu1tg6Oi4jQxKZp/6V0PpHAhp1MtUcne6B0fZ0drLUCxBYTQcTOfpxyfwaW7royAaprQgQizu7DnSz77OAV4+2MPRgVFqy/OJhEIcPDo4aWNRW5ZPW+/wSeczomGjtqyAI30jxN0ZOUVjM5H6ikLae4e5bs1cvvbB1Wf1GSjxi0yV4b7kdQmTnnM4ACN9J25j4eQHG39OAAAHmUlEQVQw1VN1KxVVa6RSBrn78XMF8YTTNTDC5n1HqS0roGdolOFYnL1HBnh2TyeRUIj1q+bwpsWzaO8dZl/nAM/s6eSV1l4uqC4hEjbqygu4ZH4lfcMxDnQN0lBVyOKaEorywuzu6Gd2aQHhkLGrvY9Hd7Szv3OAeML5b9e8jiWzS89qH5T4RTLFPTlSaaLRSWMbiPjwiduF85Ino09oEMY1EIWVGqkkk9KcuyKZYgaFFclH7cqJ67hDf8fkjcLep5K/KvzEaR+JFk3yi2HMcv7ZHS1KblHiFznfzKCkJvmYu3biOok49B2e/FdD838k1zPuF3t++elHKkULpnwXZXpT4heZjkLhoOtnLvCGievERsaMVJqggTj4HAwcOXm7ollB11FFckhrXjHklyT/nrB87DF2ufi1vzphPWMp8YvMVJE8qFyQfExmdDDZbXTSRW8HYagHBvYmT0YP98FIP8QGU3//aNGYhqBkTOMxvsEY36BM0sBE8nUO4zxR4hfJZtFCmLU4+UhFPAaj/a81BCO9yb/Hl/uCRz8M944pC5YHOuHovjHb9J584dxkLDxBA1KcPG8x6fIpGphosW74Nwl9KiLymnAEwuXpu52FO8SGX2swJm1QTtHAHN1/4vLoQOrvHymcvKvqbBqUaGFW/CpR4heRqWOWPJkcLYDi6vS8ZiJ+8i+Nkf4TG4xTNTBDR5NdX2PrJ2Ip7k9oknMfxxqIFBqU8V1iGfhVosQvIjNLKAwFZclHOrhDfCRoHE7TlXVSd1fwt6flxOXR/tTfP5z/WmNQ1gC/f1969usUUkr8ZnYr8G6gbaJ5dy15yds3gXcCA8DvuvtzwbqPAf8jqPqX7v7jdAQuIpIWZskTy5F8KJ6VntdMxJNdUqmeGzm2fJ5mqEv1iP9HwLeBn0yy/lpgafC4DPgecJmZVZGcqrGR5IDjTWZ2j7t3TfI6IiIzXyic7OKZphfUpXRzEHd/HOg8RZXrgJ940tNAhZnVAdcAD7l7Z5DsHwLWn2vQIiJy9tJ1V6h6YP+Y5ZagbLLyk5jZBjNrMrOm9vYJbo8rIiJpka7EP9H4Jj9F+cmF7je7e6O7N9bU1KQpLBERGS9dib8FmDdmuQE4eIpyERHJkHQl/nuAj1rS5UC3ux8CHgCuNrNKM6sErg7KREQkQ1Idznk7cCVQbWYtJEfqRAHc/fvAL0kO5WwmOZzz94J1nWb2VeDZ4KW+4u6nOkksIiJTLKXE7+43nma9AzdNsu5W4NYzD01ERKaC5noTEckx03LqRTNrB/ae5ebVQEcaw5lptP/a/1zef8jdz2CBu6c0JHJaJv5zYWZNqc47mY20/9r/XN5/0GeQCnX1iIjkGCV+EZEck42J/+ZMB5Bh2v/cluv7D/oMTivr+vhFROTUsvGIX0RETiFrEr+ZrTezHWbWbGafz3Q8U8HM5pnZo2a2zcy2mtlngvIqM3vIzHYGfyuDcjOzvw8+kxfN7JLM7kF6mFnYzJ43s3uD5QvMbGOw//9iZnlBeX6w3BysX5jJuNPFzCrM7A4z2x58F96YS98BM/uj4Pu/xcxuN7OCXPsOnKusSPxmFga+Q3JCmBXAjWa2IrNRTYkY8Dl3Xw5cDtwU7OfngYfdfSnwcLAMJ06Qs4HkBDnZ4DPAtjHLfw18I9j/LuDjQfnHgS53XwJ8I6iXDb4J3O/uFwKrSX4WOfEdMLN64NNAYzAbYBi4gdz7Dpwbd5/xD+CNwANjlr8AfCHTcZ2H/f4F8A5gB1AXlNUBO4Ln/wDcOKb+8Xoz9UHyDq8PA28D7iV56+8OIDL+u0DyhoBvDJ5HgnqW6X04x/0vA3aP349c+Q7w2hwfVcG/6b0kJ3zKme9AOh5ZccTPGUz4ki2Cn6xrgY1ArSfvhkrwd3ZQLRs/l78D/hRIBMuzgKPuHguWx+7j8f0P1ncH9WeyRUA78I9Bd9cPzayYHPkOuPsB4G+AfcAhkv+mm8it78A5y5bEn/KEL9nAzEqAO4HPunvPqapOUDZjPxczezfQ5u6bxhZPUNVTWDdTRYBLgO+5+1qgn9e6dSaSVZ9BcO7iOuACYC5QTLI7a7xs/g6cs2xJ/Dkz4YuZRUkm/Z+6+11B8eFgjmOCv21BebZ9LuuA95rZHuBnJLt7/o7kHM/H7jQ7dh+P73+wvpxTzx09E7QALe6+MVi+g2RDkCvfgbcDu9293d1HgbuAN5Fb34Fzli2J/1lgaXBmP4/kyZ57MhxT2pmZAbcA29z962NW3QN8LHj+MZJ9/8fKJ5ogZ0Zy9y+4e4O7LyT5b/yIu38YeBS4Pqg2fv+PfS7XB/Vn9NGeu7cC+81sWVB0FfAyOfIdINnFc7mZFQX/H47tf858B9Ii0ycZ0vUgORHMK8CrwH/PdDxTtI9XkPyZ+iKwOXi8k2Sf5cPAzuBvVVDfSI52ehV4ieRIiIzvR5o+iyuBe4Pni4BnSE4E9P+A/KC8IFhuDtYvynTcadr3NUBT8D34OVCZS98B4C+A7cAW4J+A/Fz7DpzrQ1fuiojkmGzp6hERkRQp8YuI5BglfhGRHKPELyKSY5T4RURyjBK/iEiOUeIXEckxSvwiIjnm/wPWkTMpEIxNVgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"learn.recorder.plot_losses()"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [],
"source": [
"learn.save(f'{name}-stage-1')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Results"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [],
"source": [
"#interp = ClassificationInterpretation.from_learner(learn)"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {},
"outputs": [],
"source": [
"#interp.plot_top_losses(9, figsize=(15,11))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Unfreezing, fine-tuning, and learning rates"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"learn.load(f'{name}-stage-1');"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [],
"source": [
"learn.unfreeze()"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"learn.lr_find()\n",
"learn.recorder.plot()"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [],
"source": [
"lrs = slice(1e-04, lr/10)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Total time: 22:39\n",
"epoch train_loss valid_loss accuracy map3 \n",
"1 1.182257 1.087388 0.712647 0.789490 (04:28)\n",
"2 1.158473 1.072602 0.725765 0.797382 (04:31)\n",
"3 0.949258 0.981611 0.748412 0.815814 (04:32)\n",
"4 0.712735 0.932550 0.762706 0.827314 (04:33)\n",
"5 0.536559 0.933871 0.767118 0.829480 (04:33)\n",
"\n"
]
}
],
"source": [
"learn.fit_one_cycle(5, lrs) "
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"learn.recorder.plot_losses()"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"learn.save(f'{name}-stage-2')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Generate submission"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [],
"source": [
"learn.load(f'{name}-stage-2');"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"ename": "IndexError",
"evalue": "Traceback (most recent call last):\n File \"/opt/anaconda3/lib/python3.7/site-packages/torch/utils/data/dataloader.py\", line 138, in _worker_loop\n samples = collate_fn([dataset[i] for i in batch_indices])\n File \"/opt/anaconda3/lib/python3.7/site-packages/torch/utils/data/dataloader.py\", line 138, in <listcomp>\n samples = collate_fn([dataset[i] for i in batch_indices])\n File \"/opt/anaconda3/lib/python3.7/site-packages/fastai/data_block.py\", line 354, in __getitem__\n if self.item is None: x,y = self.x[idxs],self.y[idxs]\n File \"/opt/anaconda3/lib/python3.7/site-packages/fastai/data_block.py\", line 79, in __getitem__\n if isinstance(try_int(idxs), int): return self.get(idxs)\n File \"/opt/anaconda3/lib/python3.7/site-packages/fastai/data_block.py\", line 228, in get\n o = super().get(i)\n File \"/opt/anaconda3/lib/python3.7/site-packages/fastai/data_block.py\", line 55, in get\n item = self.items[i]\nIndexError: index 68000 is out of bounds for axis 0 with size 68000\n",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-46-90e1c8577cc9>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mpreds\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_preds\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mds_type\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mDatasetType\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;31m#preds = learn.TTA(ds_type=DatasetType.Test)[0]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;31m#preds,y,losses = learn.get_preds(ds_type=DatasetType.Test, with_loss=True)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/fastai/basic_train.py\u001b[0m in \u001b[0;36mget_preds\u001b[0;34m(self, ds_type, with_loss, n_batch, pbar)\u001b[0m\n\u001b[1;32m 209\u001b[0m \u001b[0mlf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloss_func\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mwith_loss\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 210\u001b[0m return get_preds(self.model, self.dl(ds_type), cb_handler=CallbackHandler(self.callbacks),\n\u001b[0;32m--> 211\u001b[0;31m activ=_loss_func2activ(self.loss_func), loss_func=lf, n_batch=n_batch, pbar=pbar)\n\u001b[0m\u001b[1;32m 212\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 213\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mpred_batch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mds_type\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mDatasetType\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mDatasetType\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mValid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpbar\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mOptional\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mPBar\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mList\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mTensor\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/fastai/basic_train.py\u001b[0m in \u001b[0;36mget_preds\u001b[0;34m(model, dl, pbar, cb_handler, activ, loss_func, n_batch)\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[0;34m\"Tuple of predictions and targets, and optional losses (if `loss_func`) using `dl`, max batches `n_batch`.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 37\u001b[0m res = [torch.cat(o).cpu() for o in\n\u001b[0;32m---> 38\u001b[0;31m zip(*validate(model, dl, cb_handler=cb_handler, pbar=pbar, average=False, n_batch=n_batch))]\n\u001b[0m\u001b[1;32m 39\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mloss_func\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcalc_loss\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mres\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mloss_func\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mactiv\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mactiv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mres\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[0m\n",
"\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/fastai/basic_train.py\u001b[0m in \u001b[0;36mvalidate\u001b[0;34m(model, dl, loss_func, cb_handler, pbar, average, n_batch)\u001b[0m\n\u001b[1;32m 47\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mno_grad\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 48\u001b[0m \u001b[0mval_losses\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mnums\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\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---> 49\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0myb\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mprogress_bar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparent\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpbar\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mleave\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpbar\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\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[0m\u001b[1;32m 50\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcb_handler\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcb_handler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mon_batch_begin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrain\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0mval_losses\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloss_batch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mloss_func\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcb_handler\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcb_handler\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/fastprogress/fastprogress.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 65\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mo\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_gen\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 66\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mo\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mauto_update\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\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/opt/anaconda3/lib/python3.7/site-packages/fastai/basic_data.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 45\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\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[1;32m 46\u001b[0m \u001b[0;34m\"Process and returns items from `DataLoader`.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 47\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mb\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdl\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 48\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_listy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mb\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[1;32m 49\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mskip_size1\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0my\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;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/torch/utils/data/dataloader.py\u001b[0m in \u001b[0;36m__next__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 621\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrcvd_idx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreorder_dict\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 622\u001b[0m \u001b[0mbatch\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreorder_dict\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrcvd_idx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 623\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_process_next_batch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 624\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 625\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbatches_outstanding\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/anaconda3/lib/python3.7/site-packages/torch/utils/data/dataloader.py\u001b[0m in \u001b[0;36m_process_next_batch\u001b[0;34m(self, batch)\u001b[0m\n\u001b[1;32m 656\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_put_indices\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 657\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mExceptionWrapper\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 658\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexc_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexc_msg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 659\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 660\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mIndexError\u001b[0m: Traceback (most recent call last):\n File \"/opt/anaconda3/lib/python3.7/site-packages/torch/utils/data/dataloader.py\", line 138, in _worker_loop\n samples = collate_fn([dataset[i] for i in batch_indices])\n File \"/opt/anaconda3/lib/python3.7/site-packages/torch/utils/data/dataloader.py\", line 138, in <listcomp>\n samples = collate_fn([dataset[i] for i in batch_indices])\n File \"/opt/anaconda3/lib/python3.7/site-packages/fastai/data_block.py\", line 354, in __getitem__\n if self.item is None: x,y = self.x[idxs],self.y[idxs]\n File \"/opt/anaconda3/lib/python3.7/site-packages/fastai/data_block.py\", line 79, in __getitem__\n if isinstance(try_int(idxs), int): return self.get(idxs)\n File \"/opt/anaconda3/lib/python3.7/site-packages/fastai/data_block.py\", line 228, in get\n o = super().get(i)\n File \"/opt/anaconda3/lib/python3.7/site-packages/fastai/data_block.py\", line 55, in get\n item = self.items[i]\nIndexError: index 68000 is out of bounds for axis 0 with size 68000\n"
]
}
],
"source": [
"preds, _ = learn.get_preds(ds_type=DatasetType.Test)\n",
"#preds = learn.TTA(ds_type=DatasetType.Test)[0]\n",
"#preds,y,losses = learn.get_preds(ds_type=DatasetType.Test, with_loss=True)"
]
}
],
"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.7.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment