> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wandb.ai/llms.txt
> Use this file to discover all available pages before exploring further.

> Utilisez un objet semblable à un dictionnaire pour enregistrer la configuration de votre expérience

# Configurer Experiments

export const ColabLink = ({url}) => <a href={url} target="_blank" rel="noopener noreferrer" className="colab-link">
    <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
      <path d="M14.25.18l.9.2.73.26.59.3.45.32.34.34.25.34.16.33.1.3.04.26.02.2-.01.13V8.5l-.05.63-.13.55-.21.46-.26.38-.3.31-.33.25-.35.19-.35.14-.33.1-.3.07-.26.04-.21.02H8.77l-.69.05-.59.14-.5.22-.41.27-.33.32-.27.35-.2.36-.15.37-.1.35-.07.32-.04.27-.02.21v3.06H3.17l-.21-.03-.28-.07-.32-.12-.35-.18-.36-.26-.36-.36-.35-.46-.32-.59-.28-.73-.21-.88-.14-1.05-.05-1.23.06-1.22.16-1.04.24-.87.32-.71.36-.57.4-.44.42-.33.42-.24.4-.16.36-.1.32-.05.24-.01h.16l.06.01h8.16v-.83H6.18l-.01-2.75-.02-.37.05-.34.11-.31.17-.28.25-.26.31-.23.38-.2.44-.18.51-.15.58-.12.64-.1.71-.06.77-.04.84-.02 1.27.05zm-6.3 1.98l-.23.33-.08.41.08.41.23.34.33.22.41.09.41-.09.33-.22.23-.34.08-.41-.08-.41-.23-.33-.33-.22-.41-.09-.41.09zm13.09 3.95l.28.06.32.12.35.18.36.27.36.35.35.47.32.59.28.73.21.88.14 1.04.05 1.23-.06 1.23-.16 1.04-.24.86-.32.71-.36.57-.4.45-.42.33-.42.24-.4.16-.36.09-.32.05-.24.02-.16-.01h-8.22v.82h5.84l.01 2.76.02.36-.05.34-.11.31-.17.29-.25.25-.31.24-.38.2-.44.17-.51.15-.58.13-.64.09-.71.07-.77.04-.84.01-1.27-.04-1.07-.14-.9-.2-.73-.25-.59-.3-.45-.33-.34-.34-.25-.34-.16-.33-.1-.3-.04-.25-.02-.2.01-.13v-5.34l.05-.64.13-.54.21-.46.26-.38.3-.32.33-.24.35-.2.35-.14.33-.1.3-.06.26-.04.21-.02.13-.01h5.84l.69-.05.59-.14.5-.21.41-.28.33-.32.27-.35.2-.36.15-.36.1-.35.07-.32.04-.28.02-.21V6.07h2.09l.14.01.21.03zm-6.47 14.25l-.23.33-.08.41.08.41.23.33.33.23.41.08.41-.08.33-.23.23-.33.08-.41-.08-.41-.23-.33-.33-.23-.41-.08-.41.08z" />
    </svg>
    Essayer sur Colab
  </a>;

<ColabLink url="https://colab.research.google.com/github/wandb/examples/blob/master/colabs/wandb-log/Configs_in_W%26B.ipynb" />

Utilisez la propriété `config` d'un run pour enregistrer votre configuration d'entraînement :

* hyperparamètre
* paramètres d'entrée, comme le nom du jeu de données ou le type de modèle
* toute autre variable indépendante pour vos expériences.

La propriété `wandb.Run.config` facilite l'analyse de vos expériences et la reproduction de votre travail par la suite. Vous pouvez regrouper vos données selon les valeurs de configuration dans l'application W\&B, comparer les configurations de différents runs W\&B et évaluer l'effet de chaque configuration d'entraînement sur les résultats. La propriété `config` est un objet de type dictionnaire qui peut être construit à partir de plusieurs objets de type dictionnaire.

<Note>
  Pour enregistrer les métriques de sortie ou des variables dépendantes comme la perte et l'accuracy, utilisez `wandb.Run.log()` plutôt que `wandb.Run.config`.
