用户 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__)