from urllib.parse import urlparse from cnnClassfier.entity.config_entity import EvaluationConfig from pathlib import Path import tensorflow as tf from cnnClassfier.utils.common import save_json class Evaluation: def __init__(self, config: EvaluationConfig): self.config = config def _valid_generator(self): datagenerator_kwargs = dict( rescale = 1./255, validation_split = 0.30 ) dataflow_kwargs = dict( target_size = self.config.params_image_size[:-1], batch_size= self.config.params_batch_size, interpolation = 'bilinear' ) valid_datagenerator = tf.keras.preprocessing.image.ImageDataGenerator( **datagenerator_kwargs ) self.valid_generator = valid_datagenerator.flow_from_directory( directory = self.config.training_data, subset = 'validation', shuffle = True, **dataflow_kwargs ) @staticmethod def load_model(path: Path) -> tf.keras.Model: return tf.keras.models.load_model(path) def evaluation(self): model = self.load_model(self.config.path_of_model) self._valid_generator() self.score = model.evaluate(self.valid_generator) def save_score(self): scores = {'loss' : self.score[0], 'accuracy' : self.score[1]} save_json(path = Path('scores.json'), data = scores)