Passer au contenu principal
Dans W&B Models, les méthodes de wandb.plot vous permettent de suivre des graphiques avec wandb.Run.log(), y compris des graphiques qui évoluent au fil du temps pendant l’entraînement. Pour en savoir plus sur le framework de graphiques personnalisés, voir le guide pas à pas des graphiques personnalisés.

Graphiques de base

Pour créer un graphique W&B :
  1. Créez un objet wandb.Table et ajoutez-y les données que vous souhaitez visualiser.
  2. Générez un graphique à l’aide de l’une des fonctions utilitaires intégrées de W&B
  3. Journalisez le graphique avec wandb.Run.log().
Les graphiques de base suivants permettent de créer des visualisations simples de métriques et de résultats.
Consignez un graphique en courbes personnalisé, une liste de points reliés et ordonnés sur des axes arbitraires.
import wandb

with wandb.init() as run:
    data = [[x, y] for (x, y) in zip(x_values, y_values)]
    table = wandb.Table(data=data, columns=["x", "y"])
    run.log(
        {
            "my_custom_plot_id": wandb.plot.line(
                table, "x", "y", title="Custom Y versus X line plot"
            )
        }
    )
Vous pouvez utiliser ceci pour enregistrer des courbes dans n’importe quelles deux dimensions. Si vous tracez deux listes de valeurs l’une par rapport à l’autre, le nombre de valeurs dans chaque liste doit correspondre exactement. Par exemple, chaque point doit avoir un x et un y.
Graphique en courbes personnalisé
Pour plus d’informations, voir le rapport Création de graphiques en courbes personnalisés avec W&B.Exécuter le code

Graphiques d’évaluation du modèle

Ces graphiques prédéfinis intègrent des méthodes wandb.plot() qui permettent de journaliser rapidement et facilement des graphiques directement depuis votre script, puis de voir exactement les informations recherchées dans l’interface utilisateur.
Créez une courbe de précision-rappel en une ligne :
import wandb
with wandb.init() as run:
    # ground_truth est une liste de vraies étiquettes, predictions est une liste de scores prédits.
    # Par exemple ground_truth = [0, 1, 1, 0], predictions = [0.1, 0.4, 0.35, 0.8]
    ground_truth = [0, 1, 1, 0]
    predictions = [0.1, 0.4, 0.35, 0.8]
    run.log({"pr": wandb.plot.pr_curve(ground_truth, predictions)})
Vous pouvez journaliser ces données chaque fois que votre code a accès à :
  • aux scores prédits d’un modèle (predictions) sur un ensemble d’exemples.
  • aux étiquettes de vérité de terrain correspondantes (ground_truth) pour ces exemples.
  • (Facultatif) à une liste des étiquettes ou des noms de classe. Par exemple, labels=["cat", "dog", "bird"], si l’indice d’étiquette 0 correspond à cat, 1 à dog et 2 à bird.
  • (Facultatif) à un sous-ensemble des étiquettes à visualiser dans le graphique, toujours au format liste.
Courbe précision-rappel
Pour plus d’informations, voir le Reports Plot Precision Recall Curves With W&B.Exécuter le code

Graphiques personnalisés interactifs

Pour une personnalisation complète, modifiez un préréglage de graphique personnalisé intégré ou créez-en un nouveau, puis enregistrez le graphique. Utilisez l’ID du graphique pour journaliser les données dans ce préréglage personnalisé directement depuis votre script.
import wandb
# Créer un tableau avec les colonnes à tracer.
table = wandb.Table(data=data, columns=["step", "height"])

# Associer les colonnes du tableau aux champs du graphique.
fields = {"x": "step", "value": "height"}

# Utiliser le tableau pour remplir le nouveau préréglage de graphique personnalisé.
# Pour utiliser votre propre préréglage de graphique enregistré, modifiez vega_spec_name.
# Pour modifier le titre, modifiez string_fields.
my_custom_chart = wandb.plot_table(
    vega_spec_name="carey/new_chart",
    data_table=table,
    fields=fields,
    string_fields={"title": "Height Histogram"},
)

