In [2]:
import json
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from pathlib import Path

LOG_PATH = Path("../models/multilabel/training_log.json")

with open(LOG_PATH, encoding="utf-8") as f:
    data = json.load(f)

print(f"🔢 Wczytano {len(data)} rekordów")
🔢 Wczytano 373 rekordów
In [3]:
df = pd.DataFrame(data)
df.head(10)
Out[3]:
loss grad_norm learning_rate epoch step eval_loss eval_accuracy eval_f1 eval_precision eval_recall eval_runtime eval_samples_per_second eval_steps_per_second train_runtime train_samples_per_second train_steps_per_second total_flos train_loss
0 0.4904 0.595887 0.000020 0.03 50 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 0.3657 0.460212 0.000020 0.07 100 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 0.3182 0.615664 0.000020 0.10 150 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 0.2750 0.463075 0.000020 0.13 200 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 0.2520 0.639511 0.000020 0.17 250 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 0.2434 0.450176 0.000020 0.20 300 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 0.2208 0.661054 0.000020 0.23 350 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 0.2192 0.402220 0.000020 0.27 400 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 0.2138 0.729939 0.000019 0.30 450 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 0.2066 0.564321 0.000019 0.33 500 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
In [4]:
metric_cols = [col for col in df.columns if isinstance(df[col].dropna().iloc[0], (int, float))]
print(f"📐 Metryki numeryczne: {metric_cols}")
📐 Metryki numeryczne: ['loss', 'grad_norm', 'learning_rate', 'epoch', 'eval_loss', 'eval_accuracy', 'eval_f1', 'eval_precision', 'eval_recall', 'eval_runtime', 'eval_samples_per_second', 'eval_steps_per_second', 'train_runtime', 'train_samples_per_second', 'train_steps_per_second', 'total_flos', 'train_loss']
In [5]:
plt.figure(figsize=(10, 5))
sns.lineplot(data=df, x="epoch", y="loss", label="loss", marker="o")
if "eval_loss" in df.columns:
    sns.lineplot(data=df, x="epoch", y="eval_loss", label="eval_loss", marker="o")
plt.title("Strata treningowa / walidacyjna")
plt.xlabel("Epoka")
plt.ylabel("Strata")
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
No description has been provided for this image
In [6]:
plt.figure(figsize=(10, 5))
if "eval_f1" in df.columns:
    sns.lineplot(data=df, x="epoch", y="eval_f1", label="F1", marker="o")
if "eval_accuracy" in df.columns:
    sns.lineplot(data=df, x="epoch", y="eval_accuracy", label="Accuracy", marker="o")
plt.title("Skuteczność metryk walidacyjnych")
plt.xlabel("Epoka")
plt.ylabel("Wartość metryki")
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
No description has been provided for this image
In [7]:
last_eval = df[df["epoch"] == df["epoch"].max()].dropna(axis=1)
last_eval.T.sort_index()
Out[7]:
370 371 372
epoch 12.0 12.0 12.0
step 18000.0 18000.0 18000.0
In [8]:
plt.figure(figsize=(10, 5))
if "eval_precision" in df.columns:
    sns.lineplot(data=df, x="epoch", y="eval_precision", label="Precision", marker="o")
if "eval_recall" in df.columns:
    sns.lineplot(data=df, x="epoch", y="eval_recall", label="Recall", marker="o")
plt.title("Precision i Recall")
plt.xlabel("Epoka")
plt.ylabel("Wartość metryki")
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
No description has been provided for this image
In [9]:
if "learning_rate" in df.columns:
    plt.figure(figsize=(10, 4))
    sns.lineplot(data=df, x="epoch", y="learning_rate", label="Learning Rate", marker="o")
    plt.title("Learning Rate w czasie")
    plt.xlabel("Epoka")
    plt.ylabel("LR")
    plt.grid(True)
    plt.tight_layout()
    plt.show()
No description has been provided for this image
In [10]:
if "grad_norm" in df.columns:
    plt.figure(figsize=(10, 4))
    sns.lineplot(data=df, x="epoch", y="grad_norm", label="Gradient Norm", marker="o")
    plt.title("Gradient Norm w czasie")
    plt.xlabel("Epoka")
    plt.ylabel("Norma gradientu")
    plt.grid(True)
    plt.tight_layout()
    plt.show()
No description has been provided for this image
In [11]:
eval_cols = [col for col in df.columns if col.startswith("eval_")]
plt.figure(figsize=(12, 6))
for col in eval_cols:
    sns.lineplot(data=df, x="epoch", y=col, label=col, marker="o")
plt.title("Wszystkie metryki walidacyjne")
plt.xlabel("Epoka")
plt.ylabel("Wartość")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()
No description has been provided for this image
In [ ]: