diff --git a/website/docs/api/top-level.md b/website/docs/api/top-level.md
index bde64b77b..b1a2d9532 100644
--- a/website/docs/api/top-level.md
+++ b/website/docs/api/top-level.md
@@ -362,8 +362,8 @@ loss and the accuracy scores on the development set.
There are two built-in logging functions: a logger printing results to the
console in tabular format (which is the default), and one that also sends the
-results to a [Weights & Biases](https://www.wandb.com/) dashboard.
-Instead of using one of the built-in loggers listed here, you can also
+results to a [Weights & Biases](https://www.wandb.com/) dashboard. Instead of
+using one of the built-in loggers listed here, you can also
[implement your own](/usage/training#custom-logging).
> #### Example config
@@ -394,11 +394,16 @@ memory utilization, network traffic, disk IO, GPU statistics, etc. This will
also include information such as your hostname and operating system, as well as
the location of your Python executable.
-Note that by default, the full (interpolated) training config file is sent over
-to the W&B dashboard. If you prefer to exclude certain information such as path
-names, you can list those fields in "dot notation" in the `remove_config_values`
-parameter. These fields will then be removed from the config before uploading,
-but will otherwise remain in the config file stored on your local system.
+
+
+Note that by default, the full (interpolated)
+[training config](/usage/training#config) is sent over to the W&B dashboard. If
+you prefer to **exclude certain information** such as path names, you can list
+those fields in "dot notation" in the `remove_config_values` parameter. These
+fields will then be removed from the config before uploading, but will otherwise
+remain in the config file stored on your local system.
+
+
> #### Example config
>
diff --git a/website/docs/usage/projects.md b/website/docs/usage/projects.md
index 620526280..ef895195c 100644
--- a/website/docs/usage/projects.md
+++ b/website/docs/usage/projects.md
@@ -914,4 +914,4 @@ mattis pretium.
### Weights & Biases {#wandb}
-
+
diff --git a/website/docs/usage/training.md b/website/docs/usage/training.md
index 069e7c00a..20f25924e 100644
--- a/website/docs/usage/training.md
+++ b/website/docs/usage/training.md
@@ -607,8 +607,12 @@ $ python -m spacy train config.cfg --output ./output --code ./functions.py
#### Example: Custom logging function {#custom-logging}
-During training, the results of each step are passed to a logger function in a
-dictionary providing the following information:
+During training, the results of each step are passed to a logger function. By
+default, these results are written to the console with the
+[`ConsoleLogger`](/api/top-level#ConsoleLogger). There is also built-in support
+for writing the log files to [Weights & Biases](https://www.wandb.com/) with the
+[`WandbLogger`](/api/top-level#WandbLogger). The logger function receives a
+**dictionary** with the following keys:
| Key | Value |
| -------------- | ---------------------------------------------------------------------------------------------- |
@@ -619,11 +623,17 @@ dictionary providing the following information:
| `losses` | The accumulated training losses, keyed by component name. ~~Dict[str, float]~~ |
| `checkpoints` | A list of previous results, where each result is a (score, step, epoch) tuple. ~~List[Tuple]~~ |
-By default, these results are written to the console with the
-[`ConsoleLogger`](/api/top-level#ConsoleLogger). There is also built-in support
-for writing the log files to [Weights & Biases](https://www.wandb.com/) with
-the [`WandbLogger`](/api/top-level#WandbLogger). But you can easily implement
-your own logger as well, for instance to write the tabular results to file:
+You can easily implement and plug in your own logger that records the training
+results in a custom way, or sends them to an experiment management tracker of
+your choice. In this example, the function `my_custom_logger.v1` writes the
+tabular results to a file:
+
+> ```ini
+> ### config.cfg (excerpt)
+> [training.logger]
+> @loggers = "my_custom_logger.v1"
+> file_path = "my_file.tab"
+> ```
```python
### functions.py
@@ -635,19 +645,19 @@ from pathlib import Path
def custom_logger(log_path):
def setup_logger(nlp: "Language") -> Tuple[Callable, Callable]:
with Path(log_path).open("w") as file_:
- file_.write("step\t")
- file_.write("score\t")
+ file_.write("step\\t")
+ file_.write("score\\t")
for pipe in nlp.pipe_names:
- file_.write(f"loss_{pipe}\t")
- file_.write("\n")
+ file_.write(f"loss_{pipe}\\t")
+ file_.write("\\n")
def log_step(info: Dict[str, Any]):
with Path(log_path).open("a") as file_:
- file_.write(f"{info['step']}\t")
- file_.write(f"{info['score']}\t")
+ file_.write(f"{info['step']}\\t")
+ file_.write(f"{info['score']}\\t")
for pipe in nlp.pipe_names:
- file_.write(f"{info['losses'][pipe]}\t")
- file_.write("\n")
+ file_.write(f"{info['losses'][pipe]}\\t")
+ file_.write("\\n")
def finalize():
pass
@@ -657,13 +667,6 @@ def custom_logger(log_path):
return setup_logger
```
-```ini
-### config.cfg (excerpt)
-[training.logger]
-@loggers = "my_custom_logger.v1"
-file_path = "my_file.tab"
-```
-
#### Example: Custom batch size schedule {#custom-code-schedule}
For example, let's say you've implemented your own batch size schedule to use