Comet ML

Comet-ML, makine öğrenmesi ve derin öğrenme projelerinde deneylerin izlenmesi ve model performansının değerlendirilmesi için kullanılan açık kaynak kodlu bir platformdur. Comet-ML, kullanıcıların deneylerini organize etmelerini, sonuçlarını paylaşmalarını ve işbirliği yapmalarını sağlar. Deneylerin izlenmesi, metriklerin görselleştirilmesi, model performansının karşılaştırılması ve projeler arası işbirliğinin kolaylaştırılması için çeşitli araçlar sunar.

1 – ) İlk olarak comet-ml sitesinden üye olarak bir comet-ml hesabı oluşturuyoruz. Üye olduktan sonra bizi bir arayüz ekranı karşılıyor. Bu ekranda bizim projelerimiz listeleniyor. Örnek olarak burada comet-ml topluluğunun oluşturduğu herkese açık (public) olan birkaç proje mevcut, bunları inceleyebilirsiniz.

2 – ) Sağ üst taraftaki kullanıcı işaretinden ‘Account Settings’ tıklıyoruz. Sol taraftaki menüden ‘API Keys’ tıklayıp projelerimizi comet-ml’e bağlamak için gerekli olan API anahtarımızı kopyalıyoruz.

3 – ) Bir projeyi comet-ml’e bağlamak için üç yol var. Bunlar;

3.1 – ) comet-ml kütüphanesi ile kod içinde bağlanmak: comet-ml kütüphanesini kullanarak kodun içerisinde bağlanılabilir.

import comet_ml

experiment = comet_ml.Experiment(
	api_key='<API_ANAHTARI>',
	workspace='<CALISMA_ALANI_ADI>',
	project_name='<PROJE_ADI>'
)

3.2 – ) Çevre Değişkenleri (Environment Variables): API anahtarını ve proje ismi gibi çeşitli bilgileri çevre değişkenlerine kaydederek bağlanılabilir.

export COMET_API_KEY='<API_ANAHTARI>'
export COMET_WORKSPACE='<CALISMA_ALANI_ADI>'
export COMET_PROJECT_NAME='<PROJE_ADI>'

3.3 – ) .comet.config dosyası ile bağlanmak: Çevre değişkeni yöntemine benzerdir. Proje dizini içerisinde bir ‘.comet.config’ dosyası tanımlayarak içerisine gerekli değişkenler yazılarak bağlanılabilir.

[comet]
api_key=<API_ANAHTARI>
workspace=<CALISMA_ALANI_ADI>
project_name=<PROJE_ADI>

4 – ) Gerekli kütüphaneleri kuralım.

pip install scikit-learn missingno comet-ml numpy pandas python-dotenv seaborn matplotlib 

5 – ) Ben bu yazıda çevre değişkeni yöntemini kullanacağım fakat bunu ‘python-dotenv’ kütüphanesini kullanarak yapacağım. İlk olarak proje dizini içerisinde ‘.comet’ isminde bir dosya oluşturuyorum ve aşağıdaki bilgileri giriyorum. Workspace değişkeni comet-ml’de varsayılan olarak her kullanıcı için kullanıcı adı isminde bir tane açılır. Kayıt olurken belirlediğiniz kullanıcı adı sizin varsayılan çalışma alanınızdır.

COMET_API_KEY=ly*****************
COMET_WORKSPACE=th*******
COMET_PROJECT_NAME='breast-cancer-classification'

6 – ) Aşağıdaki kodu bilgisayarınızda çalıştırın.

import dotenv
dotenv.load_dotenv('.comet')

import pandas as pd
import numpy as np

import missingno
import seaborn as sns
import matplotlib.pyplot as plt

import pickle
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score
from sklearn.metrics import confusion_matrix
from sklearn.ensemble import RandomForestClassifier

import comet_ml
from comet_ml import Experiment

import warnings
warnings.filterwarnings('ignore')

breast_cancer = load_breast_cancer()

experiment = Experiment()
experiment.set_name('breast-cancer')
experiment.add_tag('classification')

df = pd.DataFrame(data=np.c_[breast_cancer['data'], breast_cancer['target']])
df.columns = ['mean radius', 'mean texture', 'mean perimeter', 'mean area',
        'mean smoothness', 'mean compactness', 'mean concavity',
        'mean concave points', 'mean symmetry', 'mean fractal dimension',
        'radius error', 'texture error', 'perimeter error', 'area error',
        'smoothness error', 'compactness error', 'concavity error',
        'concave points error', 'symmetry error',
        'fractal dimension error', 'worst radius', 'worst texture',
        'worst perimeter', 'worst area', 'worst smoothness',
        'worst compactness', 'worst concavity', 'worst concave points',
        'worst symmetry', 'worst fractal dimension', 'target']

