用户 API

fitlog是一款集成了自动版本管理和自动日志记录两种功能的 Python 包,它可以帮助你在进行实验时方便地保存当前的代码、参数和结果。 fitlog提供给用户的 API 有如下几个:

fitlog.commit(file: str, fit_msg: str = None)[source]

用户用此命令进行自动 commit, 期望的使用方法如下:

import fitlog

fitlog.commit(__file__)
"""
Your training code
"""
fitlog.finish()
Parameters:
  • file – 以该路径往上寻找.fitlog所在文件夹。一般传入__file__即可
  • fit_msg – 针对该实验的说明
fitlog.set_log_dir(log_dir: str, new_log: bool = False)[source]

设定log 文件夹的路径(在进行其它操作前必须先指定日志路径)。如果你已经顺利执行了 fitlog.commit()命令, log 文件夹会自动设定为.fitconfig 文件中的 default_log_dir 字段的值。在某些情况下,可能需要继续往同 一个log中写入数据(比如继续训练之前以及保存的模型),可以通过将log_dir设置为具体的log名。但需要保证 step的顺序与之前已有的内容是不冲突的,因为相同的step在fitlog中是覆盖的。

Example:

# 假设当前的文件结构为
# logs/
#    log_20190417_140311
#    ...
# main.py
#以下是main.py中三种设置log位置的方式
fitlog.commit() # 如果commit成功,则不需要设置logs文件夹了
fitlog.set_log_dir('logs/') # 设置log文件夹为'logs/', fitlog在每次运行的时候会默认以时间戳的方式在里面生成新的log
fitlog.set_log_dir('logs/log_20190417_140311') # fitlog将log继续写入到log_20190417_140311里。
Parameters:
  • log_dir – log 文件夹的路径
  • new_log – 是否重新创建一个log,仅在同一次python启动但是需要记录多个log时使用(但是只能分阶段地用,即同一时间 只会有一个logger存在,设置new_log为True时,仅仅是开了一个新的logger,但同时前一个就关闭了。)同一次启动中fit_id以及 git_id只会在第一次启动时获取,之后的新log只是使用第一次提交的fit_id与git_id
fitlog.finish(status: int = 0)[source]

使用此方法告知 fitlog 你的实验已经正确结束。你可以使用此方法来筛选出失败的实验。

Parameters:status (int) – 告知当前实验的状态。0: 结束了; 1: 发生了错误
fitlog.add_best_metric(value: Union[int, str, float, dict], name: str = None)[source]

用于添加最好的 metric 。用此方法添加的值,会被显示在表格中的 metric 列及其子列中。相同key的内容将只保留最后一次传入的值。

Parameters:
  • value – 类型为 int, float, str, dict中的一种。如果类型为 dict,它的键的类型只能为 str, 它的键值的类型可以为int, float, str 或符合同样条件的 dict
  • name – 如果你传入 name 参数,你传入的 value 参数会被看做形如 {name:value} 的字典

Warning

如果你在同时记录多个数据集上的performance, 请注意使用不同的名称进行区分

fitlog.add_metric(value: Union[int, str, float, dict], step: int, name: str = None, epoch: int = None)[source]

用于添加 metric 。用此方法添加的值不会显示在表格中,但可以在单次训练的详情曲线图中查看。

Parameters:
  • value – 类型为 int, float, str, dict中的一种。如果类型为 dict,它的键的类型只能为 str, 它的键值的类型可以为int, float, str 或符合同样条件的 dict
  • step – 用于和 loss 对应的 step
  • name – 如果你传入 name 参数,你传入的 value 参数会被看做形如 {name:value} 的字典
  • epoch – 前端显示需要记录 epoch
Returns:

fitlog.add_loss(value: Union[int, str, float, dict], step: int, name: str = None, epoch: int = None)[source]

用于添加 loss。用此方法添加的值不会显示在表格中,但可以在单次训练的详情曲线图中查看。

Parameters:
  • value – 类型为 int, float, str, dict中的一种。如果类型为 dict,它的键的类型只能为 str, 它的键值的类型可以为int, float, str 或符合同样条件的 dict
  • step – 用于和 loss 对应的 step
  • name – 如果你传入 name 参数,你传入的 value 参数会被看做形如 {name:value} 的字典
  • epoch – 前端显示需要记录 epoch
