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

# Experiments

> Compare multiple impulses side by side in one project, and track accuracy and on-device performance across them.

An **experiment** in Edge Impulse is an [impulse](/studio/projects/impulse-design). A project can contain any number of impulses, and you manage and compare them on the **Experiments** page.

Because every impulse in a project is trained and tested on the same project dataset, differences in the results come from the impulse itself: the window size you chose, the processing block and its parameters, the learning block and its architecture, or the post-processing configuration. To try a different configuration, add an impulse instead of duplicating the project.

<iframe src="https://www.youtube-nocookie.com/embed/3NvLb7faOOs" title="YouTube video player" className="w-full aspect-video rounded-xl" frameborder="0" allowFullScreen />

## What is shared and what is not

| Scope | What it covers |
| - | - |
| Shared across every impulse in the project | Training and test [datasets](/studio/projects/data-acquisition), labels, connected [devices](/studio/projects/devices), API keys, and project settings |
| Owned by each impulse | Input block, [processing blocks](/studio/projects/processing-blocks), [learning blocks](/studio/projects/learning-blocks), post-processing blocks, all of their parameters, the generated features, the trained models, thresholds, and [model testing](/studio/projects/model-testing) results |

Each impulse has its own ID and its own name. One impulse is active at a time: the impulse selector in the left navigation bar controls which one, and pages such as impulse design, feature generation, training, [live classification](/studio/projects/live-classification), model testing, and [deployment](/studio/projects/deployment) all act on the impulse that is currently selected. You can also click an impulse in the experiments table to switch to it.

This means you can, for example, run FOMO and MobileNet SSD against the same dataset at the same time: add two impulses, configure one with each learning block, train both, and compare them in the table.

## Creating an experiment

There are three ways to add an impulse to a project:

* **Start from an empty impulse.** Use the impulse selector in the left navigation bar to create a new impulse, then add input, processing, and learning blocks as you would for the first impulse in a project.
* **Clone an existing impulse.** Cloning is the fastest way to change one variable at a time. You can copy just the structure (the blocks and their configuration, with no features or trained models), or clone it completely, which also brings over the generated features and trained model so the new impulse starts in the same state as the original.
* **Promote an [EON Tuner](/studio/projects/eon-tuner) trial.** The EON Tuner searches a parameter space for you. When a trial looks promising, click **+ Add** on that trial to add it to your list of experiments as a full impulse that you can then tune by hand.

<Tip>
  Name your impulses after the variable you are testing, such as `MFCC + 1D conv` or `2s window`. The name is the primary column in the experiments table, and a project with five impulses called "Impulse 1" through "Impulse 5" is difficult to read a week later.
</Tip>

A new impulse starts empty: it has no features and no trained model until you generate features and train it. The experiments table shows the state of each impulse, including whether it is fully configured, whether it has been trained, and whether it has become stale because a block parameter changed after the last training run.

## Comparing experiments

The experiments table lists every impulse in the project as a row, with the metrics and configuration values as columns. Columns are grouped by where the value comes from:

* **Impulse metrics**: results for the impulse as a whole, such as accuracy and estimated on-device latency and memory.
* **Input, processing, learning, and post-processing block configuration**: the parameters each block was configured with, so you can see which setting produced which result.
* **Learning block metrics**: per-block training and validation results.

Use the impulse filter and the column selector in the top right corner of the table to choose which impulses and columns are shown. Click any column header to sort by it, and download the table as CSV or JSON to keep a record of a comparison or to analyze it outside the studio.

<Frame caption="Experiments view highlighting table customization and download options">
  <img src="https://mintcdn.com/edgeimpulse/mqaETyKntJOjsP_8/.assets/images/experiments-table.png?fit=max&auto=format&n=mqaETyKntJOjsP_8&q=85&s=42e3316014443756ac36bfdbbecf93d1" alt="Experiments table with customization controls and download options highlighted" width="3248" height="2112" data-path=".assets/images/experiments-table.png" />
</Frame>

<Note>
  When you compare impulses, check the on-device performance columns as well as accuracy. A more accurate impulse might not fit the memory or latency budget of your target device. Set your target device in [**Dashboard**](/studio/projects/dashboard) so the latency and memory estimates reflect the hardware you are deploying to.
</Note>

## Experiments and the EON Tuner

You can use experiments and the EON Tuner together.

| | Experiments | EON Tuner |
| - | - | - |
| Who chooses the configurations | You do, one at a time | The tuner searches a parameter space |
| Best for | Testing a specific hypothesis, and keeping a record of what you tried | Exploring a broad search space without manual work |
| Result | Impulses you can train, test, and deploy | Trials, which you can add to your experiments |

A common workflow is to run the EON Tuner first to narrow down the search space, add the most promising trials as impulses, then refine those by hand and compare them in the experiments table.

## Working with experiments programmatically

Everything on the **Experiments** page is available through the [Edge Impulse Studio API](/apis/studio), which is useful for scripted sweeps and for reporting results into an external experiment tracker. Most impulse endpoints take an optional `impulseId` parameter; when you omit it, they operate on the project's default impulse.

| Task | Endpoint |
| - | - |
| List every impulse in a project | [Get all impulses](/apis/studio/impulse/get-all-impulses) |
| List impulses with their accuracy and performance metrics | [Get all impulses (incl. metrics)](/apis/studio/impulse/get-all-impulses-incl-metrics) |
| Export the comparison table as CSV or JSON | [Download all impulses (incl. metrics)](/apis/studio/impulse/download-all-impulses-incl-metrics-as-json-or-csv) |
| Create a new empty impulse | [Create new empty impulse](/apis/studio/impulse/create-new-empty-impulse) |
| Copy an impulse's blocks and configuration | [Clone impulse (structure)](/apis/studio/impulse/clone-impulse-structure) |
| Copy an impulse including its data and trained model | [Clone impulse (complete)](/apis/studio/impulse/clone-impulse-complete) |
| Read or update a single impulse | [Get impulse](/apis/studio/impulse/get-impulse), [Update impulse](/apis/studio/impulse/update-impulse) |
| Delete an impulse | [Delete impulse](/apis/studio/impulse/delete-impulse) |

The same operations are available through the [Python API bindings](/tutorials/tools/api-bindings/studio/python/use-python-api-bindings) and the [JavaScript API bindings](/tools/libraries/api-bindings/studio/javascript).

## Additional resources

* [Impulse design](/studio/projects/impulse-design)
* [EON Tuner](/studio/projects/eon-tuner)
* [Model testing](/studio/projects/model-testing)
* [Increasing model performance](/knowledge/guides/increasing-model-performance)
