1667 lines (1666 with data), 260.0 kB
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using TensorFlow backend.\n"
]
}
],
"source": [
"import os\n",
"import pickle\n",
"import random\n",
"import glob\n",
"import datetime\n",
"import pandas as pd\n",
"import numpy as np\n",
"import cv2\n",
"import pydicom\n",
"from tqdm import tqdm\n",
"from joblib import delayed, Parallel\n",
"import zipfile\n",
"from pydicom.filebase import DicomBytesIO\n",
"import sys\n",
"from PIL import Image\n",
"import cv2\n",
"#from focal_loss import sparse_categorical_focal_loss\n",
"import keras\n",
"#import tensorflow_addons as tfa\n",
"from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
"from keras.models import model_from_json\n",
"import tensorflow as tf\n",
"import keras\n",
"from keras.models import Sequential, Model\n",
"from keras.layers import Dense, Conv2D, Flatten, MaxPooling2D, GlobalAveragePooling2D, Dropout\n",
"from keras.applications.inception_v3 import InceptionV3\n",
"\n",
"# importing pyplot and image from matplotlib \n",
"import matplotlib.pyplot as plt \n",
"import matplotlib.image as mpimg \n",
"from keras.optimizers import SGD\n",
"from keras import backend\n",
"from keras.models import load_model\n",
"\n",
"from keras.preprocessing import image\n",
"import albumentations as A\n",
"\n",
"\n",
"from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score, roc_curve\n",
"import tensorflow as tf"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from tensorflow.keras.losses import Reduction\n",
"\n",
"from tensorflow_addons.losses import SigmoidFocalCrossEntropy"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"base_url = '/home/ubuntu/kaggle/rsna-intracranial-hemorrhage-detection/'\n",
"TRAIN_DIR = '/home/ubuntu/kaggle/rsna-intracranial-hemorrhage-detection/stage_2_train/'\n",
"TEST_DIR = '/home/ubuntu/kaggle/rsna-intracranial-hemorrhage-detection/stage_2_test/'\n",
"image_dir = '/home/ubuntu/kaggle/rsna-intracranial-hemorrhage-detection/png/train/adjacent-brain-cropped/'\n",
"save_dir = 'home/ubuntu/kaggle/models/'\n",
"os.listdir(base_url)\n",
"\n",
"def png(image): \n",
" return image + '.png'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Learning rate"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"initial_learning_rate = 1e-2\n",
"first_decay_steps = 1000\n",
"lr_decayed_fn = (\n",
" tf.keras.experimental.CosineDecayRestarts(\n",
" initial_learning_rate,\n",
" first_decay_steps))\n",
"opt = tf.keras.optimizers.SGD(learning_rate=lr_decayed_fn, nesterov=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Undersampling"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def undersample(dataframe,steps,batch_size):\n",
" part = np.int(steps/3 * batch_size)\n",
" zero_ids = np.random.choice(dataframe.loc[dataframe[\"any\"] == 0].index.values, size=2*part, replace=False)\n",
" hot_ids = np.random.choice(dataframe.loc[dataframe[\"any\"] == 1].index.values, size=1*part, replace=False)\n",
" data_ids = list(set(zero_ids).union(hot_ids))\n",
" np.random.shuffle(data_ids)\n",
" return data_ids\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"257598\n",
"64320\n"
]
}
],
"source": [
"train_indices = undersample(training_data, 8050,32)\n",
"print(len(train_indices))\n",
"\n",
"valid_indices = undersample(validation_data, 2010,32)\n",
"print(len(valid_indices))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"l = training_data[training_data.index.isin(train_indices)]\n",
"m = validation_data[validation_data.index.isin(valid_indices)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Generator"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"train_idg = ImageDataGenerator(\n",
" featurewise_center=False, # set input mean to 0 over the dataset\n",
" samplewise_center=False, # set each sample mean to 0\n",
" featurewise_std_normalization=False, # divide inputs by std of the dataset\n",
" samplewise_std_normalization=False, # divide each input by its std\n",
" zca_whitening=False, # apply ZCA whitening\n",
" shear_range=0.05,\n",
" rotation_range=50, # randomly rotate images in the range (degrees, 0 to 180)\n",
" width_shift_range=0.1, # randomly shift images horizontally (fraction of total width)\n",
" height_shift_range=0.1, # randomly shift images vertically (fraction of total height)\n",
" horizontal_flip=True,\n",
" rescale=1./255)\n",
"valid_idg = ImageDataGenerator(rescale=1./255)\n",
"training_data = pd.read_csv(f'train_2.csv') \n",
"training_data['Image'] = training_data['Image'].apply(png)\n",
"\n",
"validation_data = pd.read_csv(f'valid_2.csv')\n",
"validation_data['Image'] = validation_data['Image'].apply(png)\n",
"\n",
"columns=['any','epidural','intraparenchymal','intraventricular', 'subarachnoid','subdural']\n",
"\n",
"#train_data_generator = train_idg.flow_from_dataframe(training_data, directory = image_dir,\n",
"# x_col = \"Image\", y_col = columns,batch_size=64,\n",
"# class_mode=\"raw\", target_size=(224,224), shuffle = True)\n",
"#valid_data_generator = valid_idg.flow_from_dataframe(validation_data, directory = image_dir,\n",
"# x_col = \"Image\", y_col = columns,batch_size=64,\n",
"# class_mode = \"raw\",target_size=(224,224), shuffle = False)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 257598 validated image filenames.\n",
"Found 64320 validated image filenames.\n"
]
}
],
"source": [
"train_under_generator = train_idg.flow_from_dataframe(l, directory = image_dir,\n",
" x_col = \"Image\", y_col = columns,batch_size=64,\n",
" class_mode=\"raw\", target_size=(224,224), shuffle = True)\n",
"valid_under_generator = valid_idg.flow_from_dataframe(m, directory = image_dir,\n",
" x_col = \"Image\", y_col = columns,batch_size=64,\n",
" class_mode = \"raw\",target_size=(224,224), shuffle = False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Model"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model loaded.\n",
"Model: \"resnet50\"\n",
"__________________________________________________________________________________________________\n",
"Layer (type) Output Shape Param # Connected to \n",
"==================================================================================================\n",
"input_5 (InputLayer) [(None, 224, 224, 3) 0 \n",
"__________________________________________________________________________________________________\n",
"conv1_pad (ZeroPadding2D) (None, 230, 230, 3) 0 input_5[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv1_conv (Conv2D) (None, 112, 112, 64) 9472 conv1_pad[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv1_bn (BatchNormalization) (None, 112, 112, 64) 256 conv1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv1_relu (Activation) (None, 112, 112, 64) 0 conv1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"pool1_pad (ZeroPadding2D) (None, 114, 114, 64) 0 conv1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"pool1_pool (MaxPooling2D) (None, 56, 56, 64) 0 pool1_pad[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_1_conv (Conv2D) (None, 56, 56, 64) 4160 pool1_pool[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_1_relu (Activation (None, 56, 56, 64) 0 conv2_block1_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block1_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_2_relu (Activation (None, 56, 56, 64) 0 conv2_block1_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_0_conv (Conv2D) (None, 56, 56, 256) 16640 pool1_pool[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block1_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_0_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_0_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_add (Add) (None, 56, 56, 256) 0 conv2_block1_0_bn[0][0] \n",
" conv2_block1_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_out (Activation) (None, 56, 56, 256) 0 conv2_block1_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block1_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_1_relu (Activation (None, 56, 56, 64) 0 conv2_block2_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block2_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_2_relu (Activation (None, 56, 56, 64) 0 conv2_block2_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block2_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block2_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_add (Add) (None, 56, 56, 256) 0 conv2_block1_out[0][0] \n",
" conv2_block2_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_out (Activation) (None, 56, 56, 256) 0 conv2_block2_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block2_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_1_relu (Activation (None, 56, 56, 64) 0 conv2_block3_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block3_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_2_relu (Activation (None, 56, 56, 64) 0 conv2_block3_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block3_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block3_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_add (Add) (None, 56, 56, 256) 0 conv2_block2_out[0][0] \n",
" conv2_block3_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_out (Activation) (None, 56, 56, 256) 0 conv2_block3_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_1_conv (Conv2D) (None, 28, 28, 128) 32896 conv2_block3_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_1_relu (Activation (None, 28, 28, 128) 0 conv3_block1_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block1_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_2_relu (Activation (None, 28, 28, 128) 0 conv3_block1_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_0_conv (Conv2D) (None, 28, 28, 512) 131584 conv2_block3_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block1_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_0_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_0_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_add (Add) (None, 28, 28, 512) 0 conv3_block1_0_bn[0][0] \n",
" conv3_block1_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_out (Activation) (None, 28, 28, 512) 0 conv3_block1_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block1_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_1_relu (Activation (None, 28, 28, 128) 0 conv3_block2_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block2_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_2_relu (Activation (None, 28, 28, 128) 0 conv3_block2_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block2_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block2_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_add (Add) (None, 28, 28, 512) 0 conv3_block1_out[0][0] \n",
" conv3_block2_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_out (Activation) (None, 28, 28, 512) 0 conv3_block2_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block2_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_1_relu (Activation (None, 28, 28, 128) 0 conv3_block3_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block3_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_2_relu (Activation (None, 28, 28, 128) 0 conv3_block3_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block3_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block3_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_add (Add) (None, 28, 28, 512) 0 conv3_block2_out[0][0] \n",
" conv3_block3_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_out (Activation) (None, 28, 28, 512) 0 conv3_block3_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block3_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_1_relu (Activation (None, 28, 28, 128) 0 conv3_block4_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block4_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_2_relu (Activation (None, 28, 28, 128) 0 conv3_block4_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block4_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block4_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_add (Add) (None, 28, 28, 512) 0 conv3_block3_out[0][0] \n",
" conv3_block4_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_out (Activation) (None, 28, 28, 512) 0 conv3_block4_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_1_conv (Conv2D) (None, 14, 14, 256) 131328 conv3_block4_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_1_relu (Activation (None, 14, 14, 256) 0 conv4_block1_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block1_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_2_relu (Activation (None, 14, 14, 256) 0 conv4_block1_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_0_conv (Conv2D) (None, 14, 14, 1024) 525312 conv3_block4_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block1_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_0_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_0_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_add (Add) (None, 14, 14, 1024) 0 conv4_block1_0_bn[0][0] \n",
" conv4_block1_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_out (Activation) (None, 14, 14, 1024) 0 conv4_block1_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block1_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_1_relu (Activation (None, 14, 14, 256) 0 conv4_block2_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block2_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_2_relu (Activation (None, 14, 14, 256) 0 conv4_block2_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block2_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block2_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_add (Add) (None, 14, 14, 1024) 0 conv4_block1_out[0][0] \n",
" conv4_block2_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_out (Activation) (None, 14, 14, 1024) 0 conv4_block2_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block2_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_1_relu (Activation (None, 14, 14, 256) 0 conv4_block3_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block3_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_2_relu (Activation (None, 14, 14, 256) 0 conv4_block3_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block3_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block3_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_add (Add) (None, 14, 14, 1024) 0 conv4_block2_out[0][0] \n",
" conv4_block3_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_out (Activation) (None, 14, 14, 1024) 0 conv4_block3_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block3_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_1_relu (Activation (None, 14, 14, 256) 0 conv4_block4_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block4_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_2_relu (Activation (None, 14, 14, 256) 0 conv4_block4_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block4_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block4_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_add (Add) (None, 14, 14, 1024) 0 conv4_block3_out[0][0] \n",
" conv4_block4_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_out (Activation) (None, 14, 14, 1024) 0 conv4_block4_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block4_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_1_relu (Activation (None, 14, 14, 256) 0 conv4_block5_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block5_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_2_relu (Activation (None, 14, 14, 256) 0 conv4_block5_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block5_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block5_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_add (Add) (None, 14, 14, 1024) 0 conv4_block4_out[0][0] \n",
" conv4_block5_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_out (Activation) (None, 14, 14, 1024) 0 conv4_block5_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block5_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_1_relu (Activation (None, 14, 14, 256) 0 conv4_block6_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block6_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_2_relu (Activation (None, 14, 14, 256) 0 conv4_block6_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block6_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block6_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_add (Add) (None, 14, 14, 1024) 0 conv4_block5_out[0][0] \n",
" conv4_block6_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_out (Activation) (None, 14, 14, 1024) 0 conv4_block6_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_1_conv (Conv2D) (None, 7, 7, 512) 524800 conv4_block6_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_1_relu (Activation (None, 7, 7, 512) 0 conv5_block1_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block1_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_2_relu (Activation (None, 7, 7, 512) 0 conv5_block1_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_0_conv (Conv2D) (None, 7, 7, 2048) 2099200 conv4_block6_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block1_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_0_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_0_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_add (Add) (None, 7, 7, 2048) 0 conv5_block1_0_bn[0][0] \n",
" conv5_block1_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_out (Activation) (None, 7, 7, 2048) 0 conv5_block1_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block1_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_1_relu (Activation (None, 7, 7, 512) 0 conv5_block2_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block2_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_2_relu (Activation (None, 7, 7, 512) 0 conv5_block2_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block2_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block2_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_add (Add) (None, 7, 7, 2048) 0 conv5_block1_out[0][0] \n",
" conv5_block2_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_out (Activation) (None, 7, 7, 2048) 0 conv5_block2_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block2_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_1_relu (Activation (None, 7, 7, 512) 0 conv5_block3_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block3_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_2_relu (Activation (None, 7, 7, 512) 0 conv5_block3_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block3_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block3_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_add (Add) (None, 7, 7, 2048) 0 conv5_block2_out[0][0] \n",
" conv5_block3_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_out (Activation) (None, 7, 7, 2048) 0 conv5_block3_add[0][0] \n",
"==================================================================================================\n",
"Total params: 23,587,712\n",
"Trainable params: 23,534,592\n",
"Non-trainable params: 53,120\n",
"__________________________________________________________________________________________________\n"
]
}
],
"source": [
"from tensorflow.keras.applications.resnet50 import ResNet50\n",
"\n",
"\n",
"base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224,224,3))\n",
"print('Model loaded.')\n",
"\n",
"\n",
"base_model.summary()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'input_5': <tensorflow.python.keras.engine.input_layer.InputLayer object at 0x7f31cf5bc978>, 'conv1_pad': <tensorflow.python.keras.layers.convolutional.ZeroPadding2D object at 0x7f2e072d6ac8>, 'conv1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e072d6748>, 'conv1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e072d6ba8>, 'conv1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e072cb3c8>, 'pool1_pad': <tensorflow.python.keras.layers.convolutional.ZeroPadding2D object at 0x7f2e072cb1d0>, 'pool1_pool': <tensorflow.python.keras.layers.pooling.MaxPooling2D object at 0x7f2e072d6a90>, 'conv2_block1_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e0726a8d0>, 'conv2_block1_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e07280710>, 'conv2_block1_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e072835c0>, 'conv2_block1_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e07283780>, 'conv2_block1_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e0721bda0>, 'conv2_block1_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e0721d4a8>, 'conv2_block1_0_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e07263da0>, 'conv2_block1_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e0721d668>, 'conv2_block1_0_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e0726a518>, 'conv2_block1_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e07234c88>, 'conv2_block1_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e07238080>, 'conv2_block1_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e07238320>, 'conv2_block2_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e0724d7f0>, 'conv2_block2_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e0724de48>, 'conv2_block2_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e07254518>, 'conv2_block2_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e072546d8>, 'conv2_block2_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e071f0cf8>, 'conv2_block2_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e071ec400>, 'conv2_block2_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e071ec5c0>, 'conv2_block2_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e0720bbe0>, 'conv2_block2_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e0720bfd0>, 'conv2_block2_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e07211160>, 'conv2_block3_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e0721af60>, 'conv2_block3_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e071a7da0>, 'conv2_block3_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e071ab470>, 'conv2_block3_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e071ab630>, 'conv2_block3_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e071c4c50>, 'conv2_block3_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e071c8390>, 'conv2_block3_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e071c8518>, 'conv2_block3_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e0715fb38>, 'conv2_block3_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e0715ff28>, 'conv2_block3_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e07163fd0>, 'conv3_block1_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e07182358>, 'conv3_block1_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e0711b1d0>, 'conv3_block1_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e0711bf28>, 'conv3_block1_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e0711be10>, 'conv3_block1_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e07136828>, 'conv3_block1_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e07136ef0>, 'conv3_block1_0_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e07171f28>, 'conv3_block1_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e07136eb8>, 'conv3_block1_0_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e0717fcf8>, 'conv3_block1_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e07152710>, 'conv3_block1_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e07152d68>, 'conv3_block1_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e07152390>, 'conv3_block2_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e070ebba8>, 'conv3_block2_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e070f08d0>, 'conv3_block2_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e070f0f60>, 'conv3_block2_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e070f0f28>, 'conv3_block2_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e07104780>, 'conv3_block2_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e07104e48>, 'conv3_block2_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e07104e10>, 'conv3_block2_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e070a9668>, 'conv3_block2_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e070a9cc0>, 'conv3_block2_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e070a92e8>, 'conv3_block3_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e070beb00>, 'conv3_block3_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e070c4828>, 'conv3_block3_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e070c4eb8>, 'conv3_block3_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e070c4e80>, 'conv3_block3_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e070616d8>, 'conv3_block3_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e07061da0>, 'conv3_block3_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e07061358>, 'conv3_block3_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e0707c5c0>, 'conv3_block3_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e0707cc18>, 'conv3_block3_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e0707c240>, 'conv3_block4_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e07094a58>, 'conv3_block4_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e0701b780>, 'conv3_block4_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e0701be10>, 'conv3_block4_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e0701bf28>, 'conv3_block4_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f32d48126a0>, 'conv3_block4_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f32d47b58d0>, 'conv3_block4_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f32d47b55f8>, 'conv3_block4_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f31cd958320>, 'conv3_block4_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f32d9bdc470>, 'conv3_block4_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f32d513bb00>, 'conv4_block1_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f32d41432b0>, 'conv4_block1_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f32da29b518>, 'conv4_block1_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e0701feb8>, 'conv4_block1_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e0701fe80>, 'conv4_block1_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f32da2f26d8>, 'conv4_block1_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f32da2f2da0>, 'conv4_block1_0_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f320c5ccf28>, 'conv4_block1_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f32da2f2358>, 'conv4_block1_0_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f320c3294e0>, 'conv4_block1_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e0702b5c0>, 'conv4_block1_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e0702bc18>, 'conv4_block1_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e0702b240>, 'conv4_block2_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e07049a58>, 'conv4_block2_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e0704f780>, 'conv4_block2_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e0704fe10>, 'conv4_block2_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e0704f6d8>, 'conv4_block2_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06fec630>, 'conv4_block2_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06feccf8>, 'conv4_block2_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06fec2b0>, 'conv4_block2_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e07008518>, 'conv4_block2_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e07008b70>, 'conv4_block2_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e07008198>, 'conv4_block3_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06fa09b0>, 'conv4_block3_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06fa76d8>, 'conv4_block3_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06fa7d68>, 'conv4_block3_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06fa7630>, 'conv4_block3_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06fc5588>, 'conv4_block3_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06fc5c50>, 'conv4_block3_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06fc5208>, 'conv4_block3_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06f5f470>, 'conv4_block3_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e06f5fac8>, 'conv4_block3_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06f5f0f0>, 'conv4_block4_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06f75f98>, 'conv4_block4_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06f7b630>, 'conv4_block4_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06f7bcc0>, 'conv4_block4_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06f7b588>, 'conv4_block4_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06f1c4e0>, 'conv4_block4_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06f1cba8>, 'conv4_block4_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06f1c160>, 'conv4_block4_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06f3c3c8>, 'conv4_block4_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e06f3ca20>, 'conv4_block4_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06f3c048>, 'conv4_block5_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06f5aef0>, 'conv4_block5_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06ede588>, 'conv4_block5_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06edec18>, 'conv4_block5_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06ede4e0>, 'conv4_block5_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06f02438>, 'conv4_block5_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06f02b00>, 'conv4_block5_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06f020b8>, 'conv4_block5_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06ea3320>, 'conv4_block5_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e06ea3978>, 'conv4_block5_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06ea3908>, 'conv4_block6_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06ec0e48>, 'conv4_block6_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06ec64e0>, 'conv4_block6_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06ec6b70>, 'conv4_block6_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06ec6438>, 'conv4_block6_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06e68390>, 'conv4_block6_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06e68a58>, 'conv4_block6_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06e688d0>, 'conv4_block6_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06e8b278>, 'conv4_block6_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e06e8b8d0>, 'conv4_block6_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06e8b860>, 'conv5_block1_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06e2aa58>, 'conv5_block1_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06e47898>, 'conv5_block1_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06e4e748>, 'conv5_block1_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06e4e908>, 'conv5_block1_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06deaf98>, 'conv5_block1_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06dee630>, 'conv5_block1_0_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06e27da0>, 'conv5_block1_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06dee7f0>, 'conv5_block1_0_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06e2a438>, 'conv5_block1_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06e0ae10>, 'conv5_block1_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e06e0f4a8>, 'conv5_block1_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06e0f438>, 'conv5_block2_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06dac978>, 'conv5_block2_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06db3160>, 'conv5_block2_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06db36a0>, 'conv5_block2_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06db3860>, 'conv5_block2_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06dd3ef0>, 'conv5_block2_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06dd7588>, 'conv5_block2_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06dd7748>, 'conv5_block2_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06d72d68>, 'conv5_block2_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e06d76400>, 'conv5_block2_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06d76390>, 'conv5_block3_1_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06d968d0>, 'conv5_block3_1_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06d96f60>, 'conv5_block3_1_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06d9a5f8>, 'conv5_block3_2_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06d9a7b8>, 'conv5_block3_2_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06d39dd8>, 'conv5_block3_2_relu': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06d3c4e0>, 'conv5_block3_3_conv': <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7f2e06d3c6a0>, 'conv5_block3_3_bn': <tensorflow.python.keras.layers.normalization_v2.BatchNormalization object at 0x7f2e06d59cc0>, 'conv5_block3_add': <tensorflow.python.keras.layers.merge.Add object at 0x7f2e06cdc358>, 'conv5_block3_out': <tensorflow.python.keras.layers.core.Activation object at 0x7f2e06cdc2e8>}\n"
]
}
],
"source": [
"#define the dictionary of layers\n",
"layer_dict = dict([(layer.name, layer) for layer in base_model.layers])\n",
"print(layer_dict)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model loaded.\n",
"Model: \"functional_1\"\n",
"__________________________________________________________________________________________________\n",
"Layer (type) Output Shape Param # Connected to \n",
"==================================================================================================\n",
"input_1 (InputLayer) [(None, 224, 224, 3) 0 \n",
"__________________________________________________________________________________________________\n",
"conv1_pad (ZeroPadding2D) (None, 230, 230, 3) 0 input_1[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv1_conv (Conv2D) (None, 112, 112, 64) 9472 conv1_pad[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv1_bn (BatchNormalization) (None, 112, 112, 64) 256 conv1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv1_relu (Activation) (None, 112, 112, 64) 0 conv1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"pool1_pad (ZeroPadding2D) (None, 114, 114, 64) 0 conv1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"pool1_pool (MaxPooling2D) (None, 56, 56, 64) 0 pool1_pad[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_1_conv (Conv2D) (None, 56, 56, 64) 4160 pool1_pool[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_1_relu (Activation (None, 56, 56, 64) 0 conv2_block1_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block1_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_2_relu (Activation (None, 56, 56, 64) 0 conv2_block1_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_0_conv (Conv2D) (None, 56, 56, 256) 16640 pool1_pool[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block1_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_0_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_0_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_add (Add) (None, 56, 56, 256) 0 conv2_block1_0_bn[0][0] \n",
" conv2_block1_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block1_out (Activation) (None, 56, 56, 256) 0 conv2_block1_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block1_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_1_relu (Activation (None, 56, 56, 64) 0 conv2_block2_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block2_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_2_relu (Activation (None, 56, 56, 64) 0 conv2_block2_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block2_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block2_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_add (Add) (None, 56, 56, 256) 0 conv2_block1_out[0][0] \n",
" conv2_block2_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block2_out (Activation) (None, 56, 56, 256) 0 conv2_block2_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block2_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_1_relu (Activation (None, 56, 56, 64) 0 conv2_block3_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block3_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_2_relu (Activation (None, 56, 56, 64) 0 conv2_block3_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block3_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block3_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_add (Add) (None, 56, 56, 256) 0 conv2_block2_out[0][0] \n",
" conv2_block3_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2_block3_out (Activation) (None, 56, 56, 256) 0 conv2_block3_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_1_conv (Conv2D) (None, 28, 28, 128) 32896 conv2_block3_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_1_relu (Activation (None, 28, 28, 128) 0 conv3_block1_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block1_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_2_relu (Activation (None, 28, 28, 128) 0 conv3_block1_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_0_conv (Conv2D) (None, 28, 28, 512) 131584 conv2_block3_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block1_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_0_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_0_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_add (Add) (None, 28, 28, 512) 0 conv3_block1_0_bn[0][0] \n",
" conv3_block1_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block1_out (Activation) (None, 28, 28, 512) 0 conv3_block1_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block1_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_1_relu (Activation (None, 28, 28, 128) 0 conv3_block2_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block2_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_2_relu (Activation (None, 28, 28, 128) 0 conv3_block2_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block2_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block2_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_add (Add) (None, 28, 28, 512) 0 conv3_block1_out[0][0] \n",
" conv3_block2_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block2_out (Activation) (None, 28, 28, 512) 0 conv3_block2_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block2_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_1_relu (Activation (None, 28, 28, 128) 0 conv3_block3_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block3_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_2_relu (Activation (None, 28, 28, 128) 0 conv3_block3_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block3_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block3_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_add (Add) (None, 28, 28, 512) 0 conv3_block2_out[0][0] \n",
" conv3_block3_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block3_out (Activation) (None, 28, 28, 512) 0 conv3_block3_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block3_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_1_relu (Activation (None, 28, 28, 128) 0 conv3_block4_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block4_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_2_relu (Activation (None, 28, 28, 128) 0 conv3_block4_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block4_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block4_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_add (Add) (None, 28, 28, 512) 0 conv3_block3_out[0][0] \n",
" conv3_block4_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3_block4_out (Activation) (None, 28, 28, 512) 0 conv3_block4_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_1_conv (Conv2D) (None, 14, 14, 256) 131328 conv3_block4_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_1_relu (Activation (None, 14, 14, 256) 0 conv4_block1_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block1_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_2_relu (Activation (None, 14, 14, 256) 0 conv4_block1_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_0_conv (Conv2D) (None, 14, 14, 1024) 525312 conv3_block4_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block1_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_0_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_0_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_add (Add) (None, 14, 14, 1024) 0 conv4_block1_0_bn[0][0] \n",
" conv4_block1_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block1_out (Activation) (None, 14, 14, 1024) 0 conv4_block1_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block1_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_1_relu (Activation (None, 14, 14, 256) 0 conv4_block2_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block2_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_2_relu (Activation (None, 14, 14, 256) 0 conv4_block2_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block2_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block2_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_add (Add) (None, 14, 14, 1024) 0 conv4_block1_out[0][0] \n",
" conv4_block2_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block2_out (Activation) (None, 14, 14, 1024) 0 conv4_block2_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block2_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_1_relu (Activation (None, 14, 14, 256) 0 conv4_block3_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block3_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_2_relu (Activation (None, 14, 14, 256) 0 conv4_block3_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block3_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block3_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_add (Add) (None, 14, 14, 1024) 0 conv4_block2_out[0][0] \n",
" conv4_block3_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block3_out (Activation) (None, 14, 14, 1024) 0 conv4_block3_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block3_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_1_relu (Activation (None, 14, 14, 256) 0 conv4_block4_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block4_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_2_relu (Activation (None, 14, 14, 256) 0 conv4_block4_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block4_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block4_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_add (Add) (None, 14, 14, 1024) 0 conv4_block3_out[0][0] \n",
" conv4_block4_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block4_out (Activation) (None, 14, 14, 1024) 0 conv4_block4_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block4_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_1_relu (Activation (None, 14, 14, 256) 0 conv4_block5_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block5_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_2_relu (Activation (None, 14, 14, 256) 0 conv4_block5_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block5_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block5_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_add (Add) (None, 14, 14, 1024) 0 conv4_block4_out[0][0] \n",
" conv4_block5_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block5_out (Activation) (None, 14, 14, 1024) 0 conv4_block5_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block5_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_1_relu (Activation (None, 14, 14, 256) 0 conv4_block6_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block6_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_2_relu (Activation (None, 14, 14, 256) 0 conv4_block6_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block6_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block6_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_add (Add) (None, 14, 14, 1024) 0 conv4_block5_out[0][0] \n",
" conv4_block6_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4_block6_out (Activation) (None, 14, 14, 1024) 0 conv4_block6_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_1_conv (Conv2D) (None, 7, 7, 512) 524800 conv4_block6_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_1_relu (Activation (None, 7, 7, 512) 0 conv5_block1_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block1_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_2_relu (Activation (None, 7, 7, 512) 0 conv5_block1_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_0_conv (Conv2D) (None, 7, 7, 2048) 2099200 conv4_block6_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block1_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_0_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_0_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_add (Add) (None, 7, 7, 2048) 0 conv5_block1_0_bn[0][0] \n",
" conv5_block1_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block1_out (Activation) (None, 7, 7, 2048) 0 conv5_block1_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block1_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_1_relu (Activation (None, 7, 7, 512) 0 conv5_block2_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block2_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_2_relu (Activation (None, 7, 7, 512) 0 conv5_block2_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block2_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block2_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_add (Add) (None, 7, 7, 2048) 0 conv5_block1_out[0][0] \n",
" conv5_block2_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block2_out (Activation) (None, 7, 7, 2048) 0 conv5_block2_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block2_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_1_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_1_relu (Activation (None, 7, 7, 512) 0 conv5_block3_1_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block3_1_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_2_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_2_relu (Activation (None, 7, 7, 512) 0 conv5_block3_2_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block3_2_relu[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block3_3_conv[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_add (Add) (None, 7, 7, 2048) 0 conv5_block2_out[0][0] \n",
" conv5_block3_3_bn[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5_block3_out (Activation) (None, 7, 7, 2048) 0 conv5_block3_add[0][0] \n",
"__________________________________________________________________________________________________\n",
"global_average_pooling2d (Globa (None, 2048) 0 conv5_block3_out[0][0] \n",
"__________________________________________________________________________________________________\n",
"dense (Dense) (None, 256) 524544 global_average_pooling2d[0][0] \n",
"__________________________________________________________________________________________________\n",
"dense_1 (Dense) (None, 6) 1542 dense[0][0] \n",
"==================================================================================================\n",
"Total params: 24,113,798\n",
"Trainable params: 23,958,982\n",
"Non-trainable params: 154,816\n",
"__________________________________________________________________________________________________\n"
]
}
],
"source": [
"from tensorflow.keras.applications.resnet50 import ResNet50\n",
"import tensorflow as tf\n",
"from tensorflow.keras.models import Model,Sequential\n",
"from tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Dropout, MaxPooling2D\n",
"\n",
"METRICS = [\n",
" tf.keras.metrics.TruePositives(name='tp'),\n",
" tf.keras.metrics.FalsePositives(name='fp'),\n",
" tf.keras.metrics.TrueNegatives(name='tn'),\n",
" tf.keras.metrics.FalseNegatives(name='fn'), \n",
" tf.keras.metrics.BinaryAccuracy(name='accuracy'),\n",
" tf.keras.metrics.Precision(name='precision'),\n",
" tf.keras.metrics.Recall(name='recall'),\n",
" tf.keras.metrics.AUC(name='auc')\n",
" \n",
"]\n",
"\n",
"\n",
"# create the base pre-trained model\n",
"\n",
"base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224,224,3))\n",
"print('Model loaded.')\n",
"\n",
"\n",
"# add a global spatial average pooling layer\n",
"x = base_model.output\n",
"#net = MaxPooling2D(pool_size= (2,2), strides=(2,2),padding='same', name='pool')(x)\n",
"x = GlobalAveragePooling2D()(x)\n",
"net = Dense(256, activation='elu')(x)\n",
"net = Dense(6, activation='sigmoid')(net)\n",
"\n",
"\n",
"# this is the model we will train\n",
"model = Model(inputs=base_model.input, outputs=net)\n",
"\n",
"\n",
"\n",
"# first: train only the top layers (which were randomly initialized)\n",
"# i.e. freeze all convolutional InceptionV3 layers\n",
"#for layer in base_model.layers:\n",
"# layer.trainable = False\n",
"for layer in base_model.layers[:20]:\n",
" layer.trainable = False\n",
"\n",
"\n",
"# compile the model (should be done *after* setting layers to non-trainable)\n",
"model.compile(opt, loss='binary_crossentropy', metrics=METRICS)\n",
"\n",
"\n",
"\n",
"\n",
"model.summary()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Callbacks"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.\n"
]
}
],
"source": [
"from keras import backend as K\n",
"\n",
"from tensorflow.keras.callbacks import ModelCheckpoint\n",
"\n",
"\n",
"checkpoint = tf.keras.callbacks.ModelCheckpoint('/kaggle/models/resnet50_{epoch:08d}.h5', period=1,mode= 'auto',save_best_only=True) \n",
"\n",
"learning_rate_reduction = tf.keras.callbacks.ReduceLROnPlateau(monitor='val_acc', \n",
" patience=2, \n",
" verbose=1, \n",
" factor=0.5, \n",
" min_lr=0.00001)\n",
"\n",
"callback_list = [checkpoint]\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From <ipython-input-12-bdb3352f611a>:1: experimental_run_functions_eagerly (from tensorflow.python.eager.def_function) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use `tf.config.run_functions_eagerly` instead of the experimental version.\n"
]
}
],
"source": [
"tf.config.experimental_run_functions_eagerly(True)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{0: 1.0, 1: 2.0}"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class_weight = {0:1.0,1:2.0}\n",
"class_weight"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/ubuntu/anaconda3/envs/tensorflow2_p36/lib/python3.6/site-packages/tensorflow/python/data/ops/dataset_ops.py:3350: UserWarning: Even though the tf.config.experimental_run_functions_eagerly option is set, this option does not apply to tf.data functions. tf.data functions are still traced and executed as graphs.\n",
" \"Even though the tf.config.experimental_run_functions_eagerly \"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/20\n",
"1174/1174 [==============================] - 1391s 1s/step - loss: 0.2594 - tp: 20654.0000 - fp: 9043.0000 - tn: 382349.0000 - fn: 38758.0000 - accuracy: 0.8940 - precision: 0.6955 - recall: 0.3476 - auc: 0.8806 - val_loss: 0.2366 - val_tp: 5432.0000 - val_fp: 1566.0000 - val_tn: 97069.0000 - val_fn: 9213.0000 - val_accuracy: 0.9048 - val_precision: 0.7762 - val_recall: 0.3709 - val_auc: 0.9059\n",
"Epoch 2/20\n",
"1174/1174 [==============================] - 1331s 1s/step - loss: 0.2218 - tp: 28663.0000 - fp: 9257.0000 - tn: 381888.0000 - fn: 31008.0000 - accuracy: 0.9107 - precision: 0.7559 - recall: 0.4804 - auc: 0.9158 - val_loss: 0.2169 - val_tp: 6330.0000 - val_fp: 1611.0000 - val_tn: 97024.0000 - val_fn: 8315.0000 - val_accuracy: 0.9124 - val_precision: 0.7971 - val_recall: 0.4322 - val_auc: 0.9211\n",
"Epoch 3/20\n",
"1174/1174 [==============================] - 1321s 1s/step - loss: 0.2120 - tp: 30740.0000 - fp: 9266.0000 - tn: 381850.0000 - fn: 28960.0000 - accuracy: 0.9152 - precision: 0.7684 - recall: 0.5149 - auc: 0.9233 - val_loss: 0.2782 - val_tp: 3909.0000 - val_fp: 470.0000 - val_tn: 98165.0000 - val_fn: 10736.0000 - val_accuracy: 0.9011 - val_precision: 0.8927 - val_recall: 0.2669 - val_auc: 0.9097\n",
"Epoch 4/20\n",
"1174/1174 [==============================] - 1297s 1s/step - loss: 0.2010 - tp: 32425.0000 - fp: 8913.0000 - tn: 382507.0000 - fn: 26959.0000 - accuracy: 0.9204 - precision: 0.7844 - recall: 0.5460 - auc: 0.9309 - val_loss: 0.2016 - val_tp: 7131.0000 - val_fp: 1304.0000 - val_tn: 97331.0000 - val_fn: 7514.0000 - val_accuracy: 0.9222 - val_precision: 0.8454 - val_recall: 0.4869 - val_auc: 0.9350\n",
"Epoch 5/20\n",
"1174/1174 [==============================] - 1289s 1s/step - loss: 0.1922 - tp: 33623.0000 - fp: 8641.0000 - tn: 383071.0000 - fn: 25481.0000 - accuracy: 0.9243 - precision: 0.7955 - recall: 0.5689 - auc: 0.9369 - val_loss: 0.1965 - val_tp: 7273.0000 - val_fp: 1223.0000 - val_tn: 97412.0000 - val_fn: 7372.0000 - val_accuracy: 0.9241 - val_precision: 0.8560 - val_recall: 0.4966 - val_auc: 0.9369\n",
"Epoch 6/20\n",
"1174/1174 [==============================] - 1278s 1s/step - loss: 0.1893 - tp: 34558.0000 - fp: 8651.0000 - tn: 382552.0000 - fn: 25043.0000 - accuracy: 0.9253 - precision: 0.7998 - recall: 0.5798 - auc: 0.9396 - val_loss: 0.2143 - val_tp: 6334.0000 - val_fp: 811.0000 - val_tn: 97824.0000 - val_fn: 8311.0000 - val_accuracy: 0.9195 - val_precision: 0.8865 - val_recall: 0.4325 - val_auc: 0.9314\n",
"Epoch 7/20\n",
"1174/1174 [==============================] - 1274s 1s/step - loss: 0.1882 - tp: 34582.0000 - fp: 8585.0000 - tn: 382992.0000 - fn: 24657.0000 - accuracy: 0.9263 - precision: 0.8011 - recall: 0.5838 - auc: 0.9397 - val_loss: 0.2099 - val_tp: 6263.0000 - val_fp: 613.0000 - val_tn: 98022.0000 - val_fn: 8382.0000 - val_accuracy: 0.9206 - val_precision: 0.9108 - val_recall: 0.4277 - val_auc: 0.9373\n",
"Epoch 8/20\n",
"1174/1174 [==============================] - 1270s 1s/step - loss: 0.1817 - tp: 35924.0000 - fp: 8454.0000 - tn: 382840.0000 - fn: 23598.0000 - accuracy: 0.9289 - precision: 0.8095 - recall: 0.6035 - auc: 0.9440 - val_loss: 0.1797 - val_tp: 9149.0000 - val_fp: 2263.0000 - val_tn: 96372.0000 - val_fn: 5496.0000 - val_accuracy: 0.9315 - val_precision: 0.8017 - val_recall: 0.6247 - val_auc: 0.9428\n",
"Epoch 9/20\n",
"1174/1174 [==============================] - 1265s 1s/step - loss: 0.1755 - tp: 36797.0000 - fp: 8198.0000 - tn: 383129.0000 - fn: 22692.0000 - accuracy: 0.9315 - precision: 0.8178 - recall: 0.6186 - auc: 0.9480 - val_loss: 0.1775 - val_tp: 8266.0000 - val_fp: 1197.0000 - val_tn: 97438.0000 - val_fn: 6379.0000 - val_accuracy: 0.9331 - val_precision: 0.8735 - val_recall: 0.5644 - val_auc: 0.9477\n",
"Epoch 10/20\n",
"1174/1174 [==============================] - 1262s 1s/step - loss: 0.1700 - tp: 37290.0000 - fp: 7792.0000 - tn: 383904.0000 - fn: 21818.0000 - accuracy: 0.9343 - precision: 0.8272 - recall: 0.6309 - auc: 0.9505 - val_loss: 0.1678 - val_tp: 9032.0000 - val_fp: 1527.0000 - val_tn: 97108.0000 - val_fn: 5613.0000 - val_accuracy: 0.9370 - val_precision: 0.8554 - val_recall: 0.6167 - val_auc: 0.9503\n",
"Epoch 11/20\n",
"1174/1174 [==============================] - 1262s 1s/step - loss: 0.1678 - tp: 38193.0000 - fp: 7986.0000 - tn: 383033.0000 - fn: 21592.0000 - accuracy: 0.9344 - precision: 0.8271 - recall: 0.6388 - auc: 0.9527 - val_loss: 0.1684 - val_tp: 8835.0000 - val_fp: 1311.0000 - val_tn: 97324.0000 - val_fn: 5810.0000 - val_accuracy: 0.9371 - val_precision: 0.8708 - val_recall: 0.6033 - val_auc: 0.9509\n",
"Epoch 12/20\n",
" 845/1174 [====================>.........] - ETA: 5:23 - loss: 0.1654 - tp: 27607.0000 - fp: 5612.0000 - tn: 276094.0000 - fn: 15167.0000 - accuracy: 0.9360 - precision: 0.8311 - recall: 0.6454 - auc: 0.9538"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"IOPub message rate exceeded.\n",
"The notebook server will temporarily stop sending output\n",
"to the client in order to avoid crashing it.\n",
"To change this limit, set the config variable\n",
"`--NotebookApp.iopub_msg_rate_limit`.\n",
"\n",
"Current values:\n",
"NotebookApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n",
"NotebookApp.rate_limit_window=3.0 (secs)\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"1174/1174 [==============================] - 1262s 1s/step - loss: 0.1660 - tp: 38304.0000 - fp: 7803.0000 - tn: 383484.0000 - fn: 21225.0000 - accuracy: 0.9356 - precision: 0.8308 - recall: 0.6435 - auc: 0.9534 - val_loss: 0.1679 - val_tp: 8816.0000 - val_fp: 1277.0000 - val_tn: 97358.0000 - val_fn: 5829.0000 - val_accuracy: 0.9373 - val_precision: 0.8735 - val_recall: 0.6020 - val_auc: 0.9517\n",
"Epoch 13/20\n",
"1174/1174 [==============================] - 1261s 1s/step - loss: 0.1656 - tp: 38180.0000 - fp: 7795.0000 - tn: 383731.0000 - fn: 21098.0000 - accuracy: 0.9359 - precision: 0.8305 - recall: 0.6441 - auc: 0.9533 - val_loss: 0.1928 - val_tp: 7663.0000 - val_fp: 1029.0000 - val_tn: 97606.0000 - val_fn: 6982.0000 - val_accuracy: 0.9293 - val_precision: 0.8816 - val_recall: 0.5233 - val_auc: 0.9404\n",
"Epoch 14/20\n",
"1174/1174 [==============================] - 1261s 1s/step - loss: 0.1677 - tp: 38316.0000 - fp: 8001.0000 - tn: 383120.0000 - fn: 21379.0000 - accuracy: 0.9348 - precision: 0.8273 - recall: 0.6419 - auc: 0.9525 - val_loss: 0.1822 - val_tp: 7964.0000 - val_fp: 925.0000 - val_tn: 97710.0000 - val_fn: 6681.0000 - val_accuracy: 0.9329 - val_precision: 0.8959 - val_recall: 0.5438 - val_auc: 0.9476\n",
"Epoch 15/20\n",
"1174/1174 [==============================] - 1261s 1s/step - loss: 0.1649 - tp: 38893.0000 - fp: 7833.0000 - tn: 383189.0000 - fn: 20901.0000 - accuracy: 0.9363 - precision: 0.8324 - recall: 0.6504 - auc: 0.9539 - val_loss: 0.1684 - val_tp: 8650.0000 - val_fp: 1346.0000 - val_tn: 97289.0000 - val_fn: 5995.0000 - val_accuracy: 0.9352 - val_precision: 0.8653 - val_recall: 0.5906 - val_auc: 0.9508\n",
"Epoch 16/20\n",
"1174/1174 [==============================] - 1262s 1s/step - loss: 0.1592 - tp: 39331.0000 - fp: 7685.0000 - tn: 383775.0000 - fn: 20025.0000 - accuracy: 0.9385 - precision: 0.8365 - recall: 0.6626 - auc: 0.9570 - val_loss: 0.1795 - val_tp: 8124.0000 - val_fp: 923.0000 - val_tn: 97712.0000 - val_fn: 6521.0000 - val_accuracy: 0.9343 - val_precision: 0.8980 - val_recall: 0.5547 - val_auc: 0.9476\n",
"Epoch 17/20\n",
"1174/1174 [==============================] - 1260s 1s/step - loss: 0.1585 - tp: 40111.0000 - fp: 7653.0000 - tn: 383164.0000 - fn: 19888.0000 - accuracy: 0.9389 - precision: 0.8398 - recall: 0.6685 - auc: 0.9579 - val_loss: 0.1695 - val_tp: 8558.0000 - val_fp: 1030.0000 - val_tn: 97605.0000 - val_fn: 6087.0000 - val_accuracy: 0.9372 - val_precision: 0.8926 - val_recall: 0.5844 - val_auc: 0.9518\n",
"Epoch 18/20\n",
"1174/1174 [==============================] - 1260s 1s/step - loss: 0.1540 - tp: 40430.0000 - fp: 7392.0000 - tn: 383767.0000 - fn: 19227.0000 - accuracy: 0.9410 - precision: 0.8454 - recall: 0.6777 - auc: 0.9596 - val_loss: 0.1557 - val_tp: 9738.0000 - val_fp: 1731.0000 - val_tn: 96904.0000 - val_fn: 4907.0000 - val_accuracy: 0.9414 - val_precision: 0.8491 - val_recall: 0.6649 - val_auc: 0.9563\n",
"Epoch 19/20\n",
"1174/1174 [==============================] - 1261s 1s/step - loss: 0.1527 - tp: 40762.0000 - fp: 7521.0000 - tn: 383558.0000 - fn: 18975.0000 - accuracy: 0.9412 - precision: 0.8442 - recall: 0.6824 - auc: 0.9608 - val_loss: 0.1548 - val_tp: 9325.0000 - val_fp: 1188.0000 - val_tn: 97447.0000 - val_fn: 5320.0000 - val_accuracy: 0.9425 - val_precision: 0.8870 - val_recall: 0.6367 - val_auc: 0.9581\n",
"Epoch 20/20\n",
"1174/1174 [==============================] - 1260s 1s/step - loss: 0.1488 - tp: 41237.0000 - fp: 7272.0000 - tn: 383849.0000 - fn: 18458.0000 - accuracy: 0.9429 - precision: 0.8501 - recall: 0.6908 - auc: 0.9627 - val_loss: 0.1613 - val_tp: 9192.0000 - val_fp: 1230.0000 - val_tn: 97405.0000 - val_fn: 5453.0000 - val_accuracy: 0.9410 - val_precision: 0.8820 - val_recall: 0.6277 - val_auc: 0.9555\n"
]
}
],
"source": [
"\n",
"\n",
"\n",
"num_epochs = 20\n",
"\n",
"batch_size = 512\n",
"training_steps = len(training_data) // batch_size\n",
"validation_step = len(validation_data) // batch_size\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"# FIT THE MODEL\n",
"history = model.fit(train_under_generator,\n",
" epochs=num_epochs,\n",
" steps_per_epoch=training_steps,\n",
" callbacks=callback_list,\n",
" class_weight=class_weight,\n",
" validation_data=valid_under_generator,\n",
" validation_steps= validation_step\n",
" ) \n",
"\n",
"\n",
"\n",
"\n",
"\n",
"tf.keras.backend.clear_session()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Evalution"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From <ipython-input-15-b13240840368>:1: Model.evaluate_generator (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Please use Model.evaluate, which supports generators.\n",
"[0.1642387956380844, 31638.0, 4437.0, 330987.0, 18858.0, 0.9396376013755798, 0.8770062327384949, 0.6265446543693542, 0.9554124474525452]\n"
]
}
],
"source": [
"valid_predict = model.evaluate_generator(valid_under_generator)\n",
"print(valid_predict)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['loss', 'tp', 'fp', 'tn', 'fn', 'accuracy', 'precision', 'recall', 'auc']"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.metrics_names"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"---------------\n",
"\n",
"validation data **loss** value = 0.1642387956380844\n",
"\n",
"---------------\n",
"\n",
"validation data **true positive** value = 31638.0\n",
"\n",
"---------------\n",
"\n",
"validation data **false positive** value = 4437.0\n",
"\n",
"---------------\n",
"\n",
"validation data **true negative** value = 330987.0\n",
"\n",
"---------------\n",
"\n",
"validation data **false negative** value = 18858.0\n",
"\n",
"---------------\n",
"\n",
"validation data **accuracy** value = 0.9396376013755798\n",
"\n",
"---------------\n",
"\n",
"validation data **precision** value = 0.8770062327384949\n",
"\n",
"---------------\n",
"\n",
"validation data **recall* value = 0.6265446543693542\n",
"\n",
"---------------\n",
"\n",
"validation data **AUC* value = 0.9554124474525452\n",
"\n",
"---------------\n",
"\n"
]
}
],
"source": [
"print('\\n---------------\\n')\n",
"print('validation data **loss** value =', valid_predict[0])\n",
"print('\\n---------------\\n')\n",
"print('validation data **true positive** value = ', valid_predict[1])\n",
"print('\\n---------------\\n')\n",
"print('validation data **false positive** value =', valid_predict[2])\n",
"print('\\n---------------\\n')\n",
"print('validation data **true negative** value =', valid_predict[3])\n",
"print('\\n---------------\\n')\n",
"print('validation data **false negative** value =', valid_predict[4])\n",
"print('\\n---------------\\n')\n",
"print('validation data **accuracy** value = ', valid_predict[5])\n",
"print('\\n---------------\\n')\n",
"print('validation data **precision** value =', valid_predict[6])\n",
"print('\\n---------------\\n')\n",
"print('validation data **recall* value =', valid_predict[7])\n",
"print('\\n---------------\\n')\n",
"print('validation data **AUC* value =', valid_predict[8])\n",
"print('\\n---------------\\n')"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"y_true = m[['any','epidural','intraparenchymal','intraventricular', 'subarachnoid','subdural']].reset_index(drop=True)\n",
"\n",
"#Y_pred = model.predict_generator(valid_under_generator)\n",
"preds = np.where(Y_pred < 0.25, 0, 1)\n",
"\n",
"\n",
"\n",
"#val = 0.25\n",
"\n",
"#Y_pred[Y_pred>=val]=1\n",
"#Y_pred[Y_pred<val]=0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Classification"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification Report\n",
" precision recall f1-score support\n",
"\n",
" any 0.86 0.83 0.84 21440\n",
" epidural 0.34 0.09 0.14 626\n",
"intraparenchymal 0.74 0.77 0.75 7306\n",
"intraventricular 0.77 0.81 0.79 4894\n",
" subarachnoid 0.61 0.62 0.61 6808\n",
" subdural 0.72 0.61 0.66 9422\n",
"\n",
" micro avg 0.77 0.74 0.75 50496\n",
" macro avg 0.67 0.62 0.63 50496\n",
" weighted avg 0.77 0.74 0.75 50496\n",
" samples avg 0.25 0.24 0.24 50496\n",
"\n"
]
}
],
"source": [
"print('Classification Report')\n",
"target_names = ['any','epidural','intraparenchymal','intraventricular', 'subarachnoid','subdural']\n",
"print(classification_report(y_true, preds, target_names=target_names))"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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soiIiIiIiEiEEmURERERERGRCCXKIiIiIiIiIhFKlEVEREREREQilCiLiIiIiIiIRChRFhEREREREYlQoiwiIiIiIiISoURZREREREREJEKJsoiIiIiIiEiEEmURERERERGRCCXKIiIiIiIiIhFKlEVEREREREQilCiLiIiIiIiIRChRFhEREREREYlQoiwiIiIiIiISoURZREREREREJEKJsoiIiIiIiEiEEmURERERERGRCCXKIiIiIiIiIhFKlEVEREREREQilCiLiIiIiIiIRChRFhEREREREYlQoiwiIiIiIiISoURZREREREREJEKJsoiIiIiIiEiEEmURERERERGRCCXKIiIiIiIiIhFKlEVEREREREQiCsQdgOR9hQsV4OO+nShUqAAFUlN5++NvebDX+zQ7cj8euaUthQqm8u3Pf3BN94FkZGRSpmRRXup2EbWq7cXGTWlc3W0gP/36F9UqleHlHpdQqXwpMt155a0veX7weADKlirG649dTo0q5Zi3YBkX3dGXFavXx1vxBLLwr7+45647WLp0CWYpnHPuebS/+FJmzpjBgw90Zd26dVSpUpVHHu9JiRIlAJg1cwY9undlzZo1pKSkMGjoMAoXLsxPP/7AfffcxcYNG2jctBld7roHM4u5hiLJoXSJorzY9UIOqLM37nBN94Gc2PgATmvWgEx3Fi9bTceuA/hr8UqaHFGXN5/uyNwFSwEYOW4aj/T+AIAb27egQ9vjcHd+nL2Ajl0HsHFTOs2P2o+HO7UlJcVYu24jV3V9nd/+WBJnlRPa/ffexWefjqdcufIMH/kuACtXrOCO225hwfz5VKlalSeefIZSpUsD8M2kr3ni0YdJS0+nbNmyvNJ/QJzhiyStGe91Z/XajWRkZpKekUnj9o9nLet0cSseubUt1Vp0YemKtds9rwS4/oLmXHbWcZgZ/YZ/yXODxmeVc227ZlxzflPSMzL54PMfuOf/RuZyLRPXwr/+4t6772DpkiVYSgpnnxOcV65cuYI7Ot/CggXzqVLln/Zxzm+/0vW+u/n5px+54aZbuPSyK7LKev21V3n7rTcxM+rW3Y/uDz5C4cKFY6zdzjN3jzsG+Y/MzIscen2sMRQvWoi16zdRoEAK4165lTuefIvXH72ck6/+H7N//5v7rj2V3/9aRv8RE3i4UxvWrNvIw71Hs1/NSjxz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ERGJUKIsIiIiIiIiEqFEWURERERERCRCibKIiIiIiIhIhBJlERERERERkQglyiIiIiIiIiIRSpRFREREREREIpQoi4iIiIiIiEQoURYRERERERGJUKIsIiIiIiIiEqFEWURERERERCRCibKIiIiIiIhIhBJlERERERERkQglyiIiIiIiIiIRSpRFREREREREIpQoi4iIiIiIiEQoURYRERERERGJUKIsIiIiIiIiEqFEWURERERERCRCibKIiIiIiIhIhBJlERERERERkQglyiIiIiIiIiIRSpRFREREREREIpQoi4iIiIiIiEQoURYRERERERGJUKIsIiIiIiIiElEg7gAkuWzcuJErO1zEpk2byMjIoFXrE7j2+ptwd57/3zN8/NEHpKSkcu757big/SW8/+47vPpKHwCKFSvG3fd1Y7969bdbjmzp41eeZM53X1O0VBku6tEbgNEvPsTyhX8CsHHdWgoXK86F3V8kIz2dsa8+zeJ5s8nMzKD+ccdz5KnttltOTmWJyO51ygktKV68OCkpqaSmpjLojbfo0vkW5s6dA8Dq1asoWbIUQ98awcSvvuTZZ54kLS2NggUL0qnzHRx19DEx1yA5nNy6JcWKFyc1JYXUAqkMfmN41rL+/fryVM/HGf/FBMqWLRdjlCL5x/333sVnn46nXLnyDB/5btb8QQNfZ8igAaSmFqBp02bcctsdvPfuKPq/0jdrnVmzZjLkzbepvk91Lru4fdb8RYsWcuppZ3DHXffkal3ymnNPP4FixYqTkppCamoqL7/+BgDDhgxk+BuDSS2QyrGNmnLdzZ35ZuJX9HruGdLT0ihQsCDX3dyZI448GoCxH43mtVd6k5mZmbV+XqFEWXarQoUK8VLfVylWrDhpaWlccWl7GjVuypzffmXRwoUMHzWalJQUli1dCkDValV5ud/rlCpdmi8//4wHu9/Pa4Pe2G45DQ45NOYaJpb9G51Ag1Zn8NHLT2TNO/nafxr+z4e8RKFixQGYPfkzMtLTaN/jJdI2bmDAvR2pd3RzSu1VOdtycipLRHa/3q+8RtmyZbOmH3vy6azvTz7xKCVKlASgTNmyPPPci1SsWInZv8ziuquv5KNxn+V6vMnq5X79t0mEF/71FxO++oq9964SU1T5j5l95e7H7WCdTkBvd1+XS2HtVmbWHLjN3U/Lpf3VBN5194Ny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\n",
"text/plain": [
"<Figure size 1008x576 with 6 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import seaborn as sns\n",
"from sklearn.metrics import multilabel_confusion_matrix\n",
"# Creating multilabel confusion matrix\n",
"confusion = multilabel_confusion_matrix(y_true, preds)\n",
"mlb= ['any','epidural','intraparenchymal','intraventricular', 'subarachnoid','subdural']\n",
"# Plot confusion matrix \n",
"fig = plt.figure(figsize = (14, 8))\n",
"for i, (label, matrix) in enumerate(zip(mlb, confusion)):\n",
" plt.subplot(f'23{i+1}')\n",
" labels = [f'not_{label}', label]\n",
" sns.heatmap(matrix, annot = True, square = True, fmt = 'd', cbar = False, cmap = 'Blues', \n",
" xticklabels = labels, yticklabels = labels, linecolor = 'black', linewidth = 1)\n",
" plt.title(labels[0])\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# AUC_ROC_SCORE"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.7924062612813562\n"
]
}
],
"source": [
"auc = roc_auc_score(y_true, preds)\n",
"print(auc)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ACCURACY and LOSS"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"def plot_training(H):\n",
" # construct a plot that plots and saves the training history\n",
" with plt.xkcd():\n",
" plt.figure(figsize = (10,10))\n",
" plt.plot(H.epoch,H.history[\"accuracy\"], label=\"train_acc\")\n",
" plt.plot(H.epoch,H.history[\"val_accuracy\"], label=\"val_acc\")\n",
" plt.plot(H.epoch,H.history[\"loss\"], label=\"train_loss\")\n",
" plt.plot(H.epoch,H.history[\"val_loss\"], label=\"val_loss\")\n",
" plt.title(\"Training Accuracy and Loss\")\n",
" plt.xlabel(\"Epoch #\")\n",
" plt.ylabel(\"Accuracy/Loss\")\n",
" plt.legend(loc=\"lower left\")\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"findfont: Font family ['xkcd', 'xkcd Script', 'Humor Sans', 'Comic Sans MS'] not found. Falling back to DejaVu Sans.\n",
"findfont: Font family ['xkcd', 'xkcd Script', 'Humor Sans', 'Comic Sans MS'] not found. Falling back to DejaVu Sans.\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnAAAAJtCAYAAAC2W03mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdd5gUVaI+/rc65zQzPYk0ZCTpqggKGFFRAUVQWX8mdPWu63r38Zq+ezdw7/V6N+ji6roGFNOuec1rZBEzopiJIkFg8kznHM7vj+oqpp1hukGYnrHfz/PUMzPVoU5X11S9dc6pU5IQQoCIiIiIBgxNqQtARERERPuGAY6IiIhogGGAIyIiIhpgGOCIiIiIBhgGOCIiIqIBhgGOiIiIaIBhgCMqE+l0Gj6fD8lkcr9e7/f7EYlEDnCp6IcqlUrB5/MhlUqVuihEP0gSx4Ej6nubNm3CsmXLinrub3/7W9jt9u+9zDVr1uCoo47Ciy++iDPOOGOfX19fX49TTz0V999///cuy/exatUqvPTSSzj88MOxaNGikpaF9m7lypU48cQTsXLlShx//PF7fd62bdtw55134swzz8T06dP7sIREA5uu1AUgKkdtbW148cUX8+Zt2bIFRqMRgwcPzpt/4403HpAAZzKZMHr0aFit1v16/fDhw1FdXf29y/F9/fa3v8Xbb78Nr9eLBQsWQK/Xl7pI9D00Njbi1ltvxdChQxngiPYBAxxRCUyfPh2bNm3Km1dZWYlJkyZh5cqVB2WZkyZN6rbMffHOO+8cwNLsny1btuDtt9/G3Llz8cILL+CVV17B3LlzS10sIqI+xwBHNAC8++67ePPNN3HdddfhySefxGuvvQaj0Yjly5cjEAjg+eefx/vvv4/GxkY4HA6cdtppmD9/Pkwmk/oeu3fvxvLly3Huuedi9OjRAICXXnoJmzZtwtVXX41ly5Zh1apVMBgMOP/88zF79uy8Mtx2220YMWIE5syZA0AOU4899hguvvhibNmyBQ8//DACgQBOOOEELF68GBaLJe/1LS0tuOOOO7Bu3ToMHjwYV155JXbv3o0PP/wQv/zlL4taDw8++CB0Oh3uvfderF27FsuXL99rgNu+fTsefvhhfPbZZ9BqtZg4cSIuuOACNDQ0qM/x+/14/PHH8eabbyKRSGDkyJFYsGABpk6dCgB44IEHoNPpcMEFF+S99yuvvIJ169bh2muvBQBkMhncfPPNOPbYY+H1enHvvfdi69atuO6663DMMcfg/fffx6uvvoqNGzcilUqpZRk1alS3ckciETz99NN49dVXEY1GMWzYMMybNw8nnHACVq1ahXfeeQfXXHNNt5rUL774As8//zwuuugiDBkypMd1kk6n8frrr2PlypXYunUrJEnC9OnT8eMf/zivdlUIgZtuugkzZszAkCFD8Je//AVbt27F2LFjceWVV3Z7/1QqhUceeQT//Oc/YbPZcN5558FoNO7ta9xvmzdvxn333YfNmzfD6/XiggsuwPTp0yFJkvqceDyOhx9+GB988AE6Ojrg8Xhw2GGHYfHixWpNdktLC5YtW4b169cjGo2itrYWM2bMwI9//OMDXmaig0YQUb9QUVEhjj/++B4fu/nmmwUAce6554ra2lpx5plnijPPPFMIIcRdd90lKisrxfz588UVV1whTj31VKHRaMS0adNEIpFQ3+PDDz8UAMSLL76ozvvJT34iPB6POP3008XYsWPFeeedJ8aMGSMAiL/+9a95ZairqxOLFy9W/3755ZcFAHHBBReoyz/hhBMEADFr1iyRzWbV565bt064XC7hcDjE4sWLxYIFC4TT6RQnn3yyMBgMRa2fdDot6uvrxdy5c4UQQtx4441Cp9OJ5ubmbs9dtmyZ0Gg0wuv1iosvvlhccsklYuzYseLGG29Un7N69WrhdruFyWQSCxYsEJdffrk4+uijxcyZM9XnHH300T1+J1deeaXweDzq34lEQgAQc+bMEXa7XcycOVPMnz9fvPDCC0IIIWw2mzj66KPFZZddJi644AJRX18v9Hq9eO211/Led926daKurk7o9Xoxb948ccUVV4jjjjtOHHLIIUIIIdasWSMAiPvvv79bmRYuXCi8Xm/ed/5dmzdvFkajUcyaNUtcccUV4txzzxUOh0NUVFSIr7/+Wn1eJpMRAMS8efNERUWFOPnkk8X8+fOFxWIRlZWVees8kUiImTNnqp//0ksvFU6nU5x55pkCgFi5cuVeyyOEEO+++64AIG6//fZen/fAAw8ISZLEkCFDxOWXXy6OOOIIAUBcfvnl6raWzWbF9OnThdlsFgsXLhRXXXWVOOecc4TX6xVr164VQgjR3NwsPB6PqKmpERdffLH42c9+Jk477TRRXV3d6/KJ+hsGOKJ+opgAN336dBEMBvMea2pqEslkMm/e66+/LgCI5557Tp23twAHQFx66aUinU4LIYSIx+Ni8uTJYvz48XnvubcAN2rUKNHa2qrO/3//7/8JAGLz5s3qvNmzZwuXyyV2796tznvzzTcFgKID3CuvvCIAiKeffloIIcSGDRsEAHHLLbfkPW/r1q1Cq9WK2bNni3g8rs7PZrNqOTOZjGhoaBBDhw4VjY2Nea/v+ln2NcBJkiRWrFjR7fk7duzI+zsajYopU6aIGTNm5M0/8sgjhcfjEVu2bNlrmQ4//HBx1FFH5T3e3NwsdDqduOGGG7otu6twOCza29vz5jU2Ngqv1yuuuuoqdZ4S4LRarXj33XfV+W+99ZYAIO644w513t133y0AiEcffVSd19TUJCorKw9YgOvs7BQmk0nMnDlTDajZbFZcc801AoC6zteuXSsAiCeeeCLv9clkUkSjUSGEEH/605+EJEndvvfv/l8R9XccRoRoAFmyZEm3Cxpqamqg1+shhEBHRweampowYcIE1NbW4tVXXy3qfW+++WZotVoAgNFoxFlnnYV169YhFAoVfO21116Lqqoq9e/zzjsPAPDBBx8AAILBIFasWIHFixejrq5Ofd5xxx2HY445pqjyAcDy5cvhdrvVK2jHjh2LKVOmYPny5RBdLqZ/7LHHkMlkcNttt+U140mSpJbzvffew7Zt2/Cb3/wGtbW1ecvp+ln21ezZs3HiiSd2m680OcZiMTQ3N8Pv9+O0007Du+++q67jjRs34qOPPsK1116LESNG7LVMP/3pT/Hhhx/i888/V+c99NBDSKfT+MlPftJr+axWKyoqKgAAoVAITU1NAIBjjz22x21l7ty5ed/RzJkzUVNTo363APDMM89g1KhR6vcOyNvkFVdc0WtZ9sU///lPxONx/OY3v4HBYAAgf5+/+tWvYDAY8NRTTwEANBr5kLZ9+/a8bUKv18NsNqvPEUJgx44decs4EBcKEfUlBjiiAWT8+PHd5vl8Plx++eWoq6tDZWUl6urqUFdXh6amJrS2thZ8T5fLBa/XmzevsrISAIoa903pT7e3127atAmpVAoTJkwo6vP0pKOjA88//3y3vlUXXXQR1q9fj48++kid98EHH8DtdncrV1fvv/8+AOCoo44qavnF2tvnefzxxzFlyhTYbDbU1tairq4OS5YsUUO3Um4Aav+7vVm0aBGcTifuvfdeAEA2m8W9996LWbNmdQt+35XNZvH73/8e48aNg8PhULeVp556Cm1tbd2eP2bMmG7zKisr87aLtWvXYtKkSXn90ABg8uTJvZZlX3z88ccAgB/96Ed5891uNxoaGtTHJ02ahNmzZ+OGG27A8OHDcdlll+Hpp59GLBZTX7No0SIMGTIE06ZNw+GHH45rr70Wq1atygt8RAMBAxzRAGKz2brN+7d/+zc88cQT+J//+R+sW7cOjY2NaG1txbBhw4o6KPU0DMd3D8b78vp9eW2xHn30USSTSbz44ouYNGmSOi1duhSAfLGBIp1OF+xAn06nAWC/O9pns9ke5/f0/axevRqLFi3CyJEj8dZbb2Hbtm1oaWnB73//ewBQv6Niy2SxWHDxxRfjb3/7GyKRCN5880188803RdV43Xfffbjxxhtx1lln4eOPP8a3336L1tZWXHjhhT1uK8VsG+l0Wq0V66qnefsrk8ns9T2NRqO67jQaDV566SU8//zzOOmkk/Dmm29i4cKFGD9+PLZv3w4A8Hq9+Oqrr3D//fdj+PDheOCBB3D88cfj1FNP5aDDNKAwwBENYLFYDE8//TR+9rOf4bLLLsMhhxyC2tpaOBwO7N69u9TFAyA3der1enz11VfdHutpXk+WL1+Ouro6LFiwACeeeKI6nXHGGZg8eTIee+wxtZblkEMOQXNzMzo7O/f6fkpN2fr163tdrsFgQDAY7DZ/586dRZUbAP7+97/DarXikUcewfTp0zFs2DB4vV60tLTsV5kAObQHg0E88cQTuPfee1FTU1PUcCqPPPIIpkyZgptvvhmHH344Bg8ejKqqKuzatavoz/Ndo0ePxpYtW7rN72ne91kGAHz99dd585PJJLZt25ZXU6jRaDB37lwsW7YM33zzDVasWIEdO3bgT3/6k/ocu92OxYsX46mnnkJLSwtuuukmvP76693GZiTqzxjgiAYwrVYLjUbTranzzjvv7De1CXa7HSeddBKWL1+eFyrffPNNtSmzN59++ik+++wz/OQnP8HSpUu7TUuWLEEgEMCzzz4LAOrdGW666aZu76XUMp166qlwOBz43e9+1209da2JmjhxItavX682cwJyMFmxYkXRn1+v1yOdTuc143V0dODBBx/Me97UqVMxZMgQ3HLLLYhGo3stEyCH4uOPPx633nornn32WSxevLioAY31ej0ikUheDeInn3yCN998s+jP811z5szBRx99pDZjAnKwuu+++/b7Pb9r3rx5AIDbb789b/5DDz2EUCiEM888E4DcbP/ddXXcccfB4XCogf67/ys6nQ6nn346AOR9z0T9HceBIxrADAYD5s6di7vuugtmsxkTJkzAqlWr8Oqrr6KmpqbUxVPdcsstmD59OsaNG4ezzz4bgUAAK1euxCmnnIJVq1b1+lqlefT888/v8fHZs2fD5XJh+fLl+PGPf4wjjjgCl19+OZYuXYpNmzbhrLPOghACq1evRkNDA371q1/BZDLhjjvuwMUXX4wjjjgCl1xyCdxuN7788kvs3LkTTzzxBAA5DN5xxx2YNWsWLrzwQnR0dGDZsmUYO3Zs0bVw8+fPx9KlS3HKKafg0ksvhd/vx1/+8hcMGTIkr5ZQo9HgzjvvxFlnnYXDDjsMl156KWpqarBx40Z88skn3S4y+OlPf4pzzjkHkiThsssuK6osCxYswM9+9jOcd955OOOMM/DNN9/grrvuwsSJE9Umxn115ZVX4p577sHs2bNxzTXXoLq6Gvfcc496UUyx7rnnHrzxxhvd5v/85z/HrFmzcPXVV+P2229HMBjEnDlz8Mknn+Duu+/G1KlTcfbZZwOQL3b47//+b5x55pkYO3YsEokEnnzySfj9flx66aUAgBtuuAEbNmzAqaeeivr6erS3t+Ouu+6Cy+VS34doINAuWbJkSakLQUTAZ599hokTJ/Z4FWNzczNisRjOPffcbjUtp5xyCnw+H1544QW8/vrrqKysxCOPPIJAIICxY8dixowZAOSah+3bt+O0005DfX09AGDHjh0wGo2YP39+3nu2trYiGAxi4cKF6tV7X3zxBQ477DC1438gEEBTUxPmzJmTd5VkKpXC+vXrcdJJJ6kD1VZVVeGSSy6BVqvFzp07MWzYMNx999349NNPsXv3bnVA3O8SQuDJJ5/EtGnTcOGFF/b4HJ1OB61Wi6amJpxxxhkwGo04/fTTccghh2DNmjV49NFH8e6778Jms+H888/H0KFDAcid7GfNmoUdO3bg0UcfxauvvopYLIaFCxfisMMOAwAMHjwYkyZNwurVq/HCCy8gHA7j9ttvR0NDA/R6vXrAz2az+PTTT3Hcccdh4sSJeeUbMmQIJk2ahHfeeQf/+Mc/sGPHDvziF7/AwoUL4ff7MX/+fLXv3OjRozFnzhw0Nzfjsccew8svvwy/34+zzjqr28UNI0eOxB/+8AecdNJJ+PnPf97juvmuww8/HE6nEytWrMBzzz2HcDiMW2+9FWPGjIFWq8XChQvV9f7JJ5/guOOOw6RJk/LeY/369Rg9ejRmzpwJQO6Tt2DBArS0tOBvf/sb1qxZg7lz5+KGG25Qv5PebsEWDofx7bffwu129/j4lClTMGLECJxyyikYMWIE3nrrLTz++ONoaWnBL37xC9x+++3qoNFGoxE7d+7EqlWr8NRTT+HDDz9ETU0N7r77bpxwwgnqczZs2ICXX34ZzzzzDDZs2IBp06bhoYcewqBBg4paj0T9AW9mT0QlkUgkMGbMGEydOhWPP/54qYsz4Lzyyis47bTT8Oyzz6pNiERUPtgHjogOuqamJtx888346quv0NbWhg8//BBnn302duzYgYsuuqjUxRtQAoEANm3ahF/+8pdqjR0RlR/WwBHRQdfU1IQf/ehHaG5uVueNGjUK119/fdH9t0g2depUfPjhh/B4PHjppZcwbdq0UheJiEqAAY6I+oQQAo2NjWhvb4fdbkdDQ8NBGTPuh27jxo1Ip9MYPny42veLiMoPA9wAIYRAIBBAR0cHAoEAIpEIAoEAfD4fOjo6EAqFkEgkkEwmkUwmkUqlEI1GEYlEEIvFkEwmkU6n1QExFZIkQavVQqfTwWAwQK/XQ6fTQa/XQ6/Xw2KxwOPxwOFwwG63w+l0wmq1wuVywel0wmQywWQywWq1wul0FjWUwUCUTqfh9/sRDocRiUQQDAbVdRuLxRCPxxEOhxEKhRCNRtUpmUwikUggHo8jlUohnU6rUzabRTabVYc9UMKMst67rluj0Qi9Xg+bzQan0wmn0wmHwwGHw6H+7vV64XQ6B2woCoVC6OzsRCQSUadoNIpQKIRQKKSuX+V3ZZ3G43EkEgmkUikkk8m8bVySJHXbNhgMMJvNsNvt6tR1/blcLrhcLvV3t9v9g9ieE4kEGhsb4fP50NnZiZaWFnX7jcfj6raaSCTUbVrZVpWfXdepRqOBXq+HwWBQ163RaIROp4PZbIbNZoPValW3X2VdKuu7oqICNTU1+z2I8kAghEAymVS34ba2NjQ1NaGtrQ3t7e1oa2tDIBBAMBhEOBxW98/pdFrdH3Rdz8pPm82m7ouV7dViscBms8Hj8ajzqqur1duKDVTZbBbt7e1obW1FIBBANBpFLBZDOBxGNBpFIBBAZ2enuk9W9rfK8S+TyaiTQqPRqBc96fV6mEwmGI1Gdf+qbL9d163JZILD4UB1dTUqKyvhcDhgMpn6xX62bALcv//7v+Orr76C2WyGy+WCx+NRA4nypbndbnVn7vF44PF4YLVaodMdmNFWstksYrEYQqEQgsEgotEogsGg+k/c0tKClpYWNDc3o6OjQ33M5/OhqakJ8Xi81/eXJEk9UCkHK6vVCrPZDKPRCK1WC61WC0mSIEkShBDIZrPIZDJIp9Pqhq/suJUQ6Pf79zry/HcpO+yKigp1R+7xeNQNX7ltU0VFBaxWq3oAVQ6cZrP5gP9jJJNJtLW1obOzUz34d3R0oKOjQw0C4XAYPp8PwWAQgUAAoVBIDRHhcBjt7e1FrwMAMJvNMJvN6sHNZDKp4ViZNBqNOimy2SxSqVReMIxGo2pYSSaTvS7XYDDA6/WiqqoKXq8XtbW1qK6uRnV1NSwWC1wuFyorK+F2u1FZWQmXywWbzXbAdvZCCCQSCfXkQdmxKicfSgjbvXs31q9fj127dqGzs1N9rBhGoxE2mw1msxk6nU7dCSsHOWUbB+T1qWzbyWQS8Xhc/f/rOi7b3igHR7vdrq7TiooKeDweWCwWVFVVobKyUt3WnU4n3G63egA4EOtVCQPKOk0kEmoQU7ZZ5TMpJ3VKWGhtbe3xFlldabVaWCwWGI1GdX/R9UROOeBpNBr1pEPZFpV1m0gk1LHulDIWonyPXQOex+NBdXW1ug+uqKjI22cr61kJgwc6YAsh8k7I2tra1G0zFouhs7MTPp9PDb2BQEA9oe7o6EBnZydisRgCgUCv60Cv18PlcsFut8Nms6lhWNkvAPLdJ5T1rPwMh8Nq+O6NTqeDx+OB0+lEZWUlqqqqMGjQIFRVVcFisaiTw+FQ983K92+322E2m2EymQ7I9pvJZNT/e6X8Pp9PPd61traivb0dgUAAfr8fPp9P3YYL7e+0Wi2sVqs6dQ28yvFO2XaFEOqxTlm3ysm1cgKofO+FaDQa2O12VFZWqse6qqoq1NTUwGazqSfeyr5D2Sco61zZlr/vsa6sAtzHH3+MeDyOzs5O+P1+hEKhbjVSPdHr9TAajTAYDOqGrxw0vrtz++4/nRIAlINwIVqtFl6vF16vVw2YLpcLNTU1qK2tRWVlpVoL5nQ64fF44Ha74XA4oNPpDspZQTabVWtC/H4/IpEI/H4/AoEA4vE44vG4WiOo1KJ0PTNSdmzBYLDgjl35h1QCqHKQVmoENRpN3j8lAPUsSzmYKGVSdnjF/EMq4Uap3bLb7bBYLOoOTflOlB2F3W5XD3bKpPyzHqgdX09SqRSCwSD8fr964FYOIsrOUNkhNjU1obm5Ga2trb0O6itJkhqeu+4AlW1cCUQajQaSJKkH8WQyiVgshmg0qn7XsVis4O27NBoNvF4v6urqUFNTg8rKSng8HtTV1aGiokJd71arVd3hKQc6m812wA7amUwmL7D7/X51vSoHEmU/EQqF1PXa1tYGv9/fbbDdva3XrgcWZT/SNRgpZVG24UQigUQigVgsptb6FrOb1ul06v6iurpaXbf19fWor69Xg3t1dTWcTqe6H9Pr9Qd8v5FOp9X/w67rNRgMor29Xa0FVE6cfD6feqLU1taGYDBY1EDUZrNZ/RzKgbPrvkLZZgGotd1KAFUmpZxKuC9mucqxQDkptVqtcLvdauBU9iPKdqxs31VVVaiqqoLD4fhe6zybzapBSAn2SutMR0eHemLk9/vR0dGB1tZW7Nq1Cz6fb5+Wo9fr1X1d15OkriGp6/rNZDJ5JxvK/1dv26/JZILX682r+Xa73aipqcGgQYNQXV2thh+lUkJZ9wejxSGbzeYd6xKJBPx+P1paWtDZ2akGdmWfoGy7yr622P9X5bMrtdXKPlc58VfC/GGHHYY///nPPb6+bAJcNpvtdlAVQuRVy/p8PrVau729HT6fT61BUJonlTMvJbUraV4IoTZHdj0IKgedrhue0nyj1EA5HA41wVdUVPSLqtmDJRqNqhu9EvqUMy8lkChNCsqZcNedrbKTUNY5ADXUKc05StON0uTg8XjUmhIlCLjdblRVVan/PAO9uaE3ys4+EomozWhKDWTX9a80nSknH8o2rqxrZVLCnNFozAuvyvatbOvK38p2XlFRoQbhH8L6Vpp4lBqart0a/H6/egCNRCJ5YaFrTbdSq9t1G1aadJSTCiWYKPsOZV0qZ/FKwD0YtdelIoRQA0osFssL08pJsbKv7roP77q/UE40FErLg9I0qUzK/kJpKlO6hthsNrX2StmHKzWBB6pVpq8prUDKcUwJeMrJtXKirhzzlPWqBBmlJrtrM6VCOf4p4VbZNpWWra7HPLfbDa/Xi+rqatjt9h/MdgvI227XyhulxUdpBla2a6UVoGsLi9LiotRuCyEwefJk3HbbbT0uq2wC3NKlS3H99dejtbV1rwNGEhEREQ0EA/80uEiRSATpdBpWq7XURSEiIiLq1U033QRJkvbaF7BsAlw8HockST+Iq8qIiIjoh61QbimbABcOhw/IVR9EREREB1uh3FI2Aa65uRler7fUxSAiIiIqqFBuKZsA19bWhpqamlIXg4iIiKigQrmlbAKcUhVJRERE1N8Vyi1lE+A6Ojo4fAgRERENCIVyS9kEuPb2dvaBIyIiogGhUG4piwAnhEAoFILdbi91UYiIiIh6VUxuKYsAF4/Hkc1mOYgvERER9XvF5JayCHDBYBAA4HQ6S1wSIiIiot4Vk1vKIsC1t7cDADweT4lLQkRERNS7YnJLWQS4lpYWAEB1dXWJS0JERETUu2JyS1kEOKUq0uVylbgkRERERL0rJreURYCLx+MAAKPRWOKSEBEREfWumNxSFgEuGo0CAK9CJSIion6vmNxSFgHO7/cDYBMqERER9X/F5JayCnAcyJeIiIj6u2JyS1kEOOWGsBpNWXxcIiIiGsCKyS26PixPycRiMZhMplIXg4iIiAa4RDqDUDwNvUaC02I4KMsoJreURYBLpVLQ6/WlLgYRERH1Y0IIAICUSQKJMJBJApIECAGIDADAKASMIgMYbAAqD0o5isktZRHgEokEhxAhIiL6jnQmi1A8hUgyg3RGQADQSIBWI8Go08Cg00Cn0cCo00CHrBxoEiEgHgDSMSCdBFIRAJL8hskwkEnJk8gC6TiQTQEaHSBpAY0W0BoAgxXQmeRwJOXmabTy+0iS/HytPve+Qg5QgPye2bQ8pRPy+6diQCoKJCNy+USunOlErhwZIJvJvSYulz0ZBRJB+XVd3ktKJ4CYX/5shRx2ATDvLwfleykmt5RNgGMTKhER/ZAJIdAZSSIYTyOSSCOWzEBAyAFMr4Feo4HZoIXVqIPDqIEu1gFdYBfcoUa4Q81AuBWItgPRDiDaKU/xQC4c5WqjyoVGBxjtcrAUYk/QBABJI09m90FbfDG5pSwCXDweZw0cEXWXjAL+b4GOLUBgJxBslM/KE2G5liEZkc/YM0n5LD+TzNUuJOWzepHNvZFSY2CQf+rNgNEm1zLorYDJIR8MDFbA6AD0FkBvAgx2+SBgtMvP11sAswswueQDBpWVbFYglsrAH0shFE8hlpR/bw8l4IsmEU5kEE2k0RFJIhBLwaCVYDFqYdLrUGUzwGM1otphQr3LjJFVVpjjzUDHN0Dr10DHViDwLeDfCUTa5LCWTe1bASVNrvbMJm/Tesue2jSFwSrXnGkN8vN1RkCjl2u5RFauCcsk9vxvCZGrqUvk/p9El+el5L8hye8FkQtPWnkZOmNuMsvLNVgArTFXztzjWkOu5k8jl0Nn6vK/mPup0eXexyT/NDnlz7gpw9YAACAASURBVFjC/8FicktZBDj2gSMqY9kMENgFtKwDmr8EOr8BfDsA3zYg3FLq0vVMa5BDnMWTC4MOwFYtH6AMNnme2SMfgLoGQK1BPkgpB1CNVj54mV3ygekgEUIgkc4ilswgnEjDF00iksjAH02iM5pEZziJZCaLYCyFUCKNdEYgk5WbxJKZLIQQEAJIZQWEEJAkSW7GkyRIkgSdRoJeJzfjOcw6uM0G2E06CEA9vu8pC6DVABIkZCEvx6DVQqeV30erkWAz6GA0aCGEgE4rwajTQqeRH7eb9NDrJBi0GlgM8iEyk5WbFg1aDUTuPbNKpQyArABSmSyyQiCdkddFIp1BNJlBJCHXhoUTGYTiKYTiaYTiKfijKfiiKQRiSXREkvDlQllutUCSgEqrEQ1VVtS7zKh2GFHrNOPQwS7Uu8yodRrhyPhzJx47gM6tQGA3sLNR3t7bN8u1Zr0xuwHnYMBRD9ir5W3MWiVvd2Y3YKmQt0O9Rd6+lCbPg0AIgYwQyGYBAQEIIJubL3ItqAIC2axARkBd1+lsFumMQDKTRTqThYDc/KvVSNBK8vdoMmhh1suTRjMwTozYBy4nk8lAq9WWuhhEdLAlI3JIa1kHNH0m/2xZJ5/p90SjB1yDAc8IwD0UsNfKYcdg3xOKdCb5DL3rmbpyVi9Jezo4Z9NyzVw2LdfsJSPyATQVlZuhEmEgGQLiwVy/nag8L+bL1faF5dfFOuXfI63ydCBoDYD3EKBmAlA9AfCOA7yHIGupRDorh49kOotYKoNwPCXX+oSTCMfTiKUyiCTTCMfTCMZT6Agn1YAWzAWSYCyFtJI89oFeK6HaYYLXboTXYcIghwkVVgMqrAa4rQa4LHo4THrYTTo4zXrYDFroMjF5HcWDck2N0idK6fuk0SMv1Rks8rxcB3T5ccjP0Vty/a7S8veaTQMiket7BcgrJybX6FirEM4IBGMphBPyZw7F04gk04inMkikskjm1mM6K5DOyD8zXdaL0hJn0mtR59JheJUVJr0WGklS+5wN8VgwxGNBpc0AfcIn1w77N8u1w/7dwLYdudC2W96uemOpBCpGApUj5W3cNUSelKBmsOzzd3awSJIEnSSVyeBmhRWTW8oiwKXTaeh0ZfFRiX74Yn652dO3LVeTth3w75BrHPzf9vwaWw1QNRqonQxUjpHDmrsBKWsNmoIpbO+I4NvOKJoCcQQ65KaqcELu2J1IpZDKJCFEBFqtBnJDjoBBq4FGI0GnlWDQaqHXStBrNdBIEgxaCXqdEXqtGTqNBgatlHuuBha9FkaLBkadVg0mdpMOVqMOFoMWbosBVk1KDnbRTjnsxfxys1cqIoe8VFR+LBHqEgBDQCbXuTuT67ydzcjBJdIuB9qmz/JWi8bkhKFyDAye4bC6BsPtGQFUjgKqhyNUU4Fd/jhagnHs9sXgi8ihbmdnFDs7owjG03nvZdBpYNZrYTPq4LLoYTXqUOs0YUSVDYPcZnisBlTajPJjBvmzGqWMXAsaagZCu+Xfw61AezvwbYf82eIBOazF/fLnzOYvty/ZDDbYTC452JtcuSY4i9xMrjTnafV7akH1ulyTn1LrI+0JnSIXDmPxPd9TOgms2ylv26Hmwn3OjE7APQSw18nbtGuIfBLiHARUjAKsFQd9ndDBUUxuKYtUk81mWQNHdCCk4nIT5O5P5AOMOde8YnLk+pno9vRDUX5qtLnmO0nuc6NcDaYcxNKJPVeTpRO5kBLZc9COB4FQk7xc/7e91zpodEDVOKBmolzbVDMJqB6PtowVW9vCWNcYxKZtIexcG0U4sQMO024M9lhQ7TCh2mHC5EFO2Ew6mPVaOMx6WHIdvq0GHbQHqOklm801N6Yyas1XPJVBIp1FKJ7G9vYo0tkMhNBCkrxIZbJIZ+qh1UvI6gR0Vg2kLlcJmg06mPQaOVBKEiQJ0Gk1cnNhrmbHrY3naia/kmsk2zYCrRvldblrjTx9h93kxDjXEIyz18rBwN0ADJeDL1yTkTHYkc5mIUGCVgNoexpwNB6QQ3ZgMxBoBLZvl5v3Arvk0B1p2/cVqDPLTXxGR66JWOl/mOv7lE0h78pF5SpDpQN6135fyeieflfp+J6rJDNJqP2u9GY5DCs1o4WaJQ8kk1Ne354GOaQ5agFXLqg56gFrJftK/kAVk1vKIsABcvUsEfUsmxVIZwUEBDTI9T8K7ZIP+o2fygf99q/lEKV23C8RvSUXKIbJk2uo/LNiBNLOYdjmS+KrxiA2NgWxfn0Q0cQGVNlNGFVtw0ivDRcOH4phFVZYjaXZ/Wk0EswGLcyGvjypNADDjpEnhRC52q5NuVrM3MUc7VvkGqB4QP7+m7/s8R21Zje0jnq5n5SjHrB55X5T/m/l/litG4Bwc+/FkjRyc56tWq45stfI79O1H5bJKdc0KX39dAdn4NSChJAvcIkHcjWfuRpBpVY0k5Br0DLJPScqyhAWyhAYXTvhKx38lWZcpeO9vQ7wDAccdf2qiZP6XqHcUjYBLpst8UGH6CDK5K5eiybSaAsn1H5KvkgSndEU/NEk/NEUArEUEukMap0mjPTaMbbGjomDnPCKThi+XQ00fwE0fibX1PRUOyJp5BqB2slyaFL6biVCubGXUrmrNRO5g1ruYJZOAhBy05JyNZgy5pPOINee6EzylZl6y56rNc0u+QBu9crL8zQgrndhpy+G3f4YWoMJBOMpxBuzyO7OQq/dCa/dhFqnCYcNHoJBbjN0Wnaq6ZEkyR3X7dVAw8z8x4SQh5Lw75BrWn3b8yf/Trl5M+brfRk6s9y05xwMOOvlsN31d3tNbjsYACRJ3hZNzlKXhMpEodxSFgFOq9UildrHy6WJSiCRzqDRH0d7OKEGLuXqtHAirXYaD0RT8EWT8u+xFGKpzF7f02XR46gGD6YOr8CUBg/GVhqgbfkS2PkK8OXHwKtr5U7R32V2y02QdYfKP6vGIFsxEi1R4NuOKJqCcegkCUa9Fia9HJIkSW7W02skmA263CCgEgw6DSRA7dSdzspXkwlAvYosncki1eWqslSuIzggX+UnAgL6cAZuSxDVDhOOGVkJPcPZwSFJcvOcdS+jzAshB/zgbjnoBXbJ/eyiHXJNWuUooGoM4BomB3Yi2ifF5JayCXCZzN4PcEQHWjYrEIqn4f/OEAGhuDzEQns4AV8khY5IAoGYfEWbEtL2hyQBZr0WFoMWdU4zjh5ZgSOGenBInQO1phSknR8C218A/vke0PR59/GfjA5g0JFA/Y/k2rWaSXIz5Xeq8DUAap1ArdO8T+UTQiCVEWpZhQB0GmnAXNJP3yFJclOnzVvqkhD9IBWTWxjgqP9IJ+X+MyKz51Yp2cyesawkKTcOUe6MXpJy96KTch3lc4Mw9tBvQIjuQxwIIY9BlcxkkU4LuUN5rlN5Ip1BMiOQUWqDMgKJdEYd6yqaTCOSzCCcG0YgEEuhLZRASzCO1lACwS7jOe0LrUZCrVMeVsFlMcBp1sNl0cNrN6LSZpSHVjDr4DAb4DDpYDbIHe71WmlPf4l0Etj1EbD1GeCDt4Dda/Ov3JM08pAS9YcDg4+Sf1aNOahNWZIkwaBjWCMiKgYDXI5er2cTaj8lhABiPkhrHwBW3/39x72SujTXaPTqyOGS0nlYCYaZJCSdCSZ3A0yuIV366QxS++ikzZVoj6TRGoojHEqgI5JEZ642rTNXoxZPZZDKCMRTGQRzA3RmswJ6rXxVoMOsR4XNAI9VDmN2ow51LjNqnSZU2IyosBrgtOhhN+nVKwm7dVzNZuXO07FOINoqX5nZ6pPnKVdrJkLy1XbhFmDbO7l7EyrrRAvUHwEMmw4MmwEMniJfNUpERP1SMbmlLAKcwWBAMllG93DrJ2LJDBoDMTT542gKxNAaSsAfTWKU146jR1ZgUHIbpNV/Bb58es9Aq4763FVZutykkQOMOm5SFPIgnchVoUXkv7OZPbc8UmQS8s+93ZQ4FQVa18lTD3QaHWqsXtSoI5RX5q648wC1VXJnZr1J7oCvNwPGytw8c25eD/exy2bk8btinUBsNxDxA61tcqfwcMuejuHRjtxVbkF52ldVY4HhxwPDjwWGHs2O10REA0gxuaVsAhxr4A6OzkgSW1rD2NoWxvYOeYDPXb4odvli6Ijs2fg8VgMuOWYYrjquAc6t/wSeWQbsXL3njUacAEy7Comhx6IzmlKvuhcC6i1wNBoJeo1GHfxegjyIqgS5iU6SAE0202VkfGXMsdy4UCK7JxhqDfLAp74d8pV2vh258al2yj+VztmhRnnaH1pjriN4lTy+WaRVDm/Yj7ZVgx2wuOXbJ5mce4ZXMNhydwyw77nl0tCj5av8iIhoQComt5RFgLNYLIhEIoWfSD1KZ7L4pi2CrW1hbG2PYHt7BDs6otjaHkZ7eO9nCHqthB8NceOSYxpwwgg7DF89Btx3hzwMASCHkkMXAUf9G1AxAgBgBFDr/B6bpVbX8+89Mbvlqe7Qnh9PxXMjw+dGh4+05ZoxO+XfE6HckBmp3G2RQnLzZjqxZyiN4G55+u5ylXsMml3y785Buds4ufc8bnbnboLuGDhDLRAR0fdWTG4piwBntVoZ4IoQT2WwqTmEre1hfNMaweaWELa1R7CjM4pkuufxaKwGLUZ6bRhRZcPQCiuGVlgw2GPG0AorKqwGSHE/8PFy4C937RlXzDMcmHYVMOlc+ZY0/ZXelLvl0tB9f60yAnykXZ50BnksM0tF4WBJRERlrZjcUhZHEpvNhkgkAiEE78gAeYiLpmAcX7eE8E1bBBubgvh0px9b28J7vXJysMeMUV47GiqtGFZpRUOFFQ1VVtQ5TT2v01ALsOJO4KP799x6pnYycMwvgEPm/fBrlCRJHozWYN2/AEhERGWrmNxSFgHO4/Egk8kgEAjA5XKVujh9KppMY1t7BFtaw/hqdwDrGoP4clcAoR7GG9NqJIz2WtWgptx6aGiFFbZibzsU2A28dxuw9qE9FxE0HAtM/4XcqZ4BmoiIqFfF5JayCHBOp3wFXjAYHNgBLpsBOrfJtztq+gzIpIGRJwD1hyNtdMIXSWJ7RxSf7vDh/a0d+KYtjF2+GHoYAg2VNgOGV9kwymvD6Gr5dkqH1Dpg0u9nzZh/J/Dun4BP/7bnStCxZwAzrpHHGSMiIqKiFJNbyiLAWSzyDYGj0WiJS1KkREju6N+xBej4Rr6JeNsGoG1z9yExVt8JANBVjETVoCmoGnQEjhxzFC6aNhkbWmL4bKcPLYEEwok03FYDJg9yYnydEzXOHoa42B/BJuCdW4FPHsoFNwkYfxYw8zqgevyBWQYREVEZKSa3lEWAs9nkjvL95kKGdEIeqiLUJAcg/3agczvQmQtr0fa9v9ZRD9RMBKonyOOe7fwQaP4yF/a2AJ8/CgAw6kw4tPZQHDroCGDQYXItmHvYgWvCjAeAd28DVt+VC5USMOFsYOb1gHfsgVkGERFRGSomt/RpgIvFYvjrX/+Kl19+GRUVFbjmmmswderUgq9ZtmwZXnrpJeh0Olx00UVYuHAhNPtwg2Sz2ay+10EnhDzMRCA3MKv/W/n3zm3yeGOB3b0HNEC+JZRrCOAZIQ+vUTFSHpjVOxatKTM2NAURS2UwptqO6uNNMGuykFq+BHZ+JN9CaddH8rJ2rs4fa83sBirHANWHyD+Vm5QbLMV/vlRMvqr0nVvlcdIAuan0+P+U35eIiIi+l2JyS58FuGw2i9NOOw3ffvstfvnLX2LdunWYPn06nnnmGcydO7fH1wghMGfOHGzatAk33HAD0uk0rr76arz33nu4/fbbi152nzWhPvczYOOLcu1UbzQ6wF4nD7Zq88phzd2ghjVhr0UsLbCtLYKPdnRiy84wvl4bRqP/Uxw7pgr/39ShGFvznVsh1R+e62v2b/Lf0U5g18fyfTCbPpNDXbSje6iTNEDVOKBmAlAxSg5hNRPl20l1ra3LpIBPHgbe/qNccwgAQ6YBs/4HGHzk9151REREJOtXTagrV67EqlWrsH79eowbNw4AEAqF8Jvf/GavAW7NmjX417/+hffffx/Tpk0DAIwZMwann346rrvuOgwePLioZSudAf1+/wH4JL3IJOXwZrDLoczmlYeQcAySmy/dw+QBW23ebsNoCCGwuSWEFz9sxBNrVqKtywC5RzV4sPCIwThtYg0shiK/MosHGH2yPMkLkINX20agZb38s/FToHVDz7eTslUDdT+Sa+kySeCrf+wZgLdmInD8r4DRp/CqUiIiogOsmNzSZwHurbfewtixY9XwBgDz58/HfffdB5/PB7fb3e01H3/8MbRaLaZMmaLOO/rooyGEwNtvv43zzz8/7/kbNmzAxo0bodFoYDQa4XK5UFtbC6/XCwBoaWk5SJ8u56QlwCk3y7dPKjLYbG4J4YXPGvH857uxs3NPVenwKivOPLQeZx5ajyEV+9DEuTeSBDjq5GnECXvmJ6NAy1dykGvfLP/e9IXc/Lv5FXlSVIwCTvhPYNw8+R6lREREdMAVk1v6LMB9/vnnaGhoyJun/P3FF1/g2GOP7faayspKZDIZdHZ2oqqqCsCeD/Ppp592C3BPPvkklixZkjfvmGOOwdtvvw2DwYBdu3YdqI/TsyLuPymEwGc7/Xh1XTP+taEVW1rD6mM1DhPmHVaHOZPqML7O0TeDDhsswOAp8rSnkEDnVrmGTpnqDwdO/C3vIkBERHSQVVZWFswtfXY0DofDaqJUKFWE4XC4p5dg9uzZsNlsuPbaa3H33Xcjk8ngxhtv3OtrMplMt3mNjY3QaDSora1Fc3Pz9/0Y+yWbFVizvROvftWM19c1ozEQVx9zWfQ4dXwN5k6uw1HDK6DV9IMmSUnK9ccbAUxcUOrSEBERlZVickufBTiLxYJQKJQ3LxgMqo/1xOFw4B//+AeuuuoqOBxyp/1zzz0XQ4YMUcNfV+PGjcO8efOQyWSQSCTg8/nUWiy32w2fz3cgP1KvslmBj3f48MpXTXjly2Y0B/eEthqHCadOqMHJh1TjyAYP9Fo2RxIREdEehXJLnwW4SZMm4YUXXsibt2PHDvWxvTn55JOxadMmbN++HXa7HXq9Hh6PB8cdd1y35y5atAiLFi3q8X36IsBlsgIfbuvAC581YsWGVrSHE+pjg9xmnD6pFqeOr8HkQS5o+kNNGxEREfVL/SbAzZw5E//3f/+HLVu2YOTIkQCA5557DuPHj0dFRQUAebyTtrY21NTUwGAwqK+VJEntL/df//VfcDgcPQa43rhcLnz99dcH5sPsxTn3fIC1O/as7HqXHNpOGV+DHw1x9U2fNiIiIhrwCuWWPgtwJ598MqZNm4a5c+fit7/9LdatW4dly5bh0UcfVZ/zzjvv4JRTTsGXX36JCRMmAACuu+461NXVwePx4I033sATTzyBxx57TB3krlhOp1Ntsj1YpjR40BqKY97kepwxuRZjqu0MbURERLTPCuWWPgtwGo0Gr732GpYuXYo//elPqKysxGuvvYYTTtgzpEVdXR0uvvjivBu3NjQ04JlnnoHf78fEiRPx6aefquFuX1RWVqK1tRVCiIMWqv79xFG4/pQxDG1ERET0vRTKLZIQQpSgXH3uj3/8I66//noEAgH1gggiIiKi/qhQbimbyx+rq6sB9MFgvkRERETfU6HcUnYBrrW1tcQlISIiIupdodxSNgFOuVVXX44FR0RERLQ/CuWWsglwSvvxwb4SlYiIiOj7KpRbyibA2Ww2AEAkEilxSYiIiIh6Vyi3lE2As9vtANDtdl5ERERE/U2h3FI2Ac5ms0GSJAQCgVIXhYiIiKhXhXJL2QQ4rVYLp9PJixiIiIio3yuUW8omwAFyh0BexEBEREQDQW+5pawCnNVqRTgcLnUxiIiIiArqLbeUVYCzWCyIRqOlLgYRERFRQb3llrIKcAaDAclkstTFICIiIiqot9xSVgFOq9Uik8mUuhhEREREBfWWW8oqwGk0GgghSl0MIiIiooJ6yy1lFeCIiIiIfgjKKsCx9o2IiIgGit5yS1kFuEwmA61WW+piEBERERXUW24pqwCXSqWg1+tLXQwiIiKignrLLWUV4JLJJAwGQ6mLQURERFRQb7mFAY6IiIioH2KAy0mlUgxwRERENCD0llvKKsAlEgkYjcZSF4OIiIiooN5yS1kFuEgkAqvVWupiEBERERXUW24pqwAXCoVgs9lKXQwiIiKignrLLWUT4DKZDFKpFMxmc6mLQkRERNSrQrmlbAJcIpEAAPaBIyIion6vUG4pmwAXi8UAABaLpcQlISIiIupdodxSNgEuFAoBAOx2e4lLQkRERNS7QrmlbAJcJBIBwBo4IiIi6v8K5ZayCXDsA0dEREQDBfvA5QSDQQCAw+EocUmIiIiIelcot5RNgGtvbwcAVFRUlLgkRERERL0rlFvKJsApSdblcpW4JERERES9K5RbyibARaNRALyIgYiIiPq/QrmFAY6IiIion2GAy1FWBG+lRURERP1dodxSNgGura0NbrcbGk3ZfGQiIiIaoArllrJJM7t27cKgQYNKXQwiIiKiggrllrIJcG1tbfB6vaUuBhEREVFBhXJL2QS49vZ2jgFHREREA0Kh3FI2AS4QCHAMOCIiIhoQCuWWsghw2WwWnZ2d8Hg8pS4KERERUa+KyS1lEeBaWlqQTqd5EQMRERH1e8XklrIIcH6/HwDvg0pERET9XzG5pawCnNPpLHFJiIiIiHpXTG4piwDX2dkJgDVwRERE1P8Vk1vKIsCFw2EAgNVqLXFJiIiIiHpXTG4piwDHG9kTERHRQFFMbimLAKe0Jbvd7hKXhIiIiKh3xeSWsgpwDoejxCUhIiIi6l0xuUXXV4VRfPDBB3j55ZdRUVGBSy65pKgrQ1evXo233noL8XgcEydOxLx586DVaoteZigUgtVqhUZTFnmViIiIBrBickufJpprrrkGxx9/PBobG/HEE09g+PDh+OKLL3p9zX/+539ixowZWLt2LXbt2oXLL78cM2bMQDqdLnq5wWCQtW9EREQ0IBSTW/oswH3++edYunQpXnjhBdx///147733MGXKFPzHf/zHXl8TDAZxyy234He/+x2efPJJLFu2DCtXrsQHH3yA1157rehlh8Nh2Gy2A/ExiIiIiA6qYnJLnzWhvvbaa6irq8OsWbMAABqNBhdddBEuvPBCxGIxmM3mbq/JZDJIJpMYNWqUOm/kyJEA9lyh0dWGDRuwceNGaDQaGI1GuFwuHHHEEUgmkzAYDAfpkxEREREdOMXklj4LcGvWrMH48eMhSZI6b8KECUilUvj8888xderUbq9xu9244IIL8L//+7+oq6uD0+nEH//4R4waNQqzZ8/u9vwnn3wSS5YsyZsXDAaRSqWg1+sP+GciIiIiOtCKyS19FuB8Ph8qKyvz5nk8HgB7RhzuyS233IK5c+fiyCOPBAB4vV4899xzPVYtZjKZbvMMBgNr4IiIiGjA6Fc1cHq9HvF4PG9eLBZTH+tJLBbDjBkzMGHCBOzcuRN2ux333HMPTjjhBKxevRqTJ0/Oe/64ceMwb948ZDIZJBIJ+Hw+6PV61sARERHRgNGvauBGjRqFNWvW5M1raWkBAIwePbrH16xcuRKbN2/Gv/71LwwaNAgAcP311+OBBx7Agw8+iKVLl+Y9f9GiRVi0aFG398lms/s07AgRERFRqRSTW/rsKtRjjjkGa9euzWsufeONN1BXV4chQ4b0+JpUKgUgv2lUCIF0Or1Pw4gQERER/ZD0WYCbM2cOampqcNlll2Hnzp149dVX8ec//xlXXnmlemHDW2+9hUGDBmHjxo0AgFmzZsHlcuGnP/0pNmzYgF27duHXv/41tmzZgnPOOafoZUuShGw2e1A+FxEREdGBVExu6bMAZ7Va8frrryMajWLIkCFYtGgRrrnmGtx4443qc7Rabd7Iw1arFW+88QZisRgOP/xwNDQ04JlnnsHf/vY3zJgxo+hl63Q61tgRERHRgFBMbpGEEKKPyqNKpVLQ6XR5Q4oUIoTY775ss2fPRnt7Oz766KN9fi0RERFRXyomt/T5vVCBvV912htJkvb7QgRlKBEiIiKi/q6Y3FIWd3e32WwIh8OlLgYRERFRQcXklrIIcA6HA6FQqNTFICIiIiqomNxSFgHO6XTC7/ejBN39iIiIiPZJMbmlLAJcVVUVUqkUgsFgqYtCRERE1KticktZBDjlHqxtbW0lLgkRERFR74rJLWUR4KqqqgAwwBEREVH/V0xuKYsAV1tbCwBobGwscUmIiIiIeldMbimLAKck2a73YSUiIiLqj4rJLWUR4CwWCwAgEomUuCREREREvSsmt5RFgLNarQAY4IiIiKj/Kya3lEWAMxgMMBqNCAQCpS4KERERUa+KyS1lEeAkSYLT6WSAIyIion6vmNxSFgEOAMxmM2KxWKmLQURERFRQodxSNgHO4/Ggo6Oj1MUgIiIiKqhQbimbAFdRUQGfz1fqYhAREREVVCi3lE2As1qtvAqViIiIBoRCuaVsApzT6YTf7y91MYiIiIgKKpRbyirABYPBUheDiIiIqKBCuaVsApzFYkE0Gi11MYiIiIgKKpRbyirAJZNJZDKZUheFiIiIqFeFckvZBDi32w0AHEqEiIiI+r1CuaVsApzH4wEAXshARERE/V6h3FI2Ac5sNgMA78ZARERE/V6h3FI2Ac5mswEAwuFwiUtCRERE1LtCuaVsAlxFRQUAoK2trcQlISIiIupdodxSNgGuqqoKANDe3l7ikhARERH1rlBuKZsAxyZUIiIiGijYhJpjMpkAAPF4vMQlISIiIupdodxSNgHObDZDr9cjEAiUuihEREREvSqUW8omwEmSBLvdzvuhEhERUb9XKLeUTYAD5OpINqESERHRQNBbbmGAIyIiIuqHGOByGOCIiIhooGCAy9Hr9UilUqUunlz5EwAAIABJREFUBhEREVFBveUWBjgiIiKifogBLocBjoiIiAYKBrgcjUaDbDZb6mIQERERFdRbbimrACdJEoQQpS4GERERUUG95ZayCnAajYYBjoiIiAaE3nJLWQU4IiIioh+CsgpwrH0jIiKigaK33FJWAS6bzUKjKauPTERERANUb7mlrNIMAxwRERENFAxwOalUCnq9vtTFICIiIiqot9zCAEdERETUDzHA5cTjcZhMplIXg4iIiKig3nJLWQW4cDgMm81W6mIQERERFdRbbimrABePx2E2m0tdDCIiIqKCesstZRXgotEoLBZLqYtBREREVFBvuUXXx2VBc3Mz1q5di6FDh2LChAm9PjcSiaC5ubnHx2pra/cpjKVSKcRiMTgcjn0qLxEREVFfK5Rb+jTA3Xrrrfj1r3+NUaNG4ZtvvsHJJ5+Mv//973utHly1ahXOOOOMHh9bvXo1jjrqqKKXHQwGAQBOp3PfC05ERETUhwrllj5rQl2zZg2uvfZaPPLII/j888+xbt06fPDBB7j55pv3+ppTTz0V8Xg8b7riiiswfPhwHHnkkfu0/FAoBAC8iIGIiIj6vUK5pc8C3DPPPIOxY8fi7LPPBgAMHToUF154IZ599tm9vkar1cJoNKqTEAJPPPEEFi9evM93VIhEIgAAq9W6/x+CiIiIqA8Uyi191oT6/vvvY+rUqXnzpk6dij/84Q/w+/1wuVwF3+PZZ59FMBjERRdd1OPjGzZswMaNG6HRaGA0GuFyuWCxWDBy5EiEw2EAgN1u//4fhoiIiOggKpRb+izANTU1YcqUKXnzKioqAMgXNhQT4O6//36ccsopGDRoUI+PP/nkk1iyZEm3+b///e8xceJEAChqOURERESl1NnZCWDvuaXPr0LtiSRJBZ+zbds2/Otf/8LTTz+91+dkMpke5zudTvj9fgCA2+3ev0ISERER9ZFCuaXPAlx9fT3a29vz5rW3t0OSJNTU1BR8/YMPPoiqqirMmTNnr88ZN24c5s2bh0wmg0QiAZ/Ph3A4DLvdjlgsBgAcyJeIiIj6vUK5pc8C3NFHH42nnnoKQgi1xu29997DhAkTCg7tkclk8MADD+CCCy6AwWDY6/MWLVqERYsW9fjYH//4RwCsgSMiIqL+r6OjA8Dec0ufXYW6cOFCbNmyBQ8//DAAYNOmTXj44YexcOFC9TkrVqzAOeecg3g8nvfaFStWYOfOnVi8ePF+L7+zsxN6vZ4D+RIREVG/Vyi39FmAO+yww3DXXXfh6quvxvDhw3HooYfitNNOww033KA+Z+vWrXjqqaeQTqfzXnv//ffjqKOOwvjx4/d7+cFgEA6Ho6j+dkRERESlVCi3SEII0ZcF8vl8+PLLLzFo0CAMHz4877F4PI5oNAq3251XYL/fD71e/73GcFuwYAHWrVuHDRs27Pd7EBEREfWFQrmlz69CdbvdmDlzZo+PmUwmmEymbvMPxNAfnZ2dqKys/N7vQ0RERHSwFcotfdaEWmqhUIi30SIiIqIBoVBuKZsA5/P5eAUqERERDQiFckvZBDi/388AR0RERANCodxSNgEuHA6zCZWIiIgGhEK5pSwCXCKRQCKR4BhwRERE1O8Vk1vKIsA1NzcD+P/Zu+/wqKr8f+DvOzWZ9AIJ0kILRHpTEBAFKYEIiKIGBVF0FawLiqCwIl9gXRf7+uyKP0UUC4oiIkVgQQQUEIGlhU5oaaRnkky99/fHZGYTksy9aVN23q/nyZPMrZ+ZsOa959xzDhAXF+flSoiIiIjcU5JbAiLAOZej4DQiRERE5OuU5JaACHDFxcUAwC5UIiIi8nlKcktABLiSkhIADHBERETk+5TkloAIcAUFBQAaZ0UHIiIioqakJLcERIArLCwEwABHREREvk9JbgmIAGcymQCgxnVWiYiIiHyJktzCAEdERETkQxjgKpSWlkKv10Oj0Xi7FCIiIiK3lOSWgAhwRqMRISEh3i6DiIiISJaS3BIQAa68vBzBwcHeLoOIiIhIlpLcEhABzmazsfuUiIiI/IKS3BIQAc5sNkOv13u7DCIiIiJZSnJLQAQ4i8UCnU7n7TKIiIiIZCnJLQER4NiFSkRERP6CXagV2AJHRERE/oItcBWsViu0Wq23yyAiIiKSpSS3BESAE0URKlVAvFUiIiLyc0pyS8CkGgY4IiIi8hcMcBVEUfR2CURERESKyOWWgAhwarUadrvd22UQERERyVKSWwIiwGk0GthsNm+XQURERCRLSW4JiACn1WphtVq9XQYRERGRLCW5JSACHFvgiIiIyF+wBa4CW+CIiIjIX7AFrkJwcDDKy8u9XQYRERGRLCW5JSACXEhICEpLS71dBhEREZEsJbklIAKcXq+H2Wz2dhlEREREspTkloAIcAaDAWVlZZAkydulEBEREbmlJLcETICz2+0cyEBEREQ+T0luCYgAFxQUBAAwmUxeroSIiIjIPSW5JSACXEhICACgrKzMy5UQERERuacktwREgAsPDwcAFBUVebkSIiIiIveU5JaACHBxcXEAgOzsbC9XQkREROSektyiOMDl5ORg27ZtrtdXrlzBE088gUceeQQnTpxoQJlNLzo6GgBQUFDg5UqIiIiI3FOSWxQHuBUrVuCjjz5yvZ4yZQp27tyJrKwsDBs2zKdXOoiKigIA5ObmerkSIiIiIveU5BbFAe7MmTPo27cvAODq1av4+eef8f3332PDhg2Ij4/Hzp07G1hu07nhhhsAOOomIiIi8mVKcotG6cVUKhXsdjsAYPv27Wjfvj06d+4MAGjfvj0yMzMbUmuT0uv1aNasGQMcERER+TwluUVxC1zPnj2xevVqHD58GP/85z+RnJzs2nflyhVXf62vat68ObtQiYiIyC/I5RbFAW7atGmIjo5G7969kZOTgxdffBEAcPnyZfzxxx/o169fw6ttQs2aNUNWVpa3yyAiIiKSJZdbFAe4kJAQbNu2DUajEWfOnEHr1q0BAJGRkTh9+jRatmzZ8GqbUIsWLTiNCBEREfkFudyi+Bk4J+fswKIoYsOGDbBYLBgzZkz9K/SQqKgoFBYWersMIiIiIllyuUVxC9xHH32EoUOHul4/++yzuOuuu/DQQw9hzJgxkCSpYZU2sYiICBQVFfl8nURERERyuUVxgDt48CDuuOMOAIDRaMTy5cuxbt06ZGRk4PTp09i3b1/jVNxEwsPDYbPZfHq+OiIiIiJAPrcoDnBlZWUICwsDAPzyyy8ICQnB6NGjER4ejv79++PMmTOKriNJEgoLC2GxWJTe2nVeUVERSkpK6nSek7P2+p5PRERE5ClyuUVxgGvbti1+++03SJKENWvWYPjw4VCr1QAcLXJarVb2GocOHcKQIUMQFRWFyMhIzJ07F1arVfa8zZs3Y8CAAYiMjER4eDgSExPr3JLmXBi2uLi4TucREREReZpcbqnTNCJbt25Fq1atsHLlSjz55JMAHC1z+/btQ9euXd2eX1xcjNGjRyMhIQEFBQXYunUrVqxYgUWLFrk9b9OmTbjzzjuRnJyMCxcuID09HfPnz4dKpbh0AEBoaCgAR9gkIiIi8mVyuUXxKNSEhAQcO3YMu3fvRteuXV2BLScnB0uWLEG3bt3cnr9+/XoUFBTg/fffR0REBAYNGoRnnnkG//jHP7Bo0SIIglDjeS+//DIeeughLFy40LVt6tSpSst2ca4rlp+fX+dziYiIiDxJLrfUaRqRG264Affeey8kSYLFYoFOp0NCQgKeeeYZ2XP37NmDvn37IiIiwrVt+PDhmD9/Pi5cuID27dtXO+fKlSs4dOgQ3nzzTWzYsAHnzp1Dr169MGTIkBoDX1paGk6ePAmVSgW9Xo/IyEgYDAZ07NgRzZo1AwDk5eXV5S0TEREReZxcbqlTP+SRI0cwadIkhIWFQa/X44YbbsDTTz+tKBSdO3cOcXFxVbY1b97cta8mhw8fBuBohZs1axa2bNmCsWPHYtiwYTCZTNWO//rrrzFx4kRMmDABycnJGDhwIHr27IknnniCz8ARERGR35DLLYpb4DIzMzFkyBB0794df//739GsWTOcP38e//rXv7Bv3z7s27ev1m5QALDZbNDr9VW2OV/XNpDBGdIMBgOOHTsGrVaLEydOoFevXvjiiy/wyCOPVDnebrfXeB2j0ejqS+YoVCIiIvJ1crlFcYD7+OOP0bdvX2zdutU1+hQAHnnkESQlJWHPnj0YPHhwrefHxMRU68d1vo6Nja3xHOf2hx56yDXK9cYbb8TAgQPx008/VQtwSUlJGD9+POx2O8xmMwoKCmA0GmGz2WAwGAA4Bl0QERER+TK53KI4wJ09e7bK1CFOsbGx6N27N86cOeM2wN188834+9//DlEUXSNIjxw5Ar1ej549e9Z4Tr9+/aBWq6u17AmCUOPMxKmpqUhNTa3xWpIkQRCEGrteiYiIiHyJTqdzm1sUPwPXpUsX/PTTT7DZbFW2Z2Vl4Y8//kCXLl3cnj969GhkZ2dj/fr1ABxdqh9//DGGDRvm6kq9ePEi3nrrLeTm5gJwNB/efvvt+PLLL13do+fOncPevXuRnJystHQAjtAXGhrKaUSIiIjI58nlFsUtcA8//DBef/11DBw4EKmpqYiJicGFCxfw0UcfISkpCQMGDHB7fteuXTF//nxMmjQJEyZMwKlTp3Dt2jVs377ddcypU6cwa9YsjBgxwtV9+t577+GOO+5Av3790LlzZ2zZsgUDBw7E5MmTlZbuEhkZyQXtiYiIyC+4yy2CVIfV3U+dOoW//vWv2Lx5M/Lz85GQkICJEydi3rx5VaYHcefIkSPYvHkzYmNjcf/997v6eAHg2rVr2LdvH2699VbX6AvAMZhh9erVyMjIwE033YTbb7+9zhP5AkDnzp3Rq1cvrF69us7nEhEREXmSu9xSpwBXm7S0NCQkJCA4OLihl2pSPXr0QPv27fH99997uxQiIiIit9zllro3Y9Wgb9++OHHiRGNcqknp9XqYzWZvl0FEREQky11uaZQA5y80Gk21QRhEREREvshdbgmoAKdWq2ud7JeIiIjIl7jLLQEX4ERR9HYZRERERLLc5Ra304hIkuRaj9QdhiIiIiIiz5ENcH369PFULU3ObrdDp9N5uwwiIiIiWe5yi9sAJwgCDh06pOgmiYmJda/MwyqviUpERETky9zlFtmVGDIzM6ssd+XPrFYrtFqtt8sgIiIikuUut7gdxCBJEp544gnExsZi0qRJ+Pzzz1FQUNAkRXqCxWJhFyoRERH5BXe5xW2AU6lUSE9Px65du9C1a1csW7YMzZs3x/Dhw/Huu+/i4sWLTVJwUzGbzQgKCvJ2GURERESy3OUW2WlEBEFAr169sHDhQhw6dAhnz57FhAkT8MMPP6Bjx47o1asXXnnlFRw8eBCNsCpXk7JYLOxCJSIiIr/gLrfUeR64tm3b4umnn8a2bdtw7do1zJkzBydPnsRtt92GpUuXNrjYpsRn4IiIiMhfuMstsoMYnDIzMxEbG1vlQpGRkZg8eTImT54Ms9mMvLy8hlfbhEpLSxESEuLtMoiIiIhkucstilvgVq1ahTZt2uDll19Genp6tf16vR433HBDvYtsaqIoori4GJGRkd4uhYiIiMgtudyiOMA9/vjj+Mtf/oINGzagffv2SE5Oxtq1a/1mcfjCwkJIkoTo6Ghvl0JERETkllxuURzgwsPDMWPGDBw6dAj79u1Dq1atMGXKFLRp0wYLFizw+RGphYWFAMAWOCIiIvJ5crmlzoMYBEFA//798eGHH2LLli1QqVRYvHgx2rVrh0mTJuHChQsNq7iJOOevi4qK8nIlRERERO7J5ZY6B7iysjKsXLkSt9xyC4YMGYLevXtjw4YN2LNnD8rKynDbbbfBbrc3rOomUFRUBACIiIjwciVERERE7snlFsWjUC9cuIA333wTn332GfR6PR599FF8+eWXaNu2reuY77//HqGhocjOzva5AQ2lpaUAwFGoRERE5PPkcoviALdmzRocPXoUH3zwAe66664al3bQarV4/fXXERoaWs9ym47RaAQAn6yNiIiIqDK53KI4wD3zzDN44YUXZI979tlnlV7So3JzcwEAMTExXq6EiIiIyD253KL4Gbjz589j4cKF1ZbLys/Px3PPPQeLxdKAMpvetWvXAACxsbFeroSIiIjIPbncojjAffnll8jOzoYgCFW2R0dHY8uWLdizZ08Dymx6ZWVlMBgMUKnqPG6DiIiIyKPkcoviNHPp0iV06NChxn0dOnTw2elDnPLz8zkHHBEREfkFudyiOMDFxcXh+PHj1baLooi0tDSf75rMy8tDs2bNvF0GERERkSy53KI4wKWmpuKzzz7DJ598AlEUATiGuM6aNQsFBQUYOXJkw6ttQjk5OT4fMomIiIgA+dyiOMD16tULixYtwvTp0xEWFoaEhARERkbik08+weeff46goKBGKbipXLt2Dc2bN/d2GURERESy5HKL4mlEAOCll17CI488gh9//BG5ubno0KEDxo4dC4PB0OBCm1pJSQnCwsK8XQYRERGRLLncUqcABwDx8fF49NFHG1SUNxiNRgY4IiIi8gtyuaVOAc5qteKXX37B4cOHYbVaq+ybNm0a4uPj61dlE7NarSgrK+MoVCIiIvJ5SnKL4gBXUlKCIUOGID09HSqVCuHh4TAajcjLy0PXrl0xfvx4nw1wBQUFAICoqCgvV0JERETknpLcUqeJfG02Gy5duoSUlBQsXboUOTk5eOeddxAREYFOnTo1vOImUlhYCABsgSMiIiKfpyS3KA5we/fuxX333Yfw8HCoVCqYTCaoVCo888wzsNls2LFjR8MrbiLFxcUAgPDwcC9XQkREROSektyiOMDp9XpotVoAjoEM6enprn0RERHIzMysZ5lNjy1wRERE5C+U5BbFz8D17NkT27ZtAwAMHz4cDz74IDp37ozs7Gxs374dy5Yta2C5TYcBjoiIiPxFowa4u+++G6IoQpIk3HHHHXjsscfw1FNPQa/XY9myZejRo0fDK24izqZITiNCREREvk5JblEc4Ox2O8aNGwdBEAAAixcvxuLFixtYomcUFRUBcHT1EhEREfkyJblF8TNw8+bNw/vvv9/wqryAgxiIiIjIXzTqIIaOHTvi2rVrDa/KC0pKShAcHAy1Wu3tUoiIiIjcUpJbFAe4GTNm4I8//sCqVatgMpkapUBPKSkpYesbERER+QUluUVxgPvss89w6tQpTJkyBcHBwQgPD0dERITr69ChQw0uuKlwIXsiIiLyF0pyi+JBDMnJyWjVqlWt+xMSEhQX5mnl5eUICgrydhlEREREspTkFsUBLjExEYmJiQ0uyhssFgt0Op23yyAiIiKSpSS3KA5whYWFyM/Pr3V/y5YtodfrlVfnQQxwRERE5C8aNcB9+OGHmDNnTq37Dxw4gL59+yqvzoNsNhs0GsVvlYiIiMhrlOQWxanmT3/6EyZNmuR6LUkSsrOz8eabbyI2NhbdunWrf6VNTJIkqFSKx2sQEREReY2S3KI4wDlHm1bWrl07fPHFF0hMTMSMGTPQvXv3+lVKRERERIo1uFlKo9GgTZs2OHz4cGPU02QkSfJ2CURERESKyOWWBgU4s9mMdevW4bfffkPHjh0bcqkmpVarYbfbvV0GERERkSwluUVxgHvjjTeg1WqrfAUFBWHixImYOXMmBgwY0OCCm4pOp4PFYvF2GURERESylOQWxc/ATZw4sdpABYPBgE6dOiE+Pl7RNfLy8vDaa69hw4YNiI2NxfPPP49x48a5PWf27Nk4f/58lW3Dhw/HU089pbR0aLVaWK1WxccTEREReYuS3KI4wLVr1w7t2rWrdzE2mw0jRoyAIAhYtmwZjh8/jkmTJuHDDz/E1KlTaz1vx44daN68OYYMGeLaVtdVH/R6Pcxmc31LJyIiIvIYJblFcYA7ePAgPvnkE7zzzjsQBMG1PT8/H08++SQ++ugjGAyGWs/fvHkzDh06hPT0dLRt2xZjxozB1atXsXTpUrcBDnC0uL3wwgtKS60mKCgIJpOp3ucTEREReYqS3KL4GbhvvvkGgiBUCW8AEB0djZMnT2LXrl1uz9+1axd69OiBtm3burbdeeedOHXqFHJyctyeW1xcjN9//x3p6eluj0tLS8PatWuxbt06bN68GXv37oXZbIZWq4XNZnP/BomIiIh8gJLcojjAZWRk1LqYfcuWLXH16lW35x87dgytW7euss35+tixY27PXbx4MYYMGYJ27dqhT58+OHToUI3Hff3115g4cSImTJiA5ORkDBw4EOfOnUNQUBDKy8vd3oOIiIjIFyjJLYoDXJs2bfDHH39U2261WnH06FHccMMNbs8vLy9HaGholW1hYWGufbV59913UVJSgvLycqSlpUGn02HcuHE1JtOahtyWlpYiNDQURqPRbX1EREREvkBJblH8DNwDDzyArl27olevXpgxYwbCw8Nx+fJlzJs3DzabDXfccYdsMUVFRVW2FRYWAvhvkKvJ4MGDXT936dIFH374IXr06IEdO3ZgxIgRVY5NSkrC+PHjYbfbYTabUVBQALvdjrCwMJjNZlitVmi1WqVvmYiIiMjjlOQWxQGuS5cuWL58OZ577jnMmzfPNUKibdu2+O6772QXXe3Tpw+++OKLKtvOnTsHQRDQs2dPpWW4Wvry8vKq7UtNTUVqamq17Xv37gUAGI1GREVFKb4XERERkac5G7bc5ZY6rcQwffp0ZGdnY/369fjXv/6FXbt24fz587j55ptlz7399ttx5swZHDlyxLVtzZo16NOnj2uN1cLCQuzbtw9lZWUAUGM36erVqyEIQp0mDnZ23bIblYiIiHydktyiuAXOyWAwICUlpc7F3HrrrUhOTsaYMWPw/PPP4/jx41i1ahU2bNjgOmb//v0YNWoUjh49im7duuG3337D7NmzMXz4cISHh+Pw4cP45ptv8MQTT9RpLjhnki0pKalz3URERESepCS31GkakUGDBlVbXDU/Px8xMTHIzMx0e74gCFi3bh1eeeUV/Pzzz5AkCYcPH8aoUaNcx7Rr1w7z5s1DbGwsAMczbRMmTMCFCxewa9cuREZG4scff8T777+vtGwA//0giouL63QeERER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rkJISAgAoLS01MuVEBEREbmnJLcERIALDw8HwFGoRERE5PuU5JaACHBsgSMiIiJ/wRa4Cs7huAxwRERE5OuU5JaACHCRkZFQqVTIycnxdilEREREbinJLQER4DQaDWJjYxngiIiIyOcpyS0BEeAAR3MkBzEQERGRP5DLLQET4EJCQvgMHBEREfkFudwSUAGurKzM22UQERERyZLLLQET4MLCwtiFSkRERH5BLrcETICLiIhAUVGRt8sgIiIikiWXWwImwIWHhzPAERERkV+Qyy0BE+CioqJQWFjo7TKIiIiIZMnlloAJcKGhoSgrK4Moit4uhYiIiMgtudwSMAEuKCgIAGAymbxcCREREZF7crklYAIc10MlIiIifyGXWwImwMXExAAArl275uVKiIiIiNyTyy0BF+AKCgq8XAkRERGRe3K5JWACnLMp0mg0erkSIiIiIvfkckvABLiwsDAA4GoMRERE5PPkckvABLjo6GgAQG5urpcrISIiInJPLrcETIBr1qwZAA5iICIiIt8nl1sCJsDpdDqEhoYiPz/f26UQERERuSWXWwImwAGOBwI5iIGIiIj8gbvcovFwLbh48SK2bduG2NhYjB07FhqN+xKysrJw4MABXL16FVFRURgwYADatGlTr3vrdDpYLJZ6nUtERETkSe5yi0cD3Ntvv425c+di0KBBOHfuHF588UX89NNPaNu2ba3nJCYmIioqCq1bt0ZmZiYuXbqERYsWYd68eXW+f1BQEJfSIiIiIr/gLrd4rAv1zJkzmD17NpYvX45///vfOHHiBKKiojBr1iy356WlpeHixYvYvXs3zp49i1deeQV/+ctfkJmZWecaGOCIiIjIX7jLLR5rgdu0aROioqIwefJkAIDBYMBjjz2Gp556ClarFVqttsbzWrZs6fpZEASMHj0aCxYsQE5ODlq0aFHl2LS0NJw8eRIqlQp6vR6RkZEwGAxo3bo1oqKi2IVKREREfsMnulD37t2Lnj17VnnmrV+/figvL8eRI0fQt2/fWs+1WCwwm824evUqFi9ejJtuugldu3atdtzXX3+NhQsXVtuu0+lgNpuh0Whgs9ka5f0QERERNSV3ucVjXag5OTmuSemcnK+zs7Pdnvu3v/0N4eHhSEpKQlpaGr788ssaBz/Y7fYaz3duV6vVtR5DRERE5Evc5RaPBTiVSlWtCGeq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vPvuu12SNui9i1MUFBQUFBSgY90CioADen9DP2vWLH76058SDod566235O0ul4vRo0dz2223ceedd7Jnzx5eeumlLnMj8rOf/Yznn3+eCy64gBtuuIH169fz1FNP8eKLL6JSqVi4cCHPPfccF154IS6Xi7Vr11JRUcGf//xnACZMmMCVV17JkCFDqKur4x//+AczZ87skrRB7/9fFRQUFBT6NoqAO0AsFkOv17fZ3tuH2q644grKy8txuVwMGTJE3q5Sqfjwww/5wx/+wIsvvkhJSQkfffQRL730EkOHpoMmGwwG7rrrriOKrOB0OrnrrrvkOWoFBQWUl5fzt7/9jddee428vDyWLFkiL2oYOXIkY8aMYcGCBQQCAfr378/ixYspKysDYObMmSxfvpxPPvkEl8vFI488wo033thl+aIIOAUFBQWF3kxHugVAJfpQC6fX65kzZw6PP/54q+179+4lMzOzjUNchd5NMplk+/btDBvWflgXBQUFBQWFE5mOdAv0IQtcIpEgHo+flEOoXUVjYyPBYLDdfWazuVUEhd6A8r8qKCgoKPRWOtMt0IcEnCRM2pv/1duHULuKxx57jPnz57e777LLLuN///d/j3OKjg1FwCkoKCgo9FY60y3QhwRcU1MTAFlZWW32KQIuzRNPPMETTzzR08lQUFBQUFDo83SmW6APhdKSMqK9YUBFwCkoKCgoKCicSHSmW6APCTjJwWxGRkabfcpQm4KCgoKCgsKJRGe6BfqQgJNCR0kxQlui0WiUmJknIZKjYAUFBQUFhd5GZ7oF+tAcOI/HA7Q/lmyxWKirq6OpqYmsrKxe2einUilSqRTJZJJEIkEikSCZTCKEIJlMyvukbYe+UqlUq/fOUKlUbV6QFsIajQaVSoVGo0GtVqNWq+VtarVafpf2tzynq/M9GAx2WVxVBQUFBQWF40lnugX6kIALBALAwRidLdFqtQwcOJDq6moaGhpIJpPtCg1pW3sCRNreUtS0FCxAG4EiiSc4KMAkESV9lsRXy8+pVEoWaYlEQt4vpUWr1aLValulWa/XtxFLh6a1ZfolpM9SOlu+t3wBskCU0tgyrVIapftrKSql41QqFVqttlW+HioEW763zN9DxWQwGKS2tpaCgoIuK0MKCgoKCgrHi850C/QhARcOhwE6tMjo9XoGDBggD6VqNJo2AqPlS9oe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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_training(history)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.utils import class_weight\n",
"\n",
"list_classes = ['any','epidural','intraparenchymal','intraventricular', 'subarachnoid','subdural']\n",
"y = l[list_classes].values\n",
"sample_weights = class_weight.compute_sample_weight('balanced', y)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(257598,)"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sample_weights.shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}