df["target"] = df["target"].astype(int)

experiment.log_dataframe_profile(df, 'breast-cancer-data')

missing = missingno.bar(df).get_figure().savefig('images/missingno.png')
experiment.log_image('images/missingno.png', name='missing.png', image_format='png')

for col in df.columns:
    plt.figure(figsize=(10, 6))
    sns.histplot(data=df, x=col, kde=True)
    plt.savefig(f'images/{col}.png')
    experiment.log_image(f'images/{col}.png', name=col, image_format='png')
    plt.show()

X = df.drop('target', axis=1)
y = df['target']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

def compute_metrics(y_test, y_pred):
    metrics = {}
    metrics['accuracy'] = accuracy_score(y_test, y_pred)
    metrics['f1'] = f1_score(y_test, y_pred)
    metrics['precision'] = precision_score(y_test, y_pred)
    metrics['recall'] = recall_score(y_test, y_pred)
    return metrics

model = RandomForestClassifier()

with experiment.train():
    model.fit(X_train, y_train)
    y_pred = model.predict(X_train)
    train_metrics = compute_metrics(y_train, y_pred)
    experiment.log_metrics(train_metrics)
    cm = confusion_matrix(y_train, y_pred)
    experiment.log_confusion_matrix(labels=[0, 1], matrix=cm)

    with open(f'models/rf.pkl', 'wb') as file:
        pickle.dump(model, file)
        experiment.log_model(f'Random-Forest', f'models/rf.pkl')

with experiment.validate():
    y_pred = model.predict(X_test)
    test_metrics = compute_metrics(y_pred, y_test)
    experiment.log_metrics(test_metrics)
    cm = confusion_matrix(y_test, y_pred)
    experiment.log_confusion_matrix(labels=[0, 1], matrix=cm)

experiment.end()

7 – ) Kodu çalıştırdıktan sonra comet-ml sitesinden ‘breast-cancer-classification’ projemizi seçelim. Açılan ekranda soldaki menüde:

  • Panels: Bu ekran panel sayfası proje etiketi, proje adı, çalışma süresi gibi temel bilgiler bu ekranda bulunur.
  • Code: Deney (experiment) de kullanılan kodlar bu ekranda bulunur.
  • Hyperparameters: Eğitilen modele ait hiperparametreler bu ekranda bulunur.
  • Metrics: Eğitilen modele ait metrikler bu ekranda bulunur.
  • Graph Definition: Modelin mimarisi bu ekranda bulunur.
  • Output: Modeli eğitirken ortaya çıkan çıktılar ve hatalar bu ekranda gösterilir.
  • System Metrics: Modeli eğiten sistemin GPU sıcaklığı, RAM kullanım miktari gibi sistemsel bilgiler bu ekranda görselleştirilir.
  • Installed Packages: Modelin eğitildiği sistemdeki kurulu paketler ve versiyon bilgileri bu ekranda bulunur. Eğer sanal bir çevre ortamı kullanılmazsa sistemdeki tüm paketler ve versiyon bilgileri listelenir.
  • Notes: Deneye ait yazılan notlar ve notebook içerisindeki markdown kodları bu ekranda bulunur.
  • Graphics: Deney içerisinde oluşturulan grafikler bu ekranda bulunur.
  • Audio: Kaydedilen ses dosyaları bu ekranda görünür.
  • Text: Kaydedilen metinler bu ekranda görünür.
  • Confusion Matrix: Model için oluşturulan karmaşıklık matrisi bu ekranda bulunur.
  • Histograms: Model için oluşturulan üç boyutlu histogramlar bu ekranda bulunur.
  • Other: Deneye ait diğer bilgiler bu ekranda tutulur.
  • HTML: Deney içerisinde oluşturulan HTML raporları bu ekranda bulunur.
  • Assets & Artifacts: Kaydedilen model dosyası, veri seti, kullanılan notebook gibi tüm dosyalar burada bulunur.
Comet-ml proje ana sayfası.
'Metrics' sayfası.
'System Metrics' sayfası.
'Installed Packages' sayfası.
'Graphics' sayfası.
'Confusion matris' sayfası.
'Assets & Artifacts' sayfası.