</Note>

<div id="set-up-an-experiment-configuration">
  ## Configurer la configuration d’une expérience
</div>

Les configurations sont généralement définies au début d’un script d’entraînement. Toutefois, les flux de travail de machine learning peuvent varier, donc vous n’êtes pas obligé de définir une configuration au début de votre script d’entraînement.

Utilisez des tirets (`-`) ou des caractères de soulignement (`_`) au lieu de points (`.`) dans les noms de variables de votre configuration.

Utilisez la syntaxe d’accès au dictionnaire `["key"]["value"]` plutôt que la syntaxe d’accès par attribut `config.key.value` si votre script accède à des clés de `wandb.Run.config` sous la racine.

Les sections suivantes présentent différents scénarios courants pour définir la configuration de vos expériences.

<div id="set-the-configuration-at-initialization">
  ### Définir la configuration à l'initialisation
</div>

Passez un dictionnaire au début de votre script lorsque vous appelez l'API `wandb.init()` pour créer un processus en arrière-plan chargé de synchroniser et de journaliser les données dans un run W\&B.

L'extrait de code suivant montre comment définir un dictionnaire Python avec des valeurs de configuration et comment passer ce dictionnaire en argument lorsque vous initialisez un run W\&B.

```python theme={null}
import wandb

# Définir un objet dictionnaire de configuration
config = {
    "hidden_layer_sizes": [32, 64],
    "kernel_sizes": [3],
    "activation": "ReLU",
    "pool_sizes": [2],
    "dropout": 0.5,
    "num_classes": 10,
}

# Passer le dictionnaire de configuration lors de l'initialisation de W&B
with wandb.init(project="config_example", config=config) as run:
    ...
```

Si vous passez un dictionnaire imbriqué comme `config`, W\&B aplatit les noms en utilisant des points.

Accédez aux valeurs du dictionnaire comme à celles de tout autre dictionnaire en Python :

```python theme={null}
# Accéder aux valeurs avec la clé comme index
hidden_layer_sizes = run.config["hidden_layer_sizes"]
kernel_sizes = run.config["kernel_sizes"]
activation = run.config["activation"]

# Méthode get() du dictionnaire Python
hidden_layer_sizes = run.config.get("hidden_layer_sizes")
kernel_sizes = run.config.get("kernel_sizes")
activation = run.config.get("activation")
```

<Note>Tout au long du Guide du développeur et des exemples, nous copions les valeurs de configuration dans des variables distinctes. Cette étape est facultative. Cela est fait pour plus de lisibilité.</Note>

<div id="set-the-configuration-with-argparse">
  ### Définir la configuration avec argparse
</div>

