{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "os.chdir('../')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From c:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\keras\\src\\backend.py:1398: The name tf.executing_eagerly_outside_functions is deprecated. Please use tf.compat.v1.executing_eagerly_outside_functions instead.\n", "\n", "WARNING:tensorflow:From c:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\keras\\src\\layers\\pooling\\max_pooling2d.py:161: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.\n", "\n" ] } ], "source": [ "model = tf.keras.models.load_model('artifacts/training/model.h5')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from dataclasses import dataclass\n", "from pathlib import Path\n", "\n", "@dataclass(frozen=True)\n", "class EvaluationConfig:\n", " path_of_model : Path\n", " training_data : Path\n", " all_params : dict\n", " params_image_size : list\n", " params_batch_size: int" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from cnnClassfier.constants import *\n", "from cnnClassfier.utils.common import read_yaml, create_directories, save_json" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "class ConfigurationManager:\n", " def __init__(\n", " self, \n", " config_filepath = CONFIG_FILE_PATH,\n", " params_filepath = PARAMS_FILE_PATH):\n", " self.config = read_yaml(config_filepath)\n", " self.params = read_yaml(params_filepath)\n", " create_directories([self.config.artifacts_root])\n", " \n", " \n", " def get_validation_config(self) -> EvaluationConfig:\n", " eval_config = EvaluationConfig(\n", " path_of_model=\"artifacts/training/model.h5\",\n", " training_data=\"artifacts/data_ingestion/Chicken-fecal-images\",\n", " all_params=self.params,\n", " params_image_size=self.params.IMAZE_SIZE,\n", " params_batch_size=self.params.BATCH_SIZE\n", " )\n", " return eval_config\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "from urllib.parse import urlparse\n", "\n", "class Evaluation:\n", " def __init__(self, config: EvaluationConfig):\n", " self.config = config\n", " \n", " def _valid_generator(self):\n", " datagenerator_kwargs = dict(\n", " rescale = 1./255,\n", " validation_split = 0.30\n", " )\n", " \n", " dataflow_kwargs = dict(\n", " target_size = self.config.params_image_size[:-1],\n", " batch_size= self.config.params_batch_size,\n", " interpolation = 'bilinear'\n", " )\n", " \n", " valid_datagenerator = tf.keras.preprocessing.image.ImageDataGenerator(\n", " **datagenerator_kwargs\n", " )\n", " \n", " self.valid_generator = valid_datagenerator.flow_from_directory(\n", " directory = self.config.training_data,\n", " subset = 'validation',\n", " shuffle = True,\n", " **dataflow_kwargs\n", " )\n", " \n", " @staticmethod\n", " def load_model(path: Path) -> tf.keras.Model:\n", " return tf.keras.models.load_model(path)\n", " \n", " def evaluation(self):\n", " self.model = self.load_model(self.config.path_of_model)\n", " self._valid_generator()\n", " self.score = model.evaluate(self.valid_generator)\n", " \n", " def save_score(self):\n", " scores = {'loss' : self.score[0], 'accuracy' : self.score[1]}\n", " save_json(path = Path('scores.json'), data = scores)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2024-07-28 02:01:54,885: INFO: common: yaml file: config\\config.yaml loaded successfully]\n", "[2024-07-28 02:01:54,889: INFO: common: yaml file: params.yaml loaded successfully]\n", "[2024-07-28 02:01:54,890: INFO: common: Created directory at: artifacts]\n", "Found 116 images belonging to 2 classes.\n", "WARNING:tensorflow:From c:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\keras\\src\\utils\\tf_utils.py:492: The name tf.ragged.RaggedTensorValue is deprecated. Please use tf.compat.v1.ragged.RaggedTensorValue instead.\n", "\n", "[2024-07-28 02:01:56,004: WARNING: module_wrapper: From c:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\keras\\src\\utils\\tf_utils.py:492: The name tf.ragged.RaggedTensorValue is deprecated. Please use tf.compat.v1.ragged.RaggedTensorValue instead.\n", "]\n", "8/8 [==============================] - 11s 1s/step - loss: 0.3306 - accuracy: 0.9569\n", "[2024-07-28 02:02:06,982: INFO: common: Json file saved at: scores.json]\n" ] } ], "source": [ "try:\n", " config = ConfigurationManager()\n", " val_config = config.get_validation_config()\n", " evaluation = Evaluation(val_config)\n", " evaluation.evaluation()\n", " evaluation.save_score()\n", " \n", "except Exception as e:\n", " raise e" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.0" } }, "nbformat": 4, "nbformat_minor": 2 }