tensorboard-aggregator
This project contains an easy to use method to aggregate multiple tensorboard runs. The max, min, mean, median, standard deviation and variance of the scalars from multiple runs is saved either as new tensorboard summary or as .csv
table.
There is a similar tool which uses pytorch to output the tensorboard summary: TensorBoard Reducer
Feature Overview
- Aggregates scalars of multiple tensorboard files
- Saves aggregates as new tensorboard summary or as
.csv
- Aggregate by any numpy function (default: max, min, mean, median, std, var)
- Allows any number of subpath structures
- Keeps step numbering
- Saves wall time average per step
Setup and run configuration
- Download or clone repository files to your computer
- Go into repository folder
- Install requirements:
pip3 install -r requirements.txt --upgrade
- You can now run the aggregation with:
python aggregator.py
Parameters
Parameter | Default | Description | |
---|---|---|---|
--path | optional | current working directory | Path to folder containing runs |
--subpaths | optional | ['.'] |
List of all subpaths |
--output | optional | summary |
Possible values: summary , csv |
Recommendation
- Add the repository folder to the PATH (global environment variables).
- Create an additional script file within the repository folder containing
python static/path/to/aggregator.py
- Script name:
aggregate.sh
/aggregate.bat
/ ... (depending on your OS) - Change default behavior via parameters
- Do not change
path
parameter since this will by default be the path the script is run from
- Script name:
- Workflow from here: Open folder with tensorboard files and call the script: aggregate files will be created for the current directory
Explanation
Example folder structure:
.
βββ ...
βββ test_param_xy # Folder containing the runs for aggregation
β βββ run_1 # Folder containing tensorboard files of one run
β β βββ test # Subpath containing one tensorboard file
β β β βββ events.out.tfevents. ...
β β βββ train
β β βββ events.out.tfevents. ...
β βββ run_2
β βββ ...
β βββ run_X
βββ ...
The folder test_param_xy
will be the base path (cd test_param_xy
).
The tensorboard summaries for the aggregation will be created by calling the aggregate
script (containing: python static/path/to/aggregator.py --subpaths ['test', 'train'] --output summary
)
The base folder contains multiple subfolders. Each subfolder contains the tensorboard files of different runs for the same model and configuration as all other subfolders.
The resulting folder structure for summary
looks like this:
.
βββ ...
βββ test_param_xy
β βββ ...
β βββ aggregate
β βββ test
β β βββ max
β β β βββ test_param_xy
β β β βββ events.out.tfevents. ...
β β βββ min
β β βββ mean
β β βββ median
β β βββ std
β βββ train
βββ ...
Multiple aggregate summaries can be put together in one directory. Since the original base folder name is kept as subfolder to the aggregate function folder the summaries are distinguishable within tensorboard.
.
βββ ...
βββ max
β βββ test_param_x
β βββ test_param_y
β βββ test_param_z
β βββ test_param_v
βββ min
βββ mean
βββ median
βββ std
The .csv
table files for the aggregation will be created by calling the aggregate
script (containing: python static/path/to/aggregator.py --subpaths ['test', 'train'] --output csv
)
The resulting folder structure for summary
looks like this:
.
βββ ...
βββ test_param_xy
β βββ ...
β βββ aggregate
β βββ test
β β βββ max_test_param_xy.csv
β β βββ min_test_param_xy.csv
β β βββ mean_test_param_xy.csv
β β βββ median_test_param_xy.csv
β β βββ std_test_param_xy.csv
β βββ train
βββ ...
The .csv
files are primarily for latex plots.
Limitations
- The aggregation only works for scalars and not for other types like histograms
- All runs for one aggregation need the exact same tags. Basically the naming and number of scalar metrics needs to be equal for all runs.
- All runs for one aggregation need the same steps. Basically the number of iterations, epochs and the saving frequency needs to be equal for all runs of one scalar.
Contributions
If there are potential problems (bugs, incompatibilities to newer library versions or to a OS) or feature requests, please create an GitHub issue here.