๐ Outfit
Outfit is a lightweight library to tidy up your machine learning experiments in a simple way.
The idea of Outfit is to store in your Wardrobe
your parameters, output file, scores and features in order to be able to make a request and find out which are your best experimentation according to a given criterion.
How install outfit ?
PyPI:
pip install outfit
Dev version:
git clone https://github.com/AdilZouitine/outfit
cd outfit
pip install -r requirements.txt
pip install -e .
How outfit works ?
- Tutorial 1: Build a simple model management pipeline with outfit for a CNN with Pytorch on MNIST dataset
import datetime
# Here import all the libraries you need for your experiment
from outfit import Wardrobe, getlog
wardrobe = Wardrobe(db_path='foo/bar/mnist.db')
exp = {
'experiment_name': 'ResNet18',
'comment': 'Use differential learning rate',
'date_experiment': datetime.datetime.now()
}
wardrobe.add_experiment(**exp)
param = {
'dropout': 0.20,
'kernel_size': '3x3',
'conv_block_1_lr': 0.01,
'conv_block_2_lr': 0.001
}
# Create the instance of your model here with your parameters
wardrobe.add_dict_parameter(param)
# Do your training phase here.
output = {'training log': '/result/training_log_resnet18.txt'}
@getlog(filepath=output['training log'])
def train_model(model, loaders, loss, lr_scheduler, n_epoch):
...
output.update({
'tensorboard': '/result/event.tb',
'model': 'diff_lr_resnet18.pth'
})
wardrobe.add_dict_output(output)
score = {
'train acc': 0.96,
'train loss': 0.430,
'val acc': 0.94,
'val loss': 0.460
}
wardrobe.add_dict_score(score)
wardrobe.tidy() # commit your experiment in database
# If you want to get the best experiments
for exp in wardrobe.get_best_scores(mode='max',on_score='val acc'):
'''
Verbose is true by default and will print on the console
at each iteration the parameters, output file,
features and scores in a table format.
Also returns in dictionary the parameters, output file, features and scores.
'''
...
Output:
โโโโโโโโโโโโโโโโโโโโ
โ TOP 1 EXPERIMENT โ
โโโโโโโโโโโโโโโโโโโโ
Table : Experiment
โโโโโโคโโโโโโโโโโโโโโโโโโคโโโโโโโโโโโโโโโโโโโโคโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโคโโโโโโโโโโโโโโโโโโโโโ
โ โ id_experiment โ experiment_name โ comment โ date_experiement โ
โโโโโโชโโโโโโโโโโโโโโโโโโชโโโโโโโโโโโโโโโโโโโโชโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโชโโโโโโโโโโโโโโโโโโโโโก
โ 0 โ 1 โ ResNet18 โ Use differential learning rate โ โ
โโโโโโงโโโโโโโโโโโโโโโโโโงโโโโโโโโโโโโโโโโโโโโงโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโงโโโโโโโโโโโโโโโโโโโโโ
Table : Parameter
โโโโโโคโโโโโโโโโโโโโโโโโคโโโโโโโโโโโโโโโโโโโคโโโโโโโโโโโโโโคโโโโโโโโโโโโโโโ
โ โ id_parameter โ parameter_name โ parameter โ experiment โ
โโโโโโชโโโโโโโโโโโโโโโโโชโโโโโโโโโโโโโโโโโโโชโโโโโโโโโโโโโโชโโโโโโโโโโโโโโโก
โ 0 โ 1 โ dropout โ 0.2 โ 1 โ
โโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโค
โ 1 โ 2 โ kernel_size โ 3x3 โ 1 โ
โโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโค
โ 2 โ 3 โ conv_block_1_lr โ 0.01 โ 1 โ
โโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโค
โ 3 โ 4 โ conv_block_2_lr โ 0.001 โ 1 โ
โโโโโโงโโโโโโโโโโโโโโโโโงโโโโโโโโโโโโโโโโโโโงโโโโโโโโโโโโโโงโโโโโโโโโโโโโโโ
Table : Output
โโโโโโคโโโโโโโโโโโโโโคโโโโโโโโโโโโโโโโคโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโคโโโโโโโโโโโโโโโ
โ โ id_output โ type_output โ path_output โ experiment โ
โโโโโโชโโโโโโโโโโโโโโชโโโโโโโโโโโโโโโโชโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโชโโโโโโโโโโโโโโโก
โ 0 โ 1 โ training log โ /result/training_log_resnet18.txt โ 1 โ
โโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโค
โ 1 โ 2 โ tensorboard โ /result/event.tb โ 1 โ
โโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโค
โ 2 โ 3 โ model โ diff_lr_resnet18.pth โ 1 โ
โโโโโโงโโโโโโโโโโโโโโงโโโโโโโโโโโโโโโโงโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโงโโโโโโโโโโโโโโโ
Table : Score
โโโโโโคโโโโโโโโโโโโโคโโโโโโโโโโโโโโโคโโโโโโโโโโคโโโโโโโโโโโโโโโ
โ โ id_score โ type_score โ score โ experiment โ
โโโโโโชโโโโโโโโโโโโโชโโโโโโโโโโโโโโโชโโโโโโโโโโชโโโโโโโโโโโโโโโก
โ 0 โ 1 โ train acc โ 0.96 โ 1 โ
โโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโโโค
โ 1 โ 2 โ train loss โ 0.43 โ 1 โ
โโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโโโค
โ 2 โ 3 โ val acc โ 0.94 โ 1 โ
โโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโโโค
โ 3 โ 4 โ val loss โ 0.46 โ 1 โ
โโโโโโงโโโโโโโโโโโโโงโโโโโโโโโโโโโโโงโโโโโโโโโโงโโโโโโโโโโโโโโโ
Table : Feature
Other solution:
These solutions are great, they also offer a user interface and have many more options than my library however for a simple use where you only want to organize your experimentation and make a simple query. Both solutions seem to be overkill.