Skip to content

Instantly share code, notes, and snippets.

@asiedubrempong
Created April 11, 2020 21:23
Show Gist options
  • Save asiedubrempong/bcc375604fcef1ffc5ded4dd56a230a3 to your computer and use it in GitHub Desktop.
Save asiedubrempong/bcc375604fcef1ffc5ded4dd56a230a3 to your computer and use it in GitHub Desktop.
Reproduction of chapter 4 of the fastai book using the full MNIST dataset
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Under the hood: training a digit classifier\n",
"---\n",
"This notebook reproduces chapter 4 of the fastai [book](https://github.com/fastai/fastbook) using the full MNIST datasets."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from fastai2.vision.all import *\n",
"from utils import *"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"matplotlib.rc('image', cmap='Greys')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Part 1: Implementing a baseline, ie. pixel similarity"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [],
"source": [
"path = untar_data(URLs.MNIST) # use the full dataset"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"Path.BASE_PATH = path"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(#2) [Path('training'),Path('testing')]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"path.ls()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(#10) [Path('training/0'),Path('training/2'),Path('training/9'),Path('training/8'),Path('training/7'),Path('training/1'),Path('training/5'),Path('training/4'),Path('training/6'),Path('training/3')]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(path/'training').ls()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### *Collect all the paths to the images into a dictionary of lists using dictionary and list comprehensions*"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Path('training/0/53924.png'),\n",
" Path('training/0/53387.png'),\n",
" Path('training/0/2746.png'),\n",
" Path('training/0/20762.png'),\n",
" Path('training/0/15520.png')]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fns = {i: [fn for fn in (path/f'training/{i}').ls()] for i in range(10)}\n",
"fns[0][:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### *Open the images and convert them to tensors*"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"img_tensors = {key: [tensor(Image.open(pat)) for pat in paths] for (key, paths) in fns.items()}"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[ 0, 0, 0, 0, 0, 0, 10, 59, 120, 201, 254, 254, 254, 255],\n",
" [ 0, 0, 0, 0, 10, 50, 138, 253, 254, 253, 247, 236, 253, 254],\n",
" [ 0, 0, 0, 19, 122, 253, 253, 253, 175, 129, 54, 12, 137, 254],\n",
" [ 0, 0, 31, 164, 253, 240, 198, 41, 0, 0, 0, 52, 226, 254],\n",
" [ 0, 16, 217, 254, 207, 108, 0, 0, 0, 0, 68, 241, 253, 254],\n",
" [ 19, 164, 254, 241, 142, 0, 0, 0, 0, 50, 156, 254, 254, 255],\n",
" [ 94, 245, 253, 113, 0, 0, 0, 0, 118, 232, 253, 253, 253, 226],\n",
" [199, 253, 154, 30, 0, 0, 73, 153, 254, 253, 253, 253, 253, 135]],\n",
" dtype=torch.uint8)"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"img_tensors[9][1][7:15, 6:20]"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f734003b090>"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 72x72 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"show_image(img_tensors[9][1])"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
" #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col1 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col2 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col3 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col4 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col5 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col6 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col7 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col8 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col9 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col10 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col11 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col12 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col13 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col14 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col15 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col1 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col2 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col3 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col4 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col5 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col6 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col7 {\n",
" font-size: 6pt;\n",
" background-color: #fafafa;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col8 {\n",
" font-size: 6pt;\n",
" background-color: #dcdcdc;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col9 {\n",
" font-size: 6pt;\n",
" background-color: #9f9f9f;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col10 {\n",
" font-size: 6pt;\n",
" background-color: #414141;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col11 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col12 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col13 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col14 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col15 {\n",
" font-size: 6pt;\n",
" background-color: #737373;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col1 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col2 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col3 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col4 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col5 {\n",
" font-size: 6pt;\n",
" background-color: #fafafa;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col6 {\n",
" font-size: 6pt;\n",
" background-color: #e3e3e3;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col7 {\n",
" font-size: 6pt;\n",
" background-color: #898989;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col8 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col9 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col10 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col11 {\n",
" font-size: 6pt;\n",
" background-color: #080808;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col12 {\n",
" font-size: 6pt;\n",
" background-color: #151515;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col13 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col14 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col15 {\n",
" font-size: 6pt;\n",
" background-color: #030303;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col16 {\n",
" font-size: 6pt;\n",
" background-color: #888888;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col1 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col2 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col3 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col4 {\n",
" font-size: 6pt;\n",
" background-color: #f6f6f6;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col5 {\n",
" font-size: 6pt;\n",
" background-color: #9d9d9d;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col6 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col7 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col8 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col9 {\n",
" font-size: 6pt;\n",
" background-color: #636363;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col10 {\n",
" font-size: 6pt;\n",
" background-color: #939393;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col11 {\n",
" font-size: 6pt;\n",
" background-color: #e0e0e0;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col12 {\n",
" font-size: 6pt;\n",
" background-color: #f9f9f9;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col13 {\n",
" font-size: 6pt;\n",
" background-color: #8a8a8a;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col14 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col15 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col16 {\n",
" font-size: 6pt;\n",
" background-color: #151515;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col1 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col2 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col3 {\n",
" font-size: 6pt;\n",
" background-color: #f0f0f0;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col4 {\n",
" font-size: 6pt;\n",
" background-color: #6e6e6e;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col5 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col6 {\n",
" font-size: 6pt;\n",
" background-color: #101010;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col7 {\n",
" font-size: 6pt;\n",
" background-color: #464646;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col8 {\n",
" font-size: 6pt;\n",
" background-color: #e9e9e9;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col9 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col10 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col11 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col12 {\n",
" font-size: 6pt;\n",
" background-color: #e1e1e1;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col13 {\n",
" font-size: 6pt;\n",
" background-color: #212121;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col14 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col15 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col16 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col1 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col2 {\n",
" font-size: 6pt;\n",
" background-color: #f7f7f7;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col3 {\n",
" font-size: 6pt;\n",
" background-color: #2c2c2c;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col4 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col5 {\n",
" font-size: 6pt;\n",
" background-color: #3a3a3a;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col6 {\n",
" font-size: 6pt;\n",
" background-color: #aeaeae;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col7 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col8 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col9 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col10 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col11 {\n",
" font-size: 6pt;\n",
" background-color: #d5d5d5;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col12 {\n",
" font-size: 6pt;\n",
" background-color: #0f0f0f;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col13 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col14 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col15 {\n",
" font-size: 6pt;\n",
" background-color: #090909;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col16 {\n",
" font-size: 6pt;\n",
" background-color: #a4a4a4;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col1 {\n",
" font-size: 6pt;\n",
" background-color: #f6f6f6;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col2 {\n",
" font-size: 6pt;\n",
" background-color: #6d6d6d;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col3 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col4 {\n",
" font-size: 6pt;\n",
" background-color: #101010;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col5 {\n",
" font-size: 6pt;\n",
" background-color: #858585;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col6 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col7 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col8 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col9 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col10 {\n",
" font-size: 6pt;\n",
" background-color: #e3e3e3;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col11 {\n",
" font-size: 6pt;\n",
" background-color: #767676;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col12 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col13 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col14 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col15 {\n",
" font-size: 6pt;\n",
" background-color: #484848;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col16 {\n",
" font-size: 6pt;\n",
" background-color: #eaeaea;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col1 {\n",
" font-size: 6pt;\n",
" background-color: #bebebe;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col2 {\n",
" font-size: 6pt;\n",
" background-color: #0a0a0a;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col3 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col4 {\n",
" font-size: 6pt;\n",
" background-color: #a8a8a8;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col5 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col6 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col7 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col8 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col9 {\n",
" font-size: 6pt;\n",
" background-color: #a2a2a2;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col10 {\n",
" font-size: 6pt;\n",
" background-color: #181818;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col11 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col12 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col13 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col14 {\n",
" font-size: 6pt;\n",
" background-color: #222222;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col15 {\n",
" font-size: 6pt;\n",
" background-color: #f5f5f5;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col0 {\n",
" font-size: 6pt;\n",
" background-color: #f5f5f5;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col1 {\n",
" font-size: 6pt;\n",
" background-color: #444444;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col2 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col3 {\n",
" font-size: 6pt;\n",
" background-color: #787878;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col4 {\n",
" font-size: 6pt;\n",
" background-color: #f1f1f1;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col5 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col6 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col7 {\n",
" font-size: 6pt;\n",
" background-color: #d1d1d1;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col8 {\n",
" font-size: 6pt;\n",
" background-color: #797979;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col9 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col10 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col11 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col12 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col13 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col14 {\n",
" font-size: 6pt;\n",
" background-color: #8e8e8e;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col15 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col0 {\n",
" font-size: 6pt;\n",
" background-color: #a9a9a9;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col1 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col2 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col3 {\n",
" font-size: 6pt;\n",
" background-color: #6e6e6e;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col4 {\n",
" font-size: 6pt;\n",
" background-color: #eaeaea;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col5 {\n",
" font-size: 6pt;\n",
" background-color: #c6c6c6;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col6 {\n",
" font-size: 6pt;\n",
" background-color: #6b6b6b;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col7 {\n",
" font-size: 6pt;\n",
" background-color: #020202;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col8 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col9 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col10 {\n",
" font-size: 6pt;\n",
" background-color: #282828;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col11 {\n",
" font-size: 6pt;\n",
" background-color: #404040;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col12 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col13 {\n",
" font-size: 6pt;\n",
" background-color: #141414;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col14 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col15 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col0 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col1 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col2 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col3 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col4 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col5 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col6 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col7 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col8 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col9 {\n",
" font-size: 6pt;\n",
" background-color: #787878;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col10 {\n",
" font-size: 6pt;\n",
" background-color: #f0f0f0;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col11 {\n",
" font-size: 6pt;\n",
" background-color: #3d3d3d;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col12 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col13 {\n",
" font-size: 6pt;\n",
" background-color: #4e4e4e;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col14 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col15 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col0 {\n",
" font-size: 6pt;\n",
" background-color: #f3f3f3;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col1 {\n",
" font-size: 6pt;\n",
" background-color: #585858;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col2 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col3 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col4 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col5 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col6 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col7 {\n",
" font-size: 6pt;\n",
" background-color: #444444;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col8 {\n",
" font-size: 6pt;\n",
" background-color: #e7e7e7;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col9 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col10 {\n",
" font-size: 6pt;\n",
" background-color: #cbcbcb;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col11 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col12 {\n",
" font-size: 6pt;\n",
" background-color: #0c0c0c;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col13 {\n",
" font-size: 6pt;\n",
" background-color: #c8c8c8;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col14 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col15 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col1 {\n",
" font-size: 6pt;\n",
" background-color: #e9e9e9;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col2 {\n",
" font-size: 6pt;\n",
" background-color: #8d8d8d;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col3 {\n",
" font-size: 6pt;\n",
" background-color: #8d8d8d;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col4 {\n",
" font-size: 6pt;\n",
" background-color: #8d8d8d;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col5 {\n",
" font-size: 6pt;\n",
" background-color: #e1e1e1;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col6 {\n",
" font-size: 6pt;\n",
" background-color: #ebebeb;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col7 {\n",
" font-size: 6pt;\n",
" background-color: #fefefe;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col8 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col9 {\n",
" font-size: 6pt;\n",
" background-color: #d8d8d8;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col10 {\n",
" font-size: 6pt;\n",
" background-color: #181818;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col11 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col12 {\n",
" font-size: 6pt;\n",
" background-color: #9a9a9a;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col13 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col14 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col15 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col1 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col2 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col3 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col4 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col5 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col6 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col7 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col8 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col9 {\n",
" font-size: 6pt;\n",
" background-color: #2f2f2f;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col10 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col11 {\n",
" font-size: 6pt;\n",
" background-color: #1e1e1e;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col12 {\n",
" font-size: 6pt;\n",
" background-color: #f9f9f9;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col13 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col14 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col15 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col1 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col2 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col3 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col4 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col5 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col6 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col7 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col8 {\n",
" font-size: 6pt;\n",
" background-color: #5c5c5c;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col9 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col10 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col11 {\n",
" font-size: 6pt;\n",
" background-color: #c6c6c6;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col12 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col13 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col14 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col15 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col1 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col2 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col3 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col4 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col5 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col6 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col7 {\n",
" font-size: 6pt;\n",
" background-color: #f0f0f0;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col8 {\n",
" font-size: 6pt;\n",
" background-color: #111111;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col9 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col10 {\n",
" font-size: 6pt;\n",
" background-color: #6f6f6f;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col11 {\n",
" font-size: 6pt;\n",
" background-color: #f7f7f7;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col12 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col13 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col14 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col15 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col1 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col2 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col3 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col4 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col5 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col6 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col7 {\n",
" font-size: 6pt;\n",
" background-color: #727272;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col8 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col9 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col10 {\n",
" font-size: 6pt;\n",
" background-color: #cecece;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col11 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col12 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col13 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col14 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col15 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col1 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col2 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col3 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col4 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col5 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col6 {\n",
" font-size: 6pt;\n",
" background-color: #d0d0d0;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col7 {\n",
" font-size: 6pt;\n",
" background-color: #030303;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col8 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col9 {\n",
" font-size: 6pt;\n",
" background-color: #a7a7a7;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col10 {\n",
" font-size: 6pt;\n",
" background-color: #fcfcfc;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col11 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col12 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col13 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col14 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col15 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col1 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col2 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col3 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col4 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col5 {\n",
" font-size: 6pt;\n",
" background-color: #fcfcfc;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col6 {\n",
" font-size: 6pt;\n",
" background-color: #464646;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col7 {\n",
" font-size: 6pt;\n",
" background-color: #000000;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col8 {\n",
" font-size: 6pt;\n",
" background-color: #252525;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col9 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col10 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col11 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col12 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col13 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col14 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col15 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col1 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col2 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col3 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col4 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col5 {\n",
" font-size: 6pt;\n",
" background-color: #d1d1d1;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col6 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col7 {\n",
" font-size: 6pt;\n",
" background-color: #070707;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col8 {\n",
" font-size: 6pt;\n",
" background-color: #dfdfdf;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col9 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col10 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col11 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col12 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col13 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col14 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col15 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col0 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col1 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col2 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col3 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col4 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col5 {\n",
" font-size: 6pt;\n",
" background-color: #e9e9e9;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col6 {\n",
" font-size: 6pt;\n",
" background-color: #010101;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col7 {\n",
" font-size: 6pt;\n",
" background-color: #303030;\n",
" color: #f1f1f1;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col8 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col9 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col10 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col11 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col12 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col13 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col14 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col15 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" } #T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col16 {\n",
" font-size: 6pt;\n",
" background-color: #ffffff;\n",
" color: #000000;\n",
" }</style><table id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002\" ><thead> <tr> <th class=\"blank level0\" ></th> <th class=\"col_heading level0 col0\" >0</th> <th class=\"col_heading level0 col1\" >1</th> <th class=\"col_heading level0 col2\" >2</th> <th class=\"col_heading level0 col3\" >3</th> <th class=\"col_heading level0 col4\" >4</th> <th class=\"col_heading level0 col5\" >5</th> <th class=\"col_heading level0 col6\" >6</th> <th class=\"col_heading level0 col7\" >7</th> <th class=\"col_heading level0 col8\" >8</th> <th class=\"col_heading level0 col9\" >9</th> <th class=\"col_heading level0 col10\" >10</th> <th class=\"col_heading level0 col11\" >11</th> <th class=\"col_heading level0 col12\" >12</th> <th class=\"col_heading level0 col13\" >13</th> <th class=\"col_heading level0 col14\" >14</th> <th class=\"col_heading level0 col15\" >15</th> <th class=\"col_heading level0 col16\" >16</th> </tr></thead><tbody>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row0\" class=\"row_heading level0 row0\" >0</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col0\" class=\"data row0 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col1\" class=\"data row0 col1\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col2\" class=\"data row0 col2\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col3\" class=\"data row0 col3\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col4\" class=\"data row0 col4\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col5\" class=\"data row0 col5\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col6\" class=\"data row0 col6\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col7\" class=\"data row0 col7\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col8\" class=\"data row0 col8\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col9\" class=\"data row0 col9\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col10\" class=\"data row0 col10\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col11\" class=\"data row0 col11\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col12\" class=\"data row0 col12\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col13\" class=\"data row0 col13\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col14\" class=\"data row0 col14\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col15\" class=\"data row0 col15\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row0_col16\" class=\"data row0 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row1\" class=\"row_heading level0 row1\" >1</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col0\" class=\"data row1 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col1\" class=\"data row1 col1\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col2\" class=\"data row1 col2\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col3\" class=\"data row1 col3\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col4\" class=\"data row1 col4\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col5\" class=\"data row1 col5\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col6\" class=\"data row1 col6\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col7\" class=\"data row1 col7\" >10</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col8\" class=\"data row1 col8\" >59</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col9\" class=\"data row1 col9\" >120</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col10\" class=\"data row1 col10\" >201</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col11\" class=\"data row1 col11\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col12\" class=\"data row1 col12\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col13\" class=\"data row1 col13\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col14\" class=\"data row1 col14\" >255</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col15\" class=\"data row1 col15\" >158</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row1_col16\" class=\"data row1 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row2\" class=\"row_heading level0 row2\" >2</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col0\" class=\"data row2 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col1\" class=\"data row2 col1\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col2\" class=\"data row2 col2\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col3\" class=\"data row2 col3\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col4\" class=\"data row2 col4\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col5\" class=\"data row2 col5\" >10</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col6\" class=\"data row2 col6\" >50</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col7\" class=\"data row2 col7\" >138</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col8\" class=\"data row2 col8\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col9\" class=\"data row2 col9\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col10\" class=\"data row2 col10\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col11\" class=\"data row2 col11\" >247</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col12\" class=\"data row2 col12\" >236</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col13\" class=\"data row2 col13\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col14\" class=\"data row2 col14\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col15\" class=\"data row2 col15\" >250</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row2_col16\" class=\"data row2 col16\" >104</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row3\" class=\"row_heading level0 row3\" >3</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col0\" class=\"data row3 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col1\" class=\"data row3 col1\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col2\" class=\"data row3 col2\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col3\" class=\"data row3 col3\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col4\" class=\"data row3 col4\" >19</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col5\" class=\"data row3 col5\" >122</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col6\" class=\"data row3 col6\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col7\" class=\"data row3 col7\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col8\" class=\"data row3 col8\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col9\" class=\"data row3 col9\" >175</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col10\" class=\"data row3 col10\" >129</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col11\" class=\"data row3 col11\" >54</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col12\" class=\"data row3 col12\" >12</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col13\" class=\"data row3 col13\" >137</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col14\" class=\"data row3 col14\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col15\" class=\"data row3 col15\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row3_col16\" class=\"data row3 col16\" >175</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row4\" class=\"row_heading level0 row4\" >4</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col0\" class=\"data row4 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col1\" class=\"data row4 col1\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col2\" class=\"data row4 col2\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col3\" class=\"data row4 col3\" >31</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col4\" class=\"data row4 col4\" >164</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col5\" class=\"data row4 col5\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col6\" class=\"data row4 col6\" >240</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col7\" class=\"data row4 col7\" >198</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col8\" class=\"data row4 col8\" >41</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col9\" class=\"data row4 col9\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col10\" class=\"data row4 col10\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col11\" class=\"data row4 col11\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col12\" class=\"data row4 col12\" >52</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col13\" class=\"data row4 col13\" >226</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col14\" class=\"data row4 col14\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col15\" class=\"data row4 col15\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row4_col16\" class=\"data row4 col16\" >189</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row5\" class=\"row_heading level0 row5\" >5</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col0\" class=\"data row5 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col1\" class=\"data row5 col1\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col2\" class=\"data row5 col2\" >16</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col3\" class=\"data row5 col3\" >217</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col4\" class=\"data row5 col4\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col5\" class=\"data row5 col5\" >207</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col6\" class=\"data row5 col6\" >108</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col7\" class=\"data row5 col7\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col8\" class=\"data row5 col8\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col9\" class=\"data row5 col9\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col10\" class=\"data row5 col10\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col11\" class=\"data row5 col11\" >68</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col12\" class=\"data row5 col12\" >241</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col13\" class=\"data row5 col13\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col14\" class=\"data row5 col14\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col15\" class=\"data row5 col15\" >245</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row5_col16\" class=\"data row5 col16\" >86</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row6\" class=\"row_heading level0 row6\" >6</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col0\" class=\"data row6 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col1\" class=\"data row6 col1\" >19</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col2\" class=\"data row6 col2\" >164</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col3\" class=\"data row6 col3\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col4\" class=\"data row6 col4\" >241</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col5\" class=\"data row6 col5\" >142</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col6\" class=\"data row6 col6\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col7\" class=\"data row6 col7\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col8\" class=\"data row6 col8\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col9\" class=\"data row6 col9\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col10\" class=\"data row6 col10\" >50</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col11\" class=\"data row6 col11\" >156</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col12\" class=\"data row6 col12\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col13\" class=\"data row6 col13\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col14\" class=\"data row6 col14\" >255</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col15\" class=\"data row6 col15\" >196</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row6_col16\" class=\"data row6 col16\" >30</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row7\" class=\"row_heading level0 row7\" >7</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col0\" class=\"data row7 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col1\" class=\"data row7 col1\" >94</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col2\" class=\"data row7 col2\" >245</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col3\" class=\"data row7 col3\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col4\" class=\"data row7 col4\" >113</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col5\" class=\"data row7 col5\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col6\" class=\"data row7 col6\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col7\" class=\"data row7 col7\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col8\" class=\"data row7 col8\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col9\" class=\"data row7 col9\" >118</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col10\" class=\"data row7 col10\" >232</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col11\" class=\"data row7 col11\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col12\" class=\"data row7 col12\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col13\" class=\"data row7 col13\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col14\" class=\"data row7 col14\" >226</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col15\" class=\"data row7 col15\" >21</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row7_col16\" class=\"data row7 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row8\" class=\"row_heading level0 row8\" >8</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col0\" class=\"data row8 col0\" >7</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col1\" class=\"data row8 col1\" >199</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col2\" class=\"data row8 col2\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col3\" class=\"data row8 col3\" >154</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col4\" class=\"data row8 col4\" >30</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col5\" class=\"data row8 col5\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col6\" class=\"data row8 col6\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col7\" class=\"data row8 col7\" >73</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col8\" class=\"data row8 col8\" >153</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col9\" class=\"data row8 col9\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col10\" class=\"data row8 col10\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col11\" class=\"data row8 col11\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col12\" class=\"data row8 col12\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col13\" class=\"data row8 col13\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col14\" class=\"data row8 col14\" >135</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col15\" class=\"data row8 col15\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row8_col16\" class=\"data row8 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row9\" class=\"row_heading level0 row9\" >9</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col0\" class=\"data row9 col0\" >35</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col1\" class=\"data row9 col1\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col2\" class=\"data row9 col2\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col3\" class=\"data row9 col3\" >163</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col4\" class=\"data row9 col4\" >40</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col5\" class=\"data row9 col5\" >85</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col6\" class=\"data row9 col6\" >166</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col7\" class=\"data row9 col7\" >251</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col8\" class=\"data row9 col8\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col9\" class=\"data row9 col9\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col10\" class=\"data row9 col10\" >219</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col11\" class=\"data row9 col11\" >203</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col12\" class=\"data row9 col12\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col13\" class=\"data row9 col13\" >237</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col14\" class=\"data row9 col14\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col15\" class=\"data row9 col15\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row9_col16\" class=\"data row9 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row10\" class=\"row_heading level0 row10\" >10</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col0\" class=\"data row10 col0\" >80</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col1\" class=\"data row10 col1\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col2\" class=\"data row10 col2\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col3\" class=\"data row10 col3\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col4\" class=\"data row10 col4\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col5\" class=\"data row10 col5\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col6\" class=\"data row10 col6\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col7\" class=\"data row10 col7\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col8\" class=\"data row10 col8\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col9\" class=\"data row10 col9\" >155</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col10\" class=\"data row10 col10\" >31</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col11\" class=\"data row10 col11\" >205</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col12\" class=\"data row10 col12\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col13\" class=\"data row10 col13\" >193</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col14\" class=\"data row10 col14\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col15\" class=\"data row10 col15\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row10_col16\" class=\"data row10 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row11\" class=\"row_heading level0 row11\" >11</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col0\" class=\"data row11 col0\" >8</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col1\" class=\"data row11 col1\" >183</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col2\" class=\"data row11 col2\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col3\" class=\"data row11 col3\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col4\" class=\"data row11 col4\" >255</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col5\" class=\"data row11 col5\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col6\" class=\"data row11 col6\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col7\" class=\"data row11 col7\" >199</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col8\" class=\"data row11 col8\" >45</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col9\" class=\"data row11 col9\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col10\" class=\"data row11 col10\" >80</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col11\" class=\"data row11 col11\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col12\" class=\"data row11 col12\" >244</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col13\" class=\"data row11 col13\" >83</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col14\" class=\"data row11 col14\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col15\" class=\"data row11 col15\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row11_col16\" class=\"data row11 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row12\" class=\"row_heading level0 row12\" >12</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col0\" class=\"data row12 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col1\" class=\"data row12 col1\" >42</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col2\" class=\"data row12 col2\" >135</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col3\" class=\"data row12 col3\" >135</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col4\" class=\"data row12 col4\" >136</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col5\" class=\"data row12 col5\" >53</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col6\" class=\"data row12 col6\" >39</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col7\" class=\"data row12 col7\" >3</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col8\" class=\"data row12 col8\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col9\" class=\"data row12 col9\" >65</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col10\" class=\"data row12 col10\" >232</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col11\" class=\"data row12 col11\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col12\" class=\"data row12 col12\" >124</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col13\" class=\"data row12 col13\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col14\" class=\"data row12 col14\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col15\" class=\"data row12 col15\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row12_col16\" class=\"data row12 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row13\" class=\"row_heading level0 row13\" >13</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col0\" class=\"data row13 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col1\" class=\"data row13 col1\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col2\" class=\"data row13 col2\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col3\" class=\"data row13 col3\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col4\" class=\"data row13 col4\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col5\" class=\"data row13 col5\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col6\" class=\"data row13 col6\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col7\" class=\"data row13 col7\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col8\" class=\"data row13 col8\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col9\" class=\"data row13 col9\" >216</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col10\" class=\"data row13 col10\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col11\" class=\"data row13 col11\" >228</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col12\" class=\"data row13 col12\" >13</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col13\" class=\"data row13 col13\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col14\" class=\"data row13 col14\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col15\" class=\"data row13 col15\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row13_col16\" class=\"data row13 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row14\" class=\"row_heading level0 row14\" >14</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col0\" class=\"data row14 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col1\" class=\"data row14 col1\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col2\" class=\"data row14 col2\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col3\" class=\"data row14 col3\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col4\" class=\"data row14 col4\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col5\" class=\"data row14 col5\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col6\" class=\"data row14 col6\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col7\" class=\"data row14 col7\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col8\" class=\"data row14 col8\" >181</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col9\" class=\"data row14 col9\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col10\" class=\"data row14 col10\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col11\" class=\"data row14 col11\" >85</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col12\" class=\"data row14 col12\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col13\" class=\"data row14 col13\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col14\" class=\"data row14 col14\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col15\" class=\"data row14 col15\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row14_col16\" class=\"data row14 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row15\" class=\"row_heading level0 row15\" >15</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col0\" class=\"data row15 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col1\" class=\"data row15 col1\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col2\" class=\"data row15 col2\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col3\" class=\"data row15 col3\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col4\" class=\"data row15 col4\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col5\" class=\"data row15 col5\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col6\" class=\"data row15 col6\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col7\" class=\"data row15 col7\" >31</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col8\" class=\"data row15 col8\" >239</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col9\" class=\"data row15 col9\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col10\" class=\"data row15 col10\" >162</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col11\" class=\"data row15 col11\" >18</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col12\" class=\"data row15 col12\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col13\" class=\"data row15 col13\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col14\" class=\"data row15 col14\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col15\" class=\"data row15 col15\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row15_col16\" class=\"data row15 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row16\" class=\"row_heading level0 row16\" >16</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col0\" class=\"data row16 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col1\" class=\"data row16 col1\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col2\" class=\"data row16 col2\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col3\" class=\"data row16 col3\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col4\" class=\"data row16 col4\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col5\" class=\"data row16 col5\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col6\" class=\"data row16 col6\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col7\" class=\"data row16 col7\" >159</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col8\" class=\"data row16 col8\" >254</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col9\" class=\"data row16 col9\" >255</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col10\" class=\"data row16 col10\" >76</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col11\" class=\"data row16 col11\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col12\" class=\"data row16 col12\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col13\" class=\"data row16 col13\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col14\" class=\"data row16 col14\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col15\" class=\"data row16 col15\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row16_col16\" class=\"data row16 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row17\" class=\"row_heading level0 row17\" >17</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col0\" class=\"data row17 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col1\" class=\"data row17 col1\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col2\" class=\"data row17 col2\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col3\" class=\"data row17 col3\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col4\" class=\"data row17 col4\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col5\" class=\"data row17 col5\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col6\" class=\"data row17 col6\" >74</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col7\" class=\"data row17 col7\" >250</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col8\" class=\"data row17 col8\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col9\" class=\"data row17 col9\" >114</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col10\" class=\"data row17 col10\" >6</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col11\" class=\"data row17 col11\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col12\" class=\"data row17 col12\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col13\" class=\"data row17 col13\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col14\" class=\"data row17 col14\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col15\" class=\"data row17 col15\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row17_col16\" class=\"data row17 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row18\" class=\"row_heading level0 row18\" >18</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col0\" class=\"data row18 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col1\" class=\"data row18 col1\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col2\" class=\"data row18 col2\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col3\" class=\"data row18 col3\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col4\" class=\"data row18 col4\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col5\" class=\"data row18 col5\" >7</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col6\" class=\"data row18 col6\" >199</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col7\" class=\"data row18 col7\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col8\" class=\"data row18 col8\" >222</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col9\" class=\"data row18 col9\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col10\" class=\"data row18 col10\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col11\" class=\"data row18 col11\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col12\" class=\"data row18 col12\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col13\" class=\"data row18 col13\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col14\" class=\"data row18 col14\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col15\" class=\"data row18 col15\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row18_col16\" class=\"data row18 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row19\" class=\"row_heading level0 row19\" >19</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col0\" class=\"data row19 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col1\" class=\"data row19 col1\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col2\" class=\"data row19 col2\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col3\" class=\"data row19 col3\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col4\" class=\"data row19 col4\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col5\" class=\"data row19 col5\" >73</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col6\" class=\"data row19 col6\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col7\" class=\"data row19 col7\" >247</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col8\" class=\"data row19 col8\" >56</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col9\" class=\"data row19 col9\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col10\" class=\"data row19 col10\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col11\" class=\"data row19 col11\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col12\" class=\"data row19 col12\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col13\" class=\"data row19 col13\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col14\" class=\"data row19 col14\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col15\" class=\"data row19 col15\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row19_col16\" class=\"data row19 col16\" >0</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002level0_row20\" class=\"row_heading level0 row20\" >20</th>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col0\" class=\"data row20 col0\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col1\" class=\"data row20 col1\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col2\" class=\"data row20 col2\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col3\" class=\"data row20 col3\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col4\" class=\"data row20 col4\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col5\" class=\"data row20 col5\" >42</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col6\" class=\"data row20 col6\" >253</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col7\" class=\"data row20 col7\" >213</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col8\" class=\"data row20 col8\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col9\" class=\"data row20 col9\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col10\" class=\"data row20 col10\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col11\" class=\"data row20 col11\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col12\" class=\"data row20 col12\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col13\" class=\"data row20 col13\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col14\" class=\"data row20 col14\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col15\" class=\"data row20 col15\" >0</td>\n",
" <td id=\"T_2ad44350_7b74_11ea_bfbc_0242ac110002row20_col16\" class=\"data row20 col16\" >0</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x7f734e6a9510>"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame(img_tensors[9][1][6:27, 5:22])\n",
"df.style.set_properties(**{'font-size':'6pt'}).background_gradient('Greys')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### *Stack the tensors, convert them to floats and reduce range of pixel values to between zero and one*"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"stacked_tensors = {key: torch.stack(imgs).float() / 255 \n",
" for (key, imgs) in img_tensors.items()}"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0: torch.Size([5923, 28, 28])\n",
"1: torch.Size([6742, 28, 28])\n",
"2: torch.Size([5958, 28, 28])\n",
"3: torch.Size([6131, 28, 28])\n",
"4: torch.Size([5842, 28, 28])\n",
"5: torch.Size([5421, 28, 28])\n",
"6: torch.Size([5918, 28, 28])\n",
"7: torch.Size([6265, 28, 28])\n",
"8: torch.Size([5851, 28, 28])\n",
"9: torch.Size([5949, 28, 28])\n"
]
}
],
"source": [
"for k,v in stacked_tensors.items(): print(f'{k}: {v.shape}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Good so now what we have is a dictionary containing the class as the keys and the stacked images as the values. Lets calculate the mean image for each class"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"mean_tensors = {key: imgs.mean(0) for (key, imgs) in stacked_tensors.items()}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### *Display the mean of all the classes*"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 2160x216 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"show_images(list(mean_tensors.values()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### *Calculate similarity between images and the means*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lets try that on a single image"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f7340065dd0>"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 72x72 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"a_0 = stacked_tensors[0][1]\n",
"show_image(a_0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We need to get the distance between our image and each of the 10 different classes, the minimum of them would be the predicted class"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" MAE RMSE\n",
"0: 0.1196, 0.2030\n",
"1: 0.1986, 0.3828\n",
"2: 0.2019, 0.3387\n",
"3: 0.1838, 0.3230\n",
"4: 0.1987, 0.3522\n",
"5: 0.1666, 0.2927\n",
"6: 0.1911, 0.3347\n",
"7: 0.1982, 0.3562\n",
"8: 0.1911, 0.3307\n",
"9: 0.1944, 0.3480\n"
]
}
],
"source": [
"print(' '*5 + 'MAE RMSE')\n",
"for key, mean in mean_tensors.items():\n",
" dist_mae = (a_0 - mean).abs().mean()\n",
" dist_rmse = ((a_0 - mean) ** 2).mean().sqrt()\n",
" print(f'{key}: {dist_mae:.4f}, {dist_rmse:.4f}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For both the **mean absolute error** and the **root mean squared error**, the minimum distance is that of the mean of 0"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [],
"source": [
"def diff(a, b): return (a - b).abs().mean((-1, -2))"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor(0.1196)"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diff(a_0, mean_tensors[0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### **Prepare validation set**"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"valid_fns = {i: [fn for fn in (path/f'testing/{i}').ls()] for i in range(10)}\n",
"valid_stacked_tensors = {key: torch.stack([tensor(Image.open(pat)) for pat in paths]).float()/255 \n",
" for (key, paths) in valid_fns.items()}"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0: torch.Size([980, 28, 28])\n",
"1: torch.Size([1135, 28, 28])\n",
"2: torch.Size([1032, 28, 28])\n",
"3: torch.Size([1010, 28, 28])\n",
"4: torch.Size([982, 28, 28])\n",
"5: torch.Size([892, 28, 28])\n",
"6: torch.Size([958, 28, 28])\n",
"7: torch.Size([1028, 28, 28])\n",
"8: torch.Size([974, 28, 28])\n",
"9: torch.Size([1009, 28, 28])\n"
]
}
],
"source": [
"for k,v in valid_stacked_tensors.items(): print(f'{k}: {v.shape}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Working with all the 10 classes is a little bit tricky. For each class in the validation set we would have to find the difference between all images in that class and the `10` means that we have. After we have to compare them to find the minimum (again for each image in that class) and check to see if that corresponds to the right class. Finally we find the accuracy based on the fraction of minimums that actually corresponded to right class. \n",
"\n",
"Lets walk through a simplified example to see how it plays out:\n",
"We find the similarity between the zeros in the validation set and means of `0`, `1` and `2`"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(torch.Size([980]), torch.Size([980]), torch.Size([980]))"
]
},
"execution_count": 82,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diff_0 = diff(valid_stacked_tensors[0], mean_tensors[0])\n",
"diff_1 = diff(valid_stacked_tensors[0], mean_tensors[1])\n",
"diff_2 = diff(valid_stacked_tensors[0], mean_tensors[2])\n",
"\n",
"diff_0.shape, diff_1.shape, diff_2.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"All of the differences are vectors of size `980` which makes sense because we have 980 zeros in the validations set. To make it easy to compare them to find the minimum for each of those 980 images lets combine them into a single tensor"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([980, 3])"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diff_combined = torch.stack([diff_0, diff_1, diff_2]).T\n",
"diff_combined.shape"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([0.1477, 0.1721, 0.1874])"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diff_combined[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Each row in `diff_combined` corresponds to the computed distances for a single image. So we can find the minimums across the columns inorder to calculate the accuracy."
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [],
"source": [
"mins = diff_combined.min(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The object returned by the call to min, has an `indices` property which tells us which index (ie. which column) was the minimum. We know that `0` was the first index so we just have to find the number of times the minimum index was `0` and sum over the total number of images."
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor(0.8980)"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(mins.indices == 0).float().mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### *Combine all the above steps into a function*"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [],
"source": [
"def cal_accuracy(imgs_dict, means_dict):\n",
" accuracies = []\n",
" for kv, images in imgs_dict.items(): \n",
" diffs = []\n",
" for km, mean in means_dict.items():\n",
" diffs.append(diff(images, mean))\n",
"\n",
" diffs = torch.stack(diffs).T\n",
" mins = diffs.min(1)\n",
" acc = (mins.indices == kv).float().mean()\n",
" accuracies.append(acc)\n",
" return accuracies"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [],
"source": [
"accuracies = cal_accuracy(valid_stacked_tensors, mean_tensors)"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Class Accuracy\n",
"0 0.8153\n",
"1 0.9982\n",
"2 0.4234\n",
"3 0.6089\n",
"4 0.6680\n",
"5 0.3262\n",
"6 0.7871\n",
"7 0.7646\n",
"8 0.4425\n",
"9 0.7760\n",
"Average accuracy: 0.6610\n"
]
}
],
"source": [
"# print final stats\n",
"print('Class Accuracy')\n",
"for i, acc in enumerate(accuracies): print(f'{i} {acc:.4f}')\n",
" \n",
"print(f'Average accuracy: {tensor(accuracies).mean():.4f}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`66%` huh.... Not bad for an approach like this, let's try improving that with an actual learning algorithm"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Implement SGD and use it to train network on MNIST"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the original chapter 4 notebook, we worked with only two classes, so things were a bit simplified. \n",
"- Here we are working with the whole dataset so for each image, our model has to give us `10` predictions which are the probabilities of our image belonging to any of the 10 classes, the maximum of these probabilities would be associated with the predicted class. \n",
"- Because our model would be giving us giving us 10 probabilities for each image, we can't have a single number as our label, we also need a similar vector to compare with.\n",
"\n",
"- Also, our loss function would change, we would use the cross entropy loss function here.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### *Create a dataset and dataloader for the training and validation set*"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"def create_labels(rows, cols, index):\n",
" '''\n",
" create a one hot encoded matrix with ones at the index specified\n",
" '''\n",
" labels = torch.zeros((rows, cols))\n",
" labels[:, index] = 1\n",
" return labels"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],\n",
" [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# create labels for each of the classes in the training set\n",
"stacked_labels = {key: create_labels(tensors.shape[0], len(stacked_tensors), key)\n",
" for key, tensors in stacked_tensors.items()}\n",
"stacked_labels[5][:10]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Combine all the images in the training set into one tensor and flatten them*\n",
"\n",
"We have 60,000 images in the training set, so the final tensor should be a `60000x784` tensor"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(torch.Size([60000, 784]), torch.Size([60000, 10]))"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_x = torch.cat([o for o in stacked_tensors.values()]).view(-1, 28*28)\n",
"train_y = torch.cat([o for o in stacked_labels.values()])\n",
"\n",
"train_x.shape, train_y.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Do same for the validation set*"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(torch.Size([10000, 784]), torch.Size([10000, 10]))"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# create labels for each of the classes in the training set\n",
"valid_stacked_labels = {key: create_labels(tensors.shape[0], len(valid_stacked_tensors), key)\n",
" for key, tensors in valid_stacked_tensors.items()}\n",
"\n",
"valid_x = torch.cat([o for o in valid_stacked_tensors.values()]).view(-1, 28*28)\n",
"valid_y = torch.cat([o for o in valid_stacked_labels.values()])\n",
"\n",
"valid_x.shape, valid_y.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Create dataloader*"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(torch.Size([64, 784]), torch.Size([64, 10]))"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_dataset = list(zip(train_x, train_y))\n",
"train_dl = DataLoader(train_dataset, bs=64, shuffle=True)\n",
"a_batch = first(train_dl)\n",
"a_batch[0].shape, a_batch[1].shape"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"valid_dataset = list(zip(valid_x, valid_y))\n",
"valid_dl = DataLoader(valid_dataset, bs=64)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### *Define loss function*"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"def cross_entropy_loss(preds, targets):\n",
" loss = -(targets * preds.log()).sum() / len(preds)\n",
" return loss"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor(0.1189)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"targets = torch.tensor([1, 0, 0])\n",
"preds = torch.tensor([0.7, 0.2, 0.1])\n",
"\n",
"cross_entropy_loss(preds, targets)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We use the softmax function to turn the prediction into probabilities, which would sum up to 1"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"def cross_entropy_loss(preds, targets):\n",
" preds = preds.softmax(dim=1)\n",
" loss = -(targets * preds.log()).sum() / len(preds)\n",
" return loss"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### *Let's start defining our network*"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"def init_params(size, std=1.0):\n",
" return (torch.randn(size)*std).requires_grad_()"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"weights = init_params((28*28,10))\n",
"bias = init_params(1)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"def linear1(xb):\n",
" return xb@weights + bias"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Let's perform a single forward pass*"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor(14.2733, grad_fn=<DivBackward0>)"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"images, labels = a_batch\n",
"preds = linear1(images)\n",
"loss = cross_entropy_loss(preds, labels)\n",
"loss"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Backpropagate and update the weights*"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"loss.backward()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"lr = 1e-3\n",
"weights.data -= weights.grad * lr\n",
"bias.data -= bias.grad * lr"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"weights.grad = None\n",
"bias.grad = None"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Let's see if the loss reduced*"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor(14.2627, grad_fn=<DivBackward0>)"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"preds = linear1(images)\n",
"loss = cross_entropy_loss(preds, labels)\n",
"loss"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"def calc_grad(images, labels, model):\n",
" preds = model(images)\n",
" loss = cross_entropy_loss(preds, labels)\n",
" loss.backward()"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"def train_epoch(model, lr, params):\n",
" for images, labels in train_dl:\n",
" calc_grad(images, labels, model)\n",
" for p in params: # loop over and update weights and bias\n",
" p.data -= p.grad * lr\n",
" p.grad.zero_()"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [],
"source": [
"def cal_accuracy(preds, targets):\n",
" preds = preds.softmax(dim=1)\n",
" # find the index with highest probability value\n",
" preds_i = preds.max(1).indices\n",
" targets_i = targets.max(1).indices\n",
" return (preds_i == targets_i).float().mean()"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"def validate_epoch(model):\n",
" accs = [cal_accuracy(model(images), labels) \n",
" for images, labels in valid_dl]\n",
" return torch.stack(accs).mean()"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor(0.0938)"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"validate_epoch(linear1)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.1344 0.1947 0.2468 0.2856 0.3221 0.3573 0.3880 0.4135 0.4368 0.4600 0.4779 0.4978 0.5153 0.5309 0.5448 0.5589 0.5701 0.5828 0.5917 0.6012 0.6094 0.6186 0.6281 0.6342 0.6409 0.6472 0.6524 0.6580 0.6650 0.6688 0.6739 0.6774 0.6808 0.6859 0.6907 0.6942 0.6979 0.7018 0.7054 0.7086 "
]
}
],
"source": [
"for _ in range(40):\n",
" train_epoch(linear1, lr, (weights, bias))\n",
" print(f'{validate_epoch(linear1):.4f}', end=' ')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Great so we've been able to surpass the performance of the baseline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### *Create an optimizer*"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"class Optimizer():\n",
" def __init__(self, params, lr):\n",
" self.params = list(params)\n",
" self.lr = lr\n",
" \n",
" def step(self):\n",
" for p in self.params:\n",
" p.data -= p.grad * self.lr\n",
" \n",
" def zero_grad(self):\n",
" for p in self.params:\n",
" p.grad = None"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"optim = Optimizer((weights, bias), lr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Train epoch now becomes"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [],
"source": [
"def train_epoch(model, optim):\n",
" for images, labels in train_dl:\n",
" calc_grad(images, labels, model)\n",
" optim.step()\n",
" optim.zero_grad()"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.7111 0.7137 0.7167 0.7201 0.7233 0.7256 0.7280 0.7305 0.7327 0.7350 "
]
}
],
"source": [
"for _ in range(10):\n",
" train_epoch(linear1, optim)\n",
" print(f'{validate_epoch(linear1):.4f}', end=' ')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's put the loop above into a function"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [],
"source": [
"def train_model(model, optim, epochs):\n",
" for _ in range(epochs):\n",
" train_epoch(model, optim)\n",
" print(f'{validate_epoch(linear1):.4f}', end=' ')"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.7372 0.7402 0.7433 0.7453 0.7466 0.7481 0.7499 0.7515 0.7530 0.7545 "
]
}
],
"source": [
"train_model(linear1, optim, 10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### *Replace our optimizer with PyTorch's SGD and linear1 with the linear module provided by pytorch. Also let's replace our training loop with fastai's Learner*"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [],
"source": [
"linear = nn.Linear(28*28, 10)\n",
"optim = SGD(linear.parameters(), lr)"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [],
"source": [
"dls = DataLoaders(train_dl, valid_dl)"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [],
"source": [
"learn = Learner(dls, linear, opt_func=SGD,\n",
" loss_func=cross_entropy_loss, metrics=cal_accuracy)"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: left;\">\n",
" <th>epoch</th>\n",
" <th>train_loss</th>\n",
" <th>valid_loss</th>\n",
" <th>cal_accuracy</th>\n",
" <th>time</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>1.614596</td>\n",
" <td>1.576594</td>\n",
" <td>0.757800</td>\n",
" <td>00:07</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>1.234135</td>\n",
" <td>1.209116</td>\n",
" <td>0.806400</td>\n",
" <td>00:06</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>1.034291</td>\n",
" <td>1.007533</td>\n",
" <td>0.824600</td>\n",
" <td>00:06</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>0.906333</td>\n",
" <td>0.882801</td>\n",
" <td>0.837100</td>\n",
" <td>00:03</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>0.821443</td>\n",
" <td>0.798494</td>\n",
" <td>0.844700</td>\n",
" <td>00:03</td>\n",
" </tr>\n",
" <tr>\n",
" <td>5</td>\n",
" <td>0.769601</td>\n",
" <td>0.737430</td>\n",
" <td>0.851000</td>\n",
" <td>00:04</td>\n",
" </tr>\n",
" <tr>\n",
" <td>6</td>\n",
" <td>0.717212</td>\n",
" <td>0.691130</td>\n",
" <td>0.856300</td>\n",
" <td>00:03</td>\n",
" </tr>\n",
" <tr>\n",
" <td>7</td>\n",
" <td>0.685325</td>\n",
" <td>0.654517</td>\n",
" <td>0.860700</td>\n",
" <td>00:03</td>\n",
" </tr>\n",
" <tr>\n",
" <td>8</td>\n",
" <td>0.654574</td>\n",
" <td>0.624903</td>\n",
" <td>0.864900</td>\n",
" <td>00:03</td>\n",
" </tr>\n",
" <tr>\n",
" <td>9</td>\n",
" <td>0.630024</td>\n",
" <td>0.600367</td>\n",
" <td>0.868100</td>\n",
" <td>00:07</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"learn.fit(10, lr=lr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### *Add a non-linearity*"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [],
"source": [
"model = nn.Sequential(\n",
" nn.Linear(28*28, 128),\n",
" nn.ReLU(),\n",
" nn.Linear(128, 10))"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [],
"source": [
"learn = Learner(dls, model, opt_func=SGD,\n",
" loss_func=cross_entropy_loss, metrics=cal_accuracy)"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: left;\">\n",
" <th>epoch</th>\n",
" <th>train_loss</th>\n",
" <th>valid_loss</th>\n",
" <th>cal_accuracy</th>\n",
" <th>time</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>0.653399</td>\n",
" <td>0.602551</td>\n",
" <td>0.863300</td>\n",
" <td>00:17</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>0.421201</td>\n",
" <td>0.406619</td>\n",
" <td>0.895100</td>\n",
" <td>00:08</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>0.365791</td>\n",
" <td>0.350588</td>\n",
" <td>0.903400</td>\n",
" <td>00:10</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>0.346807</td>\n",
" <td>0.321422</td>\n",
" <td>0.911100</td>\n",
" <td>00:07</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>0.327814</td>\n",
" <td>0.302612</td>\n",
" <td>0.915600</td>\n",
" <td>00:06</td>\n",
" </tr>\n",
" <tr>\n",
" <td>5</td>\n",
" <td>0.309653</td>\n",
" <td>0.287535</td>\n",
" <td>0.919200</td>\n",
" <td>00:20</td>\n",
" </tr>\n",
" <tr>\n",
" <td>6</td>\n",
" <td>0.301910</td>\n",
" <td>0.276240</td>\n",
" <td>0.920900</td>\n",
" <td>00:06</td>\n",
" </tr>\n",
" <tr>\n",
" <td>7</td>\n",
" <td>0.263980</td>\n",
" <td>0.265276</td>\n",
" <td>0.925000</td>\n",
" <td>00:07</td>\n",
" </tr>\n",
" <tr>\n",
" <td>8</td>\n",
" <td>0.250941</td>\n",
" <td>0.257311</td>\n",
" <td>0.928100</td>\n",
" <td>00:07</td>\n",
" </tr>\n",
" <tr>\n",
" <td>9</td>\n",
" <td>0.242874</td>\n",
" <td>0.248397</td>\n",
" <td>0.930400</td>\n",
" <td>00:30</td>\n",
" </tr>\n",
" <tr>\n",
" <td>10</td>\n",
" <td>0.249735</td>\n",
" <td>0.239237</td>\n",
" <td>0.933500</td>\n",
" <td>00:05</td>\n",
" </tr>\n",
" <tr>\n",
" <td>11</td>\n",
" <td>0.237115</td>\n",
" <td>0.232742</td>\n",
" <td>0.934600</td>\n",
" <td>00:04</td>\n",
" </tr>\n",
" <tr>\n",
" <td>12</td>\n",
" <td>0.225390</td>\n",
" <td>0.224972</td>\n",
" <td>0.936200</td>\n",
" <td>00:04</td>\n",
" </tr>\n",
" <tr>\n",
" <td>13</td>\n",
" <td>0.226520</td>\n",
" <td>0.218097</td>\n",
" <td>0.938400</td>\n",
" <td>00:04</td>\n",
" </tr>\n",
" <tr>\n",
" <td>14</td>\n",
" <td>0.209154</td>\n",
" <td>0.212929</td>\n",
" <td>0.940600</td>\n",
" <td>00:14</td>\n",
" </tr>\n",
" <tr>\n",
" <td>15</td>\n",
" <td>0.219164</td>\n",
" <td>0.207563</td>\n",
" <td>0.941300</td>\n",
" <td>00:07</td>\n",
" </tr>\n",
" <tr>\n",
" <td>16</td>\n",
" <td>0.194481</td>\n",
" <td>0.202113</td>\n",
" <td>0.942200</td>\n",
" <td>00:06</td>\n",
" </tr>\n",
" <tr>\n",
" <td>17</td>\n",
" <td>0.191986</td>\n",
" <td>0.197478</td>\n",
" <td>0.944400</td>\n",
" <td>00:04</td>\n",
" </tr>\n",
" <tr>\n",
" <td>18</td>\n",
" <td>0.198169</td>\n",
" <td>0.190425</td>\n",
" <td>0.945300</td>\n",
" <td>00:06</td>\n",
" </tr>\n",
" <tr>\n",
" <td>19</td>\n",
" <td>0.189745</td>\n",
" <td>0.187081</td>\n",
" <td>0.945900</td>\n",
" <td>00:12</td>\n",
" </tr>\n",
" <tr>\n",
" <td>20</td>\n",
" <td>0.181993</td>\n",
" <td>0.181980</td>\n",
" <td>0.947700</td>\n",
" <td>00:07</td>\n",
" </tr>\n",
" <tr>\n",
" <td>21</td>\n",
" <td>0.182396</td>\n",
" <td>0.176481</td>\n",
" <td>0.949400</td>\n",
" <td>00:04</td>\n",
" </tr>\n",
" <tr>\n",
" <td>22</td>\n",
" <td>0.191749</td>\n",
" <td>0.172679</td>\n",
" <td>0.950100</td>\n",
" <td>00:04</td>\n",
" </tr>\n",
" <tr>\n",
" <td>23</td>\n",
" <td>0.163298</td>\n",
" <td>0.168603</td>\n",
" <td>0.950500</td>\n",
" <td>00:04</td>\n",
" </tr>\n",
" <tr>\n",
" <td>24</td>\n",
" <td>0.169154</td>\n",
" <td>0.165638</td>\n",
" <td>0.952000</td>\n",
" <td>00:03</td>\n",
" </tr>\n",
" <tr>\n",
" <td>25</td>\n",
" <td>0.159781</td>\n",
" <td>0.161497</td>\n",
" <td>0.953100</td>\n",
" <td>00:08</td>\n",
" </tr>\n",
" <tr>\n",
" <td>26</td>\n",
" <td>0.143450</td>\n",
" <td>0.157724</td>\n",
" <td>0.953800</td>\n",
" <td>00:15</td>\n",
" </tr>\n",
" <tr>\n",
" <td>27</td>\n",
" <td>0.142456</td>\n",
" <td>0.154681</td>\n",
" <td>0.953800</td>\n",
" <td>00:06</td>\n",
" </tr>\n",
" <tr>\n",
" <td>28</td>\n",
" <td>0.139206</td>\n",
" <td>0.151910</td>\n",
" <td>0.954900</td>\n",
" <td>00:11</td>\n",
" </tr>\n",
" <tr>\n",
" <td>29</td>\n",
" <td>0.147976</td>\n",
" <td>0.148456</td>\n",
" <td>0.955000</td>\n",
" <td>00:14</td>\n",
" </tr>\n",
" <tr>\n",
" <td>30</td>\n",
" <td>0.148977</td>\n",
" <td>0.146085</td>\n",
" <td>0.955800</td>\n",
" <td>00:06</td>\n",
" </tr>\n",
" <tr>\n",
" <td>31</td>\n",
" <td>0.143506</td>\n",
" <td>0.143148</td>\n",
" <td>0.957300</td>\n",
" <td>00:06</td>\n",
" </tr>\n",
" <tr>\n",
" <td>32</td>\n",
" <td>0.135664</td>\n",
" <td>0.142749</td>\n",
" <td>0.958800</td>\n",
" <td>00:12</td>\n",
" </tr>\n",
" <tr>\n",
" <td>33</td>\n",
" <td>0.136932</td>\n",
" <td>0.138709</td>\n",
" <td>0.959400</td>\n",
" <td>00:06</td>\n",
" </tr>\n",
" <tr>\n",
" <td>34</td>\n",
" <td>0.127408</td>\n",
" <td>0.136824</td>\n",
" <td>0.960000</td>\n",
" <td>00:04</td>\n",
" </tr>\n",
" <tr>\n",
" <td>35</td>\n",
" <td>0.121230</td>\n",
" <td>0.133980</td>\n",
" <td>0.960800</td>\n",
" <td>00:11</td>\n",
" </tr>\n",
" <tr>\n",
" <td>36</td>\n",
" <td>0.116791</td>\n",
" <td>0.131584</td>\n",
" <td>0.961300</td>\n",
" <td>00:06</td>\n",
" </tr>\n",
" <tr>\n",
" <td>37</td>\n",
" <td>0.123641</td>\n",
" <td>0.130376</td>\n",
" <td>0.961600</td>\n",
" <td>00:06</td>\n",
" </tr>\n",
" <tr>\n",
" <td>38</td>\n",
" <td>0.117258</td>\n",
" <td>0.128298</td>\n",
" <td>0.962200</td>\n",
" <td>00:07</td>\n",
" </tr>\n",
" <tr>\n",
" <td>39</td>\n",
" <td>0.126917</td>\n",
" <td>0.126560</td>\n",
" <td>0.962700</td>\n",
" <td>00:07</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"learn.fit(40, 1e-2)"
]
},
{
"cell_type": "code",
"execution_count": 80,
"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": [
"plt.plot(L(learn.recorder.values).itemgot(2));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Scaling up, lets use a resnet18*"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: left;\">\n",
" <th>epoch</th>\n",
" <th>train_loss</th>\n",
" <th>valid_loss</th>\n",
" <th>accuracy</th>\n",
" <th>time</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>0.192013</td>\n",
" <td>0.231635</td>\n",
" <td>0.934800</td>\n",
" <td>00:38</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>0.094578</td>\n",
" <td>0.051242</td>\n",
" <td>0.984700</td>\n",
" <td>00:31</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>0.052026</td>\n",
" <td>0.028088</td>\n",
" <td>0.990900</td>\n",
" <td>00:32</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>0.024687</td>\n",
" <td>0.016803</td>\n",
" <td>0.994700</td>\n",
" <td>00:32</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>0.010456</td>\n",
" <td>0.013279</td>\n",
" <td>0.996200</td>\n",
" <td>00:32</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dls = ImageDataLoaders.from_folder(path, train='training', valid='testing')\n",
"\n",
"learn = cnn_learner(dls, resnet18, pretrained=False,\n",
" loss_func=F.cross_entropy, metrics=accuracy)\n",
"learn.fit_one_cycle(5, 1e-3)"
]
}
],
"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.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
@esot0
Copy link

esot0 commented Jun 12, 2021

This cleared up a lot of the chapter, many thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment