kidney-classifier / src /cnnClassifier /components /model_evaluation_mlflow.py
Sentoz's picture
Deploy KidneyDL CT Scan Classifier
3e93e14 verified
Raw
History Blame Contribute Delete
2.31 kB
import os
import tensorflow as tf
from pathlib import Path
import dagshub
import mlflow
import mlflow.tensorflow
from urllib.parse import urlparse
from cnnClassifier.entity.config_entity import EvaluationConfig
from cnnClassifier.utils.common import save_json
class Evaluation:
def __init__(self, config: EvaluationConfig):
self.config = config
def _valid_generator(self):
datagenerator_kwargs = dict(rescale=1.0 / 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=False,
**dataflow_kwargs
)
@staticmethod
def load_model(path: Path) -> tf.keras.Model:
return tf.keras.models.load_model(path)
def evaluation(self):
self.model = self.load_model(self.config.path_of_model)
self._valid_generator()
self.score = self.model.evaluate(self.valid_generator)
self.save_score()
def save_score(self):
scores = {"loss": self.score[0], "accuracy": self.score[1]}
save_json(path=Path("scores.json"), data=scores)
def log_into_mlflow(self):
dagshub.init(
repo_owner="sentongo-web",
repo_name="Kidney_classification_Using_MLOPS_and_DVC_Data-version-control",
mlflow=True
)
mlflow.set_registry_uri(self.config.mlflow_uri)
tracking_url_type_store = urlparse(mlflow.get_tracking_uri()).scheme
with mlflow.start_run():
mlflow.log_params(self.config.all_params)
mlflow.log_metrics({"loss": self.score[0], "accuracy": self.score[1]})
if tracking_url_type_store != "file":
mlflow.tensorflow.log_model(self.model, "model", registered_model_name="VGG16Model")
else:
mlflow.tensorflow.log_model(self.model, "model")