import os import pandas as pd import seaborn as sns import matplotlib.pyplot as plt def plot_loss_acc_runs(csv_files, max_epochs=None): rows_loss = [] rows_acc = [] for csv_file in csv_files: run_name = os.path.splitext(os.path.basename(csv_file))[0] df = pd.read_csv(csv_file) if max_epochs is not None: df = df[df["epoch"] <= max_epochs] # LOSS rows_loss.append(pd.DataFrame({"epoch": df["epoch"], "value": df["loss/train"], "split": "train", "run": run_name})) rows_loss.append(pd.DataFrame({"epoch": df["epoch"], "value": df["loss/valid"], "split": "valid", "run": run_name})) # ACC rows_acc.append(pd.DataFrame({"epoch": df["epoch"], "value": df["acc/train"], "split": "train", "run": run_name})) rows_acc.append(pd.DataFrame({"epoch": df["epoch"], "value": df["acc/valid"], "split": "valid", "run": run_name})) loss = pd.concat(rows_loss, ignore_index=True).rename(columns={"run": ">> RUN <<", "split": ">> SPLIT <<"}) acc = pd.concat(rows_acc, ignore_index=True).rename(columns={"run": ">> RUN <<", "split": ">> SPLIT <<"}) sns.set_theme(style="whitegrid") dashes = {"train": (), "valid": (3, 2)} # train plein, valid pointillé fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, sharex=True, figsize=(9, 7)) sns.lineplot(data=loss, x="epoch", y="value", hue=">> RUN <<", style=">> SPLIT <<", dashes=dashes, errorbar=None, ax=ax1) ax1.set_ylabel("Loss") ax1.set_facecolor("#faf7f2") # beige clair ax1.set_xlabel("") ax1.set_xlim(left=0) ax1.legend(title=None) sns.lineplot(data=acc, x="epoch", y="value", hue=">> RUN <<", style=">> SPLIT <<", dashes=dashes, errorbar=None, ax=ax2) ax2.set_ylabel("Accuracy") ax2.set_facecolor("#f2f6ff") # bleu pâle ax2.set_xlabel("Epoch") ax2.set_xlim(left=0) ax2.legend(title=None) plt.tight_layout() plt.show() import os import glob folder = r"C:\log\test1" csv_files = glob.glob(os.path.join(folder, "*.csv")) plot_loss_acc_runs(csv_files)