Returns:

fitlog.add_hyper(value: Union[int, str, float, dict, argparse.Namespace, configparser.ConfigParser], name=None)[source]

用于添加超参数。用此方法添加到值,会被放置在表格中的 hyper 列及其子列中

Parameters:
  • value – 类型为 int, float, str, dict, argparse.Namespace(即ArgumentParser传入的内容), ConfigParser中的一种 。如果类型为 dict,它的键的类型只能为 str,它的键值的类型可以为int, float, str 或符合同样条件的 dict
  • name – 如果你传入 name 参数,你传入的 value 参数会被看做形如 {name:value} 的字典
Returns:

fitlog.add_other(value: Union[int, str, float, dict], name: str = None)[source]

用于添加其它参数。用此方法添加到值,会被放置在表格中的 other 列及其子列中。相同key的内容将只保留最后一次传入的值。

Parameters:
  • value – 类型为 int, float, str, dict中的一种。如果类型为 dict,它的键的类型只能为 str, 它的键值的类型可以为int, float, str 或符合同样条件的 dict
  • name – 如果你传入 name 参数,你传入的 value 参数会被看做形如 {name:value} 的字典
fitlog.add_to_line(line: Union[str, dict])[source]

将str记录到文件中,前端可以从网页跳转打开文件。每次记录是append到之前的记录之后的。

Parameters:line – 字符串类型或字典类型的数据,将直接写到文件中
Returns:
fitlog.set_rng_seed(rng_seed: int = None, random: bool = True, numpy: bool = True, pytorch: bool = True, deterministic: bool = True)[source]
设置模块的随机数种子。由于pytorch还存在cudnn导致的非deterministic的运行,所以一些情况下可能即使seed一样,结果也不一致
在fitlog.set_log_dir()之后调用本函数将自动记录rng_seed到log中。
Parameters:
  • rng_seed (int) – 将这些模块的随机数设置到多少,默认为随机生成一个0-1000,000的随机数。
  • random (bool,) – 是否将python自带的random模块的seed设置为rng_seed.
  • numpy (bool,) – 是否将numpy的seed设置为rng_seed.
  • pytorch (bool,) – 是否将pytorch的seed设置为rng_seed(设置torch.manual_seed和torch.cuda.manual_seed_all).
  • deterministic (bool,) – 是否将pytorch的torch.backends.cudnn.deterministic设置为True。如果该值不为True,有时候即使 全部随机数种子都一样也不能跑出相同的结果; 关掉的话可能会有一点性能损失。
fitlog.add_hyper_in_file(file_path: str)[source]

从文件读取参数。如下面的文件所示,两行”#####hyper”(至少5个#)之间的参数会被读取出来,并组成一个字典。每个变量最多只能出现在一行中, 如果多次出现,只会记录第一次出现的值。demo.py:

from numpy as np
import fitlog
# do something

fitlog.add_hyper_in_file(__file__)  # 会把本python文件的hyper加入进去
############hyper
lr = 0.01 # some comments
char_embed = word_embed = 300

hidden_size = 100
....
############hyper

# do something
model = Model(xxx)

如果你把 demo.py 的文件路径传入此函数,会转换出如下字典,并添加到参数中:

{
    'lr': '0.01',
    'char_embed': '300'
    'word_embed': '300'
    'hidden_size': '100'
}
Parameters:file_path – 文件路径。如果是读取本python文件中的hyper parameter可以直接fitlog.add_hyper_in_file(__file__)
fitlog.get_commit_id(file)[source]

用户用此命令获取上一次 Git 记录的 id, 期望的使用方法如下:

id = fitlog.get_commit_id(__file__)
Parameters:file – 以该路径往上寻找.fitlog所在文件夹。一般传入__file__即可:
Returns:Git 的上次记录的 commit-id 的前七位;错误时返回 error
fitlog.get_fit_id(file)[source]

用户用此命令获取上一次 fitlog 自动记录 commit 的 id, 期望的使用方法如下:

id = fitlog.get_fit_id(__file__)
Parameters:file – 以该路径往上寻找.fitlog所在文件夹。一般传入__file__即可
Returns:Fitlog 的上次自动记录的 commit-id 的前七位;错误时返回 error