Vous pouvez définir votre configuration avec un objet argparse. [argparse](https://docs.python.org/3/library/argparse.html), abréviation de « analyseur d’arguments », est un module de la bibliothèque standard de Python 3.2 et versions ultérieures qui facilite l’écriture de scripts tirant parti de toute la flexibilité et de la puissance des arguments en ligne de commande.

Cela est utile pour suivre les résultats de scripts lancés en ligne de commande.

Le script Python suivant montre comment créer un objet parser afin de définir et de renseigner la configuration de votre expérience. Les fonctions `train_one_epoch` et `evaluate_one_epoch` sont fournies pour simuler une boucle d’entraînement à des fins de démonstration :

```python theme={null}
# config_experiment.py
import argparse
import random

import numpy as np
import wandb


# Code de démonstration pour l'entraînement et l'évaluation
def train_one_epoch(epoch, lr, bs):
    acc = 0.25 + ((epoch / 30) + (random.random() / 10))
    loss = 0.2 + (1 - ((epoch - 1) / 10 + random.random() / 5))
    return acc, loss


def evaluate_one_epoch(epoch):
    acc = 0.1 + ((epoch / 20) + (random.random() / 10))
    loss = 0.25 + (1 - ((epoch - 1) / 10 + random.random() / 6))
    return acc, loss


def main(args):
    # Démarrer un Run W&B
    with wandb.init(project="config_example", config=args) as run:
        # Accéder aux valeurs du dictionnaire de configuration et les stocker
        # dans des variables pour plus de lisibilité
        lr = run.config["learning_rate"]
        bs = run.config["batch_size"]
        epochs = run.config["epochs"]

        # Simuler l'entraînement et la journalisation des valeurs vers W&B
        for epoch in np.arange(1, epochs):
            train_acc, train_loss = train_one_epoch(epoch, lr, bs)
            val_acc, val_loss = evaluate_one_epoch(epoch)

            run.log(
                {
                    "epoch": epoch,
                    "train_acc": train_acc,
                    "train_loss": train_loss,
                    "val_acc": val_acc,
                    "val_loss": val_loss,
                }
            )


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter
    )

    parser.add_argument("-b", "--batch_size", type=int, default=32, help="Batch size")
    parser.add_argument(
        "-e", "--epochs", type=int, default=50, help="Number of training epochs"
    )
    parser.add_argument(
        "-lr", "--learning_rate", type=int, default=0.001, help="Learning rate"
    )

    args = parser.parse_args()
    main(args)
```

<div id="set-the-configuration-throughout-your-script">
  ### Définissez la configuration au fil de votre script
</div>

Vous pouvez ajouter d’autres paramètres à votre objet de configuration au fil de votre script. L’extrait de code suivant montre comment ajouter de nouvelles paires clé-valeur à votre objet de configuration :

```python theme={null}
import wandb

# Définir un objet dictionnaire de configuration
config = {
    "hidden_layer_sizes": [32, 64],
    "kernel_sizes": [3],
    "activation": "ReLU",
    "pool_sizes": [2],
    "dropout": 0.5,
    "num_classes": 10,
}

# Passer le dictionnaire de configuration lors de l'initialisation de W&B
with wandb.init(project="config_example", config=config) as run:
    # Mettre à jour la configuration après l'initialisation de W&B
    run.config["dropout"] = 0.2
    run.config.epochs = 4
    run.config["batch_size"] = 32
```

Vous pouvez mettre à jour plusieurs valeurs à la fois :

```python theme={null}
run.config.update({"lr": 0.1, "channels": 16})
```

<div id="set-the-configuration-after-your-run-finishes">
  ### Définissez la configuration une fois votre run terminé
</div>

Utilisez l’[API publique de W\&B](/fr/models/ref/python/public-api/) pour mettre à jour la configuration d’un run terminé.

Vous devez fournir à l’API votre entité, le nom du projet et l’ID du run. Vous trouverez ces informations dans l’objet Run ou dans la [W\&B App](/fr/models/track/workspaces/) :

```python theme={null}
with wandb.init() as run:
    ...

# Trouvez les valeurs suivantes dans l'objet Run s'il a été initié depuis le
# script ou le notebook actuel, ou copiez-les depuis l'interface de l'application W&B.
username = run.entity
project = run.project
run_id = run.id

# Notez que api.run() renvoie un type d'objet différent de wandb.init().
api = wandb.Api()
api_run = api.run(f"{username}/{project}/{run_id}")
api_run.config["bar"] = 32
api_run.update()
```

<div id="highlight-config-values">
  ## Mettre en avant les valeurs de configuration
</div>

Épinglez des clés de configuration dans la section **References**, en haut de la page d’aperçu d’un run.

Utilisez [`wandb.Run.pin_config_keys`](/fr/models/ref/python/experiments/run#method-run-pin_config_keys) pour épingler une ou plusieurs clés de configuration avec le SDK Python.

Par exemple, si vous utilisez un tableau de bord Grafana pour surveiller des runs d’entraînement, ajoutez l’URL du tableau de bord à votre configuration et épinglez la clé `grafana_url` :

```python theme={null}
config = {
    "hidden_layer_sizes": [32, 64],
    "kernel_sizes": [3],
    "activation": "ReLU",
    "pool_sizes": [2],
    "dropout": 0.5,
    "num_classes": 10,
    "grafana_url": "[Grafana dashboard](https://my-grafana-instance.com/)"
}

with wandb.init(config=config) as run:
    # Ajouter la clé de configuration "grafana_url" à la section References.
    run.pin_config_keys(["grafana_url"])
```

<div id="abslflags">
  ## `absl.FLAGS`
</div>

Vous pouvez également transmettre des flags [`absl`](https://abseil.io/docs/python/guides/flags).

```python theme={null}
flags.DEFINE_string("model", None, "model to run")  # nom, défaut, aide

run.config.update(flags.FLAGS)  # ajoute les flags absl à la configuration
```

<div id="file-based-configs">
  ## Configurations basées sur des fichiers
</div>

Si vous placez un fichier nommé `config-defaults.yaml` dans le même répertoire que votre script de run, le run détecte automatiquement les paires clé-valeur définies dans le fichier et les transmet à `wandb.Run.config`.

L’extrait de code suivant montre un exemple de fichier YAML `config-defaults.yaml` :

```yaml theme={null}
batch_size:
  desc: Size of each mini-batch
  value: 32
```

Vous pouvez surcharger les valeurs par défaut chargées automatiquement depuis `config-defaults.yaml` en définissant de nouvelles valeurs dans l’argument `config` de `wandb.init()`. Par exemple :

```python theme={null}
import wandb

# Surcharger config-defaults.yaml en passant des valeurs personnalisées
with wandb.init(config={"epochs": 200, "batch_size": 64}) as run:
    ...
```

Pour charger un fichier de configuration autre que `config-defaults.yaml`, utilisez l’argument `--configs command-line` et indiquez le chemin du fichier :

```bash theme={null}
python train.py --configs other-config.yaml
```

<div id="example-use-case-for-file-based-configs">
  ### Exemple d’utilisation de configurations basées sur des fichiers
</div>

Supposons que vous disposiez d’un fichier YAML contenant des métadonnées sur le run, ainsi que d’un dictionnaire d’hyperparamètres dans votre script Python. Vous pouvez enregistrer les deux dans l’objet `config` imbriqué :

```python theme={null}
hyperparameter_defaults = dict(
    dropout=0.5,
    batch_size=100,
    learning_rate=0.001,
)

config_dictionary = dict(
    yaml=my_yaml_file,
    params=hyperparameter_defaults,
)

with wandb.init(config=config_dictionary) as run:
    ...
```

<div id="view-config-values-in-the-wb-app">
  ## Afficher les valeurs de configuration dans la W\&B App
</div>

Consultez vos valeurs de configuration dans la section **Config** de l’onglet **Vue d’ensemble** d’un run. Elles sont également disponibles dans la section **References** si vous les épinglez.

1. Accédez à votre projet dans la W\&B App.
2. Cliquez sur le run dont vous souhaitez consulter les valeurs de configuration.
3. Sélectionnez l’onglet **Vue d’ensemble**.
4. Faites défiler jusqu’à la section **Config**.
5. (Facultatif) Cliquez sur **View raw data** pour afficher les valeurs de configuration au format JSON.

Le format JSON brut est utile lorsque vous écrivez des expressions pour créer ou transformer des graphiques en courbes à partir de valeurs de configuration, de métriques enregistrées ou de valeurs de synthèse. Voir [Expressions](/fr/models/app/features/panels/line-plot/reference#expressions) pour plus de détails.

<div id="tensorflow-v1-flags">
  ## Flags de TensorFlow v1
</div>

Vous pouvez transmettre directement les flags TensorFlow à l’objet `wandb.Run.config`.

```python theme={null}
with wandb.init() as run:
    run.config.epochs = 4

    flags = tf.app.flags
    flags.DEFINE_string("data_dir", "/tmp/data")
    flags.DEFINE_integer("batch_size", 128, "Batch size.")
    run.config.update(flags.FLAGS)  # ajouter les flags TensorFlow à la configuration
```
