# Log your results to Picsell.ia

## The Log method

Logging something to Picsell.ia is as simple as this :

```python
from picsellia.client import Client

api_token = '4d388e237d10b8a19a93517ffbe7ea32ee7f4787'
project_token = '9c68b4ae-691d-4c3a-9972-8fe49ffb2799'

experiment = Client.Experiment(
    api_token=api_token,
    project_token=project_token,
    name='my_new_experiment'
    )

data = [3, 1.25, 1.4, 0.35, 0.95]
experiment.log('TotalLoss', data, 'line')
```

Now let's check your experiment's dashboard :

![](/files/-Me0--xvLvoJaA2S-eKO)

What you just created is what we call a `data asset`, now we will dive into it to see how to use it properly and how far we can go.

## The Data Asset

To store something related to an experiment and visualize it in Picsell.ia, you have to store it in what we call a `data asset`, it is composed of the following properties :

* `name`, it is the name of the tab you will see in your experiment, it can group several data assets
* `data`, is the value, dictionary, array, image, that you want to store
* `type`, the type of visualization your want to render your asset in (e.g array, line-chart, bar-chart...)

```python
experiment.log(name='logs', data=data, type='line')
```

## Supported types

{% hint style="warning" %}
These are just basic usage example of what how to display different kinds of data in Picsell.ia.

To see the complete list of options and arguments for each type, please check the data reference.
{% endhint %}

We are doing our best to offer you as much data visualization possibilities but it takes time to integrate.\
Here is the list of the visualization we support for now. If you need something that is not in the list, please send us a kind message and we will do our best to treat your request a.s.a.p 😊

### Single Value

Store one value to be displayed alone. It can be of any types (int, float, str...)

```python
experiment.log(name='accuracy', type='value', data=0.95)
```

Single values will appear in your experiment dashboard in the Summary at the top of the page like this :

![](/files/-Me0-CnJUTxzovD1yGGV)

### Line

A basic line chart

```python
data = [3, 8, 2, 7, 9]
experiment.log(name='logs', type='line', data=data)
```

![](/files/-Me0-LfF9Bu0VXFLrqfL)

The format of your data to display a line-chart must be one of the following.

#### List format

If you don't specify it, we automatically increment the steps/x\_axis for you so you can just send the y values like this:

```python
experiment.log(name='logs', type='line', data=[5, 8, 2, 9, 10])
```

{% hint style="info" %}
If there is already existing data with the name you provided ('logs' in this example), the values will be append to the current list of values.
{% endhint %}

![](/files/-Me0-VW_Ck7aHNMiUVn4)

If you want to completely replace the existing values with a brand new list you can set the `replace` parameter to `True`&#x20;

```python
experiment.log(name='logs', type='line', data=[5, 8, 2, 9, 10], replace=True)
```

#### Dict format

If you want to specify your own x\_axis steps, you can send the data this way:

```python
data = {
    'steps': [0, 2, 4, 8, 10],
    'values': [0.7, 0.8, 0.9, 0.3, 0.12]
}
experiment.log(name='logs', type='line', data=data)
```

You can also visualize multiple lines on the same chart by adding keys to your dictionary (with or without steps) :

```python
data = {
    'loss1': [0.45, 0.2, 0.98, 0.47, 0.28],
    'loss2': [0.7, 0.8, 0.9, 0.3, 0.12],
    'loss3': [0.21, 0.47, 0.74, 0.56, 0.86]
}
experiment.log(name='logs', type='line', data=data)
```

![](/files/-Me0-nkIBQp9TQDO3a4Q)

### Bar

A basic bar chart

```python
data = {
    'x': ['car', 'person', 'birid'],
    'y': [5, 8, 2],
}
experiment.log(name='labels', type='bar', data=data)
```

![](/files/-Me0-yOJRQUQnLIWwvQi)

### Table

```python
data = {
    "Loss/total_loss": 1.202446, 
    "Loss/localization_loss": 0.022069892, 
    "Loss/classification_loss": 1.1457626, 
    "Loss/regularization_loss": 0.034613654, 
    "DetectionBoxes_Recall/AR@1": 	0.0
}
experiment.log(name='metrics', type='table', data=data)
```

![](/files/-Me00Aamn6dXyFkTi6JD)

### Image

```python
path = "path/to/my/image.jpg"
experiment.log("img3", type="image", data=path)
```

![](/files/-Me00ZYNJ2oRDWJWuKv-)

### Heatmap

{% hint style="warning" %}
Please note that you can send an array of values whose shape is (N+1xN+1) whereas the list of your categories as a length of N. The last dimensions of the array will be labeled as FP (False Positive) and FN (False Negative).
{% endhint %}

```python
conf = [[33,  0, 13],
       [ 2,  7, 16],
       [10,  0,  0]]

confusion = {
    'categories': ['car', 'pedestrian'],
    'values': conf.tolist()
}
exp.log('confusion', confusion, 'heatmap')
```

![](/files/-Me-yHBXZfsZ7UFi-cCR)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://picsellia.gitbook.io/picsellia/experiment-tracking/log-your-results-to-picsell.ia.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
