整理你的机器学习实验
outfit的Python项目详细描述
:连衣裙:套装[WIP]
装备是一个轻量级的库,可以用简单的方式整理机器学习实验。
装备的想法是将你的参数、输出文件、分数和特征存储在你的Wardrobe
中,以便能够根据给定的标准提出请求并找出哪些是你最好的实验。
如何安装设备?
pypi:
pip install outfit
dev版本:
git clone https://github.com/AdilZouitine/outfit
cd outfit
pip install -r requirements.txt
pip install -e .
服装是如何工作的?
importdatetime# Here import all the libraries you need for your experimentfromoutfitimportWardrobe,getlogwardrobe=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 parameterswardrobe.add_dict_parameter(param)# Do your training phase here.output={'training log':'/result/training_log_resnet18.txt'}@getlog(filepath=output['training log'])deftrain_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 forexpinwardrobe.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. '''...
输出:
════════════════════
│ 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
其他解决方案:
这些解决方案很好,它们还提供了一个用户界面,比我的库有更多的选项,但是对于一个简单的用途,你只想组织你的实验和做一个简单的查询。 这两种解决方案似乎都过分了。