with wandb.init() as run:
    # Journaliser le graphique personnalisé dans le journal.
    run.log({"my_custom_chart": my_custom_chart})
Exécutez le code

Graphiques Matplotlib et Plotly

Au lieu d’utiliser les graphiques personnalisés de W&B avec wandb.plot(), vous pouvez journaliser des graphiques créés avec matplotlib et Plotly.
import wandb
import matplotlib.pyplot as plt

with wandb.init() as run:
    # Créer un graphique matplotlib simple.
    plt.figure()
    plt.plot([1, 2, 3, 4])
    plt.ylabel("quelques nombres intéressants")

    # Journaliser le graphique dans W&B.
    run.log({"chart": plt})
Passez simplement un graphique matplotlib ou un objet figure à wandb.Run.log(). Par défaut, nous convertirons le graphique en graphique Plotly. Si vous préférez journaliser le graphique sous forme d’image, vous pouvez le passer à wandb.Image. Nous acceptons aussi directement les graphiques Plotly.
Si vous obtenez une erreur du type “You attempted to log an empty plot”, stockez la figure séparément du graphique avec fig = plt.figure(), puis journalisez fig dans votre appel à wandb.Run.log().

Journaliser du HTML personnalisé dans W&B Tables

W&B prend en charge la journalisation de graphiques interactifs Plotly et Bokeh au format HTML, ainsi que leur ajout à Tables.

Journaliser des figures Plotly dans Tables au format HTML

Vous pouvez journaliser des graphiques Plotly interactifs dans les Tables de W&B en les convertissant au format HTML.
import wandb
import plotly.express as px

# Initialiser un nouveau run.
with wandb.init(project="log-plotly-fig-tables", name="plotly_html") as run:

    # Créer un tableau.
    table = wandb.Table(columns=["plotly_figure"])

    # Créer le chemin vers le graphique Plotly.
    path_to_plotly_html = "./plotly_figure.html"

    # Exemple de graphique Plotly.
    fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16])

    # Écrire le graphique Plotly en HTML.
    # Définir auto_play sur False empêche les graphiques Plotly animés
    # de se lancer automatiquement dans le tableau.
    fig.write_html(path_to_plotly_html, auto_play=False)

    # Ajouter le graphique Plotly en tant que fichier HTML dans le tableau.
    table.add_data(wandb.Html(path_to_plotly_html))

    # Journaliser le tableau.
    run.log({"test_table": table})

Journaliser des figures Bokeh dans Tables au format HTML

Vous pouvez journaliser des graphiques Bokeh interactifs dans W&B Tables en les convertissant au format HTML.
from scipy.signal import spectrogram
import holoviews as hv
import panel as pn
from scipy.io import wavfile
import numpy as np
from bokeh.resources import INLINE

hv.extension("bokeh", logo=False)
import wandb


def save_audio_with_bokeh_plot_to_html(audio_path, html_file_name):
    sr, wav_data = wavfile.read(audio_path)
    duration = len(wav_data) / sr
    f, t, sxx = spectrogram(wav_data, sr)
    spec_gram = hv.Image((t, f, np.log10(sxx)), ["Time (s)", "Frequency (hz)"]).opts(
        width=500, height=150, labelled=[]
    )
    audio = pn.pane.Audio(wav_data, sample_rate=sr, name="Audio", throttle=500)
    slider = pn.widgets.FloatSlider(end=duration, visible=False)
    line = hv.VLine(0).opts(color="white")
    slider.jslink(audio, value="time", bidirectional=True)
    slider.jslink(line, value="glyph.location")
    combined = pn.Row(audio, spec_gram * line, slider).save(html_file_name)


html_file_name = "audio_with_plot.html"
audio_path = "hello.wav"
save_audio_with_bokeh_plot_to_html(audio_path, html_file_name)

wandb_html = wandb.Html(html_file_name)

with wandb.init(project="audio_test") as run:
    my_table = wandb.Table(columns=["audio_with_plot"], data=[[wandb_html]])
    run.log({"audio_table": my_table})