Spaces:
Sleeping
Sleeping
File size: 2,306 Bytes
3e93e14 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 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")
|