Showing preview only (8,797K chars total). Download the full file or copy to clipboard to get everything.
Repository: rajshah4/image_keras
Branch: master
Commit: f093d22b5040
Files: 18
Total size: 8.4 MB
Directory structure:
gitextract_l9oltb41/
├── .gitignore
├── .ipynb_checkpoints/
│ ├── notebook-checkpoint.ipynb
│ └── notebook_extras-checkpoint.ipynb
├── README.md
├── R_ODSC2018.R
├── Rnotebook.Rmd
├── Rnotebook.nb.html
├── models/
│ ├── augmented_30_epochs.h5
│ ├── basic_cnn_30_epochs.h5
│ └── bottleneck_30_epochs.h5
├── models_trained/
│ ├── augmented_30_epochs.h5
│ ├── basic_cnn_30_epochs.h5
│ └── bottleneck_30_epochs.h5
├── notebook.ipynb
├── notebook_extras.ipynb
├── python/
│ └── notebook.py
├── slides-resources/
│ └── style.css
└── tmp/
└── dir_for_quiver.txt
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.npy
vgg16_weights.h5
finetuning_20epochs_vgg.h5
================================================
FILE: .ipynb_checkpoints/notebook-checkpoint.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Building an image classification model using very little data \n",
"\n",
"Based on the tutorial by Francois Chollet @fchollet https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html and the workbook by Guillaume Dominici https://github.com/gggdominici/keras-workshop\n",
"\n",
"This tutorial presents several ways to build an image classifier using keras from just a few hundred or thousand pictures from each class you want to be able to recognize.\n",
"\n",
"We will go over the following options: \n",
"\n",
"- training a small network from scratch (as a baseline) \n",
"- using the bottleneck features of a pre-trained network \n",
"- fine-tuning the top layers of a pre-trained network \n",
" \n",
"This will lead us to cover the following Keras features: \n",
" \n",
"- fit_generator for training Keras a model using Python data generators \n",
"- ImageDataGenerator for real-time data augmentation \n",
"- layer freezing and model fine-tuning \n",
"- ...and more. \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Data can be downloaded at:\n",
"https://www.kaggle.com/c/dogs-vs-cats/data \n",
"All you need is the train set \n",
"The recommended folder structure is: "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Folder structure"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```python\n",
"data/\n",
" train/\n",
" dogs/ ### 1024 pictures\n",
" dog001.jpg\n",
" dog002.jpg\n",
" ...\n",
" cats/ ### 1024 pictures\n",
" cat001.jpg\n",
" cat002.jpg\n",
" ...\n",
" validation/\n",
" dogs/ ### 416 pictures\n",
" dog001.jpg\n",
" dog002.jpg\n",
" ...\n",
" cats/ ### 416 pictures\n",
" cat001.jpg\n",
" cat002.jpg\n",
" ...\n",
"```\n",
"Note : for this example we only consider 2x1000 training images and 2x400 testing images among the 2x12500 available."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The github repo includes about 1500 images for this model. The original Kaggle dataset is much larger. The purpose of this demo is to show how you can build models with smaller size datasets. You should be able to improve this model by using more data."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Data loading"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied (use --upgrade to upgrade): pillow in /home/ladmin/anaconda3/lib/python3.5/site-packages\n",
"\u001b[33mYou are using pip version 8.1.2, however version 9.0.1 is available.\n",
"You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n",
"Using TensorFlow backend.\n",
"I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.so.8.0 locally\n",
"I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.so.5 locally\n",
"I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.so.8.0 locally\n",
"I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.so.1 locally\n",
"I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.so.8.0 locally\n"
]
}
],
"source": [
"##This notebook is built around using tensorflow as the backend for keras\n",
"!pip install pillow\n",
"!KERAS_BACKEND=tensorflow python -c \"from keras import backend\""
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"##Updated to Keras 2.0\n",
"import os\n",
"import numpy as np\n",
"from keras.models import Sequential\n",
"from keras.layers import Activation, Dropout, Flatten, Dense\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"from keras.layers import Convolution2D, MaxPooling2D, ZeroPadding2D\n",
"from keras import optimizers\n",
"from keras import applications\n",
"from keras.models import Model"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# dimensions of our images.\n",
"img_width, img_height = 150, 150\n",
"\n",
"train_data_dir = 'data/train'\n",
"validation_data_dir = 'data/validation'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Imports"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 2048 images belonging to 2 classes.\n",
"Found 832 images belonging to 2 classes.\n"
]
}
],
"source": [
"##preprocessing\n",
"# used to rescale the pixel values from [0, 255] to [0, 1] interval\n",
"datagen = ImageDataGenerator(rescale=1./255)\n",
"batch_size = 32\n",
"\n",
"# automagically retrieve images and their classes for train and validation sets\n",
"train_generator = datagen.flow_from_directory(\n",
" train_data_dir,\n",
" target_size=(img_width, img_height),\n",
" batch_size=batch_size,\n",
" class_mode='binary')\n",
"\n",
"validation_generator = datagen.flow_from_directory(\n",
" validation_data_dir,\n",
" target_size=(img_width, img_height),\n",
" batch_size=batch_size,\n",
" class_mode='binary')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Small Conv Net"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Model architecture definition"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# a simple stack of 3 convolution layers with a ReLU activation and followed by max-pooling layers.\n",
"model = Sequential()\n",
"model.add(Convolution2D(32, (3, 3), input_shape=(img_width, img_height,3)))\n",
"model.add(Activation('relu'))\n",
"model.add(MaxPooling2D(pool_size=(2, 2)))\n",
"\n",
"model.add(Convolution2D(32, (3, 3)))\n",
"model.add(Activation('relu'))\n",
"model.add(MaxPooling2D(pool_size=(2, 2)))\n",
"\n",
"model.add(Convolution2D(64, (3, 3)))\n",
"model.add(Activation('relu'))\n",
"model.add(MaxPooling2D(pool_size=(2, 2)))\n",
"\n",
"model.add(Flatten())\n",
"model.add(Dense(64))\n",
"model.add(Activation('relu'))\n",
"model.add(Dropout(0.5))\n",
"model.add(Dense(1))\n",
"model.add(Activation('sigmoid'))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model.compile(loss='binary_crossentropy',\n",
" optimizer='rmsprop',\n",
" metrics=['accuracy'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Training"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"epochs = 30\n",
"train_samples = 2048\n",
"validation_samples = 832"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/30\n",
"64/64 [==============================] - 61s - loss: 0.7004 - acc: 0.5205 - val_loss: 0.6861 - val_acc: 0.5288\n",
"Epoch 2/30\n",
"64/64 [==============================] - 3s - loss: 0.6668 - acc: 0.6177 - val_loss: 0.6322 - val_acc: 0.6430\n",
"Epoch 3/30\n",
"64/64 [==============================] - 3s - loss: 0.6260 - acc: 0.6621 - val_loss: 0.6390 - val_acc: 0.6454\n",
"Epoch 4/30\n",
"64/64 [==============================] - 3s - loss: 0.5847 - acc: 0.7075 - val_loss: 0.5782 - val_acc: 0.6731\n",
"Epoch 5/30\n",
"64/64 [==============================] - 3s - loss: 0.5446 - acc: 0.7271 - val_loss: 0.6108 - val_acc: 0.6454\n",
"Epoch 6/30\n",
"64/64 [==============================] - 3s - loss: 0.5141 - acc: 0.7500 - val_loss: 0.5884 - val_acc: 0.6755\n",
"Epoch 7/30\n",
"64/64 [==============================] - 3s - loss: 0.4930 - acc: 0.7764 - val_loss: 0.5914 - val_acc: 0.6959\n",
"Epoch 8/30\n",
"64/64 [==============================] - 3s - loss: 0.4424 - acc: 0.7822 - val_loss: 0.6365 - val_acc: 0.7091\n",
"Epoch 9/30\n",
"64/64 [==============================] - 3s - loss: 0.4067 - acc: 0.8218 - val_loss: 0.5611 - val_acc: 0.7248\n",
"Epoch 10/30\n",
"64/64 [==============================] - 3s - loss: 0.3593 - acc: 0.8330 - val_loss: 0.5750 - val_acc: 0.7115\n",
"Epoch 11/30\n",
"64/64 [==============================] - 3s - loss: 0.3103 - acc: 0.8657 - val_loss: 0.6317 - val_acc: 0.6959\n",
"Epoch 12/30\n",
"64/64 [==============================] - 3s - loss: 0.2998 - acc: 0.8721 - val_loss: 0.6315 - val_acc: 0.7488\n",
"Epoch 13/30\n",
"64/64 [==============================] - 3s - loss: 0.2365 - acc: 0.8975 - val_loss: 0.6387 - val_acc: 0.7272\n",
"Epoch 14/30\n",
"64/64 [==============================] - 3s - loss: 0.2114 - acc: 0.9160 - val_loss: 0.8432 - val_acc: 0.7163\n",
"Epoch 15/30\n",
"64/64 [==============================] - 3s - loss: 0.1830 - acc: 0.9297 - val_loss: 0.7151 - val_acc: 0.7175\n",
"Epoch 16/30\n",
"64/64 [==============================] - 3s - loss: 0.1521 - acc: 0.9453 - val_loss: 0.9396 - val_acc: 0.7260\n",
"Epoch 17/30\n",
"64/64 [==============================] - 3s - loss: 0.1283 - acc: 0.9478 - val_loss: 1.0425 - val_acc: 0.7236\n",
"Epoch 18/30\n",
"64/64 [==============================] - 3s - loss: 0.1131 - acc: 0.9541 - val_loss: 1.0674 - val_acc: 0.7127\n",
"Epoch 19/30\n",
"64/64 [==============================] - 3s - loss: 0.1060 - acc: 0.9629 - val_loss: 1.0976 - val_acc: 0.7368\n",
"Epoch 20/30\n",
"64/64 [==============================] - 3s - loss: 0.0976 - acc: 0.9609 - val_loss: 1.1950 - val_acc: 0.7356\n",
"Epoch 21/30\n",
"64/64 [==============================] - 3s - loss: 0.0916 - acc: 0.9683 - val_loss: 1.2085 - val_acc: 0.7284\n",
"Epoch 22/30\n",
"64/64 [==============================] - 3s - loss: 0.0713 - acc: 0.9727 - val_loss: 1.7575 - val_acc: 0.7151\n",
"Epoch 23/30\n",
"64/64 [==============================] - 3s - loss: 0.0798 - acc: 0.9736 - val_loss: 1.4385 - val_acc: 0.7368\n",
"Epoch 24/30\n",
"64/64 [==============================] - 3s - loss: 0.0645 - acc: 0.9785 - val_loss: 1.5054 - val_acc: 0.7200\n",
"Epoch 25/30\n",
"64/64 [==============================] - 3s - loss: 0.0740 - acc: 0.9756 - val_loss: 1.7323 - val_acc: 0.6923\n",
"Epoch 26/30\n",
"64/64 [==============================] - 3s - loss: 0.0586 - acc: 0.9795 - val_loss: 1.6631 - val_acc: 0.7236\n",
"Epoch 27/30\n",
"64/64 [==============================] - 3s - loss: 0.0499 - acc: 0.9785 - val_loss: 2.0203 - val_acc: 0.7019\n",
"Epoch 28/30\n",
"64/64 [==============================] - 3s - loss: 0.0662 - acc: 0.9771 - val_loss: 1.8689 - val_acc: 0.7212\n",
"Epoch 29/30\n",
"64/64 [==============================] - 3s - loss: 0.0857 - acc: 0.9756 - val_loss: 1.9077 - val_acc: 0.6935\n",
"Epoch 30/30\n",
"64/64 [==============================] - 3s - loss: 0.0515 - acc: 0.9819 - val_loss: 1.6681 - val_acc: 0.7212\n"
]
},
{
"data": {
"text/plain": [
"<keras.callbacks.History at 0x7ff8b4010080>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.fit_generator(\n",
" train_generator,\n",
" steps_per_epoch=train_samples // batch_size,\n",
" epochs=epochs,\n",
" validation_data=validation_generator,\n",
" validation_steps=validation_samples// batch_size,)\n",
"#About 60 seconds an epoch when using CPU"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"model.save_weights('models/basic_cnn_30_epochs.h5')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#model.save_weights('models_trained/basic_cnn_30_epochs.h5')\n",
"#model.load_weights('models_trained/basic_cnn_30_epochs.h5')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If your model successfully runs at one epoch, go back and it for 30 epochs by changing nb_epoch above. I was able to get to an val_acc of 0.71 at 30 epochs.\n",
"A copy of a pretrained network is available in the pretrained folder."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Evaluating on validation set"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Computing loss and accuracy :"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1.6358572365178798, 0.72472205528846156]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.evaluate_generator(validation_generator, validation_samples)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Evolution of accuracy on training (blue) and validation (green) sets for 1 to 32 epochs :"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**After ~10 epochs the neural network reach ~70% accuracy. We can witness overfitting, no progress is made over validation set in the next epochs**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data augmentation for improving the model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"By applying random transformation to our train set, we artificially enhance our dataset with new unseen images. \n",
"This will hopefully reduce overfitting and allows better generalization capability for our network."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Example of data augmentation applied to a picture:\n",
""
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 2048 images belonging to 2 classes.\n"
]
}
],
"source": [
"train_datagen_augmented = ImageDataGenerator(\n",
" rescale=1./255, # normalize pixel values to [0,1]\n",
" shear_range=0.2, # randomly applies shearing transformation\n",
" zoom_range=0.2, # randomly applies shearing transformation\n",
" horizontal_flip=True) # randomly flip the images\n",
"\n",
"# same code as before\n",
"train_generator_augmented = train_datagen_augmented.flow_from_directory(\n",
" train_data_dir,\n",
" target_size=(img_width, img_height),\n",
" batch_size=batch_size,\n",
" class_mode='binary')"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/30\n",
"64/64 [==============================] - 8s - loss: 0.6181 - acc: 0.7075 - val_loss: 0.5214 - val_acc: 0.7296\n",
"Epoch 2/30\n",
"64/64 [==============================] - 7s - loss: 0.5563 - acc: 0.7510 - val_loss: 0.5814 - val_acc: 0.7224\n",
"Epoch 3/30\n",
"64/64 [==============================] - 7s - loss: 0.4982 - acc: 0.7700 - val_loss: 0.6890 - val_acc: 0.7188\n",
"Epoch 4/30\n",
"64/64 [==============================] - 7s - loss: 0.5247 - acc: 0.7583 - val_loss: 0.5678 - val_acc: 0.7115\n",
"Epoch 5/30\n",
"64/64 [==============================] - 7s - loss: 0.4814 - acc: 0.7871 - val_loss: 0.5177 - val_acc: 0.7776\n",
"Epoch 6/30\n",
"64/64 [==============================] - 7s - loss: 0.4932 - acc: 0.7900 - val_loss: 0.5102 - val_acc: 0.7873\n",
"Epoch 7/30\n",
"64/64 [==============================] - 7s - loss: 0.4770 - acc: 0.8013 - val_loss: 0.4926 - val_acc: 0.7668\n",
"Epoch 8/30\n",
"64/64 [==============================] - 7s - loss: 0.4402 - acc: 0.8008 - val_loss: 0.5014 - val_acc: 0.7728\n",
"Epoch 9/30\n",
"64/64 [==============================] - 7s - loss: 0.4495 - acc: 0.7998 - val_loss: 0.5459 - val_acc: 0.7272\n",
"Epoch 10/30\n",
"64/64 [==============================] - 7s - loss: 0.4359 - acc: 0.7974 - val_loss: 0.5893 - val_acc: 0.7764\n",
"Epoch 11/30\n",
"64/64 [==============================] - 7s - loss: 0.4247 - acc: 0.8184 - val_loss: 0.5150 - val_acc: 0.7716\n",
"Epoch 12/30\n",
"64/64 [==============================] - 7s - loss: 0.4379 - acc: 0.8140 - val_loss: 0.4899 - val_acc: 0.7825\n",
"Epoch 13/30\n",
"64/64 [==============================] - 7s - loss: 0.4480 - acc: 0.7969 - val_loss: 0.4410 - val_acc: 0.8149\n",
"Epoch 14/30\n",
"64/64 [==============================] - 7s - loss: 0.4051 - acc: 0.8208 - val_loss: 0.8244 - val_acc: 0.7055\n",
"Epoch 15/30\n",
"64/64 [==============================] - 7s - loss: 0.4047 - acc: 0.8247 - val_loss: 0.4827 - val_acc: 0.8125\n",
"Epoch 16/30\n",
"64/64 [==============================] - 7s - loss: 0.4230 - acc: 0.8179 - val_loss: 0.4830 - val_acc: 0.8137\n",
"Epoch 17/30\n",
"64/64 [==============================] - 7s - loss: 0.4029 - acc: 0.8159 - val_loss: 0.4399 - val_acc: 0.8089\n",
"Epoch 18/30\n",
"64/64 [==============================] - 7s - loss: 0.4042 - acc: 0.8271 - val_loss: 0.4619 - val_acc: 0.7740\n",
"Epoch 19/30\n",
"64/64 [==============================] - 7s - loss: 0.4015 - acc: 0.8457 - val_loss: 0.5126 - val_acc: 0.7825\n",
"Epoch 20/30\n",
"64/64 [==============================] - 7s - loss: 0.4024 - acc: 0.8271 - val_loss: 0.4927 - val_acc: 0.7740\n",
"Epoch 21/30\n",
"64/64 [==============================] - 7s - loss: 0.3901 - acc: 0.8408 - val_loss: 0.4940 - val_acc: 0.7969\n",
"Epoch 22/30\n",
"64/64 [==============================] - 7s - loss: 0.3910 - acc: 0.8354 - val_loss: 0.5294 - val_acc: 0.7861\n",
"Epoch 23/30\n",
"64/64 [==============================] - 7s - loss: 0.3884 - acc: 0.8354 - val_loss: 0.4598 - val_acc: 0.7909\n",
"Epoch 24/30\n",
"64/64 [==============================] - 7s - loss: 0.3995 - acc: 0.8311 - val_loss: 0.4961 - val_acc: 0.7897\n",
"Epoch 25/30\n",
"64/64 [==============================] - 7s - loss: 0.3883 - acc: 0.8438 - val_loss: 0.5324 - val_acc: 0.7548\n",
"Epoch 26/30\n",
"64/64 [==============================] - 7s - loss: 0.3897 - acc: 0.8467 - val_loss: 0.4837 - val_acc: 0.7993\n",
"Epoch 27/30\n",
"64/64 [==============================] - 7s - loss: 0.3768 - acc: 0.8428 - val_loss: 0.4413 - val_acc: 0.8017\n",
"Epoch 28/30\n",
"64/64 [==============================] - 7s - loss: 0.3800 - acc: 0.8408 - val_loss: 0.5044 - val_acc: 0.7861\n",
"Epoch 29/30\n",
"64/64 [==============================] - 7s - loss: 0.3786 - acc: 0.8398 - val_loss: 0.5393 - val_acc: 0.7740\n",
"Epoch 30/30\n",
"64/64 [==============================] - 7s - loss: 0.3687 - acc: 0.8564 - val_loss: 0.5737 - val_acc: 0.7668\n"
]
},
{
"data": {
"text/plain": [
"<keras.callbacks.History at 0x7ff8b2bf0dd8>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.fit_generator(\n",
" train_generator_augmented,\n",
" steps_per_epoch=train_samples // batch_size,\n",
" epochs=epochs,\n",
" validation_data=validation_generator,\n",
" validation_steps=validation_samples // batch_size,)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"model.save_weights('models/augmented_30_epochs.h5')"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#model.load_weights('models_trained/augmented_30_epochs.h5')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Evaluating on validation set"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Computing loss and accuracy :"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[0.57709803022086048, 0.76551231971153844]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.evaluate_generator(validation_generator, validation_samples)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Evolution of accuracy on training (blue) and validation (green) sets for 1 to 100 epochs :"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Thanks to data-augmentation, the accuracy on the validation set improved to ~80%**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Using a pre-trained model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The process of training a convolutionnal neural network can be very time-consuming and require a lot of datas. \n",
"\n",
"We can go beyond the previous models in terms of performance and efficiency by using a general-purpose, pre-trained image classifier. This example uses VGG16, a model trained on the ImageNet dataset - which contains millions of images classified in 1000 categories. \n",
"\n",
"On top of it, we add a small multi-layer perceptron and we train it on our dataset."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### VGG16 + small MLP\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### VGG16 model is available in Keras"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Downloading data from https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5\n"
]
}
],
"source": [
"model_vgg = applications.VGG16(include_top=False, weights='imagenet')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Using the VGG16 model to process samples"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 2048 images belonging to 2 classes.\n",
"Found 832 images belonging to 2 classes.\n"
]
}
],
"source": [
"train_generator_bottleneck = datagen.flow_from_directory(\n",
" train_data_dir,\n",
" target_size=(img_width, img_height),\n",
" batch_size=batch_size,\n",
" class_mode=None,\n",
" shuffle=False)\n",
"\n",
"validation_generator_bottleneck = datagen.flow_from_directory(\n",
" validation_data_dir,\n",
" target_size=(img_width, img_height),\n",
" batch_size=batch_size,\n",
" class_mode=None,\n",
" shuffle=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is a long process, so we save the output of the VGG16 once and for all. "
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"bottleneck_features_train = model_vgg.predict_generator(train_generator_bottleneck, train_samples // batch_size)\n",
"np.save(open('models/bottleneck_features_train.npy', 'wb'), bottleneck_features_train)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"bottleneck_features_validation = model_vgg.predict_generator(validation_generator_bottleneck, validation_samples // batch_size)\n",
"np.save(open('models/bottleneck_features_validation.npy', 'wb'), bottleneck_features_validation)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we can load it..."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"train_data = np.load(open('models/bottleneck_features_train.npy', 'rb'))\n",
"train_labels = np.array([0] * (train_samples // 2) + [1] * (train_samples // 2))\n",
"\n",
"validation_data = np.load(open('models/bottleneck_features_validation.npy', 'rb'))\n",
"validation_labels = np.array([0] * (validation_samples // 2) + [1] * (validation_samples // 2))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And define and train the custom fully connected neural network :"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"model_top = Sequential()\n",
"model_top.add(Flatten(input_shape=train_data.shape[1:]))\n",
"model_top.add(Dense(256, activation='relu'))\n",
"model_top.add(Dropout(0.5))\n",
"model_top.add(Dense(1, activation='sigmoid'))\n",
"\n",
"model_top.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train on 2048 samples, validate on 832 samples\n",
"Epoch 1/30\n",
"2048/2048 [==============================] - 0s - loss: 3.3870 - acc: 0.6279 - val_loss: 0.3765 - val_acc: 0.8173\n",
"Epoch 2/30\n",
"2048/2048 [==============================] - 0s - loss: 0.4014 - acc: 0.8232 - val_loss: 0.2767 - val_acc: 0.8990\n",
"Epoch 3/30\n",
"2048/2048 [==============================] - 0s - loss: 0.3015 - acc: 0.8784 - val_loss: 0.2481 - val_acc: 0.8882\n",
"Epoch 4/30\n",
"2048/2048 [==============================] - 0s - loss: 0.2591 - acc: 0.8931 - val_loss: 0.4684 - val_acc: 0.8281\n",
"Epoch 5/30\n",
"2048/2048 [==============================] - 0s - loss: 0.2334 - acc: 0.9048 - val_loss: 0.2334 - val_acc: 0.9062\n",
"Epoch 6/30\n",
"2048/2048 [==============================] - 0s - loss: 0.2005 - acc: 0.9224 - val_loss: 0.2395 - val_acc: 0.9026\n",
"Epoch 7/30\n",
"2048/2048 [==============================] - 0s - loss: 0.1791 - acc: 0.9233 - val_loss: 0.6955 - val_acc: 0.7849\n",
"Epoch 8/30\n",
"2048/2048 [==============================] - 0s - loss: 0.1490 - acc: 0.9414 - val_loss: 0.2788 - val_acc: 0.8846\n",
"Epoch 9/30\n",
"2048/2048 [==============================] - 0s - loss: 0.1369 - acc: 0.9419 - val_loss: 0.4056 - val_acc: 0.8642\n",
"Epoch 10/30\n",
"2048/2048 [==============================] - 0s - loss: 0.1300 - acc: 0.9463 - val_loss: 0.2863 - val_acc: 0.8966\n",
"Epoch 11/30\n",
"2048/2048 [==============================] - 0s - loss: 0.1145 - acc: 0.9565 - val_loss: 0.2855 - val_acc: 0.9050\n",
"Epoch 12/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0926 - acc: 0.9663 - val_loss: 0.4966 - val_acc: 0.8558\n",
"Epoch 13/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0920 - acc: 0.9658 - val_loss: 0.4437 - val_acc: 0.8678\n",
"Epoch 14/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0744 - acc: 0.9702 - val_loss: 0.6320 - val_acc: 0.8462\n",
"Epoch 15/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0788 - acc: 0.9692 - val_loss: 0.3674 - val_acc: 0.9075\n",
"Epoch 16/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0721 - acc: 0.9717 - val_loss: 0.3389 - val_acc: 0.9062\n",
"Epoch 17/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0569 - acc: 0.9785 - val_loss: 0.3647 - val_acc: 0.9075\n",
"Epoch 18/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0486 - acc: 0.9771 - val_loss: 0.5094 - val_acc: 0.8774\n",
"Epoch 19/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0497 - acc: 0.9800 - val_loss: 0.3646 - val_acc: 0.9183\n",
"Epoch 20/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0458 - acc: 0.9824 - val_loss: 0.4245 - val_acc: 0.9087\n",
"Epoch 21/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0320 - acc: 0.9863 - val_loss: 0.4216 - val_acc: 0.9159\n",
"Epoch 22/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0352 - acc: 0.9868 - val_loss: 0.4470 - val_acc: 0.9123\n",
"Epoch 23/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0246 - acc: 0.9917 - val_loss: 0.4556 - val_acc: 0.9123\n",
"Epoch 24/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0284 - acc: 0.9878 - val_loss: 0.4901 - val_acc: 0.9111\n",
"Epoch 25/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0247 - acc: 0.9937 - val_loss: 0.4744 - val_acc: 0.9183\n",
"Epoch 26/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0363 - acc: 0.9888 - val_loss: 0.5039 - val_acc: 0.9075\n",
"Epoch 27/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0162 - acc: 0.9956 - val_loss: 0.4766 - val_acc: 0.9171\n",
"Epoch 28/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0159 - acc: 0.9951 - val_loss: 0.5400 - val_acc: 0.9062\n",
"Epoch 29/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0192 - acc: 0.9927 - val_loss: 0.5682 - val_acc: 0.9111\n",
"Epoch 30/30\n",
"2048/2048 [==============================] - 0s - loss: 0.0195 - acc: 0.9937 - val_loss: 0.5436 - val_acc: 0.9123\n"
]
},
{
"data": {
"text/plain": [
"<keras.callbacks.History at 0x7ff8b00bd6d8>"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model_top.fit(train_data, train_labels,\n",
" epochs=epochs, \n",
" batch_size=batch_size,\n",
" validation_data=(validation_data, validation_labels))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The training process of this small neural network is very fast : ~2s per epoch"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"model_top.save_weights('models/bottleneck_30_epochs.h5')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Bottleneck model evaluation"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#model_top.load_weights('models/bottleneck_30_epochs.h5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Loss and accuracy :"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"800/832 [===========================>..] - ETA: 0s"
]
},
{
"data": {
"text/plain": [
"[0.54362334619061303, 0.91225961538461542]"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model_top.evaluate(validation_data, validation_labels)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Evolution of accuracy on training (blue) and validation (green) sets for 1 to 32 epochs :"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**We reached a 90% accuracy on the validation after ~1m of training (~20 epochs) and 8% of the samples originally available on the Kaggle competition !**"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## Fine-tuning the top layers of a a pre-trained network"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"Start by instantiating the VGG base and loading its weights."
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model_vgg = applications.VGG16(weights='imagenet', include_top=False, input_shape=(150, 150, 3))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Build a classifier model to put on top of the convolutional model. For the fine tuning, we start with a fully trained-classifer. We will use the weights from the earlier model. And then we will add this model on top of the convolutional base."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"top_model = Sequential()\n",
"top_model.add(Flatten(input_shape=model_vgg.output_shape[1:]))\n",
"top_model.add(Dense(256, activation='relu'))\n",
"top_model.add(Dropout(0.5))\n",
"top_model.add(Dense(1, activation='sigmoid'))\n",
"\n",
"top_model.load_weights('models/bottleneck_40_epochs.h5')\n",
"\n",
"#model_vgg.add(top_model)\n",
"model = Model(inputs = model_vgg.input, outputs = top_model(model_vgg.output))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For fine turning, we only want to train a few layers. This line will set the first 25 layers (up to the conv block) to non-trainable."
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"for layer in model_vgg.layers[:15]:\n",
" layer.trainable = False"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# compile the model with a SGD/momentum optimizer\n",
"# and a very slow learning rate.\n",
"model.compile(loss='binary_crossentropy',\n",
" optimizer=optimizers.SGD(lr=1e-4, momentum=0.9),\n",
" metrics=['accuracy'])"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 2048 images belonging to 2 classes.\n",
"Found 832 images belonging to 2 classes.\n"
]
}
],
"source": [
"# prepare data augmentation configuration . . . do we need this?\n",
"train_datagen = ImageDataGenerator(\n",
" rescale=1./255,\n",
" shear_range=0.2,\n",
" zoom_range=0.2,\n",
" horizontal_flip=True)\n",
"\n",
"test_datagen = ImageDataGenerator(rescale=1./255)\n",
"\n",
"train_generator = train_datagen.flow_from_directory(\n",
" train_data_dir,\n",
" target_size=(img_height, img_width),\n",
" batch_size=batch_size,\n",
" class_mode='binary')\n",
"\n",
"validation_generator = test_datagen.flow_from_directory(\n",
" validation_data_dir,\n",
" target_size=(img_height, img_width),\n",
" batch_size=batch_size,\n",
" class_mode='binary')"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/30\n",
"64/64 [==============================] - 14s - loss: 0.3143 - acc: 0.8945 - val_loss: 0.3477 - val_acc: 0.9123\n",
"Epoch 2/30\n",
"64/64 [==============================] - 14s - loss: 0.1789 - acc: 0.9336 - val_loss: 0.2682 - val_acc: 0.9243\n",
"Epoch 3/30\n",
"64/64 [==============================] - 14s - loss: 0.1597 - acc: 0.9404 - val_loss: 0.2590 - val_acc: 0.9267\n",
"Epoch 4/30\n",
"64/64 [==============================] - 14s - loss: 0.1227 - acc: 0.9561 - val_loss: 0.3725 - val_acc: 0.9050\n",
"Epoch 5/30\n",
"64/64 [==============================] - 14s - loss: 0.1375 - acc: 0.9492 - val_loss: 0.3094 - val_acc: 0.9062\n",
"Epoch 6/30\n",
"64/64 [==============================] - 14s - loss: 0.0917 - acc: 0.9678 - val_loss: 0.2808 - val_acc: 0.9159\n",
"Epoch 7/30\n",
"64/64 [==============================] - 14s - loss: 0.1110 - acc: 0.9595 - val_loss: 0.3092 - val_acc: 0.9171\n",
"Epoch 8/30\n",
"64/64 [==============================] - 14s - loss: 0.1013 - acc: 0.9653 - val_loss: 0.3118 - val_acc: 0.9147\n",
"Epoch 9/30\n",
"64/64 [==============================] - 14s - loss: 0.0856 - acc: 0.9731 - val_loss: 0.3227 - val_acc: 0.9171\n",
"Epoch 10/30\n",
"64/64 [==============================] - 14s - loss: 0.0820 - acc: 0.9722 - val_loss: 0.3082 - val_acc: 0.9255\n",
"Epoch 11/30\n",
"64/64 [==============================] - 14s - loss: 0.0663 - acc: 0.9790 - val_loss: 0.2455 - val_acc: 0.9303\n",
"Epoch 12/30\n",
"64/64 [==============================] - 14s - loss: 0.0560 - acc: 0.9810 - val_loss: 0.3503 - val_acc: 0.9219\n",
"Epoch 13/30\n",
"64/64 [==============================] - 14s - loss: 0.0691 - acc: 0.9775 - val_loss: 0.2757 - val_acc: 0.9339\n",
"Epoch 14/30\n",
"64/64 [==============================] - 14s - loss: 0.0713 - acc: 0.9717 - val_loss: 0.2953 - val_acc: 0.9303\n",
"Epoch 15/30\n",
"64/64 [==============================] - 14s - loss: 0.0578 - acc: 0.9800 - val_loss: 0.2959 - val_acc: 0.9255\n",
"Epoch 16/30\n",
"64/64 [==============================] - 14s - loss: 0.0368 - acc: 0.9868 - val_loss: 0.4587 - val_acc: 0.9075\n",
"Epoch 17/30\n",
"64/64 [==============================] - 14s - loss: 0.0438 - acc: 0.9849 - val_loss: 0.3330 - val_acc: 0.9255\n",
"Epoch 18/30\n",
"64/64 [==============================] - 14s - loss: 0.0362 - acc: 0.9883 - val_loss: 0.3822 - val_acc: 0.9327\n",
"Epoch 19/30\n",
"64/64 [==============================] - 14s - loss: 0.0446 - acc: 0.9858 - val_loss: 0.2899 - val_acc: 0.9243\n",
"Epoch 20/30\n",
"64/64 [==============================] - 14s - loss: 0.0520 - acc: 0.9863 - val_loss: 0.3991 - val_acc: 0.9147\n",
"Epoch 21/30\n",
"64/64 [==============================] - 14s - loss: 0.0419 - acc: 0.9858 - val_loss: 0.3005 - val_acc: 0.9243\n",
"Epoch 22/30\n",
"64/64 [==============================] - 14s - loss: 0.0295 - acc: 0.9878 - val_loss: 0.3289 - val_acc: 0.9315\n",
"Epoch 23/30\n",
"64/64 [==============================] - 14s - loss: 0.0296 - acc: 0.9897 - val_loss: 0.3794 - val_acc: 0.9062\n",
"Epoch 24/30\n",
"64/64 [==============================] - 14s - loss: 0.0407 - acc: 0.9858 - val_loss: 0.3036 - val_acc: 0.9279\n",
"Epoch 25/30\n",
"64/64 [==============================] - 14s - loss: 0.0414 - acc: 0.9858 - val_loss: 0.3110 - val_acc: 0.9291\n",
"Epoch 26/30\n",
"64/64 [==============================] - 14s - loss: 0.0357 - acc: 0.9873 - val_loss: 0.3260 - val_acc: 0.9183\n",
"Epoch 27/30\n",
"64/64 [==============================] - 14s - loss: 0.0294 - acc: 0.9893 - val_loss: 0.3376 - val_acc: 0.9315\n",
"Epoch 28/30\n",
"64/64 [==============================] - 14s - loss: 0.0337 - acc: 0.9907 - val_loss: 0.2400 - val_acc: 0.9399\n",
"Epoch 29/30\n",
"64/64 [==============================] - 14s - loss: 0.0196 - acc: 0.9932 - val_loss: 0.3767 - val_acc: 0.9267\n",
"Epoch 30/30\n",
"64/64 [==============================] - 14s - loss: 0.0252 - acc: 0.9907 - val_loss: 0.3516 - val_acc: 0.9303\n"
]
},
{
"data": {
"text/plain": [
"<keras.callbacks.History at 0x7ff897d92cc0>"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# fine-tune the model\n",
"model.fit_generator(\n",
" train_generator,\n",
" steps_per_epoch=train_samples // batch_size,\n",
" epochs=epochs,\n",
" validation_data=validation_generator,\n",
" validation_steps=validation_samples // batch_size)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model.save_weights('models/finetuning_30epochs_vgg.h5')"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model.load_weights('models/finetuning_30epochs_vgg.h5')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Evaluating on validation set"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Computing loss and accuracy :"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"model.evaluate_generator(validation_generator, validation_samples)"
]
}
],
"metadata": {
"anaconda-cloud": {},
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
================================================
FILE: .ipynb_checkpoints/notebook_extras-checkpoint.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Building an image classification model using very little data \n",
"\n",
"Based on the tutorial by Francois Chollet @fchollet https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html and the workbook by Guillaume Dominici https://github.com/gggdominici/keras-workshop\n",
"\n",
"This tutorial presents several ways to build an image classifier using keras from just a few hundred or thousand pictures from each class you want to be able to recognize.\n",
"\n",
"We will go over the following options: \n",
"\n",
"- training a small network from scratch (as a baseline) \n",
"- using the bottleneck features of a pre-trained network \n",
"- fine-tuning the top layers of a pre-trained network \n",
" \n",
"This will lead us to cover the following Keras features: \n",
" \n",
"- fit_generator for training Keras a model using Python data generators \n",
"- ImageDataGenerator for real-time data augmentation \n",
"- layer freezing and model fine-tuning \n",
"- ...and more. \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Data can be downloaded at:\n",
"https://www.kaggle.com/c/dogs-vs-cats/data \n",
"All you need is the train set \n",
"The recommended folder structure is: "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Folder structure"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```python\n",
"data/\n",
" train/\n",
" dogs/ ### 1024 pictures\n",
" dog001.jpg\n",
" dog002.jpg\n",
" ...\n",
" cats/ ### 1024 pictures\n",
" cat001.jpg\n",
" cat002.jpg\n",
" ...\n",
" validation/\n",
" dogs/ ### 416 pictures\n",
" dog001.jpg\n",
" dog002.jpg\n",
" ...\n",
" cats/ ### 416 pictures\n",
" cat001.jpg\n",
" cat002.jpg\n",
" ...\n",
"```\n",
"Note : for this example we only consider 2x1000 training images and 2x400 testing images among the 2x12500 available."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The github repo includes about 1500 images for this model. The original Kaggle dataset is much larger. The purpose of this demo is to show how you can build models with smaller size datasets. You should be able to improve this model by using more data."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Data loading"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied (use --upgrade to upgrade): pillow in /home/ladmin/anaconda3/lib/python3.5/site-packages\n",
"\u001b[33mYou are using pip version 8.1.2, however version 9.0.1 is available.\n",
"You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n",
"Using TensorFlow backend.\n",
"I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.so.8.0 locally\n",
"I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.so.5 locally\n",
"I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.so.8.0 locally\n",
"I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.so.1 locally\n",
"I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.so.8.0 locally\n"
]
}
],
"source": [
"##This notebook is built around using tensorflow as the backend for keras\n",
"!pip install pillow\n",
"!KERAS_BACKEND=tensorflow python -c \"from keras import backend\""
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using TensorFlow backend.\n"
]
}
],
"source": [
"##Updated to Keras 2.0\n",
"import os\n",
"import numpy as np\n",
"from keras.models import Sequential\n",
"from keras.layers import Activation, Dropout, Flatten, Dense\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"from keras.layers import Convolution2D, MaxPooling2D, ZeroPadding2D\n",
"from keras import optimizers\n",
"from keras import applications\n",
"from keras.models import Model\n",
"from IPython.display import Image\n",
"from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#using Tensorboard\n",
"#tensorboard = keras.callbacks.TensorBoard(log_dir='./logs', histogram_freq=0, write_graph=True, write_images=False)\n",
"#!nohup tensorboard --logdir=/root/sharedfolder/Data1/Code/image_keras/logs"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#Keras settings\n",
"#keras.__version__\n",
"#!cat ~/.keras/keras.json"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Data Loading"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# dimensions of our images.\n",
"img_width, img_height = 150, 150\n",
"\n",
"train_data_dir = 'data/train'\n",
"validation_data_dir = 'data/validation'"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf\nIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7\nOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCAF3AfMDASIA\nAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA\nAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3\nODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm\np6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA\nAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx\nBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK\nU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3\nuLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwCrKn3a\n1NNIWI5GaoTLjbWlpYDRNnsa0ewFvIz92orsbrVhjoM1aCimyopiYccg1IjJVST+FMuE+ZTUkZyA\naLkZQNV9BkcYx0qdRzUMZ6VZFAxNtNYZ4qXFNYYoAixSoMMPrTu9AHzigCfGRTsdKXHWlxyKAK7r\n81LGuDmnyKaSMc0wGXifJEfST+hpqrxUt4CbXd/ddT+tRg5oAWIfvKsSKNlQIMHNTSn5cUgGwr81\nS7eabB1qTGCDTAr7cXKH61NOP9Gk+lMI/fIff+lTTj9w/wBKAI4VGPwFQ3TeUw4ySOKsRDgcdqjn\njD3KE/wigCONW2ks3zjkAdqgnh3K6fxLzmrSPhiuT0/iFEjKZmKg8ktg9x3oAZAxngR889D/AF/W\n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\nfL2A60UUwE3IOiD8aKKKQH//2Q==\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Image(filename='data/train/dogs/dog.0.jpg') "
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf\nIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7\nOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCAF2AfQDASIA\nAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA\nAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3\nODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm\np6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA\nAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx\nBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK\nU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3\nuLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDokqVK\niSpVr5s9UlWpFqNalWkMeop4pFIqQY9KAAU4UDbS/LSAUU4GmilFADxTxUamng0CY8Y6Gq1zb5BO\nKsCn4BGDQJOzOZvbIPkFQaz49PW3bkV1U9sM5ArOuYO9aRfc6ITM7YOgFRSRjFTscZHeo296ckdU\nZFOSMMCKz5yI24XBHc1pytjPGKyLls7ivOPWsuXUcpWRSuJnkcZJUeuKRPJA4BZsUx23MTIuR7VL\naxmU4UbVx19abjZHJzOUiRd5GMBR71btJnt5Q6N9aSO3SH/XEHPSnCN5MmBMDtu5rFtGns3Y7LS7\n5Z4lOa3YZNy1wOmTS2svzng9QK66zuQ6gg9aIyszCpSZrUUxG3CnV0I5LC0UUUwCkpaKQCUUUUAF\n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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Image(filename='data/train/cats/cat.0.jpg') "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Imports"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 2048 images belonging to 2 classes.\n",
"Found 832 images belonging to 2 classes.\n"
]
}
],
"source": [
"##preprocessing\n",
"# used to rescale the pixel values from [0, 255] to [0, 1] interval\n",
"datagen = ImageDataGenerator(rescale=1./255)\n",
"batch_size = 32\n",
"\n",
"# automagically retrieve images and their classes for train and validation sets\n",
"train_generator = datagen.flow_from_directory(\n",
" train_data_dir,\n",
" target_size=(img_width, img_height),\n",
" batch_size=batch_size,\n",
" class_mode='binary')\n",
"\n",
"validation_generator = datagen.flow_from_directory(\n",
" validation_data_dir,\n",
" target_size=(img_width, img_height),\n",
" batch_size=batch_size,\n",
" class_mode='binary')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 2048 images belonging to 2 classes.\n"
]
}
],
"source": [
"##Lets look at the training data from the datagenerator\n",
"i = 0\n",
"for batch in datagen.flow_from_directory(train_data_dir,\n",
" target_size=(img_width, img_height),\n",
" class_mode='binary',batch_size=1,\n",
" save_to_dir='preview', save_prefix='train', save_format='jpg'):\n",
" i += 1\n",
" if i > 20:\n",
" break #"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"aug2_0_125.jpg\t train_12_1168.jpg train_17_5031.jpg train_4_3297.jpg\r\n",
"aug2_0_1805.jpg train_12_9061.jpg train_1_75.jpg\t train_4_3753.jpg\r\n",
"aug2_0_2253.jpg train_13_3936.jpg train_18_8046.jpg train_5_2054.jpg\r\n",
"aug2_0_3107.jpg train_13_737.jpg train_18_8431.jpg train_5_6591.jpg\r\n",
"aug2_0_4003.jpg train_14_3427.jpg train_19_6181.jpg train_6_6153.jpg\r\n",
"aug2_0_7307.jpg train_14_7598.jpg train_19_9408.jpg train_6_8550.jpg\r\n",
"train_0_5372.jpg train_15_3216.jpg train_20_7450.jpg train_7_6307.jpg\r\n",
"train_0_7289.jpg train_15_5589.jpg train_20_7602.jpg train_7_8120.jpg\r\n",
"train_10_2638.jpg train_16_172.jpg train_2_1654.jpg\t train_8_2649.jpg\r\n",
"train_10_3001.jpg train_16_3743.jpg train_2_8433.jpg\t train_8_3558.jpg\r\n",
"train_11_4831.jpg train_1_6767.jpg train_3_2508.jpg\t train_9_3911.jpg\r\n",
"train_11_6773.jpg train_17_2432.jpg train_3_3853.jpg\t train_9_5143.jpg\r\n"
]
}
],
"source": [
"!ls preview"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a\nHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy\nMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACWAJYDASIA\nAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA\nAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3\nODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm\np6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA\nAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx\nBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK\nU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3\nuLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2tmye\nKcsnrTT1pACSAO9eBsdltC3CvGaztWly6p/Co3GtQYji57Vg6g+SxPJb9BXRU92Cj1ZnSV5XKAcm\n6XP+eKdePiMAHk8fnUAyGRvTNZ+sXmLaXLAfKQB7kcf59q5Ers6nscTrYuNQ122gtDuaRxtwuePX\n9Ca7m40RJNEWwuAQqIoXb95cDA+p71zvg2xTUfEM15KhKwDEZI4GMd/UkjHsD616Beox+7jcfaqq\nTcWkhRSe5zmnztBIsykCVfv47N0P9a6+z1iOeBXRSxbKlM4wfxrEGhrLOLkMyA/eUdGAqY2LWQeY\nvtXG1UXJJ/DvWtKTWqM5pPQ6a3l3gcEZAIqyRXCvqmp2nlvtck4BG3naPU4rptJ1ZNQgBOBIOGGe\n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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Image(filename='preview/train_12_1168.jpg') "
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a\nHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy\nMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACWAJYDASIA\nAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA\nAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3\nODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm\np6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA\nAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx\nBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK\nU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3\nuLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDHn1PR\nZ7iLTIoYLq2uFRQI87VwOSSPuhUA6cjHvxs6XpcmlBoY7qWezICxpLyYcD+9/d6DGP61xFr4V1y5\ni8qOzS3tnXcjSuqYJGRlVJYE4H0710dr4d1FbeOzklityV3PJCvmLIQw4fcAecnocflQ9jPZkEfi\nb+yvEE+m3kbCB5yRLv8AlQMSR/8AX59e+a6trqARRSIwmWYgReWQfMJ6bexz+XckDmst/D9peWi2\nep2FuyJl0lh3IPTnB3A4OepBP4VWtNClurXT7ptRmREgRVh8lCAmBjIIPPAyfUD0GIsNXsWL2K5v\not1rLGJ0cfJAy7lxnIZiDxjBwACOetVJdOumv4mnu5XcM/zKcnIBwQP4cj+HjsOTzWrp2pwG1LXE\n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\n+QB/nRRRV8qFzM//2Q==\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Image(filename='preview/train_9_5143.jpg') "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Small Conv Net"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Model architecture definition"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# a simple stack of 3 convolution layers with a ReLU activation and followed by max-pooling layers.\n",
"model = Sequential()\n",
"model.add(Convolution2D(32, (3, 3), input_shape=(img_width, img_height,3)))\n",
"model.add(Activation('relu'))\n",
"model.add(MaxPooling2D(pool_size=(2, 2)))\n",
"\n",
"model.add(Convolution2D(32, (3, 3)))\n",
"model.add(Activation('relu'))\n",
"model.add(MaxPooling2D(pool_size=(2, 2)))\n",
"\n",
"model.add(Convolution2D(64, (3, 3)))\n",
"model.add(Activation('relu'))\n",
"model.add(MaxPooling2D(pool_size=(2, 2)))\n",
"\n",
"model.add(Flatten())\n",
"model.add(Dense(64))\n",
"model.add(Activation('relu'))\n",
"model.add(Dropout(0.5))\n",
"model.add(Dense(1))\n",
"model.add(Activation('sigmoid'))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model.compile(loss='binary_crossentropy',\n",
" optimizer='rmsprop',\n",
" metrics=['accuracy'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Training"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"epochs = 30\n",
"train_samples = 2048\n",
"validation_samples = 832"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/30\n",
"64/64 [==============================] - 61s - loss: 0.7004 - acc: 0.5205 - val_loss: 0.6861 - val_acc: 0.5288\n",
"Epoch 2/30\n",
"64/64 [==============================] - 3s - loss: 0.6668 - acc: 0.6177 - val_loss: 0.6322 - val_acc: 0.6430\n",
"Epoch 3/30\n",
"64/64 [==============================] - 3s - loss: 0.6260 - acc: 0.6621 - val_loss: 0.6390 - val_acc: 0.6454\n",
"Epoch 4/30\n",
"64/64 [==============================] - 3s - loss: 0.5847 - acc: 0.7075 - val_loss: 0.5782 - val_acc: 0.6731\n",
"Epoch 5/30\n",
"64/64 [==============================] - 3s - loss: 0.5446 - acc: 0.7271 - val_loss: 0.6108 - val_acc: 0.6454\n",
"Epoch 6/30\n",
"64/64 [==============================] - 3s - loss: 0.5141 - acc: 0.7500 - val_loss: 0.5884 - val_acc: 0.6755\n",
"Epoch 7/30\n",
"64/64 [==============================] - 3s - loss: 0.4930 - acc: 0.7764 - val_loss: 0.5914 - val_acc: 0.6959\n",
"Epoch 8/30\n",
"64/64 [==============================] - 3s - loss: 0.4424 - acc: 0.7822 - val_loss: 0.6365 - val_acc: 0.7091\n",
"Epoch 9/30\n",
"64/64 [==============================] - 3s - loss: 0.4067 - acc: 0.8218 - val_loss: 0.5611 - val_acc: 0.7248\n",
"Epoch 10/30\n",
"64/64 [==============================] - 3s - loss: 0.3593 - acc: 0.8330 - val_loss: 0.5750 - val_acc: 0.7115\n",
"Epoch 11/30\n",
"64/64 [==============================] - 3s - loss: 0.3103 - acc: 0.8657 - val_loss: 0.6317 - val_acc: 0.6959\n",
"Epoch 12/30\n",
"64/64 [==============================] - 3s - loss: 0.2998 - acc: 0.8721 - val_loss: 0.6315 - val_acc: 0.7488\n",
"Epoch 13/30\n",
"64/64 [==============================] - 3s - loss: 0.2365 - acc: 0.8975 - val_loss: 0.6387 - val_acc: 0.7272\n",
"Epoch 14/30\n",
"64/64 [==============================] - 3s - loss: 0.2114 - acc: 0.9160 - val_loss: 0.8432 - val_acc: 0.7163\n",
"Epoch 15/30\n",
"64/64 [==============================] - 3s - loss: 0.1830 - acc: 0.9297 - val_loss: 0.7151 - val_acc: 0.7175\n",
"Epoch 16/30\n",
"64/64 [==============================] - 3s - loss: 0.1521 - acc: 0.9453 - val_loss: 0.9396 - val_acc: 0.7260\n",
"Epoch 17/30\n",
"64/64 [==============================] - 3s - loss: 0.1283 - acc: 0.9478 - val_loss: 1.0425 - val_acc: 0.7236\n",
"Epoch 18/30\n",
"64/64 [==============================] - 3s - loss: 0.1131 - acc: 0.9541 - val_loss: 1.0674 - val_acc: 0.7127\n",
"Epoch 19/30\n",
"64/64 [==============================] - 3s - loss: 0.1060 - acc: 0.9629 - val_loss: 1.0976 - val_acc: 0.7368\n",
"Epoch 20/30\n",
"64/64 [==============================] - 3s - loss: 0.0976 - acc: 0.9609 - val_loss: 1.1950 - val_acc: 0.7356\n",
"Epoch 21/30\n",
"64/64 [==============================] - 3s - loss: 0.0916 - acc: 0.9683 - val_loss: 1.2085 - val_acc: 0.7284\n",
"Epoch 22/30\n",
"64/64 [==============================] - 3s - loss: 0.0713 - acc: 0.9727 - val_loss: 1.7575 - val_acc: 0.7151\n",
"Epoch 23/30\n",
"64/64 [==============================] - 3s - loss: 0.0798 - acc: 0.9736 - val_loss: 1.4385 - val_acc: 0.7368\n",
"Epoch 24/30\n",
"64/64 [==============================] - 3s - loss: 0.0645 - acc: 0.9785 - val_loss: 1.5054 - val_acc: 0.7200\n",
"Epoch 25/30\n",
"64/64 [==============================] - 3s - loss: 0.0740 - acc: 0.9756 - val_loss: 1.7323 - val_acc: 0.6923\n",
"Epoch 26/30\n",
"64/64 [==============================] - 3s - loss: 0.0586 - acc: 0.9795 - val_loss: 1.6631 - val_acc: 0.7236\n",
"Epoch 27/30\n",
"64/64 [==============================] - 3s - loss: 0.0499 - acc: 0.9785 - val_loss: 2.0203 - val_acc: 0.7019\n",
"Epoch 28/30\n",
"64/64 [==============================] - 3s - loss: 0.0662 - acc: 0.9771 - val_loss: 1.8689 - val_acc: 0.7212\n",
"Epoch 29/30\n",
"64/64 [==============================] - 3s - loss: 0.0857 - acc: 0.9756 - val_loss: 1.9077 - val_acc: 0.6935\n",
"Epoch 30/30\n",
"64/64 [==============================] - 3s - loss: 0.0515 - acc: 0.9819 - val_loss: 1.6681 - val_acc: 0.7212\n"
]
},
{
"data": {
"text/plain": [
"<keras.callbacks.History at 0x7ff8b4010080>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.fit_generator(\n",
" train_generator,\n",
" steps_per_epoch=train_samples // batch_size,\n",
" epochs=epochs,\n",
" validation_data=validation_generator,\n",
" validation_steps=validation_samples// batch_size,)\n",
"#About 60 seconds an epoch when using CPU"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"model.save_weights('models/basic_cnn_30_epochs.h5')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#model.save_weights('models_trained/basic_cnn_30_epochs.h5')\n",
"model.load_weights('models_trained/basic_cnn_30_epochs.h5')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If your model successfully runs at one epoch, go back and it for 30 epochs by changing nb_epoch above. I was able to get to an val_acc of 0.71 at 30 epochs.\n",
"A copy of a pretrained network is available in the pretrained folder."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Validating the Model's Performance"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/jpeg": "/9j/4AAQSkZJRgABAQAA8ADwAAD/4QMgRXhpZgAATU0AKgAAAAgACgEPAAIAAAAGAAAAhgEQAAIA\nAAAVAAAAjAESAAMAAAABAAEAAAEaAAUAAAABAAAAogEbAAUAAAABAAAAqgEoAAMAAAABAAIAAAEx\nAAIAAAAPAAAAsgEyAAIAAAAUAAAAwoKYAAIAAAAyAAAA1odpAAQAAAABAAABCAAAAABDYW5vbgBD\nYW5vbiBFT1MgNUQgTWFyayBJSQAAAAAA8AAAAAEAAADwAAAAAVBpeGVsbWF0b3IgMy42AAAyMDE2\nOjExOjI5IDIwOjExOjI4AENvcHlyaWdodCAoYykgMjAxNCBieSBQaG90b2dyYXBoeSBieSBIb3dh\ncmQncyBFbmQAAB2CmgAFAAAAAQAAAmqCnQAFAAAAAQAAAnKIIgADAAAAAQABAACIJwADAAAAAQGQ\nAACQAAAHAAAABDAyMzCQAwACAAAAFAAAAnqQBAACAAAAFAAAAo6SAQAKAAAAAQAAAqKSAgAFAAAA\nAQAAAqqSBAAKAAAAAQAAArKSBQAFAAAAAQAAArqSBwADAAAAAQAFAACSCQADAAAAAQAQAACSCgAF\nAAAAAQAAAsKSkQACAAAAAzA3AACSkgACAAAAAzA3AACgAQADAAAAAQABAACgAgAEAAAAAQAAAlig\nAwAEAAAAAQAAAZCiDgAFAAAAAQAAAsqiDwAFAAAAAQAAAtKiEAADAAAAAQACAACkAQADAAAAAQAA\nAACkAgADAAAAAQABAACkAwADAAAAAQAAAACkBgADAAAAAQAAAACkMQACAAAACwAAAtqkMgAFAAAA\nBAAAAuakNAACAAAAEQAAAwYAAAAAAAAAAQAAACgAAAAOAAAABTIwMTU6MDM6MDEgMTY6NDc6NTcA\nMjAxNTowMzowMSAxNjo0Nzo1NwAAAA1eAAACgwAAC4wAAAPjAAAAAAAAAAEAAAABAAAAAQAAADIA\nAAABAAHwMAAAACEACT5CAAAAmzE4MjExMDQyMDkAAAAAADIAAAABAAAAMgAAAAEAAAAAAAAAAQAA\nAAAAAAABRUY1MG1tIGYvMS40IFVTTQAA/+EMIWh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8A\nPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6\neG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAi\nPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5\nbnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6\nLy9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmF1eD0iaHR0cDovL25zLmFkb2JlLmNvbS9l\neGlmLzEuMC9hdXgvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9z\naG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1w\nOkNyZWF0b3JUb29sPSJQaXhlbG1hdG9yIDMuNiIgeG1wOkNyZWF0ZURhdGU9IjIwMTUtMDMtMDFU\nMTY6NDc6NTciIHhtcDpNb2RpZnlEYXRlPSIyMDE2LTExLTI5VDIwOjExOjI4IiB4bXA6UmF0aW5n\nPSIzIiBhdXg6TGVuc0lEPSIxOTgiIGF1eDpMZW5zSW5mbz0iNTAvMSA1MC8xIDAvMCAwLzAiIGF1\neDpJbWFnZU51bWJlcj0iMCIgYXV4OkxlbnM9IkVGNTBtbSBmLzEuNCBVU00iIGF1eDpGbGFzaENv\nbXBlbnNhdGlvbj0iMC8xIiBhdXg6RmlybXdhcmU9IjIuMS4yIiBhdXg6U2VyaWFsTnVtYmVyPSIx\nODIxMTA0MjA5IiBwaG90b3Nob3A6RGF0ZUNyZWF0ZWQ9IjIwMTUtMDMtMDFUMTY6NDc6NTciPiA8\nZGM6c3ViamVjdD4gPHJkZjpCYWc+IDxyZGY6bGk+bWF0ZXJuaXR5IFJhaiBTdGVwaGFuaWU8L3Jk\nZjpsaT4gPC9yZGY6QmFnPiA8L2RjOnN1YmplY3Q+IDxkYzpyaWdodHM+IDxyZGY6QWx0PiA8cmRm\nOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPkNvcHlyaWdodCAoYykgMjAxNCBieSBQaG90b2dyYXBo\neSBieSBIb3dhcmQncyBFbmQ8L3JkZjpsaT4gPC9yZGY6QWx0PiA8L2RjOnJpZ2h0cz4gPC9yZGY6\nRGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/PgD/7QDK\nUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAJEcAVoAAxslRxwCAAACAAIcAj4ACDIwMTUwMzAxHAI/\nAAYxNjQ3NTccAjcACDIwMTUwMzAxHAI8AAYxNjQ3NTccAnQAMUNvcHlyaWdodCAoYykgMjAxNCBi\neSBQaG90b2dyYXBoeSBieSBIb3dhcmQncyBFbmQcAhkAF21hdGVybml0eSBSYWogU3RlcGhhbmll\nADhCSU0EJQAAAAAAELN9Xgyhy1IS/nZv+u0rE1L/wAARCAGQAlgDASIAAhEBAxEB/8QAHwAAAQUB\nAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEG\nE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVW\nV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLD\nxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAA\nAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKR\nobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp\nanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU\n1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9sAQwABAQEBAQECAQECAwICAgMEAwMDAwQGBAQEBAQG\nBwYGBgYGBgcHBwcHBwcHCAgICAgICQkJCQkLCwsLCwsLCwsL/9sAQwECAgIDAwMFAwMFCwgGCAsL\nCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsL/90ABAAm/9oA\nDAMBAAIRAxEAPwD+v6JOOKvonc9aijTvV1E/OvLSOpsljXH4VbReKiRewq2i96tIklA7CplGBTEH\nOalpgKBUgXHBpVAxmnUAFFFP2H60AMxS4OKl2DGKNop2AixSVKw9KiosAUw88mn0mB0pAQnjgUlO\nK4PtSEYOKAEprDPSnUUAQEelJUpXB4qKgApMDtS0UAQEFTSGpWXPSoqVgITkHmm1KwzUVJxAQ8Co\njmpqawzzUjIaifrxUuMU1hmgogIBqE1YIwcVGy55FAyKomFTYI60wgGgCAjNQMBmrJXHBqNlHWlY\nCsy88VCVFWqhYEGpaArEVGwxU7iozzSKRXNROMnFTkHrUb9KCisyjrUJXIxVgjIqDHapsBXNQsMc\nVaYCom9cVIFZuKgbpVk89agbrzQWiuetRvipmGDk1C9AyAgYqE81OelQmgCJic4FREVK471EelFg\nK59aiYjtUrng1CetKxaZC2OgqB6nY5qJsY5qbDKkgFVn61ccZFVnpAU3FVmA6VbcDPFVWOeTQVEq\nuPbmqrrkVdYc81VcZyKnlKKEiVRkTsa1H5HAqjIpxUlIyJVBJrKmQHrW7KvFZcy96TRRgTx5GKxb\niP1rpZlrHnQ1DRaOWuIgawbqKutuIx9axbmLg1DRaZxFzb54qj9kX0H+fwrpbmHOao/ZmqbFH//Q\n/sRjTiriLgZqNEq2i9681I6WxyLjirKrjgU1Fxz3qyq461QhQMDipUX+KmqCTU2MUAFOC+tIAT0q\nYDAxVJAGPSlooqrAFFFFACHNRH2qaomXvSYDKKKKgBpGaYRnmpOlJQBERSU8+1MoAKiYYqWigCAj\nmkqUjJpjDBoAbUTDHSpaa3IoAhqNgKkoIzQBXpCM1IU5plBRGy96jqxUbjvU2GiBlzzUVWKYy45F\nSMgIz0qIjBqekIzQBVcZGaiqyR2qMoO1AFVxzUZXNWSMcGoWGDRYCsy9s1CwxVpxnpULLUNDRXYD\nHNQkYOKssuDULjvSLKrDBqBhg5NW2GRUJFAFc1XarBFROMGpYFZqquwHJPFZviTxFonhbSbnXvEN\n1FZWdpGZZ55nCRxooySzHgAe5r+Sz/goL/wckeHfA3jWf4Zfsg6fH4iWzcxz6rMCYZWHBESggkZH\n3j1HatKNCdR+6KVSMNz+tQXschynIPAp+4kcc+9fx1/8E9P+DjK6+IHxRtfhV+1fp0emjV7lLez1\nG1G2GJn4VJFPIBYgZ6etf2BaRepqNol5AQySAMpB4wfSlVpSpu0ioVFJaGgR2qNgAKsMvcVGRkYN\nZFlUjPFQkY4qyRg1Cy85oApsM8VCetWWGODUD9aC0V2zUTdKnYZ5qE9KTQyu2cVWfpVphnrVdh2q\nWgKTkZxVVueBVtxVVhzSGisT3NQtz0qc4yarsCDmgsrv3qjJ61oOaqSDBz0qGUmZsowKzphnrWq4\n61nyqaRRjTKDWVMnWt2VQOTWdMoNQ0VE524jzWNPH1rp54xWRPHSKOTnj7iquG/yK3J4cg1U+zH0\n/SosUmf/0f7IUWrSL3NMRewqyq54FeedA9F7mpVGTikA7VMowKAHAAdKUAmkqZVxzVJAC9OKdRRV\nAFFOK4pCp6igBKKKKACmt0p1IaAIDRSsMGkqGAUnvS0UgGYzioqkbufWo8YoAKKKKACmFafRQBAw\nwaSpWFRUARsuORUdWDyMVEy88UDuMNRMvpUtFAIr0YzUrKMZqKgshZSOabU5GeKiI5xSaAjZQRUJ\nGOKsU0rmoArsOKiPWrBGOtMYA9qAKzjNQkA1ZIzxUBGDigCuRUTCrDL3qMjPBpMaZWYZqEjFWGUr\n3qFyQcNxUDRXdcc1Ay96uEdjVdl7GgoqP0rn/EGuaX4c0i41vWp0trW1jaWWWRgqIiDJYk8AAda3\n5mVFJPav5If+Din/AIKc3vgrTv8AhgT4I3Ak17xLaquu3ELkPaQTYKRZHQyD73+z9aqEOZ2E2fnX\n/wAFWv8Agqv8Sv2+fi9dfspfsvXs1l4B0+4kgvL2AlTqDIdrOSCMxjkIvQ8k9q+bvg7+xF4V8M6d\n9o1yzaS7EQKTfKCQepJY9z6VnfsifAa18AeFrW/Db72ZEaY7N8hY8MF9B71+sXhDT/C0c1tLdAkx\nkboiocce+Cc11+3XwQ2R6NPB+zjzS+Jn4MftUfsc6h4bt18TeE7EoirvMsYOAw5GD1yPyr+2n/gh\n7+11e/tY/sK6BfeJJGk8Q+EmOgaq7kfPLagbHGP78ZUn3zX5gfGP4N/8J98O7k28RtoDGzoAdp6d\n++Pwrwn/AIN5/H8vwd/bk+Jn7MV3KPsev6cmqW6hiU+0WbYYrnuUk547UVYuVJuS1RzYmmoyjOPo\nz+0HHFMZfSrC8ruFRkV5xBVZQetV2UVdZe9V3XigCiwyKgIq44xzVdh3oLTKhFQMMcVacY6VC44z\nQMquMGq7jBzVxhkY61WYAipYFCReoqq44zV9xnmqjrg4qSkUnHeoH6VbYYquwHNBRVfBqnIB2q6w\n4xVZlHekyolCRfzqjLnpWi4wetUpBxzUFGXKBWdKoPStSQHoaoyLjmkykzJlXv8ArWXNHxW5Kuet\nZ8qZOago5yaI84qr5behrami4waq+Uv+f/10Af/S/svRegHep1GBSKuOakAya886ByDnNS0g4GKc\nBmmgHotSUgpwFWAgqVR6daaMjjFPA4oAcKackU6igCEjFNqVwMZqKgAoNIWVetN8xPWgBrA5zTKc\nXU96ZkVLAWijIoqQExzTSvYU+igCLbSEEdqmowKAIdhpCMVPjNNYZFAENNYcU8gjrSUAQFSKSrFR\nFaAIiuajKkVNjFBGetAFOSVYl3P0qv8AaIZG2q3PpXLeP/EcPg7wxf8AiW7P7iygkncH+6ikn9BX\n8Ev7SX/Bc39ub4z/ALQ2o+Ff2M5ZLPR7K4aG2XYpZtvByXHQnnB6VdODm7Id2tlc/wBATdlsClK5\n5r+Ff4d/8Fnf+CyvwC06HxL8avA1r470UH97iHyZVVTyFkhzg49VIr95v2Bv+C837HH7a+tR/DbV\nbmX4f+OCFX+xdeKw+c56iCbOyQ5/hOG9qJU5R3G218Sa9T9wSgxUZBFLFPFMokiYMpGQRUxGazau\nUVmBIwKhIwaslcVGwzzUtAVGHOahcZFWyO1QEYNICtTHXJzUzLxkUygCsRUTJ2NWX2iotymlYZTZ\ndvI6VE4qzPJHGpZz+deceIfHukaDG0l3Kqquckn0qC1qeO/tWftDeDP2bfhNqXxF8X3cdrHbRsIh\nIwXzJcEqoz3Nf5wJ0rUvj/8AtJ+KPj54y1CTUr/xBqs11HNLklLcuSiEdPlXCjHav3H/AOC9X7Rf\njb4t/ErQPhXoGofY/COkWM+q3JjOTe3O8QiEdujE57V8Wfslr8IvhX4eivNesDeanOUaGNmGyLA5\nZvmUE5+6MnpyDXVSi1HTdnVh4K/NJbH0r8D9Is7nU1h0zw8dRiiUCdmMscMeO527c+4yT7V+jVto\nfwu0CyjuL7R0bUmwsa20cgWPPcs7Lx7AHPqKwvhLrXjzxtbyzf8ACa21hprQ4FvaKryW79jkg8c/\nNvJU9sGur1HTvGenbba48Zx60fmUC7eKKJv9w24Zcjr8y9K0pUHFbG9XEqTtsamhaXrXieW78Lww\nxWokDRt5cLPgEdfncivx5+Dkn/DKP/BZz4eapMg8rVrifQ7h9ojBa8RlTpgEZAr92/hU+tWmprN4\nmij1OG2QFriPdIx3dlkhQBwB6p04r8e/+Cumj6D4Y+IHhL9oH4fWqDVvD+o2l8ImiaN/9HkDFlb7\nvAHIbaTW1WNorz0MpSjUhOKW2q+R/apbO0kKs55I7VMRkVwvwt8WWPjn4eaL4ysn8yHVLKC5Rj1Y\nSoGz+td27qD1ryLHOVyKgYds1aILDIqBxxkUgKbL2NVyOxq49V3FBSKTDqKhYc4FW3HeoHGeaCio\n645qsw5xVxxxmqzgdaTApv3qpIOKuuAKqsBmoKiU3HGaruO9W26VWcZ5oKKbjBqs4J/GrrjsKpv1\n5oGikwByDVKVQK0G4zVKTnpWZZnSL6VRkFaMgP5VRkXk0DM6RRzVN04rSkWqbr6VBSMiaPiqmxvQ\nVqyqag+b+6KQz//T/s5UZ4qYACmquOaeOa4EdAVMq7aFXHNPAJ6VVgEqVRihV4p9MBuB3p1FFABR\nRRQAhqpLIEXNWX6ViarL5cJI9KTAytQ1ZIAcnpXFXXja1tpNryAH615t8RPGSaNbySO+MZ71+THx\n4/bc8O/D3UxZ3V2odmxjPNcNbEqB2UMM6j0P2uj8dWjH/WD86uR+M7VsYcV/Pzo//BQXwzequLxe\nf9qvS9M/bh8PXABF4pH+9WCx8e52f2XU7H7ir4ttm53j86nTxVbnq4r8abL9szQZeftanj+9XWWf\n7XOiSAH7UvP+1VrHQ7kvLKn8p+uS+JbY/wAQqwviKA/xCvyutf2qtGkxi6X/AL6roLf9p7RZOlyv\n501jIdyHl1TsfpsNfgP8VS/25Af4hX5wQftK6M/H2gfnWvD+0Zo7H/j4X86tYuPch4Cp2P0NGtQ+\nop/9rw+tfA0P7Qekv0uF/OtSL49aS2ALhfzqliYkvBT7H3L/AGtA3Uil/tOH1FfFcfxy0tiP34/O\ntCL416a/ScfnT+sRJeEn2PsYahERnNL9vi9a+SI/jJpxGRMPzq8nxd09v+Ww/On7dE/VZdj6o+2R\nNzSfaojwDXzJH8VrBv8AlqM/Wr0fxQsjwZR+dHtkL6tLsL+1nNI/7N/jgW4LONEvipXk7hE2MV/C\nT/wRq8K/DDxfNqN34wt431ie7aQXLMNxIY5yOmfpiv7fvih4wg8TfDvW/D8LFnvbKeFQp5y6Ecfn\nX8Cn/BMrUNZ8D/tI6/8ADDUUNvJpOqXMTiT7yYkI6etbUqq1ZvQoSU0u9z+z/wAK/ALwvq2jHyIk\nh3jJDr5iOcf3R696/MH9sn/gkH+zX8e7Fr7WrG30DxBHmSLVNIQ28gZfulh3wefav11+E9xLPo8T\nNdGBcKFYjc5z6DOOa9j8SeHND1O3AmuSJDgq3RgT9OPwIrvlJOPNFamKum4y2P5V/gD/AMFEv25/\n+CPniiy+EP7Xdvf/ABW+DxcR2utw5m1LTosnGJD/AK1AP4JCGA+6e1f2A/s/ftJfBj9qT4YaX8Y/\ngXrttr/h/VYw8Vxbtkqe6SL95HU8MrAEGvye/aT/AGedN8ReFNQvdWsYNQgnQpcx7B5UyAHIUHau\n7HY4Poa/nm0K0+On/BM3x7cfHL9g7W5r/wAN3snma94Iv1fHlryzIp6Mo4DDnHciuacU37q1CWGa\n1p7dv8v8j++tpEIwDUeRX4+fsC/8FWfhT+298NoPEdvE/h3xDGrpeaTdsPMWSLhmjP8AGhPfqO4F\nfpTF8QdPljSQSLhxkHPFcspWdmQoN6o9VbGeKiYA815wvjeydBIsgP41J/wmFqBlnApcyD2bO+qt\nOwUE15td+PbG3RnMgG33rzDxD8ddC05GEk6gj/aFNO+wnGx6N4t8Z2uhQtLK4XbXytrv7XvhHQ74\n2V1eRo47FgK+Xv2hP2i7K5srm2024QzoCOGzj64r8mdS8M6x8S5bvWPFN2dJtpSVtZpHCpJKoJZM\nk8MvBA6MK6FSioOdV2QQTlLlhqz9rviP+3l4I8MaZJLfXap8oI57EZH518hfCP8AaKsP2t/ihP4Q\ng1CWz0e0dJrq6GQI42R/vNyFDFQATxk1+BH7afx48N/Bb4fRt4Rll8UzbUtZbiNf3lpvwyEDJ+XI\nIHUdQa+5/wBg3xle/s/fsG6748+IWkgeI/iCsqFMYdEKuIEZTkoHQFyP7w9a5ockry6HXKlKLUXu\nfkf+2L41uPEnjbU9P1S4N5F/bV2lomAGt4RIABgcfvNu8YAAPWvQ/wBmjT/Ctxcf2/qdzYWVva4a\n5vbjc6RKx5Cgcux6ALyW6AjJrzD4f/s1a58TdW8Ya9++cWcET/vPv+awAJwTktznrX35+xX8AdCn\nsY9e8TWO23tIQzyyMsUUcSeZucOwY5+Qnctd9Bo1nokkfVGneMfCFpomnf2eL610iZ98exXtUIQ/\nK0g2xlmc/d+bt0NfRngyxXxPA3iXRvAs+p20YI+1zW8jP15KoEaQ56/dzXomhftV/Aj4daa8PhfR\nW1+5s7eMtPaWfmWoCkBFae5bDMDzkKeR+cU//BQHQPF14Lbxn4VWeF2dEa/CJDvAzgMsDINo+8cY\nUdeeK9FJJaI86cpy0SZ6Z8Kb7V9N1jyNMGi6GVk+aC8ZoZUHX/VBxMcjofKFfPH/AAUq+JXhHSfB\nFzb+JvDuneKZFtnfdNYyvbHjn5ncsx9Mba9h+H3x/wDheYI9Rm8KaJZxMh8jy4beWQj/AGSqocE9\nCMZrK+KOufDf42aHfWvifwbo+tQpBIsSTefbSqMHjYJIkOe218+xrmxV3aCOjBws3OadvL/hz7K/\n4Jz/ABo0r48/sf8AgXx94fmFpbTadHCbQJtEDQfuzHjJI27cAZr9ArWGKIBozn14r+Z//gm/+1Z4\nC+E/w2uPhTD4MHga20nU7tRZPPOAN0hbcnn722tnIG89a/ZDwj+1t4I8QzLBZ3cWT0UuCa8OpJKT\nVylSlZNo+2yP1quy4rhNB8f6VrMYkikU554Ndmt7BKuVYUibMay9jVdhkYqy0kZ5UioXK5zmgEVG\nHHNQEGrTkZ61C2PWgspsO1VmHHNXXA6iqzgZqWBRccZqmwwcVfZc8VUk4qS0U261A4AHtVthmoHH\n6UDKTjOQapuDir7jvVR17etAFFs96pOM1oOmTVd0/OoZaMt1z1qpIlazoTVVo/akMx3TOaqMnc1r\nyR+tVHj4xSaGmY8i+tQYWtGROKr+Wf7v6/8A1qnYGz//1P7QQMnFTAAU1BgZp9cSOgUDJxUoUChQ\nAM06mAUUUUAFFFFABRRRQAx65vXc/Zz9K6Rx6VzeuD/R2PtSlsNbn5z/ALTN7Pa6FdPCxUhT0r+E\nj/gpj8SPFGkeOWMF5IuZexr+7D9qCPOg3QH901/BD/wVSs8eN/TMxrxa8U6iTPpssheJ8MaJ+0N4\n6swFS/k4x3r1HSv2qvH9vjbfP+dfFtva8DHNdDa2W77tcs6UD6OlCR966V+138Q0IK3z/ma9N0r9\nsr4hwgZvG6epr87tPsia76w0uRkA5rllCJ61DC83Q/RKx/bc+IMOP9KP/fVdZZ/t4eOoVG64J/Gv\nzlj0aXb3/CpG0eUdCaysjs+oLsfp9af8FAvGURBeY/8AfVdVZ/8ABRHxTFgvI3HvX5If2VOpGCaf\nHpt0OjGnyroyf7Oj2P2csv8Ago5rwA3u3511tj/wUh1NcF5GH41+IS6bfcDc1WEsb8dGNG3UP7Li\n94n7yWP/AAUmn43ysPfNdZZ/8FJ4/wCOYj8a/n1W31JejmnhtUAyHOKevcl5RTf2T+jKz/4KS2hK\nlrgjPvXVWX/BSLTTgPc/rX80/wBo1pPuscVImpa0nRiTTvL+Yh5NT/lP6f7L/go3pD43XXX/AGq6\n6x/4KK6Ecbrsf99V/LBb+I9WgwXXzPqSP5VrwfEHWbRc21rCG/vOGkP/AI8SP0oUp/zGbyWn/Kf1\nZ2n/AAUL8MzrskvAoPX5q/nnvPE3hPwD/wAFC9V8UWWoPDF4kuxegxYETbyDjj3618823xq+I2nn\nNndmHPGIkVB+SgV6z4W+HP7SHxf8WaF4zsb17ZdNmR3mu7tIYhC56kMcn6AZr0suc51PZt35lY8n\nNcsjRo+3grcrT+XU/s2+GPikf2BZ6sZm8qSNH3k9iOwr6osviZ8NPDWkx6ld3saSSEZlPznd3Azn\n+Vfl3oGuwaT8E7GxvtWTxDPaQqbh4lVbNDj/AJazOAMD0zmuF8MftL+FbKBrrWdUtL8W5EQtvDdo\n91cREngNNJ+5BPoOnrX0mDi6f7upufE46Km3OGx+mHxF/aLs9M097/TrH7VbPjFxdxO0ZBODtiQE\nt+Ir8+P2g/iZ8JtesGktp4YL9VyEu9MmtbRy3QRyFQMHP8LH3q9f/tG6Xe6U03hSxFigf55dZ1El\n1GeS8VmJCMejED3rx74h/H3yLX+zPGWqWH2B2XcIlklhy44ZCQ+VbjBAPPvxXqfV4yjfQ4KdVxkk\nrn5B/Hz4R+IJ1/4Wr+zHd/8ACMeL4CxmhtpRFnYd+6PGPmJBHIIYZBJpnhX/AIK/ftK+BNO0/Tvi\nPqkF9Z30sqb41YT2q2xCt5wHA3E8Gvqvxn4I+HHjq7uvEvwH1S8v9Qt7cXE+n3Sq0kYQb8oy7HKt\ngkZRhjjivxu/bF0rSPDGtPr1hLHa2mtzRPIoixC5kIE8bY+56+hIrjq4WLVpbnRKavzxP6TPg3/w\nWB034wX+neCfCFv/AGjq+qyLaWkMY5km2jPPbGec1+n3jv8Aab8N/B/4WWWt/E27+z61PGJJLdiA\nYwTgD645r+UH/gln+zj4f8GftcX/AO11p1wY/h14SAbTZXcBGuJYVMkbqxyBgnYehPFWP2u/2o5v\njr+0ykGm6mz+HrWUGHOVeVnAOApGdoPbrxXlKm5VlRp69zXRU3UqK3Y/cO+/4KL+FvGepJoPga5a\n7dnVXZgQC8gJVR7nFM0z4+aH8U/CeqeGvA6zXviiVmtSZARFavtdifQj5QAeeTX5t/Dz4hfCf9n7\n9nPV/HV3b2kOqah5105lyCwGQipxkMnGCM8V8XfCf9r3xT4a+J+raT4YuWt/JuDJcFQCGaUKNrcH\nJwWC4xz3r2Y4GXvqKtbbzOBVqa5HN3vv5H014si+Jfwi+Fd/8XfHWr7pdRvJ7eUOxV0CliUCng4A\n6jtXyr4L/wCCkHhq58N6n4L+JUT6v4aj3K6Kf3kMpBMFzG2cjYxAb0Psa8+/bi8b+MPGfw9tdH+3\n3Rsre5/tBrJyNoiuVzjIOQdpdq/FDwXqz2GtWuokCe3jLx3EZziWI5V0OO7xtx7iunEQcqKpTSOe\nFRQq88Gf0E6f4b+Da6/ofxA+GviGLxBpMghm1XSpceY8Uy75AucBymSCv+NfVvx5/aeh1HwPr2va\nLos2lw3OpWdvJZXG5SY7COIpLGhA8tBHcIGC8NnIr+Yfx/qeufDq+0628KzyWkNo0jxXEb/MxGCj\n5HrGVb8a+oPif+0n47k8JfD/AEXx7cnUJ7jS7rXZuTvb7ZcGOEZzxmG3Q/RgfSvG/s6UZNp6WPS/\ntCMkoyVj9TtB/aCufh34j1TwL4dv/sr+IJ7VbeSZcpGFLfNtPJyq8ZwRivUPBH7QtxpXwWsPhZlY\nrm6jgh8xiSZVSRhnb3yckL3JyRX8zX/C1/Enirxtp+o6xcyvKHWIyZwyq24DHI+6Sea/Qj9nf9pv\nTfh54yT4jeNIzcS+FoE8m2chkluDiNQQRt5+Zyeg4610UqfLa5m8QpXP31TQPD3wx+Fja/8AEm6i\ng1nVgrqmpyoY7SIDakjIxKpv+baxjxj7qs3I+LtQ8YP4wvIdH8C+Irq3juZGKLZzfZ1uo0cgGJPL\n/dxbs7UxluSxJr8/7P43eIfiRrmpat48uri5W/uzdhM74TNIQpwmMMyoSkYIKqcAAAV96aN8VPh7\n8Jr63vL2FX8S6vHALDSYwrTQxKMK0rAYhjH/ACzjVd8h+dsDAr0HZ6Lczg3fmlsfcngXw/4A8GWI\n0r4iRxajrk8ahrVP9IuVDdN5ztU+gLAjuBXq0mt/DT4aeGry5XWVsY7qFoUt2lIDseoZArEsvcBS\nP9qvzf1r9pK48NvcaXb6ikl5qLEPZ6YSQCTz51wu6d9ueQH29fmr5e+Ldz4z1exeKyu54bK4XZme\n4byUUjBMaI65JPByS1efWlKN3u3oepTkn7qtZHG+GPi5qEXjXxXoXhbUUuLJr53jaOA26AnrtZ5S\nc/RQPajw/wDtBfFP4e+Lg9vqsuxWHJct+HFfJPhjwVeIyFtQilkguZUaBCfMY8fMyjOAewJzX1RY\n/D/UWsFnaEeUF5fYc/mc149XR3luaRjzKyWh+2P7NP8AwU5nsxBpvii5ZyMAs1ft78I/2xPCfjiz\nie0u0ZmA43c1/CBqkw0OVpLGQrsbBAODmvsT9l347a14c1iJTcSKNw4JOMfnXNJNLmiV7KLdmf3V\nad8S7K8QPHICDW4vja3b+MV+GPw3/astH0mIXFyM4GcmvWx+1bpKj5rgfnXK8ZbRnUssb+E/XT/h\nM7c9WFH/AAmVt/eFfkjH+1dpBPNwvPvWnF+1LpLYzcqfxpLGxD+yprofq4fFtuTkuKYfFduf4xX5\nap+07pbY/wBIH51oR/tK6W3WcfnT+uR7kvLZ9j9Nz4ngb+IUw+I4O7CvzYj/AGjtMc488fnV6L9o\nfTG4+0D86f1uPcTy6fY/Rj/hIID/ABCg65bEfeFfnvD+0Bpzj/Xj860I/jzpxGfPHPvT+tx7k/UJ\n9j71Os255BBqM6tbk9RXw0nxz09sDzx+dW4/jbYN0nH50/rURPBS7H2sdRgbqRUZvbY96+Oo/jPY\nN/y3H51cX4w2Df8ALYfnR7ePcX1SXY+tTdQHjNRtLER1r5Zj+LdiRlZhz71cT4q2bf8ALYfnT9tE\nn6tI+kXeI8Aiq7bMHBrwD/haVmf+Wo/Onj4m2ZGfMH50/bRF9Xke3SKp4zUXlL/e/T/69eLf8LKs\nzx5g/Ok/4WLZ/wDPUfnS9qifYSP/1f7RxwMVIo55poFTDiuM6BaKKKACiiigAooooAKKKKACud1x\nf9HI9q6KsDXB/o7H2pS2Bbn5x/tNoDolz/umv4Nv+CqluB436f8ALY1/el+0wudFuR/smv4Qv+Cq\nUZ/4TkL/ANNa8TEv30fXZKrpn5CWtqSAcV1FnbEt0qtaQEAcV01lB8wx3rinM+voUjodJsiSAR0r\n1bStLyoGO1cdokHzA4r2PRbfKrnk1xzkfQYSmrBFpA2DIpzaQuQNtd1bWw2CpWtV6KKy52er7FHn\nR0YZzjNPXRgDwtd4LMZwBzVuKyGelHP0GqCZw0ehjriraaGMcrmvRLfTgwyAK04dLQkEilzmyw6P\nKhoSk4C0f2DxjbzXrq6UpOQuKf8A2QmM460vaF/VUeMvoIxgLxUJ0EZyFx3r2h9HUngfhUDaOCMY\no9oS8KjxU6DnjFMHh8uQqgD69q9ifRhnCiq76ONpGKpVCPqqMLwb4T8D29wL3xlcSMgGVgt8Zz7s\nQQB+tfX+m/FXQoNBbw18OfCVvcl1yBnhcDhpZyASc84GAPWvlb+zWifcqj05FdJoyzmE6fLJIElP\nKxnGfrxXpYTMJUvgVvzPHzHJoV4tTd1+H4H9A/7FieCvHvw+gv8A4nmLVNUlzGbO3UTLA2eQdxI4\n7dPrX0rqHgDwf4U1ia3h0i20qxuZA7m6ZX83HfGSq47Yr8rf+CeGiaj4X8Qan4Y8N2d3ZfaWW4gu\nr9B9nUnrg5y30ANfvPYfC3wb8TdPNr8T7h9YuFTaYAoS3/IbT+Zr6inNzkpfM/I8RRjS5ovpo/VF\nvRNd+D3h7QUk0FLKePyzuS1Eblgo+YbQRnHpmuJ+IGl/Djx/4GuNQ8ManII/IMjWUmnL5m0dpEKr\nIACBhgQRgFWrFX9n1fhsJbj4Q2L6H8+fMtmWRMDkgjBYZ9CTXi/7RHjj4/X3ha2S3t7WeTT7lHhz\nueUoxCO6vCVkjIJ+ZRkAckdq96hVi9j5vEUpLZn5H+MPFPw+1L4q3Wjafsn17SZmaFYs2V4I+DII\nmABmjK7uAAyHkgrlq+CfjX8PfA3jqOHxF431C8/sxXLXyswUieBiGIxlcuoDntn3rQ/bz1Px7out\n/b76ZxdXDpNpd8CftNndIRtKSpsYNlWU7h/Dn0Na7Qv8ffBevaXY3P2fxs2gjVBaxput9TltyGln\nQAfI7RsxmjA2kfOoDKVpumqsJdCfbOEknqj468XftPXWh/D1/CPwwefStHUGxvbGEYEgOSkjH+IE\nHIye1edfA+4j8RfFyw8YeLNSMkumTLFFbkEiXaMbieCo2kkH2xXzQlrq1zeXkeoyIvlW4aaAvtlz\nExjxjGDg8EHnBz05r2D4NQaXe6rea5pN09qbMbmnk6Rr8i45zjcxAPb3rmo0aUNU9Sqlac3Z7H6I\nftDXljd/C2C60a9WbSLOxDym4H/LN/kJ4POHDDkGvGf2QPhvJ42+M2TbSzNdaY93IFYMQ4c+W69M\njIO0cnKjHWuQ8A63Y/EH4Y+Nvh75pnjs/KW1lALZCTLlOuAsgy2Qcckivvr9kjxT4L8E/Erw7428\nKC3urWW2EMjYwsUclx9oiVhuyrxLIVYc8oecGvSxdaHKqi6o5MLSbnyPoeW/tUfs/wDxru/iVY+C\nPCekvftNZx3FyYPkjEQjQgNnP3Uk28epHavw28b+C9Z+HniHUdPvo/sUayRyiFskgOSOCOoLAgHp\nX9bX/BSTx/qP7JX7S2qeN9GUnTdZs3XS1iGUmVXZDb9SAY3Vwvdh7ECv5z/if8WPCXxw8Yx63qNj\n9kwtvbtKiKcZjKAmMYUkOoIHHfvXkvETlVlFr3Uro7p0IKmpJ6tniHjuzu/E1/4T0zSJftF9q2m2\nscIVlyZ45Xs8cc52heDzke9eo/tl6TA37QV/ZeFXjudP8K3Nn4atfL5Bj0a3jtOMcbXkikb3Oa57\nw9Jo/hr4p+EfHWlKbo+FdNvNWKLhSbi1uZ3iwOf+Wu1jnPy153D4ju/siaheTtPf61K08zFd5Ers\nQWI5yd5d8dSTmuijUUotM5Jwadzy23tLaDxs0qRlLaO45xzgBg5UfQZH1r0rX0j1rUIppo/9HuZi\nTtyofY24bsnoudgx1AAr060+GOm63pgXRJkkUlYJsYfyIMAjHq7MSXbIGeM4qGy8OahoOj/2feW8\nkkSs8kTAfLGV6ys7cM/+yufbLYqalOy12KhLU6Cz8baZ4H8YS6rbS/aZ7eNGtbd+UWd1G1yBkcdh\n7k9azB8ar7T/ABQ19rqvcXmolHny4W5l3YILyHcVHQ4HOKxPCngiDUvFM2rT3MYiZ4zIZfvglcHC\nn7z84AHc9qW++HGsazqlxaaDpctzeXkq+SOd2S5G0sQd7dMtkIoGBUtO90a87aPoz4cftBaYurXL\nNZwWVvZQyN5wHy7icgZPzO3pk59K3dW/aK8R33g7WNTESx2E0EhN3dsFfLHJ8sklt3YAE4FfF+q+\nAo/h1rMmk+MdWiubiWQhoLJw6KE6l3Hy4+mSfpXnPxa8fT+PJrPQNGyNPs0ARBwMrxnHvXPUXMzp\np1+SLuz0H9nfxulj8SrWfUDm3ubjCIec5/Xr1r+ka68Oanqfw6FzZpCzyRA5U52gjpgdPxNfzEfB\nnTNQ8P62mqhl8yNWcuy5WIDqxz2HrX7IfB7493C6INJOv/aROvyRRr8ze+DyB714+YU3a6R6GW1d\nbNnPeMvBMMd48MnAU4PA5Pc1yVhod1orefp0pU9QBXqfiq/k1CTz+hzk+v41g2skJtiQQWry4Tke\npOEbjtK+LnijQ28mW5cgcda6W4+PnibyS0dy30zXzl4tivxOZIxt57c1ylpqshcW93xSrUVNX6m2\nExfspWex9In9pbxbExHnMSPerCftVeKID88zfnXn/h7wjZ63DvRQSawfF/wxks0MkKkYrzZQUXZo\n+qw84VVoe42/7X3iJcZmb862Lf8AbH15P+WzfnX596hot1ZylCSKyDbXanhjT9nFnT9W8j9Nrf8A\nbP1hOszce9b1t+2xqSkf6QR+NflIyXi/xVCWvgwIaj2Ue5m8P5H6/wBt+25eLjfcH8637X9uCcHB\nuP1r8XPtOpDkOaYb7VEHysaFRXcydBdj9xrf9uB8/wDHz+tb1t+3Bk83P/j1fgwdV1RRwxGKBruq\nqOGP50/YIl0V2P6BbX9t1do/0n9a3bf9tuLPNyP++q/ne/4SjWF/ib86ePGWsp/y0b86aoGTpR7H\n9Htr+2xbk4+0/wDj36V0Fr+2pbtg/aR/31X806eO9cQ5818j3qwPiR4hj6Tv+dP2DM3Rj2P6cIf2\nz7VutwP++q04v2yLYgH7T+tfzER/FTxGn3bhqtp8YPEqYxcN+dL2Eu5DoxP6fYv2wrRuRcj86t/8\nNf2//P2Pz/8Ar1/MHF8bvEitjzj6datf8Lw8S/8APVvzP+NL2EyPYwZ//9b+0xARzUlIBjilrjOg\nKKeF4zTwuOlAEWKMGpgKWgCEKSM0FSBmpqMCgCAAnpSAZ4qfHOaMCgVxgXHvmsDW/wDUN9K6Oue1\n0fuD9KT2CO5+dn7So/4ktx9DX8I//BU9QfHwVv8Anqa/u9/aVH/EluCf7pr+Er/gqYoPxBH/AF1N\neFjPjR9nkK3PyitoxgV1NlEN3NYtrHjA9K6mxjGRXnzZ9vRidtosfzjpXsuhoNqt3xXlmiRAuAK9\nk0WLKrXJM9/CROutoQY8ip2hwv1q5BEuwVZMCkEYNYXPXUTJFtzx+tX7a3AOakWAZA61rW8Ck7hm\ni5UYktraADP8q3IbEEYwadaQcYzXS2ltkgDniobOqFO5kpYDbkelTf2dxjH6V1UVpgdKtizGOOc1\nm5HQqRxL6eQelV20/Hau/axBIz2qBrBcnPampA6J5+dO9uartp4r0RtPFQSWAJzihTE6JwtloiXt\n2lux2K5xn37dK958FeGtM0PUoPtl5b20ikMNkfmyt+hx+YrzqOxdH3R5z2xX2j+yT4F0DVfGEWte\nLbb7XFC4KQ9d79gfb1rtwus0jyMztToym+nY+9fhD8LvEPjPVNH8aNquo21pbxEPKEWFFXtyzHI9\nMV9r6/pnidPD66n4J8YWTxQIfLkvIfN3EcYyGXJH1zVbX/FnhvRtHj8Q+JGht7WxCiRbmQpCsR42\npHEp/KvVfA2i6ILIX/hJdN1HSjH5lukhlgMTuM5GRz9a+3pc0FFx1f3H4LjasalafNom9t/xPg68\n+On7QmkwI+lz2OsRwsomk0542eMk7cPbzeWzKT1+Y+teZa3+09aQ+O7C18f6Ve6ddW06Ga7tc26f\nMc/6RAWY7RgHK5VgCOor0f4sxWnxH1vW/D3ijQRFcJbuytK4ljMQ4JU4RmAOCGVgynB4r5C+IPiX\nwnLq+m/Db4z/ANqWjw2kNvZapPC08TRFeR5gBkBRsMuWOQSvORXdHENJNnm1KSu0j83f29rG4+L2\nry+IbCaRr60lufssQkUrJFZsWZVI5LpGwKf89FRsfMMH5z/ZO0bxf498Va1p6Wci6nouianLok6t\n5RubaPd5ojKsrloY5WkCo4ZQAfQV92/FPQtTl0bR/C0duZdb0O4eRUt7N3ivrc7gTDI0QVJGBB2t\nIA+fkUHC1wPw38V/CvwNe3918P8ATdS0PW7K+hu7nw7fxGImcAZurAOFlgZRlZYk3fK2PnAChTx0\noJJJ2ZjDCxm272aPy9+McGk/tHxxeL9FjXR/FWlgWut7XjV7qRWxHcRRoAjJ0ScLkKy+YMI2BP4p\nfSvhp+zVr+t6tLFb6/qV5/Yb6ZGgjXbCRcSSKwUq+G2AgYZTjPWvrX/gol8HvCPwe1rw147+GIj0\na11NjqFrcRiIxtMgLNGxj+T/AJaGJ0KrvQJxxx+OP7S3xb0jx5q1qPDrPFYZkuGt9xZYZp8M6oW5\nIDFtpOTt2gk4zTVRxq3XYxcEqeu59e/sMWxn8EeJNQttQk/tC2vrFxahSwuoJN6bV5GHVivHPXpX\nS/s1sb/9oa4+GhukSznlu/KnlbYsRkVlBQKCDICQAB3r5Z/Zb+I934D8RyX9leyRTwWkV5bMTsWS\ne3YSKjH3Ix2+or1rwD430/RviYvjiwst6pa3UfknCszcYBAxhlDA5HOQDmvSpxcqajva9jjc+WXM\ntO5/TF+3H+z98Tvj3+xl4E+JE9q2s634S1u1jkgjcqb2AtErY4wHd0wSAfzr+SP4n+Db74feIPH3\nh3xbDNoWt2jpqNhZzZZgPtOHhyQN21GJ5AOY+gr/AEA/2U/EHhH4tfD+2+CPjyc3OsJHZ3DTKxLY\nnia4t5lPzBTFtClezYHuf5Vf+Dgv4Oy+Af2rE8eR6fFayXiz2N+sThklntgkjS7QcqGSUFuAMmvO\nrNwnytbndpOLkuh+Hvwz8XtoGqX99qE6y2qwMg3IQ0m/cNqnHHLknkA4r6l8NfD3wivh+w+I+v31\ntDpumW6yvbys2+8mYYCiNCG2cYIDAsW5Krlh+dtvqN7DFJYwSMYZ2BZAeGKnIz9DX0h4DmTXNOh8\nOajG0wAE0hQBptgJHlpkgKOSTkgdyegpKaheUtjGPvWitz6n+CXw68bfFma50/wXp99qNvvZ4rS2\nwsJ/vNI4IVUHfkDGcHFfqb4b/wCCdnxy8b+Fppb2eC+s7O3zLZeHLS41V2LHiLz4oxbpjPJDSkcg\n18V/s6+CPj942uovD3wc12PwrYQOWjiwzTbcYJMhwD7bQB6cV9vfFb4ff8Faf2Xfh3H8ZtP+J2v6\n34QjkCXt1ZzPN9hWXgtNbOrYiPQshIHcCuOpxHg/aRw8anvbappffa34nZTyiu4OrKF16r8r/ofL\nXiP/AIJv/Hfwx4qF7pnhXUtJt7Iu5l1GO4RAAMqSzRLEDxnIbIH0rxvVfh98Xfh94suYlmXV7i4R\n0SOwhllCKRyW8ssF25IC5+uDX3xb/Hv9vqw8O2Wv6t4v1nUtB1NRJa3Om3DPBJC68sfLAGDypzIN\npOMV9O/CTxj4Q07Sz8TfjZa30upswSzjupHuPLZ/+WqqXIEjjuzMO+DW1fEeyfv79h0MK6mkEfkx\na/soaXF4Mu7iWZ7bxLrKrGGvtqyQhjnZHG252kkJHRRjgDA5r5o8VfBCL4XW0VoIXury5lMUzshV\nA4JUx7m5Yg8nb9K/cOH4s/BHSlnGm6N9v1drwywzWcDI1ujN1M2TI7j+9gDrXj/xT1Twj8UtF+x2\nlpc3GszSF3/csrFUz83nzEksT0GMYzzXOsa73SNZ4JLTqfKPwe/Yt8dfF+1s/BXhzTHu7m7uCbu7\nZ1iiWMY2xgYOAoyxGa96+NX7BqfslT2Go+Cbj/hItauyqTrbq8vlg9SpON2PXgV2Xwn+OHiX4d+J\nYfC8gmJt7beqorImT0JwPnP+0SAT1yMCvt3w5+0V4Y13w7cap8TIQluyhfKikEAlPYNNzI5J7KAo\nrGripXs1oaU8NFK99T4Fs/hn4i1Xw59puodhY8gH5s98jPWuEtfAt7o96YdR3KmeARzX6QeG7TwR\n4paXxD8K5rfTLdPlNiQJEVupC9ye5JJJrpNH+GOjeKvtF3qccQmU4ZmG38h0r57GVpUJtvZn0GFo\nxrRVviR+W3iPTNItoSPLBbGBXzrrmjQNc+dERnPSv0L+OHwi+zTSf2WcqvcDAr42v/B2oWYZrgHA\n71th8QpK5hXoOLs0J8P9UlsbhLdm4yOAa+u4PCtv4j0jeBg4+tfClnJ/ZuqAhujV9yfCvxXF9nji\nuDkH3qcTTb1OjA4l03ofMXxE+F1zYTtNGmRXz7e6I1u7JIpBFfsJ4m8L6d4h0wz24DEjpXwV8QfA\n82m3rkpxn0rzruLsz7nLsTGtE+WJNMABwPzqi+mZGcYr1CbTRkis6Sw7EZp856MsOeatp+eCKqPp\n/PTFejSWI9KoyWAz0qlIyeHPPHsF5GMGq7acCPrXfPYgjp2qs9gMY/lVcxjLDnn7acOhHSoH00V3\nz2I5JqtJZLjpVKbMXhjhG03uarNp3OFFd8bMAcVAbMDgiqVRmbwxwp00dCKrvpvtXemz7VE1kpGK\npVGQ8MeeSad8uMZxUH2E16A9j171X+wn+6f8/hTVUxeFP//X/tPHSlpAcilrjNyUdTT6ao9eop1A\nIKKKKBhRS0u3PSgQ2il2+tABNAmJWBrv+oP0roth6Vz2uD/R2+lJ7Djufnh+0r/yBrj6Gv4S/wDg\nqT/yUNQf+epr+7P9pU40af8A3TX8JP8AwVF+f4jAZ/5aHmvCxnxI+14fW5+XdqpwDXVWC4IHXtXO\n2q9D1rqbFMsDmvMmfdUUehaGh3Be4xXs+ixnaoryTQk+YGvaNDUFVHtXNUPoMJE7S1T9381W/L44\np9tGCtWhGua5mz11EopGd3P+Fa1rFhgMVDHHls1rW0XY0NlxRsWUQPauntYjjGKyLGLKrXUWyZwR\nxxWbOumizDDtIrRWHpSwxLgZFXlTC8Vk2dcYlXyA2MUjW571ohe5pQmTz60rlWRjvbDtVdrXnFbj\nRY+hqB09eBTiJxMOKHdIB1zX6Y/sW+GYbvVormdN6rztJxX522Fp5tyqqM5Nfrp+yB4fls7IXkYG\n8Ada9bLYc1RI+R4pr+zwktT7l+PWqeEF+Fd74a1y22x3du0fyRlsEjg8CvzA/Zc/bT8UfBhx8O/G\nc5vrKBymn3KqJyUyRskQ5I9gcV9t/tD6neyeEp9OtZrmOeVCB9m+9+GQa85/Yd/4J9aX4ujk+J3j\nKyvFnkfKmaTa8uD1K4BB9vTkV97Q5ORqR/P2Jm1U5j2z4XnwT8Svixb+LPDdpcW0uoJL9r0uUSR2\ns4YbfOjVsKobOHClXQnIypOfbviv+xF4J+Ivw2uvAK6Jc3StEYrdLmYiezLZK+XKqMSqE8ZLDgEq\na/SDwr8JtJ+HmiQ6VpjYhCKwEn3lOOinB/I5FOk1fRL5m03T7uN54wcRyvs2Z/2MA8+h4rjrYhRd\nmTGDnrFH4Y/Df/gnf4x/Z18NX39pLFrWnwt58a61ewmGFF5YgGFEi3fxPgt6EV81/Ev42/BTx94g\nk8EabqXhT7f5qRxz6Pq8i3lqexM8mbVyD/CWOR1GDgfut+1b8Gtf+KHwN1ia2kXWNRW326fp0knl\nWj3GcRo6j5dpYjJxkjiuM/Y6/wCCLXwd+CfhmLxF4xsbXXvEl0iPeXDRLHF55+YrDEPkjjQnCqo6\nDJJPNKvXrRUXTjdvZeXdv/hwhGjFNzla3bv6aH8S3/BUT4V/FnwjpDXmgXdhqemXsJle2tpwzv5f\nyu5hwEDAnOYmbOTgnkV/NdG12ZTCkeSCSQ/YL6596/0OPgj4C8Cf8FDv23/2gP2R/wBorwrpyQ+E\nJ0k0CxutOazv7a0tJPssu9yquwlYpNHKrZAfAOMV+Kf/AAU9/wCCGHi7/gn1fXPx+8G2d74u+Eeo\nytaXl2hP2rQHnIwt0yqyyQMSUWVk64ViG2sapYyaqrD4mHJJpNdVqr79H5HMvZ1oe1oSutn3P56v\ngHdR3utzWNxFI7lY9mz7oKtj5up4DfLjvgd6/Svwh4KHjUvrU8lsNVvb+G4BdDDEshjG75Rj5WAP\nHYjivjjwT8MNR8P/AB3Tw/8AD+GTV7a5uo30UW7rPDNMWAQSNxkFdwyAGziv0T8NGy1Tw5LqixSW\nl0kapLEhKss9rtUq4xxgbhleeRnmvr8qScWnujxscmreZ/SZ+xfr0OgvofxN0OxW08M6h4bt5NVv\nLzMW7VLPZIZIwpZgDA6As2FDR56Hj+cf/gvV+0PrPjH9qC9tdHWC18+3MU7RtuNzHdRqvmAHgBkQ\nIWXqV96/Tf8AZK/aD+IHgf8AZi8a2vgk2V1daRpFsjWkqnez3EbQl9srHClVbzSvAYKcYJx+LP8A\nwVr+FmvWXjDwx441OWaSwm0KCKC4liKpPIhO5VYZGV6E9xg45NfP5heOLjF7a/8AAPbw0b4Sc1vp\n/wAE/Fm1t5JCZMjIICj/AGj0r+of/gk9/wAEvdP/AGk/E/hDwh4lujpWn66j3Wo34QSNlVLKnzMg\nwcY+8B3r+aPS9Oglhl1M4gjR4442kPyCRj/E2OBjJr/SC/4N4vHfw/8AHX7P+kfEPTYIL7UdPSXT\n0jkdSVIA3AqMEMM457DNfPZ7z81BP+Hze9v09NTtyvkjGq/t8vu/0z8Mdd0fSP8Agn7/AMFu9J+D\nHiDS7WbSPFF9YaZAY0fy59Ou8W0Ejxtkq6SjepQsMAjua/tp+H/wR8L31jqHhTU7CO4sNTt/s81u\n4yrxTjnKt1RhyDzXxz+3R/wSx+HH7aHx5+FP7TUSDSvFfw01m1v2IRXF7YQyea1pNgg5DgNHJk7T\nuGCGr7f8c/FXwb+yr8LNS8ffEPUYIruK3YW1vuzLcT87Yo0+8xLYHArzsZWpYr2dOMLWio7b229W\n18+jNMPCpRc5c27vvt39F/SP5pv2efhD4G8BfGjxl+y9f2VtqGm6Nretw6NeaqzyWOkW0ToySmNR\n5blN0kah26jBBxx4j/wU4+KHwn+CvguSxs9Wnhkv4BCqWkBRJYlAQyAEBVlckhADhFzkDpXlus/t\nG+FvCuqeL/iP420+CTxv4ku7gR2sVyy3KRvJly2zKRmWRix3fPwVCj71fgx8fLfw/qPjGPx94g8Y\nJqd1qD+YbBvMlli3MeCHWFNgH3RsA7YNfdRwCdKmq+soxim33SPHeNkpzdLZtv8AErXX7QNtYyW1\nz4Jh1BLWUFLqR52d53TnOVPJwQMAKoHc19IfCP8Aae8YajpA8HWUlvZyTu9vHIUzNGZDzuIEj5xj\nkDpXyKNS8GnxCTZQSS6bZIq20QVPMeYrhm2b8KSR2wFHQV5JY+PfF3w58YTyvZKsrzByhmX92ep2\nlTtBx6HI9q8/FUYyvyrU66FaULcz0P0L+LPwF8UNoMurRa3DGLX95NNG1yZbhyM4AlRAAv0x7mvm\nDSfFWs3V9Y6fcPe3K27bPMZ/LiYqecDHAx1xk19G/wDDRi+O/CK6DothIJzw0jR+bt6ZKbpPXu+a\n8P1SDxN4c8RpJM8+qzXO57iSXCrbL0XacMoH59K8+lUdmpbnbVpq6lHY/Ur9nX4lz2lrLYC7trZx\nho5VQ7Vz2G45z2ycV9B+KfGvi/wvaPrERS8s7gbnlDZ+fv3OPpX5s+C/De828FzLJcRlFkxbxh/m\nPcsMD9K+sbb4XXnjDTo7ISNFEoO0tnDHHX/GvOxcIVE1M9PCTlBpwI774lXWuoZrrlD2Pavnvx14\nqtZ1a2gALc5Vay/Fepax4aupvDbKrSW7FC69DisnwpaWt5cGfUXBJPJauHDQ5G+x24mbklbc8Q8R\nNPboblkKN1Aqr4P+Ll/pN4IpGKhT619GeKPC3h7UIyIpVbPYV4hq3wliL+fBnB6AV6tOUZKzR5NS\nMou6Z9ofDL432epBLe5kByBwa9M8Z6Pp3iLTjdQBWyvavyoubXxD4UuRNCxQKcjFfTfw1+Md9Nai\nxv2JOMfNXNiMvbXNE9DLs1dKok2ZHiXw99gumQLgZri5bEjmvdvEdzbaspnTGSK8yntVVsEZ5ryJ\nxcdGfqOBxEa9NSRw0ll6is2Wzzziu7ltQcVmzWo/OoTOuVI4mWzPaqT2rAjiu0e1U9O9VXtQe3Iq\nkzJ0zjHtD1xVd7M4wBXXvaj06VWa09apSMnTOQazOMY6VE1o3p0rrHtMZxVRrbB4Gau5m6RzLWpI\nxioJLT5eBmuoa246VC1vgUJkOmck9sDniovsif5x/hXUPbgVH5K+g/T/ABp3IdM//9D+08dKWkHN\nLXGdA9Sc81LUKk7qmoEFOHXim0ooGPGQMGn4NIvTinUECYHejaKWigA61zOu/wCoaumrmtex5DUn\nsVHc/On9plsaNcfQ1/CJ/wAFPZjJ8TQn/TQ1/dp+042NGuPoa/g6/wCCmMxk+LO3sHNeBjX76PuO\nHVufnNbA4AyOldVYKQ2SK5yzGUAIrqrBckZFebI+7oo9G8Pplh/Kva9EQsFA5NeOaDkMMV7boR+Q\ncVy1GfQYNI7q2jwgJ5q75ZxjGKjtACn3eaulOlczZ7CRXSLJ3elbFnCfvdKpqhJ2kVsWseFwRQ2a\nRWpuWUXygY9DXTWkPIrIskHTHeunto84z+VZNnXBFqOPooq6sQ6dadFGRzVgJ2rNs6UiPyvwp3ls\nOG/CrO0jAo2jqaLjaKBjNWbWwe8k2qOtSKuW6V6t4F0K1vrxI5zwx7VcEm7HPiKjpwchngv4d3V7\nq8IkX5CRz2r9qvgb4BtdH8PRBMAlRzXyz4B+G9vHbpc24Eo4r6q0DWdU8M2qxIp2dMGvqcuwqguZ\nn45xZnrr3opbH0Z8KPghP8TPifbJqiSNY2h3uAoKHHTNfrzbeEvsotbCwEYihUDaVxnb7V53+yTo\nkn/Cr4tbmWNJLsbgyjPHuTzXr2o3mq6bqYlV4pUAI2HIH588/hX0kPdhZn5XVlzzbR538SPEdj4d\ntHtZ3iEjoQsEwPP0PB/DBr5g034KeF/FF3J4lvJ59LkYgyeTKZIXXtwfmXPTr3rmfjv45j8Ta+bb\nXL+DS4UkwFPmPIChzlXXAzx93mvmrWP2gP8AhHHuZB4hhk0y3csjTJJHIwX7yeaoEYJBBHm7kPRv\nWvNrYSFed6yuuiPToYqpQp2oOz6nqX7UHx78Gfs3yeAPDHh3VLjTxJ4n0y41VfK4utLWbZcoWYY2\npvWVgPmIX61+6tlf2cunxS28u5HIkUpypU9CDX8pPxW+Jnwp/ar8C3fwp1+7vbbWpY3vtEa5t4bx\n7GYfdktzujcb1yCpMkTDIV8cH0H9l3/grh4H/ZXntP2Y/wBq7xJLrg0uzRrTxDbafcRwbVLbopTs\nYI0QG3a5BAHcYJ9Ftrl5Feyt6HmVI8yblvf7z0b9kP8AZQ+Mfwm/4K//AB1+Jnj+Ge48MyaL5nh2\n/aIRxXg8RahJeSqHXh5LfyBFIDhlAXjBBP7BftPX/grwT+y543uviHDBPos2mXS30VyFaKS1aM+a\nrq3DDZkcgmvjuL/gsh/wT+uUmuNI8d2V3PBF5ywQq8twytyPkRSRnGM4/Gvw8/4KI/8ABTrS/wBt\nXUNL+AXhGDU9K+Gcmowf8JDqSKEubm0inRZY1jJ/cxFiEkkfBdchQRk1zSlVxte0r8ztG9rWVrXf\ny/EjDYWOFp3Xwpt/PeyP5Y/i98Gpf2evE2tXelx2o0O9ktNR03ULGNzGscxl8tUzkggRNvGcqynt\nXsHwa8E3OqaJdSyw7UmY6lcMZ1WTy2YO+TJgBsbWBPO7aOehy/8Agsj8efhH4k/aZ/4Vz+zjfmXw\n74SsYdEuEt3D2c11al2EwK5yf3jgnAJJbqK/NjxV+0N451vwuvwz8LSTQ/b5EDsHzJK+CoTjAVBk\n8ZPY9q+xw2Ip0HLTRaL7zz8TSlUS13tf7j+mz/gmnqPga6tr1VkiZtZ1Sax1awl5vGEUT5jDkeW0\nUqSeaicMrI6jcGrwf/goj8ONF+Lt5ffDP4MRFo/CrvmbUGD/AGi4tFJdYoy7ACaFTxgEN2GQa/Ln\n9jz4k23giK9+GEfirU4b7xW9r5cVtai5RZ7RjtfzXuYNhXLAlc4TIANf1V+GvhD8E/2vPBHgXxXp\nCf8ACL6/p9vHDrMCThTKlup2SKwCnzFIVo2KZC/Kei18fnOMSqKtLc+nyjD89OVKO3U/hm+FXg/Q\nfFvijVfhL4ynOni41COSNtuAGX5QvPJyD0yOvXvX6z/sT/Fb4kf8E9/ji918BvEh1zSLkGe7tsRr\nbTRxg/u2SVlYTR42rLHICQQGBGRXk/8AwUI/4J9/Fbwx8TbnxX8KVGv2Vxbrqay2ODJGwJV95U/K\nysnA5JBr52/Zp1vxLbavajxDp93eNaXCbvKRJIw4PI/fI6B888EZPTniu/LcTh8ZSaaTvutzz8fh\nq2EqJNWtsz+xHwR/wWD/AG2vixpbxeCvhkdAgji+0TapqKT3qQJEMuWhtozI4OQFwQp4+bqa/Lz9\ntj9sX4qCDSfiJ8TdYu5vEktz5+m3t5YSWcC5yN1pbNcNlVIHPlbyed4xz09/8QNE+C3gmPXta1E2\nN/qsTxizt765udTmG0Yi+zriKINuwxdkTb0Hp+bHifxrrvxH8ZXPiC81e61SG1geC2tNZvtlwJZM\nnyY3jExyrfKVgZMjH1rXDYbBYN+0o0/e7vf5GdaWIrrknPTsj5F+IXxM0ZPC91dweL5bDUZ5Y7j7\nJbGdpLlpW/fNcMuxEBPzBMM3PQdK838I6r4z+K06+EJV0/QNJuw0kt80SJNJ5Y6b2Ku27+7lQSea\nz9S+FNvquqrqN7pkls+4pPFdvIsVuwP3V85XaQf7We/Nes6V+zx8NLC3j+1+LNOiutSjMkipbTCG\n2jf+Bsou5unyjPqDTq4jmvIinQlFpWPnm8uta+Dnikat4W2TgRNF9ouFjlMRPXG4bQ3oAxIrwHxF\n43udc1w61fSPdXUjbnmwF2j0VV4X3r9Bf2hvg74G0fwRptj4Xvn1C9t2wcIIxKW4ARGYvg+rY9ga\n+EJvBfiG2aa3lijiaM4bcOAVOMA4Iz6jNckKsJam1SlKOnQ+kfhj8S/BfiK4stD8ZiUWsJALRBzJ\nJ7Epx0719yeMbvwBa/D+zTwNq1hcXKsxaweF4/IjA4BlY4LepJr8fYvDWuwEw37KseCVCuvUdBwc\nfTmv0w/ZK+ENz4l8A6pr3iiGKGK1HmQvLCsruR3Ic4KA9TkVyYnDRXvpnZhsTJ/u2jnvhF+0Tq3h\nfVZ9PNik1uz/ADSJICB9M43fWv06+HX7Unwov9I/sbVdInzL+7F0zHcDjnpnA9xX433CeFLPxvca\nNqARhLKcvHHtAZj/AAhPlHPYV+w3wv8A2YvDvgT4e/8ACXfFl/sPnxo+maWLZvt0+7pJMowYYQOc\nv8z9FGOa5asIy3R2UJyWzPm74k3p0S/k1FFx9ty1urtvbyj/ABZwOG7V8zaz4o8RxXG+H5VJ6dq+\njfjNHqra89zfzjUTKB5UqDog4VQOwUcAV4ReeH9QvYs3SiFT/eODj6VyKFpXS0Omc3JWvqR6Z43v\noVH22UD2FehWPxEt5YdzPhBxn1rxLWPC8FlbtcRkyFfu7uB+VfP+qeItZ/tD7HET1xx0rppJSejO\nWrJwWqPtI69Ya9fmIKGGcEnrXa2/hGORRJpXLewr5U8GzSWkS3F7IQ3HGa+ovBfjm3s1Ut83sOld\nMqjSsjGEU9WeiWnh3V7O2Juxx3rEubYebhTWvqPj2e9j8u3XdnjA4FY8TzyfPKOTXhY2nrc/ROF8\nUvgbKz23G4is2W2HX06VvHcWAIqs8YwcjrXk6n3i5Xsc5LbnJOKpSWxro5IwT0571WaAdqaZDic6\n9uQORxVd7c4PH4V0bQYBwKrtbjGQKtMylHsc49rzg1VNrjtmumMBBzUDwZ6CruZSic01tmq32Y4y\nePwrp3hJ7cVA1vkfKvWqIcTlXtsnFJ9kHt/n8K35bfPAqP7M/oaV30M3E//R/tOXpTqavSnVxo6B\nR1qYdKgqVfXrQA+lHWkooETLxTqYpzT6CWFFFFAgrmdf/wBUfpXTVzfiAfuGPtSexcNz82/2oGxo\n1xj+6a/g0/4KTkH4uEA5+dq/vJ/af/5A1wP9k1/Bp/wUjO74wEdt7c18/jPjR91w6tGfAFqTgV1V\ngOQK5i0X5V29feus09DuBI5rzpH3dE9L0JTuANe2aEvyha8a0BDuGK9v0JMqK5Kh9Bgzu7ThQKt7\ncrk9KjtgQOaubPSudnsIZGATW1ZoeOay4xznr3rbs1IIIGKlmkDpbJM4711NquMVz9kuQD7109qh\nBBPb2rN7nbTRdjQHGKtqhI5pYkHFWBHnt0rNs6EiPv0qTaTUgGBiloSArGPrXV+G9S1Kwu0a2554\nFcxuGcL616n8PNCvNV1OILCzjI6DNa0466HFjK0IU257H6Tfs13er68sa3iYUflX6O6f4Dt9Ujis\njCJGlIAAGeTXy/8AAfS9N8O6ZE00Ow4GSRivsXwn8UvDdh4tsdLLMJnkXHljJx+NfZ4BqNNKR/Pv\nEtdVcTKVJaH6k/DHQbjwN8PbHR1QlkjGeCa4/wCKHxFl8N6PvQBpnOxImT5mY9Mf5NeyLfC68MRX\nqNtBQFQ1fKvxU8R7I0a8UoyHG8BWKj1yxUcelevWdo6HxtBXnqfMHg/w74w1a5vk8YxNPcXNwZlS\nOOCRGB+6GVlXJUY52/ia+Of2ufhfrmm+FdV0+Cx01IrhXBtZw9uJicFwJEZkQMAMl8AH86/UL4VW\n1lf6lNeX+trMX5MsojVsHoBgkACvmj9qj9krU/i34s07xPaeKbiTRLZHSS0gWLymZuN7swBOP9lv\nwpuEZWcjWFVxk1Fn81viPwD428ONbXOj6Pp+n+GYYzLJZz3EsoV27222Rg74B4imVT0K9q7zw1+y\n9dfFzxvf69rWr63NpwtIVXT5NHuIU2DHzxXk17G3lgcoBIAOy9TX6r+HP2NJ/h141tvFEdxY+IJY\n3G+18+ctKoyF8yHzHDsCQcjFfR3jzwrp2p+G5rjxH4Xhs7by3Uizt5UZLdBnkMxTB/uofqK48RXc\nVywTPRoUoyfNNo/k6tPh14F/ZM/af1Hxp8P5L241E+cDHdWRu3tbNF+VklmkGQT91hITgYzxX5o/\nt0eJLvUfBFlfSahMt9Nd3Mzr56CW5lkb5nMSSyYRRhVBLHjJr+hP9ubwR4D8ewKnw+8CajcxkrL/\nAGnHdRokTLkYWN2umYMvGxRDnoBniv5a/jeV8feIf+Fa/CuS6TTNHkUXEM+I1icEhvL3Rq65yT87\nKDzxW2C9tJ3ctDHHexgrKOp8j+AtD8U6k95Np6SvOhYSnYfM3/eUEH5hkj/DvXAzai96FEgXzY3K\nsqghyepyc881+pvwa+DWl2M194W1nUJ30mxje6iZWWOT7UibwuDuG1ujBCFyByDXh3wx/Yl+NPxc\n8Naj8S/C2jy3OmR3EjXDqvyBVJLYb1GOgOcV9C8PNQj3dzw1JSbS6HD/ALPb+A5biVfiPqssGn2y\nbWjhDyMUY5MbINpCFguWDcHselfuH+0F+3x8NPAPwg0LSPhfr00XjbxDHYqHklSf+zXtNqvE8sfO\n11EbD5jtBxgYIr8WvA/7M/jyD+19c1G3ltLfSGzIzJnIONpUE/NnuMHjnBrxf4ueEn8Ja7JbZsTD\nHtdXtwRGEODhV4O49ycHjHSvFxuXe1kpVL2Wp62ExsqMJKCV31P7ev2OvDGm+PPCCQC7024uvFCD\n+32EkkgtL4KfJMEW1iEYZyXdVBPGc18lX/gLRfgt8UNRisvDOq6HqN9nztZgsM2ipGQoZXADq0pB\nLCIjr3zivtL/AIIoap4V139nGTx1pSvdRWcUCT31wpgWa4jjH7vBLA+WOCd2M89a+zfih8T9XvtT\ngtviBaadrmmareeRYaRdXVoBEjqNqtFLCofdgtliccDOK+WyuHsnKW2rXa6v/Vj6nMqrqKMV2T6O\nzt/wx+IP7SHwG0f4n2i+MPAvh8+KdSXzLaLVUvYLW1UmPdJ58U6sIymTh2YNkdK/Oi/8HfGn4eeB\n49A+Meqa1oVq1wRHayRW93asgwyeVG06qEXGTJ5e09QTX2X480H42fA79qu88WeAfDfhS80oXLm6\nsJBb/YQj4KFLZigDsOvkktuGelfQ3x3+HHwH1zwxf/E74t/E3RvCV5r1vFNd6ClxN5NtGBhQbWJL\niR1YDgqIwCDnB5r6SnzSjaOx89UtGTctz8ZfHfin4HXvhq30XwzLe+JI4A017KkgVrl2P+rklFqF\nUD+JVY/WvnawlsvFV9ay2dlY+ErZGLG3Eiy5I43Odm5846Nn2FfS9zF+wZ4bvAus/F/UtZjiOfI8\nO6LLFHhj0DXYAHHqRmvonRNW/ZluAut/DP4feJNThtlDNqGq/Z7RSB6B5LqMk9sw+1YYilOOnMkv\nN/8ADl0Zxm7tX9EfBHjbwvZeKLtCPtXiG/4MRFuXACjhYVEe8Anr8wHtTfDf7PHxNuGj8SfELSI/\nCWm2YDRnUSsRfPYfaGOSewCEV+nNt/wUCPg7S7jwt8A/AVna3DqN1xq8zsoA6kpYixX8Dkn3r5B+\nI37Sn7XT6wnidv7J0glldBpGh2tpIfT/AEmSK4nHsfMzXLQSpP3qi/rstDorJTWkX/XnqYY/ZO8Z\nfFzTmn+GvgnX9es5QFF7a6YILVSp+YvcyhUTHqGQY5r6Di+Blp4T8Aj4d/Fbx7pmkQSosUukaOX1\nzUEA7OLRhagk9fNugB3FeF+N/wBp/wCI+pWEM3iXUZfEGtJzHb3eoPqLxsR94iQsB7AYx6V8/wAu\nv3Ophnurf7Nq142biSK4cEFuwG4AfQLWv1tSXwfe/wBF/mZ/VVB6S/r1/wCAfR2jePPDH7O3iL7B\n8AvCtva6kx/d69r7R32rRjput41X7Ja56goskq9pKu6r8W/iT4RvB40jnm1ZrljLdGdmkcu3LFnO\nWbPqayfhj+z/ADa2serLqGJjypmZiCfQkk5/OvoHxD8H/Eo8PTaayCG8SNtkqD5HOOhI7Gud4iNS\nSUjoVCVON1oeVz/GrwL8V7My2sEekamynzEXAR2/2Tjg+xrkbHSdKul8qeTMp4yetfnzd6xq3gnx\n1caLrFu0M0cp3qcjknqK+3/hrqreJoBHbJhyAQanGU+WN76BhKqnJp7nJeO/Ct9Erpajcn1r5U1q\ny/sed5biPDj0r9EtV8I6/FmW5ty8ZPauCuPhhoviK52XyGMZ5FcFDExh8T0OvEYZz+Fan562/iXU\nJr0KoKqD0r6Y8E30RhVrlsH3r3rVv2ffCOnWQmsQN+M/jXjmoeEZtMmNvBhQO9elDEwqL3TzpYad\nJ+/qesafrelqAjuF213tj4o0SNAgK5bnNfJ40q8jl3I+c16j4W8IXN4VmcsQMHJNZ4inDlvI9TK8\nVVjNRge4farW8G6EcVSkgIGR3qW0sPsUYjzVkp8nSvn62+h+u4CMnSTluYckTA47VC0XY1sSIN2P\naqpiAPHpWVzrlAy2j4warvGelarJk4FQvHgVojGUTIaM+lQOgB+YYrUkTB+tVHQlTVIzlEztgAqM\nw5GRWgyZOaiKYFVczaMh4SMnrUXkv6H8q03i+bIpNi/36dzNo//S/tMU81JTFHcU8VxLY6AqZcY4\nqGpE70wJKKKKAJUp9RL/ACqWgQUUUUEjhzxXNa//AKhvpXT9u1cv4gJEBHtSlsOG5+bH7UH/ACBr\njH901/Bp/wAFHhu+MTDGPnav7xf2oZcaRcZ7qa/g3/4KMyLJ8ZX2/wB9q+exvxn3nDi0Pg21UnGa\n66wX5hiuXtACQe1ddpwG8YrzZH31FHpugrggCvcdAT5F7V4noC/Mv517roSgha5Kh9Bg0dzABjI9\nKtFDjB5ot0+UVbZMjFczZ6yWhAiEkVtWiHcAKz41IORzzW1axKWwaTNIROjsozXU2qYwSe1YFinA\nrqLVOhrKT1O6mi/EvOatLHkelEcRIq2sZP3ahs6VEhSLewUf4Vdj0/J2yjBpioATjmpBLInAP/1q\nZMontHwu+Gmn+J9Wit7hQQxxiv2/+Av7KHhO10+G6EahiAeRX4RfD7x5e+GNXjulbhWz+Vfu9+y9\n+0Xp3iPT4bORw0oAB5r2cp9k52qbn5xxvDFqjzUX7vU+wJ/gbokNl5USgDHYVy/hP4MW2k+LoJ9P\ntkmuBIGV3G4qM9q9T1TxvGNP82Lk44rQ+B2vtrPjRlmG6YfdB4VV9TX1cYU+ZWPxOrOrZuR9k6nq\nl1pekwWk6gAIB+XpX5vfthftJ618PtAk03wroz6ncsrfdRWwR0+8QW59OtfpZ4yktE0tkCCWbGAM\nZ5NfAvxcTSPEgg8GXg+3Xc7fNbwfIyL3yQC1dfMpTs9kcUI8seY/L7whqf7WfxQvW8TeNhP4X8OW\n4WSEQ2iRTNt567nIVu6k5FemeJfjh428JvCx0y51uC5YSMZd0kSpHkhlQPtx+AFanxN8Caf4RvX8\nNHW7xbDasn2WWYpFGAeQzuQAAPxxWB8Rvi5YeHvA6w/DXSbbV3jU7VAMkG0dT5jjBHHY496rEVZS\naVPQ2w1OK1qao8m+J/8AwUN8R6q1vaazpi2vhuAorzaZPbouc42yhX3KRj8xXkekftGeFfHo1DQf\nhl47ur24ljVktbbxWLaYNj5iIFid8gdPmbB6gDmuC1T9tT4CeLhp3w28UeB7NLqQrFIbayguYRK7\nYYu6xyFUHJyOfxrxrSfC39nfFu0134ceN7f4bvdzZ0yHVHa20+7Rc9EeO4IGOFxEAc9qqlg+d80x\n1MRyLlgrWK37R/wL+NPxP8Jy/FfSTr2lyWiLBdWms3NpJBeTRZCHdGcXBCA7VESsCc5Jr88vB/wf\n8H+IvH8vgDw/4OxroEUr3epSeSbliVXywqJGHxkYCCNsYJJGa/s/8TaL4h8OfCS01GzlGqTyWvmy\nRQXK2FidyncRK0cR2sT12g89B1r+Wn/gqH+1J8eLPXbE2+k6XpNpJatE1nZXi38phX5AzPGjAj6s\nCScds16GEm6UrLlscVW1WN3e4n7UXxP/AGFLr4QSfBe9kudI8UeBdPm+w3NjFBLfvqUnDwXDxFIT\nbknaCRJJ17jJ+Gv2QP8AgqZ8KPgD8Ik+AfjDR7gSTpIslvaYnENy7sdrbwC4bjOMkGvzs8R+LdX8\neX114iihlk1DyFtpGlZA6DAG4Er5gI78jbjrXyz8QlsvDf2eQrHHdWTpMAQHeR4zkvMxY7ix6nd6\nYrujVnQl7SDv66/cc0rVI8klY/Qb4yfto+FZ9F13w78PdLg086o7zziKLYWicDdgknHIyVHHNfkX\noeq6548+IFlaJbNcJd3KxmPJAZWbB5wcZz1wce9es/GP476R8bPGejeIrTQbPwwLS3isbyOyB+zy\nZJDTbW3EZzkjnpxXqmg6DoHwJ+Juh63qN1HqenW0CSGC3uXtHuQzEOrMRujO7uARgDgjrz16s687\nSem2mhUIKmrx3+8/ro/Yz/b5/Yc+GXw18Pfsa6fpl5pFtFKq3UGpXkYtkvV++GmGwurN0B655wOK\n+l/2p/iF+yxoniiHxveeHYpLbTZLJIv7EZBHLdE74vKlOIm3dxg8jBwSDX8UPxI+M/hebxlHffC/\nS7PS1lgRgqAzTRSK24HEhwXz1ZOGB5Wv1E/Z/wD23PjL4F+HFg/iTTPDnibTrvURPdWd8PI1COY5\nPmRK0Ij+XGdhz2I4rxsTlsYW9m9Ox6+GzGUrqa17n6kfFz/gqd8Jfip4v1Dw9f8Ahi6tdW0aAiz0\ny48vS7kTL0/eIicjjcm4lh3OCD8J/Gn4l/tQfH2S2n+Jfw80KFrmBodOjutT0lLtLNj0jNxexSvj\nt8jc+lfE3ifXvjjp/wAeNV+Lcvg+88SaXJ/pVx9vLGzllf7hkBaKNFyQpZWUr7Hivc/iv+1j45+O\nPh3TPBHir4NjRdS0qGO5gaZFuVCITuZDKsjhDn/WIxX+8c1apRhrZ2I9pzuz3PL9e/4JtfHq3uv+\nFgaf4A1bUtOS3WWG30mza/LSjnbi0lmUfXOfrXgEt9+1R4N177H4z8Ca/oWmwH5LfUdMvLdVweOZ\nIuD/ALWK5D9qX4keFbnSrCz8NaFeaNqMYL3YhBjh3kZEkUkErIc9zgfQHNcf+z38dP264dPMHw2+\nJXifS7OBwFT7dctFz0UhmZVGOnGKxnToSi5VLr+vkbKpKM1CmjsPFWqeK9L8QW+raDpNj9ounAaI\nzvNKXPqMRj8A/wCFfV3gnwT8c/jA03h7W0/sm2RVBaysI7Tjg5ErFjkepOSa9Z8Lftb/ALWvhHRh\ndfHPx1HeFAGWPVQzpJz2O4RHPup5619X/Cb9rnxV8Z0FpeaXoGoQ/wCrfzNH067VgR28mKzuMf8A\nbRj715s6dGy9nLbq1/wWenBSb96+vT/hj83/ABl+z34c+EUUmh/DzxZPc6/cYa4e4ijM6bvVh157\n5rlfhz+zF4ljuH1zVFbUJ2Yu8qyMzE9TuBG0fhmv6EPhN8P/ANnDxRcNJd+C9Li1ESGOT7DdT2Tk\njqEjvBcrweySEfSvpX/hnv4FPam30e6m8P30+VWC+tVXJH92S28zJHrsBrmlUnBtJp3+X52Nlh4P\nV30+Z/P/AOB/DLiZbRLkwyQnONwRsA9Gxxn3Ar7uhsdSh8GC2vtNW8jKf3iJWI6bHGM59MGvVfi9\n+zj8b/CMVxrvw60+28W2sb5+0acI7u4EY+95iKEmUj/bQfWvKfCnjjXW1CC1t7f+yNSmXy5LeSNj\nEzKOrQS4KEHqVIxVwouTu1YidVRXKndH85v7ZWqhviA19p8E8M0LlZYbqPbNHzwCe4961f2dPiD4\ngi1CD5cpkZGO1fX/APwUbvxd+IJLPxdpltpuuWpAuPKBjeaNuVcKcggj0NfEXwz8aeGtElga0VWO\nR14Nd1b3qXLy3PPpJxr83NY/dTwxq+j694bjXULYZZRk7a+fviifCmhK02nna/0xXoHwK8faZq2m\nxQ3ygIyiuz+L/wAEtP8AGOkvqmj9QpOBXxTcYVPe0PsUnOn7up+QXxD+P1zoUz2sDFgDgGvCJPjb\ncatLlmJJ9TXqnxe+F8+mX8ttfqV2k4J5r5NvPDtrpV2d74B9K+swVOjKCa3PksZOtGbTeh9ReDPF\nMOp3Ae8fd078V9ieFL+3e2VIxgdsV8B/D2LRjIpaVc8cZr7l8HXOlxWirBtbgd81GLirWR35TUam\nmejMhm5xx7VVlh2L9alGp26DavJqB5TIdwFeBWXY/XMrqOdP3mU5Izmq7DHTnNXZMH2qqw9OK5z1\nmisV59qiePj6Vb2r60NGvJxxWiMmZzR1UkiIyBWy0QOcVVaLPJ7mrSMmjIaI9PwqEoR161rmIdKr\nmEDtnimRJGUyHG48VFgf3/8Ax3/61ackQxzwKh+zw+/5j/CgyaP/0/7TxwKWjtRXGb3CnDpTaUUD\nJ6KQUtAD1OOKlqFetTUCYUUUUEi1y3iE/uGrqa5XxD/qGpS2KhufmX+1Of8AiTXH+6a/gx/4KFT7\nvjNKp7M386/vK/anJOjXAH91v5V/Bh/wUJTy/jNKe5dq+dxvxn3vDuzPiy19PSuu04ncBiuQsztX\nA9q6/TeoHrzXmyPvaJ6x4fXMgzxXumgrhVwOmK8P8PHkMa958PglRxXHVZ9DgjvLVDsDVcMeKbaL\nxz2q6VyPauZvU9iK0IYky2cVu2UQB5rOiQbsdK3bSI59e1J7G0EdDZR4xxXT2yYxWJZRlsAdq6m1\niz7VjJnbTRchRhggcYq4keADjmnwxev5VcSOs2dKRTMeKrSr6cGtV481A0OWz6U0waZihW3BhxX3\nV+yjq08HiKC1ZgckdRzXxf5SryBX0z+zmLyLxbbvEOAwz6V34N/vFY+fz2kpYWal2P6DdJ0B9R0J\nJYZnBCZ+VjXPfA3XdQ0T4wvo93fyRROMAtjJPoDitrwFr6weHFSbrs/pXAeA9RsdV+Pen26xeZ5b\nmQk8KMdz6+wr7iKV49z+bcVfmmuh+qHjrW9J8K+GWvb2ZzM0bGNN2C3Hc1+Nnhj4uWHh/wCK2oeK\nfE98j6heZSOCWRmjgQHA2+vqeM1+mHx6sDr+jmCeXyIXXbgHDkfXrz6V/PH+0z8aPDnwM8Tvb+Ct\nJi1HVVIhluJXLeUxPCRqMkux49a7XdPQ8umk1qfcXxE+HA+N1hf2t9qsltPebitxbPt8uPqPvYA/\nKvwp/ae+Enxo0bxjB8K/h74r8QeI9R1b5I7PSBJdzOjfKwHl9No6jBr2bR/2hvH3wQ8YtqX7Q+oz\naDJrIU2PgrT9t94ivmlOQZY2zDp0Tfw+aGnYfdiPWvvDV/iB46i+GOp678V9LHwvttXiAi0Tw3H9\no1+4ib7i3MzYZGYdftDKAfuw1FPB1b89R6fidE8ZSa5KS/y/4J+GvjP4BeJf2dZLPSvHfjpvCd9K\n6qmgWEZ13xFduwHyLZQzJbxMx6+fMsg/uE8V73+zdFZ+DvjxoU3i2HTfhdqty8caP471P/hIvFcs\nOdzNDosLQ2GmoRzm9jyo6Fsc/DX7R3xg+MHhSe+0b9m7Ql+HFvc74Z71JzceI7sEESG41J8Swx4+\n8luIIvUGvxMsvEdn8L/FcuraBet4s8RGcM3kb/svmueMMSJriQseigKT3evXozhFWR5daMm7y/r+\nvmf6lvxK+KPw0tfh3fz+CdNb4k6rYWxKPcvHIrTlQV3JGnk8jkKIzx0r+Iv/AIKS/tF/G/VXurXx\nPPJpHib7QvlaMNMtoBFBt5lzbht0aAbQJX3552KK+yf+Cfn/AAVd8UfBfwK3wo8ceF7OTXr26D3b\nxB3W0klHP2vbkvOiAs0MXCD/AFjKc4+CP+CgVz4W+NfiKf4t+HddvdQi1otsnaGOwgkCYBRIIwf3\ncZBJIzknu3NR7OSbZrFrlsfhzD4j+KWleIm8RRsf7Utp22XHUxuemxeikdc9a8b8Uf2pq+rSz69M\nXnlk+Zl+YM5OWJPO455yK+59S+Dfhrwx4Sg8SeKL27inLxGW2i+XakqlkGOOXX5iSeAfXivn3x74\n58Oat8RLu5NhHa2EANvb29sCVgCgBccnJIyST1NErtEuJ5h4O8E6l4kuH0TRLSS/vb9jBboBtG4g\nYOTgA19aeJPhz8ZpfC9l8OPHHhGeHUNGjEJuZVLEKeQAenII+XkZGRXM/BRPFXiHV5n8L2Mc8NhL\n50TzEIqFuAScghiAOO/bmv7Gf2ePhl4B1L9gDTLnx3pMN94q8QE2NjexwGJ5ycqgLk7dwOFiyQWI\nHfFaKnFRcnI1pRvpys/lf/ZQ/ZL1/wCL3ivSvDV1epawz3P2VC0Il8qc/cWWInPlOSBkEYOK/ZbT\nf+CHXxFgu76TVIbaJY5klRrGaeyluISBv8lZGlRZFbKsj8cAg4NeI+AvgL8CPEv7Ud1aa5471P4f\nyWMUavbanGI55HUY3q6HACn1XIznpzX3144/aR+PP7Petar8JbP4mQeI312BLnSZtSjNrMsqqBC8\nDgyRSBtuHwdp5OBXk4qtUneNOVj1KGHpU0nONzlviH+w14j+GHwngm8QX1s3h+0VoJFu7cwX0Bf7\nqXATBaRcFkKlhKgO1fvY/HXWPj5rHwP1NbDwNqy3FhBuaaTTnF7bQyrlROtrKoMano+wIVP3sGvq\n743ftdftuWc51f4lw2mvWM0C2ur2LSJPZXsGfuyfZ33RncOHTDxSgOrKSMfmx8YfhnoXii1Hxi+D\nbzx2IuYhd291k32j3E3AhuzGAWjY8QXSr5co4bY+UrmwtOrFuc5eqT/E0xVWnKKjTjqbGpfFPUfj\nNqjap8QvB8GrafOQsmueHZTaTI+OtzGyNESepFxbnP8AA+Oa+/8A4X+Fvhr4P8HI/wANr+O7uLgf\nNYNL/Zl63HO1JGktpCPSP5j/AHRXyP4E+GvjX4eaQni+wtprKa7X55bZ0e0nBHK7RgKx7qQEbpgc\nZj1rwdfeOoJY9BS90eQ/NK3l5siQepj5aA84yuY/ZBmliqqrrlurf1/Wo8NTlR95rU9yuvClhruv\nyWHju6nIZjsttatjF5JPQZUAD6sADXuPwt8IaR4U8RpYarpraTcK4Md3AvmQyRjkHcpZGH/As4r5\nM0nRPjD4FsG0S/m/tS0tEV5NM1AefbtBJ92aAnLJz1aF1xX2H8H/AIueGLeG00rV4r3SCW8qN43+\n1fZp1/hIkKSeUx9ZHI6jHSuT6irb/I6ljNdvmfpD4P8AiDot7GNHuFj1W1cbJzbuRcQnpuZTksAe\n45HcV9VWXhTVdT0KHSTG2p2WUdN7YfaMfMrElSQO6tkdxX596xod3b+JdJ8deELzS9UMgDXCRqbS\n7z0Ic4QMD0O7cQa/U74B+IriTRkXw1KrTojSXGjXZzMf+uTL9/2HDHsDWVPApO6ZdXGO2x4f8RvB\nnxShSbVfhZrDQ3umBZIjM26UKP4JAcHaegbJxXNQ/HS1+J/hRvDX7QVjpt7rttCfIeVHiuo5k6FJ\n0KygMOAySY9q0Pj1+074HsbDWIvDLWNt4l8PIZDp+pM1vehM5zazgqWI7xup5696/nM/aP8A+Cg1\nn4ihn0vVkuLPVrd+sB2xXEMn8YwMKR1BBBDAg+tetSpNK0Ty6lbrI4L/AIKN+NND+KXjK38P6xqp\n0LWtIYxWV1qaedBc2/ZDe26g5U8fvoBju/evzcu/APxH8ApBr2v6e8djcMPKvbdluLGUn/nnPEXi\nbPoGyO4FXfiN8UfE3xS8STapeXf22cn54pwrmUqMbxxhmIAyQAx9+tZ/wx+IPj3wFrMtz4Gv5NNj\nuvkubeL5raZfSWF90cg9nUiutRjyWaOCU26l09D9DvgD451i8tYraIHK4xjiv0g0X4ka5YaIbW7U\nlSvOea+JP2dPFHw+8YTiDxfof/CP6ixwbzR1xbs3rJaOdq/WF0HolfX/AMSNEvPDfhh73Sp4NVtg\nuRJbElgP9qM4kX8Vx718NmGHTrNR1PtsBWfsk2z5W+LthZeN2lkhUGTJyR1r80/iT4Hl025dJW2k\ndO1fWf8Aws8WWvSRy7lBY5rzf4tSQeJrY3ViOcZruwEpU5KPQ8/HRhUi5dT5P0LSdWhn/wBGYnHT\nFfS/hC78UWapuDkV4v4bvpNMvBFcdQa+yvh/qOkaiqxNjca9PFTdtjiy9RjNanYeHdYvJ41E+Qfe\nvSrWR3A9D0qW08LQCMTwAD6Vqw2XlfIRjHFfO4hq5+w5JrTTTKu3HXHFQMnoAa1ZowB6YqlgsMCu\nJI99lPbjOOlKuc81Kc9Tzj0pjHjgfjVIzkiNvu1XYDtVpuAdw4qox/WtLmbRGwPIWotpI6VJu44p\nm5iKpMzkis6YHvVfEnr/AJ/KrxKkUmI/U/8AfP8A9emZH//U/tQooorjRrYKUDNJThgUFIlXGOKW\nkHSloGKCR0qVTUNOU4NAE1FICDzS0EtBXK+Ij+4auqrkvEZxA30qZbDhufmT+1OwGkXAP91v5V/B\nZ/wUNlJ+M8qjPDNX94/7VUmNHuef4W/lX8E3/BQaVm+NUwzxub+dfP43+IfecO7Hx3ZscYrs9LOG\nHrXBWjDAFdrpZJYZrzJH3lBns/htSWX2r33w+PlXPFeBeGhuZQDX0H4dBKKevrXFVaPpMEj0a1Qb\nRirqxjAxUFqo2c9qvBe5rkue3FKxJFH83oa3LOPLZrLiGG55rfs0yBipkzaETprGEnGBya6yytWG\nM1maTDkg129pAKyZ2x0KaRMBgjFTiL1rXa3zyOOKrmLnFZm61KZjDfLiojD1BrT8o0x4s5FO4Mx2\nQlior7I/Zg02W88QQxrgDd1r5K8oA5Ir7S/ZSu418UQREHlhgCvRy9/vYo+c4iTWDqPyP2w8OeG8\n6CkYJyVGa8jXT9R8JfEW01qyQ+SHzMw6lBzgV9V+G40/4R9AAFJUD1NeeX3hTWfF2spY6aiQxEkN\nPIdqKo6nPsOTivvXS1i0fzVUq+9NM67Xtf134mWjXmjwGSeQGO1jVsBcDl2J4AXqSeBX5i/EX4R2\n3wjN/wCJtHvk03UpWa4vPFl1GJ74E9YtHtWwVYj5ftcmw8/IVHJ/WzR/EXhfwfpDeF/BbC5VxiW7\nbl53H90dFjHbuetfm9+2b4PvPEmi7Q7G5vTuJHJVR1Zif0r0ovtueUo3eux8U/sxeDfClz40uvHH\ng7S4PC+nrIy3WuXUou9bvXY/Mn2ph+63HmTyACejO/Wuh+OFxr6arfnRdVk0/Q7Qvc3Vxu24VBkY\nZjyT+ZNdF8LIvBdmtppk8Rgt7BS9rbMxVTs4Msh6EMc4Hevzj/bH8WfEjxjr1x4c0y1ZLC8usQwo\nfKzGoPzkH+AfeJPGKjlqSnZnSuSK0PDZfgJbftaR65q+oSzx6HC7qsMLfNO4+6rnPzMRlm3HCg18\nWX37Knw++Hitp/wuf/is9QleNryLn7Jb4w8dpI2FjbGfNuz9xc7CB8x+rLD4n33wc+Dr/C/wD5mo\nDWJ9t1OvyyXJzl1iHGyPsXPJGTwOK7seCL3/AIUf4g8TWcivrGrw+Rc3CguQHbIhiJ6RoMYGAXb5\nj0AHZTo63vqYTmuqPwn8U/FLw/4W1ib4V/CW6hmhgfZqmqIGWGRYzk21quQ4t9w3SO+HnYbnwgC1\n7z4X/aa+D8ujDU/ifNcahqMTFbfewWJ416KhAJ+c8sflAUcV8F/F/wCHWveDtaudBVRZ2/myec6D\nEhjJzhmPLM2Mn0HtXglxpGreI0bWbJXfT7AbVhY5ZEzwO27cepFdCrSg7WONxvqftN8QdY8O/E7T\nrUWLWjyTKJ5vLbdmSXHy5ycbFIX2r5Q+IP7Pngbwpdvf6pfp9punzbW9u+ZCTxwOcD36ema+FfBN\n98QLK/N1ps7W4Lk5Ykcnnp1P4Ct/S/iN4nTWZb2fF3OHCFpvvEqDwMkEA/nRUrqa1jqVTXL1P04+\nA/w/m8F6Fc+IvD0tu8s0vk/Z7qHcJY4/nYBiTjZglnyCBwOTX7pfsc/tR3mn3+vfsb6xs1TTBDPF\npzyoZY4b51Mu1GIRgyKwGRn5skciv5OfD37R+sWEwvtSmkKx7lXaQMKcgqB6HOGPUjPPp9xJ+3fP\nrXg23vgHs9d03UZb6K5iKRF1uUQEA/eIG0rjOcMT9OKp7N62O+nU0smf0VfGr4MeBPiR4WsfiTB4\nQ1XWNbtrprBdUS3LTqsTMB5/8WAcq8mHXOCeDmvHPhF+yxoFho83/CydMttL02MGW0h1vzBax7jz\n9nkyyIPVDuUHkYFfDP7Pv/Baj4xfAX4aQWKRNqbpciJGvm81ZIyPmDsAHDjqG+YHOCAeSvxy/wCC\nhXxj+Ot9vhRW0vW0IisXj2JbyHn5WQgndyOMe4NeNiaEpO6lY9WhiIdVc+nviz+zvY3WrXWg/BmO\n5TUbw+Y8yxA2skcmFKrIgaJ0bgkHB6cDFcDp/wDwTH/aK+Dlxa/EvSdSiiZd0dxAYDLb3FvPxLa3\nERGGikU8qeD1GCAR4t+yVrc83xO03XvESXcZtJ40a2ikKqPnGc7cEge+a/o3/wCCoXxmf4D/AAst\n38HTGecGJ57Z2Lh4OMg5OQCpOD2NcDqOMX7OWqO1QjJpTjoz4X+BX7EnhmWS88HXQkk0ieUMtjdt\nuudOllH+rDn5pIif9VI33l+VvnU5+g/hj+yDpnw413UfCeowrKICzW5lAJaNgfkORyDzjt27VzP7\nHv7W/wAMviV460a1E8Vjrt1bg2Ukx2x3iceZbSZ43cAr7jI5r9bvil4ftfENh/wkehAC8twG2n72\n1SCVb6VlRWrqSWvVdzas1ZU4PTo+x+O/xl/Zo+Ha+GHvfC8SeVFMzqjEB7YyD5lXjKox5I5XPbpX\n40a14Bufhj8XYYvGhcaRfbbc3qr8sMh4jMmTgAjHPT0PFfuL+034U+Icfh7U9R8ARs+uaSVuY4os\nMHgbuR/EvODX4xWH7Vnwt8a3OoeAvjfINA15YmhSG8GLV25DJnH3T3B6deCK9anN1FZbHl1YKHxb\nn1b+z/4R8TW/7Q2j/CDxXBLGNVgeSy1QjMNxH1Cgg88dwcj6V59+17+2/qf7HXxf1f4B+ONGE8Vr\ntn0u+tZPs86h+dwbaRkHqOAe9ecfsg/H/XfDv7S/hv4Pm+/tXw0uoRCxt7o7p9OlJ6xy8l7aQEAM\nCRnGcHk8N/wch+An0P4y+HfGYiKre2xXdjJBHbNenDDr2Ck1rcTlehOS3X/DH55/tjft9j48eLbP\nxXfaeJr/AOyLaXskvLXEa52kkkgsowQ33lIxkjivzL8ReIdX8R3y3t1cvMWGVLdQPTj9fWuSlvPt\njATE9hmtREeMK9sd6qMUQSR4lSbluVoBc204brzXung++g1C4je/yJeAJQOf+Bj+Ie/X614/Bd28\n7eVMCr+9d94RvRa3QE6k4PUVNVXQUnZn6n/CdJNLt7e+kAVsDLr91gOhB/Q13vxQ8YXU9uv2S5wy\nj+FsH/GvnT4XfEWGS3TRJE3x4+70/L0NYXxIsdfs9XS40+ZprSU7o2Ix06qfRh3H49K+Snhf37bP\nrY4lewSjqcR4nTWZNROo3OX55Y9T9TWTJ8RNEsE+w6goyR3r0m11P7Tp/wBl1OMZA64zXxH8XYPs\n2rs1qflz2rswtNVJ8kjhxVR0488T0/VrixvLj7XYMMdeK9A8CazdQ3SBW718keF9Wu5P3BbIr65+\nGPh261CVJDnFdlaHJFps5sJL2lRNI+3vCXiK8a0RHyRgCu8jvZJTk1yfhbQ2s7ZQ44x19a7X7KO1\nfNYmSufr+QUWqaaJmw4ye9UnXPSp2DJwKgYk/lXAnqfUldlb8qYcgc1YP3cCq8igKfWrRLK0i5zm\nqjkjOO1WW4bJqBxxlatMykVWbBphOBgGnOOcd6gYjNMyY92z1pmR/dH+fwpmemegqTfD/e/nVfMz\ndrn/1f7TA3anb1qKlauFM6LE2aKiGRxTh1wOlUBMp7VIDkZqCnA0ATUUxST1p9AC5NSK3rUVFAFi\nuN8SP+4b6V1hYkYrjfEzYgYiplsOO5+XX7V0gXR7n/db+VfwS/8ABQCTf8aZu/zN/Ov7yf2s3xo9\nz/uN/Kv4Iv29Jd/xqn/3m/nXzuMf7w+74fXunyZY8qOxFdzpXDBvX1rgbE9Bmu70hv3grzKjZ91h\n+h7f4XGCB9K+iPDigotfPHhYGRlr6O8ORgovtXn1pH1WAR6JaD5c5q/ghearW8fyj6VbwBjFcvMe\n0lpYngxnJPWuhsR8wPpXPwjn2rfsR8wZqTehpA9J0oDYCOtdtaDIGfSvPtLcJjmu3srhcZIrJs7I\nI39oVeetUwoJJpPN38CpF96zcjoitACkdO9MKADn/GrGAaWNo0YtKm/jgE4GffFNMGUliaVtsYLM\nTwAMk19tfsteB9Zj8RQ3+qRixizkNcnyyfop+c/gpr5Ah1nVLTJsJTbdiYfkP5jn9a+oP2adRMXi\nVJ7hizswyzHJP416uWNe2jc+a4kU/qVS2mh/QD4Omsl0mO0tv37BR8zjC59l6n8fyqn8Vl1LS9Bm\n0Oxlxd3SgXcoP3I+oiXHQd2x1PFYPgDV/wCyfDs3iu4XctqqrAp6POw+X8FHzGsHT9U1LxZK8d18\nxcksT1JPWv0nk9xM/l2u0q0kc18Pb3S7F/Ku2aR07njml+MXg8eJvB9/c7nEs8e1AnX2Fbd/4GGm\nym7hO0e3evYPAlnp2qW/2e7YNgYGegrOL5W7A3dan4n+JfDEvw50mKF3kutQuMhEZd7lz90EdgOv\npivzh8btqvjrxpe2V9cSi3tkIu7yNP3sqE5KLnomeM/xfTAr+rPxP+zRoGq6lJrsltudo2RAfvNn\nt7A9/avys+KH7Dnj3WPFUkWmXENlZTS+ZemJNuVPRc98Dp6daaxvK7SNVQUldbn4EfEfwN4m1LVT\npPgGy8qIBfMnIz5UC8nJ55PVj3PHTr7T4P8AEkXiP+zfhrCIrPTdMXde3zttBkxnv95gAea+vP2o\nfh/4m8OabJ4N+GenzCyOPttzFw9wYhgD0VBX5H/EZPibZBfAnhfQpIJbSFnmnkHyjzBlnJP3sA8H\npmumhjE3zJmVXDNbnwT+21N4Y13xjqNx4Ruo5LAyNGpTn5FOMe5c857ivD/AHw2gWwtNKfn7SGmO\neBhARj3617V4A/Zs+Ln7Rfxasvhz4Zh+dmMpbacSSA4VR6tgcdq7D9om3vv2UPFy/C/xNbwvrOnx\nOtxGhDNCSMKpI4BGST1r0qVSMm5yPPqU5LRHyHo/gnTdM1HVEVhNLDMoA/iCd+fY4rmviZ4S0TwL\nJqN1AA0jRW8248gSs3IX8M5q5LY+I9N0mz8Xa1FJaJrDtOksikLJEmctn0LcfWvAvif8RH8T3EsQ\nyI96YX08tcAfnzU1KkYxtbUXs5J6njLuJJpT0RicD8eK7fR3vNavrbSGLGNQPl7YWsLw/YJcztdz\nJuSBSzDoM9q958BaTaw6NL4gaBnluZPIiYDg+uP5V505G1ODZ7F4c0mbxR4NstIRAT9slcHvtwB/\nSv2y+EH7KGueKfgRpmtJbOskLxFHCZbKkcivnX9mX9npb7TtGk8QIkcl0rvFGB91cgDPuSa/qt1/\nT/An7K37K3hjxj4uijhhie2iZWwNxkcDn8K8evXfQ92hSSV5H5oeDf2fk8K61YeMY7MQyld0644J\njIDH+te0/t1aHJ8ao77VIGeN4tGtWBPMbqFCnHoeOa/V/wCJXwo8P6l4Osdf0dFjMs55UdY7iLK8\nenSvkTwN4Os/GWpah4PvSrR3WjsCG6xsCR+Wa8WdGpeUX1s/uPbp1qbUZLpdH8yb/BDxn4V8UQNZ\nSSxQRFJYShI2uepUjpmv0Y/aV/4Kb+Nv2Tv2dNFsH1I6n4nMKxxzTHMzIOAH/vYHGT1FfVXjT4Ra\nN4V+F8njfX4vs7W58td44Yxnb16c4r+SL/gol8T7f4nfENI2l2vpsskAiPZOqmvRyxSbtNaGeMr0\n6FKc4pOTWh9VeG/+CxX7Qvh7Xl1iWWOZCWubVXJeJVl/1kDA8+W3I2n7pxivlL9sz9oLwt+0P4rg\n8VQ6eLGa5RJt9uRmJmGCCBySp4PPK/hX53pdvaoYGbK5/L6Vet7ybKkMSOx7V70aMYu8UfJTxc5J\nxkz7E/Zj8a+M/BP7QfgDUJruU/2Xq9oYH35AhkkAIU90YE8f/qr+pH/g5A+G2oav8C/CXxAhiMot\nxGzOo52MByfpnmv5Hfhx4lvbDVNPeWRVS1uY5oZSOYmVgef9k45HbqPf+/r/AIKsaD/wsD/gmP4Z\n+KWnhZJE0q0vA5UOOYxkEHIIPQg8EcV6EV/s0l2f9fkdmXzv7Snfdfof50UNnBdMUYANU02n3tgu\n5Pwz6V73498D+H9Ut08Y+CUENtctteBTnyJwMtH1ztI+ZCe3HVTXmcV8ILc2uprkx8YNcCkcEodz\nzme4MpBlGGFdr4Mupn1BEVsjPeud1d7CXMtoMHuDWv4PhLXySxAkg8irk9DKC94+2PDV9aaRLDcb\ncOcZr6Nu7qy/sb7bOQyNhip5zj+tfLfheOa/VIpYiSMbeK7vxHqlxp1ithdnavp7V8/iY3mfQ0Kn\nLC4ni/WLOTT2urL7vRWHGCOxHrXxP44vptVmaRxlhxmvr+8061Ogm7tn3xyD50J6/wD1/SvAdY8K\nKqm6iG6JidrH27H0Na4JxV2YYxSdkeJ+HYbiGcPjPNfoF8Er/wCWMY6dQRXzj4E8HR6xqQtUABzx\nxX3l4F+FdxpEaXAQgDGSKeOrRcbM3yjDz9onHY+gdLnjNuuzj2rQD5/CsW0tZLQAHqK0xJuT3FfJ\n1r3Z+2ZXG1Jaaj2dScE1X6kAnNJIcH61WL4OTWKR6jZMxUZPtULOpGM0pfIJznNVJGxVJkNjXI61\nWzk54FK0ncmqzN36VomZA+O1VTt7U93qHeF4ptmYvT3xTvNP9z9f/r1AWHTsaNsX+Sf8aEZtan//\n1v7SgM1JtHeo16ipq4Ym6DGaQDFLRVDCiiigB4NPBBGajHHQ04HjNAElFJ04FLQAVxfidv8AR2/G\nu0rifE3/AB7t9DUT2KjuflH+1sf+JPdH/Yav4I/27m/4vTcH/ab+df3sftan/iT3Wf7jV/BD+3c2\nfjXcAf3m/nXzuL/iH3WQ/AfKVlk4x1xXd6PneMVwdnyB6Cu70c5YYFeZUZ9zht0e8+EgGZS1fSnh\nwfIvvXzV4T4Kn0r6V8N4EajsB1rzK59fgD0uEYXpUzD5cdhUVuRtAqx2zXMme1YfDnOD2rfsFPfm\nsGI/NXQ2fLChscDtLFQBxXXWhyB1rkLH5cV1tmxAFZNnfA3oRnFWxgHmqUWMA9Kuoem2s7mxL1HI\nzTWVevan4/GlPc/pTT1Eyqw969r+C+ptZ+JrZcnlwMDuSeleOhQpxjpXt/7PVvbyfEm21bUObTSU\nk1CcHoVtl3AfiwA/GvRwEv30Uu542cRTw1S66M/fPTp7ddLtfCcTAiwiXzsHgzuAX/Lhfwrq/COj\nfZ7ssgwCa+HPgj8Tptbi+13r7pbmRpHJ9WOTX3p4W1u0ltxKWGSMmv02jVU6akj+Xs3wUqFeUZbn\nQ6/brcL5CDtjFdF8M/Ctrol8NW1N/vcxKTwMdWx7dveuTk1S3nvD5z+XbwqZZ37JGvU/U9B7mvL9\nX+McNxrf2mBwsMRARAeAF6D8P1NNx+0eYpO1j9Erx4GtvtHG4jCL9f6nvXk+v6DY3ETpcY2t973J\nrB+HfjSHxcqbpt20dvU0nxK1uLRIPMdsDoMdya8fE6Su9j08MtLLc+W/i1oPg2xsJdPhtkcyL+84\n/h9Pxr8dP2pbGzXTJopbaJI7n5H2IAWQdFPfFfpb8WfHiW3+jacPtE8p5+pr4y8WeFoPELPqPibb\nMw4SLqoqqVZdDeVOSWp+WHhPwz4q8O6nB4q8CR/YRbyKSYU2yFQeQCOnHpX6X/8ABRX/AIJSfs6/\nEj9jaT9qD4NaLceKviA9tHe3UsRMxkV1/ebo+3lrk46gj617r8HfhHpf9mnVNVsF2jlI9v5Gv15/\nYp1B4YdQ+H00cca3yMYQcEKMYIxXq4TFpT5GtzzMZSmo88Xsf5zNx8J/F3xx/ZJ13wjYWV7rfi7w\ntbJa2VraQ+YYLSFt5JCj5F5yWPU1/P3qujahpuqy6VeIyzQyGJlbqHHUH8a/1V7/APYi8O/8E5fF\n3xK8afD3UbOW38X2D3Ei3+1fLkG9sL6J83A6DpX8Cf7WP7Cnxe+EHjeL4lfETQrpNG8SXE+orerG\nfs5WZiw+YcDOcgHtXt4lKpCE4atKz/Q5JydVJ2slofk3dXsmnwvo1o4ZP+WjD+I/4V9u/s96Rocu\nmaTqXiW78m3hugVR+Qwz90e+a+YZ/hpf3/jSfQdEjaYODJGVH8NfoB8K/AujeGvCcXiXxdavNa6Q\nxKW45DyDp+vNeVU2sXQi+a5+xnwp1/RdS+L+j6NoQVYLa4tbeEsQBKzgYCj619vf8F9f2gdEbT/h\nL+xX4duvM129u7Ke+giPzRoSFXOPUk4r+c/4RfF/xRrv7VXhLxdaI1roXh25TUrpC2ESK1Bdix/D\nAHqa+hP2YPiNL+2d/wAFXbb44/GG9DC71UXkKSfMkMEX+pjGegVQK4JYe7Xbf/I9GVXdLd6f5/5H\n9vcDS6lbfDT4dRzYuP7Mb7ao6/6HGuwn61+cvwb8SiT9u658IWLl7KbTLq3mJ6eajkiup+AevePr\n39qzxl+0D4mae08FaVFPaabLckrC0SLhnQHtnPNeH/8ABJLxN4F/bc/4KleOfAFrdsfD3hLTZ9TS\n4tm2G4neURhS46qNxPHpVRwEm1dWduprUxPsKcpyel0l82dH4p+NfgT47/D/AOIP7IPjiWOz1+xS\n7bTZsBTKY8lGX/aGAGHXjNfwUfGTwT8RT4wvbrXrC5uJIJZIZbhUJVzGSu7p6Cv65P29/wBiO9+D\nX/BSPUvGPwx8TXLRWF1I00LtuVZbk/KhI4wVOfrXlf7Rv/BMn9qCz8EWfxF+HFzbahqctw15c2Hl\nja6Scle56frWuEo1JOTjG/8AmGIoxqU1Jt2v+Gj/AMz+QFdMMsTSoCCpwQRyKqRb4Hwelft18dv2\nFPH1v8Gr/wDaTTQTpEWkT/Z9ZtSuArZwWHtz1r8pvE/hSyg/0zTirxsM/L2rsV9mrM8WrR5Hbcy/\nCu1plZGII5x9K/0O9E8WX/7Qv/BEfwvdSKkkcWg/ZJ1Ayd9upTP1+Xmv86awWeyYSREjBr+2f/gm\n1+3f8Edd/wCCQfib4MeNNTtdH1zw1FdW628sgV5VkBZGUHk5z+dbKfLTmm+x6GT2eJimu/8AX3H8\ngklw/hbxPe6Tcsx0+6ZoJsfwYY7ZB/tRtz7jI71wWvRXceqTaVqMYjuIGKtjkEjuD6HqD6V7j46t\nbXUb+fxVYASQzzus4xwshJII9nHI98ivOvEksepaJDrUibprUi0lYdSoBMTH/gIK/wDARWHKcM9L\nnhN9FdRuUYcg17F8H7OSfUleZNyg8g15/My3NwjbcgnBr6l+H/hP7HYJqtvgbh0rGvUUYMeHp807\no+9fgzpXhfxD+6niCyqMDIrivjj8OrdmlKOE2Z284ru/gDopNx/aFy20D04zXkf7W/i1bXUjbaRK\nQehFfPXlKraJ9E2o0byR8fnXr3SJn0eaQugOMit1JbkWTMg3pIBuU9GH+I7GvHNOa51DUhNcknJr\n6NtHsl0+O1jAyQK9OaUUu55cJOV+x6L8BPBcl54gS5hyyMRwRyvsf8e/6V+1ngn4PQaroqfJyQOg\nr88f2atOsbO7hu5YwORuBr92fhcuk3OmxfZ8fMBXzOZ4puXKj6bKWqKTZ+dPxI+EGqeHZDLEpKHo\ncV4FJbS2zFJQQa/c7xf8OLHxHpzRMgbI/GvzM+LHwouvDl7IPLIXPp2ryo1W9JH6LgMzpOCuz5bk\nk2rnPSqjSgnJ6UniC3vdLZiFyB2rzOfxpFC7ROcEetdEIOWqPV+uU97noryY9xVd5uevavMH8dW/\nQHmqEvjpWBArRUZESxtLueptIe5qBpRivJJfHJHGDVM+OWbhQcVoqEjGWPpdz2IupHJqAup5zivG\nJfHjDg5qo/jxwueaaw8jN5jS7ntxkX1p29fU14DL46lONu78qh/4Te4/2v8Avk0/q8jJ5lS7n//X\n/tJXrzUwORmoAakVu1cMTckopKUVQwooooAUdaUc8YptFAE49aUVCGNSA9cUAOrhvFBItmI9K7gn\njNcJ4pb9w49qiexUdz8nP2uXxo91j+41fwRftz/P8bLk+rN/Ov70P2vXzo10Af4Gr+Cj9t1i3xqu\ne/Lfzr5vFv8AeH3mQr3D5ksELYavQdHT51NcPpkYwG7fSvS9IiVcM3Ary6j1sfdYWJ7J4Viwyk+1\nfR/h1MqoXtXzHo2qJaEMOMV6xonjWGLhnHFclSjJ7H0uExNOGjZ9IW6YUH0qwEP4CvIYviDb7f8A\nWAUp+IcABG/9aw+rTfQ9b6/RS3PY4UBOcc10Niozivn1fiJAGH7wcc4zWpbfEm2BzvFN4WfYUcwo\n33Pp6xIwFrq7UjOeua+VLb4oW6jPmfma2oPirbLz5o/Op+pzOmGZ0e59VxFODuq9Gy9Mj86+VE+L\nNsOswx9alHxbtSMeZ+tS8DPsarNKPc+rhJFwSw4p/mQD+IV8mn4vWw4Eo/Oq5+L9tu/1o496pYCY\nnm1DufW7TWw5ZhXrfgbU7bQ/APiPWNwDXX2ewRvaRt7j/vlMV+cknxitTx5g/OvQ734ywwfDTSdG\nt5AZtRv5rjaD8xCARp+ZJrrw+DnB83k/8jgxmZUKkeW/Vfg7n6ffCf4jJpNuJTIFVm2L74+8R9M1\n+nHwp8UnWLNbpZNygetfzAn46R6Xrkek284MdgPJJB4L/wAZ/wC+s/gK/Zz9h3426P4vujDqEw+x\n6Xbte3hzwIoscfV2KoPc19flLqfBI/JOMsPRknWp7n2X+1J8UpPhh4Ki0RHKXWobbm5x1C/8so/y\n+c+5HpXy38Fz4o+JEyX0srCFj0zR+0lff8LTkk1eeTe0rmQgHjnoB7DpXa/sx+IdJ8P2P2OfCmPC\n/nXt1lorH5nBWbTP0O+EZk8JE8Z+pr0DxfdN4mhZ7hCQnTI4zXm/hzxfpq3sbEA7ulfTEOkrrunq\n1vGFXb1xXlYqg5x0OvDV/Zy1PhbxN4e02KMyiANIT1xXIeHfhBaa/qI1HU12xIflXHFfZl/4Aim1\nDbKmV71avNI0jRYALcfOOAPevJox9m/ePXq1PaJcp87eMLWPw1ov2HSU2YGAa3v2fp9Q0Lx1pOs6\njfG0aWZYgzNgfP8AWuo1fw4l7E+sa4dsEfzAGvzC+N/7Xngfwd8VtF0W+PmafZ6hbtcJHyTGsi7g\nAOScZr0KF3NSOCvZU5LyOw/4L7fAi31vxL4c8XTeNr6NdZtZLVtN+0FYcw4IcKuODuwc55rx39gr\n/gol+yT8cvBR/wCCcv7d8NjHftD9g028vgot76IDaq7zxHMo6dN3Uc8V+tP/AAWc0r4deNv2SdE8\nSaNok2oTJeQTWNzDAd0UciHqSAQGGOPav8wn9tDxHqlp8e9Tt9zJNbSADHysh6j6EGvo1XlSqrk2\n6nl03GWF13T0/M/sN+M3/BvZpHwT/aR0f4i/A26bWPAt+WhkgGJJ7eOXPAP8S+h618c/tef8E3fi\nt8PLPVNG+HvhO9u9E4Mb7PnVz6+2a+T/APglZ/wVu/bv+HWraX8MrS4vfiBpsShLXTbndcTqB0VG\n5bHbnOK/0etP0jR/jD+z9aa74qsxplzrGmo80cgw0E0iZKnPdG4/CuivCFS0uhhTxXs2kt+vof5z\n/wAKv+CIf7avxX8IQWV9FY+CNH1L57y8u5M3DQn+HaOnvmv1S/Zy/YC/YV/YQ1uR7a5u/iV8RGiU\nGGyjNw0Bb5c7YwRGue7Gv19+JP7J3w41TXItU8b/ABM1hvD+jqrXmnxXQjt2x94NtAbbjnGa2fAG\nrfsy/sm+CvFPxC+DOkadPYTWvnG6Mge4uEUZxvYlmwcgetbKvhqSaja6+bOt1ZSalCm795bfcj85\nvip+zT+15+1pounXXxMuk+HvwvS4W3m0a0+S7nhVukjjGFccHHTNey+OfDP7AX7B3gvWLn9m27tP\nAmtx6U4a7sZvKvRKy9dxJYknkg55Ga+Df23/APgqr8TbzwHHrXwotZLOztRl0nHyO3r+Ffyt/tLf\nFf40/tC6rN8RPHd/ITdLteKMlUx9B1ryKmNniVJUny+fU7Xh4Qaq4r35LVLokf2x/wDBFT4ffD/9\nsX9hu/8AFnxI1hfFnjWfxbftf397L515MY5cxNIx+bmPGO2K/YLUPhx4R8AX97o2vSRxLBGCCxyA\nuOK/jp/4IP8A7Pn/AAU3+H2rRa58LvA91D4I1+ZH/tS7lFsiA/8ALQRsdzgDoQK/tJ1jW9H+H3iD\nwp8LPjnaJLq3jW7+wQXDfOtxMELlM44O1SQD2FetRvSVpKysv8jz6VKUo2c9NXbt1+asfzQ/t3/t\nXfAGX4N/GX4H6aItQEmnu3mQ4ZBI6kdRxkEZr+A/T9XuJI/spY46V/c7/wAHMf7Ba/sr+GoPiZ+y\nd4OuxpXjh5I/EQ02CSeK3ljAYSsFDeWHGQei55r+FnSYSLkRsMc4INcEpSc3OXUzr2fKo7nWWkcz\npsxuHWup0iS5UlYCy7uGUHGa73wR8OL7XnUWwIDfxdq+pvDH7K+tSyrfXKho+oIrOeIhHRhDDTlq\njw3wZHZJFLDrG5be5Xy5h7dQwHqpwR+XeuKvNL01L698NxvuN3E6qOxkj+dCPrjH419neKf2etfs\nbT7Xp2WjRTlQMmvjXUNMn03WhPMrR3FpKHXcMcoc0oVYyeg6lNxVmeE6RayjUVizmMtxX1jFePpv\nh1Gt26Ace9eNeIdBt9G1mZoDtiLCSL3jkG5f0NaujXGr6ky2kAZ0PHrXNile2prh3y3Vj7X+EnxD\nTRfD8upa3LsVQdoJr5Z+KniuLxprkl7A58sE4ya7rUvDGox+DmkkVo8Lkg18iapqslrO9qh74rkw\n9JczkjqxNZ8igzvNPMSyhIznntXtPhewlubuNWO4GvmXQrqczhm7mvuH4GeHLjxNqENvENzccVWI\nfKrszw/vOx9s/C7Slg02N1GGwOlfX/w6+LWo+C79LW7c+S+MZ7Guh+DP7Pus3GmKZLcuhUdqtfEL\n4DaxayuIoSpjGQcdhXw+Z1eSXMz3YJyilE/RH4d/EXTvEOmpI5ViwFUvit4JsPFukO0UYMgU4xX5\n+/DLxLqXhhRp91Jgxn5T7CvsXw98ULbVbZYDKGcdQa5vrNOcFKD0O/D+1p77n55+PvhTdieSIRkc\n9MV40n7M1z4ousxI2/POO9fsJf8Agi18XOJ4gBvPOPevTfA3wSXTLqNjGGUnOcU8Pi3c9N4mUY6s\n/I7w/wDsCzatCJZYZB6mu8h/4J06pbqs1pabgBlmftX9Gvgb4caCtnGbhEHA4wK7HxPoug2lt9nt\nVRfavooXlG55VXNmpWP5kLr9jeHTswz2SyOOOF6mtmw/YUutXKLFp4Td/s9K/of8OfBfSvEOpC9m\nCHngcV9W+Efgf4ds9m6FO3asPY1W9zKWdaaH8vMf/BN6NrfbHYbpMZLFf/rV4d48/wCCfHi3RlJs\ntPDofRa/tWHwe0NI9ywLyPSuW174G+HtQg8mSBDn2rqeHnbc5XnErn8Klx+xl46tJ8NpTbM9qT/h\nkHxd/wBAtv8AP4V/arrH7MvhuC0eZLZOe+K4b/hnPw//AM8E/wC+azdGr3J/tV9z/9D+0delLUSn\n/Cpa4YnQO3HrShqZRVATbhnFKKgpwbFAE1FIDmloAKcGxTaKAHMSa4PxVzbN9K7quE8Vf8ezH2qK\nmxUNz8jf2vW/4lF3j+41fwXftssR8bLk/wC0386/vO/a+BOj3X+41fwaftrDH
gitextract_l9oltb41/
├── .gitignore
├── .ipynb_checkpoints/
│ ├── notebook-checkpoint.ipynb
│ └── notebook_extras-checkpoint.ipynb
├── README.md
├── R_ODSC2018.R
├── Rnotebook.Rmd
├── Rnotebook.nb.html
├── models/
│ ├── augmented_30_epochs.h5
│ ├── basic_cnn_30_epochs.h5
│ └── bottleneck_30_epochs.h5
├── models_trained/
│ ├── augmented_30_epochs.h5
│ ├── basic_cnn_30_epochs.h5
│ └── bottleneck_30_epochs.h5
├── notebook.ipynb
├── notebook_extras.ipynb
├── python/
│ └── notebook.py
├── slides-resources/
│ └── style.css
└── tmp/
└── dir_for_quiver.txt
Condensed preview — 18 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,910K chars).
[
{
"path": ".gitignore",
"chars": 50,
"preview": "*.npy\nvgg16_weights.h5\nfinetuning_20epochs_vgg.h5\n"
},
{
"path": ".ipynb_checkpoints/notebook-checkpoint.ipynb",
"chars": 44837,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"### Building an image classificatio"
},
{
"path": ".ipynb_checkpoints/notebook_extras-checkpoint.ipynb",
"chars": 3731902,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"### Building an image classificatio"
},
{
"path": "README.md",
"chars": 4878,
"preview": "\n### Building an image classifier using keras\n\nThe fact that computers can see is just not that amazing anymore. But, t"
},
{
"path": "R_ODSC2018.R",
"chars": 15486,
"preview": "##Run this to Install Keras\ndevtools::install_github(\"rstudio/keras\")\nlibrary(keras)\ninstall_keras()\nis_keras_available("
},
{
"path": "Rnotebook.Rmd",
"chars": 14288,
"preview": "---\ntitle: \"Image Classification Done Simply Using Keras\"\nauthor: \"by Rajiv Shah\"\noutput:\n html_document:\n df_print:"
},
{
"path": "Rnotebook.nb.html",
"chars": 1196418,
"preview": "<!DOCTYPE html>\n\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n\n<head>\n\n<meta charset=\"utf-8\" />\n<meta http-equiv=\"Content"
},
{
"path": "notebook.ipynb",
"chars": 45269,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"### Building an image classificatio"
},
{
"path": "notebook_extras.ipynb",
"chars": 3731902,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"### Building an image classificatio"
},
{
"path": "python/notebook.py",
"chars": 7230,
"preview": "# Build the Dockerfile or install dependencies to begin\nimport os\nimport numpy as np\nfrom keras.models import Sequential"
},
{
"path": "slides-resources/style.css",
"chars": 2338,
"preview": "@import url(https://fonts.googleapis.com/css?family=Droid+Serif);\n@import url(https://fonts.googleapis.com/css?family=Ra"
},
{
"path": "tmp/dir_for_quiver.txt",
"chars": 0,
"preview": ""
}
]
// ... and 6 more files (download for full content)
About this extraction
This page contains the full source code of the rajshah4/image_keras GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 18 files (8.4 MB), approximately 2.2M tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.