{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "view-in-github"
   },
   "source": [
    "<a href=\"https://colab.research.google.com/github/bhuiyanmobasshir94/Cow-weight-and-Breed-Prediction/blob/main/notebooks/027_dec.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "id": "B3W_pFmsfyih",
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2023-05-03 10:43:26.296382: I tensorflow/core/util/port.cc:110] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n",
      "2023-05-03 10:43:26.344958: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n",
      "To enable the following instructions: AVX2 AVX512F AVX512_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
      "2023-05-03 10:43:27.157388: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n",
      "/opt/anaconda3/envs/yt38/lib/python3.8/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
      "  from .autonotebook import tqdm as notebook_tqdm\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import sys\n",
    "import os\n",
    "import PIL\n",
    "import PIL.Image\n",
    "import tensorflow as tf\n",
    "import tensorflow.keras as keras\n",
    "from tensorflow.keras import layers\n",
    "import tensorflow_datasets as tfds\n",
    "import pathlib\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn import preprocessing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "id": "5kYcqMyc1hS7",
    "tags": []
   },
   "outputs": [],
   "source": [
    "## Globals \n",
    "YT_IMAGE_TO_TAKE = 4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "-HJIoeP8gQX8",
    "outputId": "d96a1fe3-a2e0-4bf6-9b0a-17f9b98546a8",
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading data from https://cv-datasets-2021.s3.amazonaws.com/images.tar.gz\n"
     ]
    },
    {
     "ename": "Exception",
     "evalue": "URL fetch failure on https://cv-datasets-2021.s3.amazonaws.com/images.tar.gz: 403 -- Forbidden",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mHTTPError\u001b[0m                                 Traceback (most recent call last)",
      "File \u001b[0;32m/opt/anaconda3/envs/yt38/lib/python3.8/site-packages/keras/utils/data_utils.py:346\u001b[0m, in \u001b[0;36mget_file\u001b[0;34m(fname, origin, untar, md5_hash, file_hash, cache_subdir, hash_algorithm, extract, archive_format, cache_dir)\u001b[0m\n\u001b[1;32m    345\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 346\u001b[0m     \u001b[43murlretrieve\u001b[49m\u001b[43m(\u001b[49m\u001b[43morigin\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mDLProgbar\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    347\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m urllib\u001b[38;5;241m.\u001b[39merror\u001b[38;5;241m.\u001b[39mHTTPError \u001b[38;5;28;01mas\u001b[39;00m e:\n",
      "File \u001b[0;32m/opt/anaconda3/envs/yt38/lib/python3.8/site-packages/keras/utils/data_utils.py:85\u001b[0m, in \u001b[0;36murlretrieve\u001b[0;34m(url, filename, reporthook, data)\u001b[0m\n\u001b[1;32m     83\u001b[0m             \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[0;32m---> 85\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     86\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(filename, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mwb\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m fd:\n",
      "File \u001b[0;32m/opt/anaconda3/envs/yt38/lib/python3.8/urllib/request.py:222\u001b[0m, in \u001b[0;36murlopen\u001b[0;34m(url, data, timeout, cafile, capath, cadefault, context)\u001b[0m\n\u001b[1;32m    221\u001b[0m     opener \u001b[38;5;241m=\u001b[39m _opener\n\u001b[0;32m--> 222\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mopener\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m/opt/anaconda3/envs/yt38/lib/python3.8/urllib/request.py:531\u001b[0m, in \u001b[0;36mOpenerDirector.open\u001b[0;34m(self, fullurl, data, timeout)\u001b[0m\n\u001b[1;32m    530\u001b[0m     meth \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(processor, meth_name)\n\u001b[0;32m--> 531\u001b[0m     response \u001b[38;5;241m=\u001b[39m \u001b[43mmeth\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreq\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    533\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\n",
      "File \u001b[0;32m/opt/anaconda3/envs/yt38/lib/python3.8/urllib/request.py:640\u001b[0m, in \u001b[0;36mHTTPErrorProcessor.http_response\u001b[0;34m(self, request, response)\u001b[0m\n\u001b[1;32m    639\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;241m200\u001b[39m \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m code \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m300\u001b[39m):\n\u001b[0;32m--> 640\u001b[0m     response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparent\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43merror\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    641\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mhttp\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmsg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhdrs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    643\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\n",
      "File \u001b[0;32m/opt/anaconda3/envs/yt38/lib/python3.8/urllib/request.py:569\u001b[0m, in \u001b[0;36mOpenerDirector.error\u001b[0;34m(self, proto, *args)\u001b[0m\n\u001b[1;32m    568\u001b[0m args \u001b[38;5;241m=\u001b[39m (\u001b[38;5;28mdict\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdefault\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhttp_error_default\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;241m+\u001b[39m orig_args\n\u001b[0;32m--> 569\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_chain\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m/opt/anaconda3/envs/yt38/lib/python3.8/urllib/request.py:502\u001b[0m, in \u001b[0;36mOpenerDirector._call_chain\u001b[0;34m(self, chain, kind, meth_name, *args)\u001b[0m\n\u001b[1;32m    501\u001b[0m func \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(handler, meth_name)\n\u001b[0;32m--> 502\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    503\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n",
      "File \u001b[0;32m/opt/anaconda3/envs/yt38/lib/python3.8/urllib/request.py:649\u001b[0m, in \u001b[0;36mHTTPDefaultErrorHandler.http_error_default\u001b[0;34m(self, req, fp, code, msg, hdrs)\u001b[0m\n\u001b[1;32m    648\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mhttp_error_default\u001b[39m(\u001b[38;5;28mself\u001b[39m, req, fp, code, msg, hdrs):\n\u001b[0;32m--> 649\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m HTTPError(req\u001b[38;5;241m.\u001b[39mfull_url, code, msg, hdrs, fp)\n",
      "\u001b[0;31mHTTPError\u001b[0m: HTTP Error 403: Forbidden",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[0;31mException\u001b[0m                                 Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[3], line 2\u001b[0m\n\u001b[1;32m      1\u001b[0m images_dataset_url \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhttps://cv-datasets-2021.s3.amazonaws.com/images.tar.gz\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m----> 2\u001b[0m images_data_dir \u001b[38;5;241m=\u001b[39m \u001b[43mtf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkeras\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mutils\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_file\u001b[49m\u001b[43m(\u001b[49m\u001b[43morigin\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mimages_dataset_url\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m      3\u001b[0m \u001b[43m                                   \u001b[49m\u001b[43mfname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mimages\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m      4\u001b[0m \u001b[43m                                   \u001b[49m\u001b[43muntar\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m      5\u001b[0m images_data_dir \u001b[38;5;241m=\u001b[39m pathlib\u001b[38;5;241m.\u001b[39mPath(images_data_dir)\n",
      "File \u001b[0;32m/opt/anaconda3/envs/yt38/lib/python3.8/site-packages/keras/utils/data_utils.py:348\u001b[0m, in \u001b[0;36mget_file\u001b[0;34m(fname, origin, untar, md5_hash, file_hash, cache_subdir, hash_algorithm, extract, archive_format, cache_dir)\u001b[0m\n\u001b[1;32m    346\u001b[0m     urlretrieve(origin, fpath, DLProgbar())\n\u001b[1;32m    347\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m urllib\u001b[38;5;241m.\u001b[39merror\u001b[38;5;241m.\u001b[39mHTTPError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 348\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m(error_msg\u001b[38;5;241m.\u001b[39mformat(origin, e\u001b[38;5;241m.\u001b[39mcode, e\u001b[38;5;241m.\u001b[39mmsg))\n\u001b[1;32m    349\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m urllib\u001b[38;5;241m.\u001b[39merror\u001b[38;5;241m.\u001b[39mURLError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m    350\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m(error_msg\u001b[38;5;241m.\u001b[39mformat(origin, e\u001b[38;5;241m.\u001b[39merrno, e\u001b[38;5;241m.\u001b[39mreason))\n",
      "\u001b[0;31mException\u001b[0m: URL fetch failure on https://cv-datasets-2021.s3.amazonaws.com/images.tar.gz: 403 -- Forbidden"
     ]
    }
   ],
   "source": [
    "images_dataset_url = \"https://cv-datasets-2021.s3.amazonaws.com/images.tar.gz\"\n",
    "images_data_dir = tf.keras.utils.get_file(origin=images_dataset_url,\n",
    "                                   fname='images',\n",
    "                                   untar=True)\n",
    "images_data_dir = pathlib.Path(images_data_dir)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "wR0GlGtWgp9C",
    "outputId": "21814458-494a-434d-ec83-7332e81feff3"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading data from https://cv-datasets-2021.s3.amazonaws.com/yt_images.tar.gz\n",
      "4026998784/4026992587 [==============================] - 64s 0us/step\n",
      "4027006976/4026992587 [==============================] - 64s 0us/step\n"
     ]
    }
   ],
   "source": [
    "yt_images_dataset_url = \"https://cv-datasets-2021.s3.amazonaws.com/yt_images.tar.gz\"\n",
    "yt_images_data_dir = tf.keras.utils.get_file(origin=yt_images_dataset_url,\n",
    "                                   fname='yt_images',\n",
    "                                   untar=True)\n",
    "yt_images_data_dir = pathlib.Path(yt_images_data_dir)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "id": "TO0FsOzFgkLP"
   },
   "outputs": [],
   "source": [
    "if sys.platform == 'darwin':\n",
    "  os.system(f\"dot_clean {images_data_dir}\")\n",
    "  os.system(f\"dot_clean {yt_images_data_dir}\")\n",
    "elif sys.platform.startswith(\"lin\"):\n",
    "  os.system(f\"cd {images_data_dir} && find . -type f -name '._*' -delete\")\n",
    "  os.system(f\"cd {yt_images_data_dir} && find . -type f -name '._*' -delete\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "Ef98wX12jI95",
    "outputId": "f6e6fe5f-219f-4f59-f3be-756db2bfe4f5"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2056\n"
     ]
    }
   ],
   "source": [
    "image_count = len(list(images_data_dir.glob('*/*.jpg')))\n",
    "print(image_count)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "O0m9qMV9jRNJ",
    "outputId": "31e42d34-8e74-46ac-d4a9-d5f003a769fd"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "15843\n"
     ]
    }
   ],
   "source": [
    "yt_image_count = len(list(yt_images_data_dir.glob('*/*.jpg')))\n",
    "print(yt_image_count)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "H4DBG2Lkogb0",
    "outputId": "33f6b58a-9ced-4811-869c-d7bd40fab513"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(513, 14)"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv(\"https://cv-datasets-2021.s3.amazonaws.com/dataset.csv\")\n",
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 112
    },
    "id": "dRPCUNW7CtOO",
    "outputId": "f7958572-7408-421d-892b-5d1f6e9e1aee"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <div id=\"df-b0ba5cc2-d21a-4908-aa25-b420d06a84cd\">\n",
       "    <div class=\"colab-df-container\">\n",
       "      <div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sku</th>\n",
       "      <th>sex</th>\n",
       "      <th>color</th>\n",
       "      <th>breed</th>\n",
       "      <th>feed</th>\n",
       "      <th>age_in_year</th>\n",
       "      <th>teeth</th>\n",
       "      <th>height_in_inch</th>\n",
       "      <th>weight_in_kg</th>\n",
       "      <th>price</th>\n",
       "      <th>size</th>\n",
       "      <th>images_count</th>\n",
       "      <th>yt_images_count</th>\n",
       "      <th>total_images</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>BLF 2340</td>\n",
       "      <td>MALE_BULL</td>\n",
       "      <td>RED</td>\n",
       "      <td>LOCAL</td>\n",
       "      <td>['JUMBOO', 'LUCERNE', 'NAPIER', 'SILAGE', 'STR...</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>50.9</td>\n",
       "      <td>270.0</td>\n",
       "      <td>19000.0</td>\n",
       "      <td>MEDIUM</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>BLF 2342</td>\n",
       "      <td>MALE_BULL</td>\n",
       "      <td>NON_RED</td>\n",
       "      <td>LOCAL</td>\n",
       "      <td>['JUMBOO', 'LUCERNE', 'NAPIER', 'SILAGE', 'STR...</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>52.0</td>\n",
       "      <td>256.0</td>\n",
       "      <td>18000.0</td>\n",
       "      <td>LARGE</td>\n",
       "      <td>4</td>\n",
       "      <td>31</td>\n",
       "      <td>35</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-b0ba5cc2-d21a-4908-aa25-b420d06a84cd')\"\n",
       "              title=\"Convert this dataframe to an interactive table.\"\n",
       "              style=\"display:none;\">\n",
       "        \n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
       "       width=\"24px\">\n",
       "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
       "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
       "  </svg>\n",
       "      </button>\n",
       "      \n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      flex-wrap:wrap;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "      <script>\n",
       "        const buttonEl =\n",
       "          document.querySelector('#df-b0ba5cc2-d21a-4908-aa25-b420d06a84cd button.colab-df-convert');\n",
       "        buttonEl.style.display =\n",
       "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "        async function convertToInteractive(key) {\n",
       "          const element = document.querySelector('#df-b0ba5cc2-d21a-4908-aa25-b420d06a84cd');\n",
       "          const dataTable =\n",
       "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                     [key], {});\n",
       "          if (!dataTable) return;\n",
       "\n",
       "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "            + ' to learn more about interactive tables.';\n",
       "          element.innerHTML = '';\n",
       "          dataTable['output_type'] = 'display_data';\n",
       "          await google.colab.output.renderOutput(dataTable, element);\n",
       "          const docLink = document.createElement('div');\n",
       "          docLink.innerHTML = docLinkHtml;\n",
       "          element.appendChild(docLink);\n",
       "        }\n",
       "      </script>\n",
       "    </div>\n",
       "  </div>\n",
       "  "
      ],
      "text/plain": [
       "        sku        sex    color  ... images_count yt_images_count  total_images\n",
       "0  BLF 2340  MALE_BULL      RED  ...            4               0             4\n",
       "1  BLF 2342  MALE_BULL  NON_RED  ...            4              31            35\n",
       "\n",
       "[2 rows x 14 columns]"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "id": "ekUY7D5lpzwz"
   },
   "outputs": [],
   "source": [
    "images = list(images_data_dir.glob('*/*.jpg'))\n",
    "yt_images = list(yt_images_data_dir.glob('*/*.jpg'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "FDpz4yme0wX7",
    "outputId": "aebd1322-5eb0-45ee-f0c4-3a682ed78038"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "min_height: 450\n",
      "min_width: 800\n",
      "max_height: 675\n",
      "max_width: 1200\n"
     ]
    }
   ],
   "source": [
    "min_height = 0\n",
    "max_height = 0\n",
    "min_width = 0\n",
    "max_width = 0\n",
    "for i, image in enumerate(images):\n",
    "  w, h = PIL.Image.open(str(image)).size\n",
    "  if i == 0:\n",
    "    min_height = h\n",
    "    max_height = h\n",
    "    min_width = w\n",
    "    max_width = w\n",
    "  \n",
    "  if h <= min_height:\n",
    "    min_height = h\n",
    "  if h >= max_height:\n",
    "    max_height = h\n",
    "\n",
    "  if w <= min_width:\n",
    "    min_width = w\n",
    "  if w >= max_width:\n",
    "    max_width = w\n",
    "\n",
    "print(f\"min_height: {min_height}\")\n",
    "print(f\"min_width: {min_width}\")\n",
    "print(f\"max_height: {max_height}\")\n",
    "print(f\"max_width: {max_width}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "zzLkutbX3PEM",
    "outputId": "d2d53302-1f3b-4d44-860e-49e82b03dd32"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "min_height: 720\n",
      "min_width: 1280\n",
      "max_height: 720\n",
      "max_width: 1280\n"
     ]
    }
   ],
   "source": [
    "min_height = 0\n",
    "max_height = 0\n",
    "min_width = 0\n",
    "max_width = 0\n",
    "for i, image in enumerate(yt_images):\n",
    "  w, h = PIL.Image.open(str(image)).size\n",
    "  if i == 0:\n",
    "    min_height = h\n",
    "    max_height = h\n",
    "    min_width = w\n",
    "    max_width = w\n",
    "\n",
    "  if h <= min_height:\n",
    "    min_height = h\n",
    "  if h >= max_height:\n",
    "    max_height = h\n",
    "\n",
    "  if w <= min_width:\n",
    "    min_width = w\n",
    "  if w >= max_width:\n",
    "    max_width = w\n",
    "\n",
    "print(f\"min_height: {min_height}\")\n",
    "print(f\"min_width: {min_width}\")\n",
    "print(f\"max_height: {max_height}\")\n",
    "print(f\"max_width: {max_width}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "id": "sTf9VTBJCSRP"
   },
   "outputs": [],
   "source": [
    "f_df = pd.DataFrame(columns = ['file_path', 'teeth', 'age_in_year', 'breed', 'height_in_inch', 'weight_in_kg'])\n",
    "for index, row in df.iterrows():\n",
    "  images = list(images_data_dir.glob(f\"{row['sku']}/*.jpg\"))\n",
    "  yt_images = list(yt_images_data_dir.glob(f\"{row['sku']}/*.jpg\"))\n",
    "\n",
    "  for image in images:\n",
    "    f_df = f_df.append({'file_path' : image, 'teeth' : row['teeth'], 'age_in_year' : row['age_in_year'], 'breed': row['breed'], 'height_in_inch': row['height_in_inch'], 'weight_in_kg': row['weight_in_kg']}, \n",
    "                ignore_index = True)\n",
    "    \n",
    "  for idx, image in enumerate(yt_images):\n",
    "    if idx == (YT_IMAGE_TO_TAKE - 1):\n",
    "      break\n",
    "    f_df = f_df.append({'file_path' : image, 'teeth' : row['teeth'], 'age_in_year' : row['age_in_year'], 'breed': row['breed'], 'height_in_inch': row['height_in_inch'], 'weight_in_kg': row['weight_in_kg']}, \n",
    "                ignore_index = True)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "cmd0yBH0CSNi",
    "outputId": "c8264a6f-a1bf-4485-bdc8-0182cc483efb"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3585, 6)"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f_df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 81
    },
    "id": "yLrlazxDCSIU",
    "outputId": "c8ddc6ec-221b-4b1e-ffb8-37157979b1f8"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <div id=\"df-20fc807e-b03b-4184-81f9-2692427f695b\">\n",
       "    <div class=\"colab-df-container\">\n",
       "      <div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>file_path</th>\n",
       "      <th>teeth</th>\n",
       "      <th>age_in_year</th>\n",
       "      <th>breed</th>\n",
       "      <th>height_in_inch</th>\n",
       "      <th>weight_in_kg</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>/root/.keras/datasets/images/BLF 2340/BLF 2340...</td>\n",
       "      <td>2</td>\n",
       "      <td>2.0</td>\n",
       "      <td>LOCAL</td>\n",
       "      <td>50.9</td>\n",
       "      <td>270.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-20fc807e-b03b-4184-81f9-2692427f695b')\"\n",
       "              title=\"Convert this dataframe to an interactive table.\"\n",
       "              style=\"display:none;\">\n",
       "        \n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
       "       width=\"24px\">\n",
       "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
       "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
       "  </svg>\n",
       "      </button>\n",
       "      \n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      flex-wrap:wrap;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "      <script>\n",
       "        const buttonEl =\n",
       "          document.querySelector('#df-20fc807e-b03b-4184-81f9-2692427f695b button.colab-df-convert');\n",
       "        buttonEl.style.display =\n",
       "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "        async function convertToInteractive(key) {\n",
       "          const element = document.querySelector('#df-20fc807e-b03b-4184-81f9-2692427f695b');\n",
       "          const dataTable =\n",
       "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                     [key], {});\n",
       "          if (!dataTable) return;\n",
       "\n",
       "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "            + ' to learn more about interactive tables.';\n",
       "          element.innerHTML = '';\n",
       "          dataTable['output_type'] = 'display_data';\n",
       "          await google.colab.output.renderOutput(dataTable, element);\n",
       "          const docLink = document.createElement('div');\n",
       "          docLink.innerHTML = docLinkHtml;\n",
       "          element.appendChild(docLink);\n",
       "        }\n",
       "      </script>\n",
       "    </div>\n",
       "  </div>\n",
       "  "
      ],
      "text/plain": [
       "                                           file_path  ... weight_in_kg\n",
       "0  /root/.keras/datasets/images/BLF 2340/BLF 2340...  ...        270.0\n",
       "\n",
       "[1 rows x 6 columns]"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f_df.head(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {
    "id": "3uDbQNKIBCwF"
   },
   "outputs": [],
   "source": [
    "def label_encode(df):\n",
    "  teeth_le = preprocessing.LabelEncoder()\n",
    "  df['teeth']= teeth_le.fit_transform(df['teeth'])\n",
    "  breed_le = preprocessing.LabelEncoder()\n",
    "  df['breed']= breed_le.fit_transform(df['breed'])\n",
    "  age_in_year_le = preprocessing.LabelEncoder()\n",
    "  df['age_in_year']= age_in_year_le.fit_transform(df['age_in_year'])\n",
    "  print(teeth_le.classes_)\n",
    "  print(breed_le.classes_)\n",
    "  print(age_in_year_le.classes_)\n",
    "  return df\n",
    "\n",
    "def inverse_transform(le, series=[]):\n",
    "  return le.inverse_transform(series)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "VOgAnGI2DK7n",
    "outputId": "3d0cdb25-0b4b-4d87-9a5c-467e1566460a"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2 4 6]\n",
      "['BRAHMA' 'HOSTINE_CROSS' 'LOCAL' 'MIR_KADIM' 'PABNA_BREED'\n",
      " 'RED_CHITTAGONG' 'SAHIWAL' 'SINDHI']\n",
      "[2.  2.5 3. ]\n"
     ]
    }
   ],
   "source": [
    "f_df = label_encode(f_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "QgSiTmzzDrzA",
    "outputId": "a6bac6b1-3ffb-4bf9-9545-094c4b81e127"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train_df: (3226, 6)\n",
      "test_df: (359, 6)\n"
     ]
    }
   ],
   "source": [
    "# train_df, valid_test_df = train_test_split(f_df, test_size=0.3)\n",
    "# validation_df, test_df = train_test_split(valid_test_df, test_size=0.3)\n",
    "# print(f\"train_df: {train_df.shape}\")\n",
    "# print(f\"validation_df: {validation_df.shape}\")\n",
    "# print(f\"test_df: {test_df.shape}\")\n",
    "\n",
    "train_df, test_df = train_test_split(f_df, test_size=0.1)\n",
    "print(f\"train_df: {train_df.shape}\")\n",
    "print(f\"test_df: {test_df.shape}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "id": "L_8HLC9VT03R"
   },
   "outputs": [],
   "source": [
    "# min_height: 450\n",
    "# min_width: 800\n",
    "\n",
    "# input: [image, teeth]\n",
    "# outpur: [age_in_year, breed, height_in_inch, weight_in_kg]\n",
    "\n",
    "# class CustomDataGen(tf.keras.utils.Sequence):\n",
    "    \n",
    "#     def __init__(self, df, X_col, y_col,\n",
    "#                  batch_size,\n",
    "#                  input_size=(450, 800, 3), # (input_height, input_width, input_channel)\n",
    "#                  shuffle=True):\n",
    "        \n",
    "#         self.df = df.copy()\n",
    "#         self.X_col = X_col\n",
    "#         self.y_col = y_col\n",
    "#         self.batch_size = batch_size\n",
    "#         self.input_size = input_size\n",
    "#         self.shuffle = shuffle\n",
    "        \n",
    "#         self.n = len(self.df)\n",
    "#         # self.n_teeth = df[X_col['teeth']].max()\n",
    "#         # self.n_breed = df[y_col['breed']].nunique()\n",
    "    \n",
    "#     def on_epoch_end(self):\n",
    "#         if self.shuffle:\n",
    "#             self.df = self.df.sample(frac=1).reset_index(drop=True)\n",
    "    \n",
    "#     def __get_input(self, path, target_size):\n",
    "#         image = tf.keras.preprocessing.image.load_img(path)\n",
    "#         image_arr = tf.keras.preprocessing.image.img_to_array(image)\n",
    "\n",
    "#         # image_arr = image_arr[ymin:ymin+h, xmin:xmin+w]\n",
    "#         image_arr = tf.image.resize(image_arr,(target_size[0], target_size[1])).numpy()\n",
    "\n",
    "#         return image_arr/255.\n",
    "    \n",
    "#     def __get_output(self, label, num_classes):\n",
    "#         return tf.keras.utils.to_categorical(label, num_classes=num_classes)\n",
    "    \n",
    "#     def __get_data(self, batches):\n",
    "#         # Generates data containing batch_size samples\n",
    "\n",
    "#         path_batch = batches[self.X_col['file_path']]       \n",
    "#         # teeth_batch = batches[self.X_col['teeth']]\n",
    "\n",
    "#         # breed_batch = batches[self.y_col['breed']]\n",
    "#         weight_in_kg_batch = batches[self.y_col['weight_in_kg']]\n",
    "#         height_in_inch_batch = batches[self.y_col['height_in_inch']]\n",
    "#         age_in_year_batch = batches[self.y_col['age_in_year']]\n",
    "\n",
    "#         X0 = np.asarray([self.__get_input(x, self.input_size) for x in path_batch])\n",
    "\n",
    "#         # y0_batch = np.asarray([self.__get_output(y, self.n_teeth) for y in teeth_batch])\n",
    "#         # y1_batch = np.asarray([self.__get_output(y, self.n_breed) for y in breed_batch])\n",
    "\n",
    "#         y0 = np.asarray([tf.cast(y, tf.float32) for y in weight_in_kg_batch])\n",
    "#         y1 = np.asarray([tf.cast(y, tf.float32) for y in height_in_inch_batch])\n",
    "#         y2 = np.asarray([tf.cast(y, tf.float32) for y in age_in_year_batch])\n",
    "\n",
    "#         return X0, tuple([y0, y1, y2])\n",
    "    \n",
    "#     def __getitem__(self, index):\n",
    "        \n",
    "#         batches = self.df[index * self.batch_size:(index + 1) * self.batch_size]\n",
    "#         X, y = self.__get_data(batches)        \n",
    "#         return X, y\n",
    "    \n",
    "#     def __len__(self):\n",
    "#         return self.n // self.batch_size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "id": "AG8j82VLZrPg"
   },
   "outputs": [],
   "source": [
    "# traingen = CustomDataGen(train_df,\n",
    "#                          X_col={'file_path':'file_path', 'teeth': 'teeth'},\n",
    "#                          y_col={'breed': 'breed', 'weight_in_kg': 'weight_in_kg', 'height_in_inch': 'height_in_inch', 'age_in_year': 'age_in_year'},\n",
    "#                          batch_size=128, input_size=(450, 800, 3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "id": "tFSlX4JdayDJ"
   },
   "outputs": [],
   "source": [
    "# testgen = CustomDataGen(test_df,\n",
    "#                          X_col={'file_path':'file_path', 'teeth': 'teeth'},\n",
    "#                          y_col={'breed': 'breed', 'weight_in_kg': 'weight_in_kg', 'height_in_inch': 'height_in_inch', 'age_in_year': 'age_in_year'},\n",
    "#                          batch_size=128, input_size=(450, 800, 3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "id": "T3ELi9-GkkAz"
   },
   "outputs": [],
   "source": [
    "# validgen = CustomDataGen(validation_df,\n",
    "#                          X_col={'file_path':'file_path', 'teeth': 'teeth'},\n",
    "#                          y_col={'breed': 'breed', 'weight_in_kg': 'weight_in_kg', 'height_in_inch': 'height_in_inch', 'age_in_year': 'age_in_year'},\n",
    "#                          batch_size=128, input_size=(450, 800, 3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {
    "id": "YhNEK1P1o7ay"
   },
   "outputs": [],
   "source": [
    "def __get_input(path, target_size):\n",
    "  image = tf.keras.preprocessing.image.load_img(path)\n",
    "  image_arr = tf.keras.preprocessing.image.img_to_array(image)\n",
    "  image_arr = tf.image.resize(image_arr,(target_size[0], target_size[1])).numpy()\n",
    "  return image_arr/255.\n",
    "\n",
    "def data_loader(df, image_size=(450, 800, 3)):\n",
    "  y0 = tf.cast(df.weight_in_kg, tf.float32)\n",
    "  print(y0.shape)\n",
    "  y1 = tf.cast(df.height_in_inch, tf.float32)\n",
    "  print(y1.shape)\n",
    "  # y2 = tf.cast(df.age_in_year, tf.float32)\n",
    "  y2 = keras.utils.to_categorical(df.age_in_year)\n",
    "  print(y2.shape)\n",
    "  y3 = keras.utils.to_categorical(df.breed)\n",
    "  print(y3.shape)\n",
    "\n",
    "  path_batch = df.file_path\n",
    "  X0 = tf.cast([__get_input(x, image_size) for x in path_batch], tf.float32)\n",
    "  print(X0.shape)\n",
    "  X1 = keras.utils.to_categorical(df.teeth)\n",
    "  print(X1.shape)\n",
    "\n",
    "  return (X0, X1), (y0, y1, y2, y3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "YwD7Wu5Xrb2n",
    "outputId": "657dd73c-48a2-45f4-898a-930b1541b21f"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(3226,)\n",
      "(3226,)\n",
      "(3226, 3)\n",
      "(3226, 8)\n",
      "(3226, 150, 150, 3)\n",
      "(3226, 3)\n"
     ]
    }
   ],
   "source": [
    "(X0, X1), (y0, y1, y2, y3) = data_loader(train_df, (150, 150, 3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "metadata": {
    "id": "QUdjf26kubkr"
   },
   "outputs": [],
   "source": [
    "# input = keras.Input(shape=(128, 128, 3), name=\"original_img\")\n",
    "# x = layers.Conv2D(64, 3, activation=\"relu\")(input)\n",
    "# x = layers.Conv2D(128, 3, activation=\"relu\")(x)\n",
    "# x = layers.MaxPooling2D(3)(x)\n",
    "# x = layers.Conv2D(128, 3, activation=\"relu\")(x)\n",
    "# x = layers.Conv2D(64, 3, activation=\"relu\")(x)\n",
    "# x = layers.GlobalMaxPooling2D()(x)\n",
    "\n",
    "input0 = keras.Input(shape=(150, 150, 3), name=\"img\")\n",
    "x = layers.Conv2D(32, 3, activation=\"relu\")(input0)\n",
    "x = layers.MaxPooling2D(2)(x)\n",
    "x = layers.Conv2D(32, 3, activation=\"relu\")(x)\n",
    "x = layers.MaxPooling2D(2)(x)\n",
    "x = layers.Conv2D(64, 3, activation=\"relu\")(x)\n",
    "x = layers.GlobalMaxPooling2D()(x)\n",
    "\n",
    "# input1 = keras.Input(shape=(3,), name=\"teeth\")\n",
    "\n",
    "\n",
    "# out_a = keras.layers.Dense(1, activation='linear', name='wt_rg')(x)\n",
    "# out_b = keras.layers.Dense(1, activation='linear', name='ht_rg')(x)\n",
    "# out_c = keras.layers.Dense(1, activation='linear', name='ag_rg')(x)\n",
    "out_c = keras.layers.Dense(3, activation='softmax', name='ag_3cls')(x)\n",
    "out_d = keras.layers.Dense(8, activation='softmax', name='brd_8cls')(x)\n",
    "\n",
    "encoder = keras.Model( inputs = input0 , outputs = [out_c, out_d], name=\"encoder\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {
    "id": "h_LArmJdv0rX"
   },
   "outputs": [],
   "source": [
    "encoder.compile(\n",
    "    loss = {\n",
    "        # \"wt_rg\": tf.keras.losses.MeanSquaredError(),\n",
    "        # \"ht_rg\": tf.keras.losses.MeanSquaredError(),\n",
    "        # \"ag_rg\": tf.keras.losses.MeanSquaredError()\n",
    "        \"ag_3cls\": tf.keras.losses.CategoricalCrossentropy(),\n",
    "        \"brd_8cls\": tf.keras.losses.CategoricalCrossentropy()\n",
    "    },\n",
    "\n",
    "    metrics = {\n",
    "        # \"wt_rg\": 'mse',\n",
    "        # \"ht_rg\": 'mse',\n",
    "        \"ag_3cls\": 'accuracy',\n",
    "        \"brd_8cls\": 'accuracy'\n",
    "    },\n",
    "\n",
    "    optimizer = tf.keras.optimizers.Adam(learning_rate=0.0001)\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "avMTkBsrljNt",
    "outputId": "6806decd-1ef9-4f76-d070-6b6f55220e87"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/30\n",
      "81/81 - 7s - loss: 2.1282 - ag_3cls_loss: 0.7959 - brd_8cls_loss: 1.3323 - ag_3cls_accuracy: 0.6593 - brd_8cls_accuracy: 0.6919 - val_loss: 1.8079 - val_ag_3cls_loss: 0.6298 - val_brd_8cls_loss: 1.1780 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 7s/epoch - 89ms/step\n",
      "Epoch 2/30\n",
      "81/81 - 3s - loss: 1.7459 - ag_3cls_loss: 0.6316 - brd_8cls_loss: 1.1142 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7531 - val_ag_3cls_loss: 0.6124 - val_brd_8cls_loss: 1.1406 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 41ms/step\n",
      "Epoch 3/30\n",
      "81/81 - 4s - loss: 1.7202 - ag_3cls_loss: 0.6233 - brd_8cls_loss: 1.0969 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7472 - val_ag_3cls_loss: 0.6115 - val_brd_8cls_loss: 1.1356 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 4s/epoch - 45ms/step\n",
      "Epoch 4/30\n",
      "81/81 - 3s - loss: 1.7172 - ag_3cls_loss: 0.6238 - brd_8cls_loss: 1.0935 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7498 - val_ag_3cls_loss: 0.6140 - val_brd_8cls_loss: 1.1358 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 39ms/step\n",
      "Epoch 5/30\n",
      "81/81 - 3s - loss: 1.7132 - ag_3cls_loss: 0.6219 - brd_8cls_loss: 1.0913 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7436 - val_ag_3cls_loss: 0.6098 - val_brd_8cls_loss: 1.1339 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 37ms/step\n",
      "Epoch 6/30\n",
      "81/81 - 3s - loss: 1.7107 - ag_3cls_loss: 0.6220 - brd_8cls_loss: 1.0887 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7452 - val_ag_3cls_loss: 0.6100 - val_brd_8cls_loss: 1.1353 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 37ms/step\n",
      "Epoch 7/30\n",
      "81/81 - 3s - loss: 1.7092 - ag_3cls_loss: 0.6208 - brd_8cls_loss: 1.0884 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7441 - val_ag_3cls_loss: 0.6097 - val_brd_8cls_loss: 1.1344 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 36ms/step\n",
      "Epoch 8/30\n",
      "81/81 - 3s - loss: 1.7083 - ag_3cls_loss: 0.6200 - brd_8cls_loss: 1.0883 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7453 - val_ag_3cls_loss: 0.6097 - val_brd_8cls_loss: 1.1356 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 37ms/step\n",
      "Epoch 9/30\n",
      "81/81 - 3s - loss: 1.7060 - ag_3cls_loss: 0.6189 - brd_8cls_loss: 1.0871 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7427 - val_ag_3cls_loss: 0.6097 - val_brd_8cls_loss: 1.1330 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 36ms/step\n",
      "Epoch 10/30\n",
      "81/81 - 3s - loss: 1.7050 - ag_3cls_loss: 0.6197 - brd_8cls_loss: 1.0853 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7405 - val_ag_3cls_loss: 0.6100 - val_brd_8cls_loss: 1.1305 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 36ms/step\n",
      "Epoch 11/30\n",
      "81/81 - 3s - loss: 1.7020 - ag_3cls_loss: 0.6181 - brd_8cls_loss: 1.0839 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7400 - val_ag_3cls_loss: 0.6097 - val_brd_8cls_loss: 1.1303 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 37ms/step\n",
      "Epoch 12/30\n",
      "81/81 - 3s - loss: 1.7016 - ag_3cls_loss: 0.6181 - brd_8cls_loss: 1.0835 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7413 - val_ag_3cls_loss: 0.6102 - val_brd_8cls_loss: 1.1311 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 40ms/step\n",
      "Epoch 13/30\n",
      "81/81 - 4s - loss: 1.7004 - ag_3cls_loss: 0.6183 - brd_8cls_loss: 1.0821 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7393 - val_ag_3cls_loss: 0.6100 - val_brd_8cls_loss: 1.1293 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 4s/epoch - 45ms/step\n",
      "Epoch 14/30\n",
      "81/81 - 4s - loss: 1.6963 - ag_3cls_loss: 0.6172 - brd_8cls_loss: 1.0791 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7383 - val_ag_3cls_loss: 0.6094 - val_brd_8cls_loss: 1.1289 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 4s/epoch - 43ms/step\n",
      "Epoch 15/30\n",
      "81/81 - 3s - loss: 1.6949 - ag_3cls_loss: 0.6160 - brd_8cls_loss: 1.0789 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7395 - val_ag_3cls_loss: 0.6102 - val_brd_8cls_loss: 1.1293 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 43ms/step\n",
      "Epoch 16/30\n",
      "81/81 - 4s - loss: 1.6924 - ag_3cls_loss: 0.6157 - brd_8cls_loss: 1.0768 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7379 - val_ag_3cls_loss: 0.6100 - val_brd_8cls_loss: 1.1279 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 4s/epoch - 47ms/step\n",
      "Epoch 17/30\n",
      "81/81 - 3s - loss: 1.6915 - ag_3cls_loss: 0.6157 - brd_8cls_loss: 1.0758 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7355 - val_ag_3cls_loss: 0.6105 - val_brd_8cls_loss: 1.1250 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 41ms/step\n",
      "Epoch 18/30\n",
      "81/81 - 3s - loss: 1.6866 - ag_3cls_loss: 0.6140 - brd_8cls_loss: 1.0726 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7399 - val_ag_3cls_loss: 0.6134 - val_brd_8cls_loss: 1.1266 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 41ms/step\n",
      "Epoch 19/30\n",
      "81/81 - 3s - loss: 1.6860 - ag_3cls_loss: 0.6137 - brd_8cls_loss: 1.0723 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7335 - val_ag_3cls_loss: 0.6097 - val_brd_8cls_loss: 1.1238 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 41ms/step\n",
      "Epoch 20/30\n",
      "81/81 - 4s - loss: 1.6805 - ag_3cls_loss: 0.6118 - brd_8cls_loss: 1.0687 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7320 - val_ag_3cls_loss: 0.6093 - val_brd_8cls_loss: 1.1227 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 4s/epoch - 44ms/step\n",
      "Epoch 21/30\n",
      "81/81 - 3s - loss: 1.6786 - ag_3cls_loss: 0.6103 - brd_8cls_loss: 1.0683 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7405 - val_ag_3cls_loss: 0.6192 - val_brd_8cls_loss: 1.1213 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 40ms/step\n",
      "Epoch 22/30\n",
      "81/81 - 3s - loss: 1.6761 - ag_3cls_loss: 0.6126 - brd_8cls_loss: 1.0635 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7353 - val_ag_3cls_loss: 0.6154 - val_brd_8cls_loss: 1.1199 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 41ms/step\n",
      "Epoch 23/30\n",
      "81/81 - 3s - loss: 1.6742 - ag_3cls_loss: 0.6115 - brd_8cls_loss: 1.0627 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7306 - val_ag_3cls_loss: 0.6119 - val_brd_8cls_loss: 1.1188 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 36ms/step\n",
      "Epoch 24/30\n",
      "81/81 - 3s - loss: 1.6728 - ag_3cls_loss: 0.6123 - brd_8cls_loss: 1.0605 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7278 - val_ag_3cls_loss: 0.6101 - val_brd_8cls_loss: 1.1178 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 37ms/step\n",
      "Epoch 25/30\n",
      "81/81 - 3s - loss: 1.6699 - ag_3cls_loss: 0.6097 - brd_8cls_loss: 1.0601 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7284 - val_ag_3cls_loss: 0.6103 - val_brd_8cls_loss: 1.1181 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 40ms/step\n",
      "Epoch 26/30\n",
      "81/81 - 3s - loss: 1.6634 - ag_3cls_loss: 0.6068 - brd_8cls_loss: 1.0567 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7266 - val_ag_3cls_loss: 0.6116 - val_brd_8cls_loss: 1.1150 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 37ms/step\n",
      "Epoch 27/30\n",
      "81/81 - 3s - loss: 1.6624 - ag_3cls_loss: 0.6079 - brd_8cls_loss: 1.0545 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7265 - val_ag_3cls_loss: 0.6117 - val_brd_8cls_loss: 1.1148 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 37ms/step\n",
      "Epoch 28/30\n",
      "81/81 - 3s - loss: 1.6573 - ag_3cls_loss: 0.6061 - brd_8cls_loss: 1.0513 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7393 - val_ag_3cls_loss: 0.6194 - val_brd_8cls_loss: 1.1199 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 37ms/step\n",
      "Epoch 29/30\n",
      "81/81 - 3s - loss: 1.6518 - ag_3cls_loss: 0.6046 - brd_8cls_loss: 1.0472 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7269 - val_ag_3cls_loss: 0.6121 - val_brd_8cls_loss: 1.1148 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 37ms/step\n",
      "Epoch 30/30\n",
      "81/81 - 3s - loss: 1.6492 - ag_3cls_loss: 0.6024 - brd_8cls_loss: 1.0468 - ag_3cls_accuracy: 0.7388 - brd_8cls_accuracy: 0.6919 - val_loss: 1.7224 - val_ag_3cls_loss: 0.6114 - val_brd_8cls_loss: 1.1111 - val_ag_3cls_accuracy: 0.7477 - val_brd_8cls_accuracy: 0.6796 - 3s/epoch - 37ms/step\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.History at 0x7f2558efca90>"
      ]
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoder.fit(X0, [y2, y3], epochs=30, verbose=2, batch_size=32, validation_split=0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 865
    },
    "id": "OS_zKeP11Buh",
    "outputId": "413c71c4-39f4-4e14-f188-a2b026c62207"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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RoKCgoZVEvQxvH7bAAAFys3N/eyzzx4+fBgdHb1+/Xo6nU50RJrh6tWrK1aseP78+aZNmyIjI7WgERAAWgCenwCAAC9fvgwPD/f09DQzM8vPz4+NjYViQnre3t7FxcVxcXFbt26dNGnS5cuXiY4IAAD1BACqhWFYenq6g4PDiRMn0tLSrl275uDgQHRQmodGo4WHh9+7d2/ChAk+Pj7vvPNObW0t0UEBoNOgngBAdR4+fOjj47Ns2bKAgICSkpIlS5YQHZFms7W1PX/+/NmzZ//8808HB4fk5GQdXDoLADUB9QQAqtDR0cHlcl1cXBobG/Py8vbt28dms4kOSkv4+vrev38/PDz8iy++cHNzu3nzJtERAaCLoJ4AQOnOnTvn5OSUnJy8ffv2P//8c+bMmURHpG309fW5XG5RUZGZmdmsWbOWLFnS0NBAdFAA6BaoJwBQoufPny9ZssTPz8/Nza2kpCQ8PJxCoRAdlNaaMGHC5cuXjx49mp2dPWHChP3798P8NQBUBuoJAJSip6cnOTnZ0dExLy/v0qVLx48fHzlyJNFB6YTg4OCSkpLFixevWLFizpw5xcXFREcEgE6AegIAxbtx44arq2t0dHRkZGRxcbEWL7isnoyNjZOTk//888+uri5XV9fw8HA+n090UABoOagnAFAkvLHE7Nmzzc3N8/PzuVwug8EgOigd5erqmpube/DgwcOHDzs6OqanpxMdEQDaDOoJABQDbywxceJEvLHE1atXJ06cSHRQuo5MJi9ZsqS4uHju3LlLly719fV98uQJ0UEBoJ2gngBAAUpLS994442PPvro3XffhcYS6mbUqFHp6ek5OTlPnjyZNGkSl8vt6uoiOigAtA3UEwDIpb29ncvlTp48+eXLl7m5ucnJydBYQj29/vrr+fn527Zt++abb5ydnS9dukR0RABoFagnAJBdn8YSbm5uREcEJMG7dJeUlLi7u//3v//19fWtrKwkOigAtATUEwDI4vnz58HBwX5+fjNnziwtLYXGEhrEysoqPT397NmzPB7P0dExISEBunQDID+oJwAYHryxhIODw71797Kzs48fP25hYUF0UGDYfH19eTze2rVrv/zyy+nTp+fl5REdEQCaDeoJAIbh999/nzZtWnR09Jo1a4qKit544w2iIwKy09PTw7t0jxw5Eu/S/eLFC6KDAkBTQT0BgFQaGxvDw8PnzJljY2PD4/GgsYTWGD9+/KVLlzIyMn799deJEycmJyf39vYSHRQAmgfqCQCGgDeWcHBwOHnyZFpa2vnz5zkcDtFBAQXz9fUtLi5evHjxmjVrZs+eXVRURHREAGgYqCcAkKSwsPC1116DxhK6wMjIKDk5+c6dO0KhELp0AzBcUE8AMDC8sYSbm1tXV1deXl5ycrKhoSHRQQGlmzp16h9//HHo0KEjR444ODhAl24ApAT1BAAD6NNYYsaMGURHBFSHRCItWbKktLQ0KCho2bJl3t7eJSUlRAcFgLqDegKAf6mqqgoKCvL393/99dfxxhJkMnxNdJGpqWlycnJOTk5dXd2UKVPWr1/f2dlJdFAAqC9IlAD8PwKBIDk52dHRsaioKDs7Oz09HRpLAE9Pz/z8/O3bt6empjo7O2dlZREdEQBqCuoJABD6d2OJwsLC//znP0RHBNQFlUrFu3R7eHi89dZbvr6+FRUVRAcFgNqBegLousbGxtDQ0NmzZ3M4nPv370NjCTCg0aNHp6enX7169dGjR46Ojlwut7u7m+igAFAjUE8A3YU3lpg4ceL58+e///77c+fOjRs3juiggFqbO3fu3bt3161bl5CQ4Obm9scffxAdEQDqAuoJoKMKCwtnzZr10Ucfvffee9BYAkhP1KV79OjRnp6eS5Ysqa+vJzooAIgH9QTQOaLGEmQy+e7du9BYAsjA3t4+KysrIyMjJycHunQDgBAiYRhGdAwAqM65c+dWrlzJ5/O//PLLVatWwVxQIKe2trbExMRt27a5uLh8++23bm5uREcEADEgmQJd8fjx4/nz5/v7+8+ePRsaSwBFYbFYXC739u3bDAbj1VdfDQ0NbWlpITooAAgA+RRoP7yxxJQpUx49enT58uX09HRzc3OigwJaZfLkyTdu3EhLS/vll1+gSzfQTVBPAC13/fr1adOmxcTErFmzpqioyNvbm+iIgHYSdekODg5etmyZl5fXgwcPiA4KANWBegJoLbyxxJw5czgcDo/H43K5dDqd6KCAljMxMUlOTr5161Zra+uUKVPCw8Pb2tqIDgoAVYB6AmghUWOJCxcuHDt2DBpLABWbMWNGXl5eYmLi999/P3ny5MzMTKIjAkDpoJ4A2ubevXuixhIPHjwIDg4mOiKgi0RdumfNmjV//nxfX99nz54RHRQASgT1BNAwAoEgMTFxwF1tbW3r16+fMWMGhULJz8+HxhKAcJaWlunp6deuXSsvL3dycpLQpTspKQlm7wONBvUE0DBhYWFffPHFhQsX+mw/d+6ck5PT/v37d+zY8dtvvzk7OxMSHgD9eXl53bt3LzY2NiEhwcXF5cqVK30OOHLkyOrVq7du3UpIeAAoBPSzAppk3759y5cvJ5FIVlZWpaWl+vr6CKHHjx+vXLny4sWLixcv/uabb2AuKFBbjx8/XrVqVWZmZnBw8J49eywsLBBCzc3N9vb2DQ0NCKHTp08HBAQQHSYAsoD7E0Bj5Obmrly5EiGEYVhNTU1cXBzeWGLy5MmPHz++cuUKNJYAas7W1vbChQtnz579888/8S7dQqFww4YNTU1N+D/t3n333cLCQqLDBEAWcH8CaIaKiopp06Y1NzcLhUJ8C5VK9fb2vnHjBpfLDQ8Pp9FoxEYIgPRaW1u5XG5KSsqECRMePHggWvuDSqVaWFgUFBRAZQw0DtQTQAN0dHR4eHjweDyBQCDaSKPRnJycMjIybGxsCIwNAJndu3dv7ty5LS0tPT09oo00Gm369Om//fYbtEsBmgV+7wDqDsOwZcuWFRcXixcTCCGBQFBYWHj9+nWiAgNATnl5eU1NTeLFBEJIIBDcuXMnIiKCqKgAkA3cnwDqbtu2bRs2bBjwg0oikYyMjMrKykaMGKH6wACQR0NDg52dXXNz84B7SSRSamrq8uXLVRwVADKD+xNArWVmZg5WTCCEMAzj8/kxMTEqjgoA+UVGRkpoxY1h2MqVK+H2G9AgcH8CqK/S0tLp06d3dHSInlYTR6fTe3p6ent7zc3N79y5Y21trfoIAZAN/tlua2ujUCgkEqnPTx44CoXCZrPv3r0L3eKBRoB6AqgpPp8/ffr0p0+fih6bIJPJZDK5p6eHQqFwOJy5c+fOmjVr+vTpTk5OJBKJ2GgBGC6hUFhSUvLXX3/99ddfOTk5RUVFGIaJqmT8GBqNZm9vf/v2bRaLRWy0AAwJ6gmgjoRC4fz58y9dukQmkzEMwzBs5MiRnp6e7u7ur776qqurK5PJJDpGABSppaXlzp07t27dysvLu3nzZn19PYlEolAoPT09AQEBp0+fhqIZqDtMzLFjx4gOBwCgCseOHcPkRvRJAACIFBQUJJ4QqP2P0J2qIi8vLykpSZvOd+HChREREe7u7kQHIheBQFBdXT1mzBgKhTLgAbt27UIIrV69WrVxaY+FCxcqaigt+LzJT9nfO6FQWFVVJeEboVg68v3SvvyvYvjnRNwA9cQ777yjkmDUQlJSkjad78KFC93d3bXpjAZ04sQJpGMfVMVSYD2hC5+3IWnZ9053vl9alv9VDP+ciIP5ogAAAACQF9QTAAAAAJAX1BMAAAAAkBfUEwAAAACQF9QTAAAAAJAX1BMAZWZmGhkZnTt3juhAlOXKlSvR0dGnTp2ytbUlkUgkEun9998XP8DHx8fQ0JBCoUyaNOnu3btExSkQCOLj4+3t7el0urGxsbOz89OnT/sf1tnZ6eDgsHHjRvzl2bNnExIShEKhSmMF4N8gjUAagXoCIO1uTPTll1+mpKTExMQEBgY+fvzYzs7OzMzsp59+unDhguiY7OzsEydO+Pr68ng8V1dXokJduHBhenr64cOH29vbHzx4YGdn19ra2v+wDRs2lJaWil76+fkxmUxvb++mpiYVBgvAv0AagTQC9QRA8+fPb25u9vX1VfYbdXR0eHh4KPtdxH399ddHjx49fvy4oaGhaGNKSgqZTA4NDR1sqWhCHD169MyZMydOnHjllVeoVKqlpWVGRoazs3Ofw3Jzc4uLi/tsDA8PnzJlyltvvTXgslIAqACkEXVAbBqBegKozqFDh+rq6lT2do8ePdq0adNXX33VZ7EPDw+PiIiI58+fr127VmXBDOnbb791dXV1cXGRcExHR8e6deuSkpL67+JyuQUFBQPuAkCbQBqRgNg0AvWErrtx44a1tTWJRNqzZw9CKDU1lcVi6evrZ2RkzJs3j81mjxkz5ueff8YPTklJYTKZFhYWy5cvt7S0ZDKZHh4et27dwveGhYXR6fRRo0bhLz///HMWi0UikV68eIEQioiIWLNmTXl5OYlEsre3RwhdvHiRzWbHxcUp6dRSUlIwDPPz8+u/a+vWrRMmTDh48OCVK1cG/FsMw3bu3Ono6MhgMExMTAICAkpKSvBdki8RQkgoFMbGxlpbW+vp6U2ePFmahr7d3d03b96cOnWq5MM2bNjw+eefm5ub999lYmIye/bspKQk7b7tDNQTpJEB/1bn0kj/9cDkXyVIU2jf+SKZ1nmqrKxECO3evRt/uWHDBoTQ1atXm5ub6+rqPD09WSxWd3c3vjc0NJTFYt2/f7+zs5PH47m5uRkaGlZUVOB7Fy1aNHLkSNHIiYmJCKH6+nr8ZWBgoJ2dnWjv+fPnDQ0NN2/ePNyAg4KC+qxDMyBbW1snJ6c+G+3s7J48eYJhWG5uLplMHjduXGtrK4ZhWVlZ/v7+osNiY2PpdPqPP/7Y1NRUWFjo6uo6YsSImpoafK/kS7R27VoGg3Hy5MmXL1/GxMSQyeTbt29LDvXJkycIoalTp86ZM2fUqFEMBsPBwWHPnj29vb2iY27cuOHn54dhWH19PZ4U+gwSHR2NEMrPzx/yysj2OVHeOJpOy66DlN+vPjQujUiZ/yGNDKb/5wTuT4CBeXh4sNlsc3PzkJCQtra2iooK0S4qlYpX3E5OTqmpqXw+Py0tTYa3mD9/fktLy6ZNmxQX9f/X1tb25MkTOzu7wQ5wd3dfvXr106dP169f32dXR0fHzp0733777cWLFxsZGbm4uHz33XcvXrzYv3+/+GEDXqLOzs7U1NQFCxYEBgYaGxtv3LiRRqMNeX3wB6bMzc3j4uJ4PF5tbW1AQMDKlSuPHDkiCikiIiI1NVXCIOPHj0cIFRUVSX4vAFQG0ohOpRGoJ8AQ6HQ6QkggEAy4d8aMGfr6+qKbeOqjrq4OwzB9fX0Jx2zdunXixIl79+69ceOG+HYej9fa2jpjxgzRFjc3NzqdLrol24f4JSotLW1vbxc9AKWnpzdq1Kghrw+DwUAITZo0ycPDw9TU1MjI6KuvvjIyMhKlnpiYmE8//dTKykrCIPjJ1tbWSn4vAFQP0gjSgTQC9QSQF4PBwG+dqZXOzk70zxdsMEwmMy0tjUQiffjhhx0dHaLt+IwpAwMD8YONjY35fP6Q79vW1oYQ2rhxI+kfz549a29vl/xXlpaWCCH8F2IcnU63sbEpLy9HCN24caOoqOjjjz+WPIienh7658QB0CyQRsRpaBqBegLIRSAQNDU1jRkzhuhA+sK/FUO2Z3F3d4+MjCwrK9uyZYtoo7GxMUKoz9deytPEn3LatWuX+M+KeXl5kv/KwMBg/Pjx9+/fF9/Y09NjZGSEEDp06NDVq1fJZDKeWfC3iIuLI5FId+7cER3f3d0tOnEANAikkT40NI1APQHkkpOTg2HYq6++ir+kUqmD3dJUMQsLCxKJJM3U8C1btjg4OOTn54u2ODs7GxgYiH/Hbt261d3dPX369CFHGzt2LJPJLCgoGG7ACxcuzM/Pf/z4Mf6yvb392bNn+LyvtLQ08bQi/iCV+N1U/GRHjhw53LcGgFiQRvrQ0DQC9QQYtt7e3pcvX/b09BQWFkZERFhbWy9duhTfZW9v39jYeObMGYFAUF9f/+zZM/E/NDU1ra6ufvr0KZ/PFwgEWVlZypvopa+vb2trW1VVNeSR+O1KCoUivmXNmjWnT5/+6aefWlpaioqKPvvsM0tLy9DQUGlGW7Zs2c8//5yamtrS0iIUCquqqv7++2+EUEhIyMiRIwdrxBsZGWljY7N06dKKioqGhoaoqKiOjo7+D3lJgJ+s5KnnAKgJSCOSR9PINCJesGjf/EnJtO980fDnre3evRuf6q2vr+/n57d37178eZzx48eXl5fv37+fzWYjhGxsbB4+fIhhWGhoKI1Gs7KyolKpbDY7ICCgvLxcNFpDQ4OXlxeTyeRwOKtWrVq3bh1CyN7eHp8JdvfuXRsbGz09vddee62mpiYzM9PQ0HDr1q3DPU0p57OFhYXRaLT29nb85enTp/HntEeMGLFy5co+B69bt058oldvb29iYuL48eNpNJqJicmCBQtKS0vxXUNeoq6urqioKGtrayqVam5uHhgYyOPxMAxbsGABQig2NnawgCsrK999910TExMGgzFz5sysrKwBDxtsotf8+fOtrKzE54YNRobPiVLH0XRadh1kmC+qiWlEyvwPaWQw/T8nUE9o1fmqIK+Fhoaampoq9S2GJGW+Kysro1KpP/74owpCkoZQKPT09Dx06JAyBn/x4gWTydyxY4c0B0M9oVhadh1k6z8xLOqQRqTM/5BGBgP9J4ACaMpSlvb29ps3b968efOAy+GomFAoPHPmDJ/PDwkJUcb4XC536tSpYWFhyhgcAIWDNCIDNU8j6lJPJCQkODg46OnpsVgsBweHTZs2tbS0SP6THTt24A/LfPfdd8oLTHx1WhydTrewsJgzZ05iYuLLly+V99ZAftHR0cHBwSEhIYSv2ZOTk3Pq1KmsrCzJc9lls3PnzoKCgszMTBqNpvDB5eHm5kahUIZsADyYjz/+2NDQkEQiSf9g2pEjR/BmizY2NsuWLaupqZF8PKQRMCRII1JSl3ri999//+STTyoqKmpra7ds2ZKQkBAUFCT5T9auXZubm6vswESr0xoZGWEY1tvbW1dXd/z4cQ6HExUVNWnSJPHHd7VeTExMWlpac3Mzh8M5efIk0eFIJS4uLiwsbNu2bcSG4e3tffjwYdGqBAqUkZHR1dWVk5NjYmKi8MHldPv2bS8vL5n//ODBgwcOHJD++GPHji1atCg4OLiqqiojI+P69evz5s2TvFgipBHVgzQiMzVPI+pST9DpdHyFEgMDg+Dg4ICAgMuXL+OPs6oVEolkbGw8Z86ctLS048eP19bW4qv0Eh2XisTHx3d1dWEY9uTJkyELPvXh4+Pz9ddfEx2Fsvj7+0dHR4s/WK5uSCSSat5o3759o0ePXrdunZGR0dSpUyMjIwsKCgZrR0ggSCOQRtSNQtKIEusJDMNOnDjRp1f5YE6fPi2+GizeEFQdfq+SICgoaOnSpXV1dUq9UwqAppPnV5hh1SKVlZWWlpaiPxk7dixCqM9sQ3UDaQRoDVnqid9//93JycnIyIjJZLq4uFy6dAnfLhQK4+PjJ06cqKenN2LECA6HEx8f/84778jwFmVlZcbGxjY2NqItP/7444wZM5hMJovFGjdunHgbMpHffvtt5syZ+vr6bDbbxcVlyCcw5IdPmM7KysJfDrjC7JDr0g4YtgyL1QKgnh49euTg4MBisfT09Dw9PUXLHGzfvl1fX9/Q0LCurm7NmjVWVlb4bLrExMSJEycyGAwjIyN8rqCUbG1t6+rqRC/xhydsbW1FWyCNKPtcgC6TpZ6ora1duHDh06dPq6urDQwMFi1ahG9PSEiIjY1NTExsbGzMzs7u7Ow0NjbGe45KSSAQPH/+fM+ePVeuXNm9eze+PgpCKCkpacmSJUFBQdXV1VVVVTExMaWlpX3+tq2tzc/PLygoqLGxsaysbMKECXjfUKXCHzQTNSNbv3799u3bd+3a9ffff/v6+r733nt37txZsWLF6tWrOzo6DA0Njx07Vl5ebmtr+8knn+AN4AYLe8ChlH06ACiDiYnJxYsXm5ub79y5IxAI3njjjbKyMoTQF198ERkZ2draGh8fz+FwXn31VQzDNm3aFBUVFRoaWltbW1NTM6xWPDExMTU1Nbt37+bz+TweLykp6c033xR1XYQ0AmkEKJf45FEZ+jHEx8ejfxZhc3NzmzlzpmjXp59+SiaT8d/JpIT3+DQzM0tOThYtA9/d3W1sbOzl5SU6rKenJykpCcMwPCt9++23GIYVFxcjhM6fPy/9lCRhVwAAENhJREFU20l/vqIHqfrDfwrFMKyjo0NfXz8kJATf3t7ezmAwVqxYgf2zzn1HRwe+a+/evQihR48eDRa2hKEkQ9o1D34wKpgfr90U9TmRZhxvb+8pU6aIXhYWFiKE1q5di7/s89Vob2/X19d/4403RMfj/wTPz8+XMqSNGzeKktuYMWMqKyvx7cpLI5jU11NT0oiOfL+0r/+QivX/nFDlLEfwX0bxmcSdnZ3iz0AIhUIajTas5zsqKyubmpry8/Ojo6P3799/7do1CwuLwsLCpqamN998U3QYhUIJDw/v87e2trYWFhaLFy8ODw9funTpuHHj5DkvKbW1tWEYhvc1k36FWfF1aQcMW7bFanFDrhmjBfCOsMePHyc6EDBsLi4uRkZGeFXR36NHj9rb2729vWUbfMOGDQcPHrx69eorr7xSV1e3fv16d3f33NzcsWPHQhoZVhqpqqrS+u8Xniq1/jSVp6qqqu/aZuLFhZT12vnz52fPnj1ixAg6nY4/+vT3339jGBYVFUUmk8+cOdPe3n779m0zM7PAwEDZCp+HDx8ihMLDwzEMu3btGkLou+++63+Y+D8sMAwrLi7+3//+R6VSSSTSwoULRR1SByP//Qm8ibqPjw+GYX/88Uf/K47fwu3zDwt8CtyDBw8GC1vCUJIp9uMCtBhR9ycwDBsxYoToPkGfr0ZmZiZCSLz3n/T3J6qrqykUysaNG0VbmpubyWTyqlWrMGWmEUzu+xPqlkY0aM4FIJa8/TErKioWLFgwatSoW7duNTc3JyQkiHZxudy5c+cuXbqUzWa//fbb77zzzrDmjouzt7enUCg8Hg8hNHr0aPTvNd0HM2nSpHPnzlVXV0dFRR07dmzHjh2yvbv0Ll68iBCaN28eknWF2QHDlnkoBL93ACnI9aGXT09PT2Njo7W19YB78RucXV1dMoxcVlYmFArxdIFjs9mmpqaQRoY7FOr3/wmtBL93yKl/3TnseqKoqEggEKxYscLW1pbJZIrP5uLxeOXl5fX19QKBoKKiIjU1VcrOGA0NDe+99574Fjw14NO9xo0bZ2pqmp2dLXmQ6upqfN13c3Pzbdu2ubq69lkGXuFqamp27do1ZsyYDz/8EMm6wuyAYcu8WC0Aau7XX3/t7e11dXUdcK+zszOZTP7tt99kGBm/9SretIbP5zc2NkIaUUrcAPQz7HoC/4fFlStXOjs7y8rKxHvFrFy50traWoamESwWKzs7+9q1ay0tLQKBID8//4MPPmCxWJGRkQghBoMRExNz/fr1sLCw58+f9/b28vn8/l/y6urq5cuXl5SUdHd35+fnP3v2TPRct0JgGNba2oqvulZfX3/s2LFZs2ZRKJQzZ87gP3xKWGFWggHDlm0oANRTd3d3c3NzT0/P3bt3w8LC8PWUBzwSX0fx5MmThw4damlpKSwslLKBDUKIw+F4eXkdOHDg+vXrHR0dlZWV+MLQH330EYI0AmkEqID47Qsp7/9ERUWZmpoaGxsHBwfv2bMHIWRnZ1dRUXHt2jUzMzPRyDQazdHR8dSpU9LcOfHz8+NwOAYGBgwGw87OLiQkpKioSPyAPXv2uLi4MJlMJpM5bdq0vXv3fvPNN/h8EBaL9fbbbz99+tTDw8PExIRCoYwePXrDhg09PT2S31Sa8z179uzkyZP19fXpdDqZTEb/9LabOXPm5s2bGxoaxA8ecIVZyevSDhb2YIvVSobg9w4gBUV9TqQZJy0tzcvLy8LCgkqlmpmZvfvuu8+ePcN3JSQk6OnpIYTGjh0rWr+Rz+d//PHHZmZmBgYGr732WmxsLEJozJgx9+7dGzKeFy9eRERE2NvbMxgMAwODWbNm/fLLL+IHKCONSHMdNCuN6Mj3C37vkJNy1yvfu3dvRESE6GVXV9fq1asZDIY0DzQRQvs+T1BPAGmosp7QBVp2HXTk+6V9+V/FFD9fVKSmpiYsLEz8tzo6nW5tbS0QCAQCAf6vEAAAAABoJYWt36Gnp0ej0Q4dOlRbWysQCKqrqw8ePBgbGxsSElJdXU0anJLWcQcAaJOSkhJIIwCoM4XVE0ZGRtnZ2cXFxRMmTNDT03NyckpLS/v6669/+OEHBwcHCfdMjh49qqgYAJDGlStXoqOjT506ZWtri//f6P333xc/wMfHx9DQkEKhTJo0Ce8NoHoJCQkODg56enosFsvBwWHTpk2ihSTOnj2bkJCAN5HTHZBGgFrRiDSCEDpy5Iibm5uhoaGNjc2yZcvwRW2QctKIItcX9fT0vHz5Mv4gd1NT0x9//LFixQoqVWE/qQAgvy+//DIlJSUmJiYwMPDx48d2dnZmZmY//fTThQsXRMdkZ2efOHHC19eXx+MNNrNR2X7//fdPPvmkoqKitrZ2y5YtCQkJotnefn5+TCbT29u7qamJkNgA0HGakkaOHTu2aNGi4ODgqqqqjIyM69evz5s3r6enByknjShxvXKgfTo6Ojw8PNRtKOl9/fXXR48ePX78uKGhoWhjSkoKmUwODQ1tbm5WcTwS0On0zz//3Nzc3MDAIDg4OCAg4PLly6LJfuHh4VOmTHnrrbfw1ACAZtHoTKJBaWTfvn2jR49et26dkZHR1KlTIyMjCwoKRF0eFJ5GoJ4Aw3Do0CHx9aDVZCgpPXr0aNOmTV999ZX4KjMIIQ8Pj4iIiOfPn69du1aV8Uh2+vRp8TitrKwQQuLNXbhcbkFBQVJSEgHBASAfzc0kmpVGKisrLS0tRW0n8d5uz549Ex2g2DQC9YTOwTBs586djo6ODAbDxMQkICBAtERQWFgYnU4fNWoU/vLzzz9nsVgkEgnvUhwREbFmzZry8nISiWRvb5+SksJkMi0sLJYvX25paclkMj08PESV77CGQghdvHiRzWbHxcUp78RTUlIwDPPz8+u/a+vWrRMmTDh48OCVK1cG/FsJFy01NZXFYunr62dkZMybN4/NZo8ZMwZfdQInFApjY2Otra319PQmT56Mz1IbrrKyMmNjYxsbG9EWExOT2bNn4ytkyjAgAHLSzUyiWWnE1tZWvNjCH56wtbUVbVFwGhF/pknX5uNq3/kiKebBx8bG0un0H3/8sampqbCw0NXVdcSIETU1NfjeRYsWjRw5UnRwYmIiQqi+vh5/GRgYaGdnJ9obGhrKYrHu37/f2dnJ4/Hwp34qKipkGOr8+fOGhoabN2+W5jRlmx9va2vr5OTUZ6Odnd2TJ08wDMvNzSWTyePGjWttbcUwLCsry9/fX3SY5IuGL9R09erV5ubmuro6T09PFovV3d2N7127di2DwTh58uTLly9jYmLIZPLt27eljLm7u7uqqmr37t0MBkPU8UkkOjoaDWctbxFpPieqHEfTadl1kPL7pemZRLb8r1lpJCcnh0ajpaSktLS0FBcXOzo6vvnmm32OkTmN9P+cwP0J3dLR0bFz586333578eLFRkZGLi4u33333YsXL6TvatwHlUrFy20nJ6fU1FQ+n5+WlibDOPPnz29padm0aZNsYQypra3tyZMndnZ2gx3g7u6+evXqp0+frl+/vs8uKS+ah4cHm802NzcPCQlpa2urqKhACHV2dqampi5YsCAwMNDY2Hjjxo00Gk36SzR27NgxY8Zwudzt27cvXLiwz97x48cjhIqKiqQcDQBF0c1MonFpZPbs2VFRUWFhYWw229nZmc/nHzx4sM8xCkwjUE/oFh6P19raOmPGDNEWNzc3Op0uvg6LzGbMmKGvry+6g6dW6urqMAzDOxYPZuvWrRMnTty7d++NGzfEtw/3otHpdISQQCBACJWWlra3tzs7O+O79PT0Ro0aJf0lqqysrKurO3LkyA8//DBt2rQ+vxPjp1NbWyvlaAAoim5mEo1LIxs2bNi/f//Vq1dbW1sfP37s4eHh7u5eWVkpfowC0wjUE7oFnxpkYGAgvtHY2JjP5ytkfAaDUV9fr5ChFKuzsxMhxGAwJBzDZDLT0tJIJNKHH37Y0dEh2i7PRWtra0MIbdy4UdR56dmzZ+3t7VKGTaPRzM3NfXx8jh49yuPx4uPjxffibWfxUwNAlXQzk2hWGvn7778TEhI+/fTTuXPnslgsDodz4MCB6upq/AcjEQWmEagndIuxsTFCqM8nuKmpCV/rWU4CgUBRQykc/p0ZsnmLu7t7ZGRkWVnZli1bRBvluWjm5uYIoV27don/ypiXlzfc+O3t7SkUCo/HE9/Y3d2N/jk1AFRJNzOJZqWRsrIyoVA4evRo0RY2m21qaqq8NAL1hG5xdnY2MDC4c+eOaMutW7e6u7unT5+Ov6RSqfgdNhnk5ORgGCZa31meoRTOwsKCRCJJMzV8y5YtDg4O+fn5oi1DXjQJxo4dy2Qyxde1kUZDQ8N7770nvgVPDfh0LxH8dPDlMQFQJd3MJJqVRvBKRXyFej6f39jYqLw0AvWEbmEymWvWrDl9+vRPP/3U0tJSVFT02WefWVpahoaG4gfY29s3NjaeOXNGIBDU19eLz1RGCJmamlZXVz99+pTP5+Pf8N7e3pcvX/b09BQWFkZERFhbWy9dulSGobKyspQ6y0tfX9/W1raqqmrII/HblRQKRXyL5IsmebRly5b9/PPPqampLS0tQqGwqqoK/4aHhISMHDlywEa8LBYrOzv72rVrLS0tAoEgPz//gw8+YLFYkZGR4ofhp+Pi4jJkGAAolm5mEs1KIxwOx8vL68CBA9evX+/o6KisrMTf66OPPhI/TJFpRPz+ifbNn5RM+84XSTFvrbe3NzExcfz48TQazcTEZMGCBaWlpaK9DQ0NXl5eTCaTw+GsWrVq3bp1CCF7e3t87tbdu3dtbGz09PRee+21mpqa0NBQGo1mZWVFpVLZbHZAQEB5eblsQ2VmZhoaGm7dulWa05RtvmhYWBiNRmtvb8dfnj59Gn9Oe8SIEStXruxz8Lp168Qnekm4aHv37sUfaBo/fnx5efn+/fvZbDZCyMbG5uHDhxiGdXV1RUVFWVtbU6lUc3PzwMBAHo+HYdiCBQsQQrGxsQNG6+fnx+FwDAwMGAyGnZ1dSEhIUVFRn2Pmz59vZWXV29s73EshzedEleNoOi27DlJ+vzQ9k8iW/zUrjbx48SIiIsLe3p7BYBgYGMyaNeuXX37pc4zMaaT/5wTqCa06XxXntdDQUFNTU5W9nYhs9URZWRmVSu3fxYEoQqHQ09Pz0KFDsv35ixcvmEzmjh07ZPhbqCcUS8uug2zfL3kQkklky/+QRkSg/wRQMA1a5dLe3n7z5s2bN28W71pNFKFQeObMGT6fL/NC21wud+rUqWFhYYoNDABCaEomgTQiAdQTQIdER0cHBweHhIQQvmZPTk7OqVOnsrKyJM9lH8zOnTsLCgoyMzNpNJrCYwMASABpZDBQTwAZxcTEpKWlNTc3czickydPEh2OtOLi4sLCwrZt20ZsGN7e3ocPHxatSjAsGRkZXV1dOTk5JiYmCg8MABXTxEwCaWRAVEUNBHRNfHx8n/ZKmsLHx8fHx4foKGTn7+/v7+9PdBQAKIaGZhJII/3B/QkAAAAAyAvqCQAAAADIC+oJAAAAAMgL6gkAAAAAyGuA5zGDg4NVHwch8D6jWna+u3btOnHiBNFRKNfNmzeR1v2H01C68HmThjZdBx35fmll/lelmzdvitZYwZEwDBO9yMvL27lzp8qjAgCoWmRkpLu7u5yDQC4GQJfhK6mKXv6rngAAAAAAkAE8PwEAAAAAeUE9AQAAAAB5QT0BAAAAAHlBPQEAAAAAef0fM2gxzsdL0OUAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 167,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# encoder.output\n",
    "keras.utils.plot_model(encoder, \"encoder.png\", show_shapes=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "U3_Qm4mOJzC4",
    "outputId": "e9727c9a-8d75-48fc-8abe-9bb15a6f9f4c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(359,)\n",
      "(359,)\n",
      "(359, 3)\n",
      "(359, 8)\n",
      "(359, 150, 150, 3)\n",
      "(359, 3)\n"
     ]
    }
   ],
   "source": [
    "(tX0, tX1), (ty0, ty1, ty2, ty3) = data_loader(test_df, (150, 150, 3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "b7XnFqweNwUB",
    "outputId": "72e8ab44-55cb-4fd4-8fc0-c6b1339f8810"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "12/12 - 0s - loss: 1.7061 - ag_3cls_loss: 0.6055 - brd_8cls_loss: 1.1006 - ag_3cls_accuracy: 0.7577 - brd_8cls_accuracy: 0.6713 - 193ms/epoch - 16ms/step\n"
     ]
    }
   ],
   "source": [
    "test_scores = encoder.evaluate(tX0, [ty2, ty3], verbose=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "ix1tL2chOUdA",
    "outputId": "9a3dba5e-c6d5-4083-88c5-a5d58ad327a1"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test loss: 1.706093668937683\n",
      "Test accuracy: 0.6055063009262085\n"
     ]
    }
   ],
   "source": [
    "print(\"Test loss:\", test_scores[0])\n",
    "print(\"Test accuracy:\", test_scores[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {
    "id": "pknNE0XJ1TtU"
   },
   "outputs": [],
   "source": [
    "p1, p2, p3 = encoder.predict([tf.expand_dims(tX0[0], 0), tf.expand_dims(tX1[0], 0)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {
    "id": "iUbdFp4I1gR2"
   },
   "outputs": [],
   "source": [
    "# print(p0);ty0[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "NBWS4n921izy",
    "outputId": "39fc1618-40dc-4fdf-8e6e-387b05fa4ec3"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[45.881622]]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: shape=(), dtype=float32, numpy=48.0>"
      ]
     },
     "execution_count": 158,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(p1);ty1[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "JgKtF9Dc1lRW",
    "outputId": "fd669f34-8835-4830-8c3f-62bf5397f01c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 159,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(p2.argmax());ty2[0].argmax()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "5wCRToDy1nRH",
    "outputId": "a921efb8-ca61-4e41-df7c-22cdba4b5e46"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "7"
      ]
     },
     "execution_count": 160,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(p3.argmax());ty3[0].argmax()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "7hPxQCKTxp49"
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "accelerator": "GPU",
  "colab": {
   "authorship_tag": "ABX9TyPEZkw4o1Gn/nQJGNLyYzlf",
   "include_colab_link": true,
   "name": "027-dec.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "yt38",
   "language": "python",
   "name": "yt38"
  },
  "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.8.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
