记录和分析数据科学实验的工具
researcher的Python项目详细描述
研究员
研究人员使数据科学从业者更容易记录和复制数据科学实验的结果。从概念上讲,researcher
将数据科学过程分成不同的实验。每个实验都有参数(训练周期数、使用的数据集、模型体系结构等)和结果(最终验证损失、最低训练精度等)是运行实验时观察到的结果。在
研究人员背后的想法是,对于你运行的每一个实验,你都应该记录所涉及的参数和它们所取得的结果。这将使分析不同参数之间复杂的相互作用变得更容易,并在以后的日子里重新创造实验条件。在
使用
要查看researcher
如何工作的示例,请查看github repo上的mnist_demo.ipynb
,但基本上用法有3个阶段:
1。定义实验参数
在geneal的任何数据科学项目中,你将花费大量的时间来选择实验参数。这些参数可能包括要使用的激活函数、训练的时间段或使用的数据扩充过程。理想情况下,每次你做一个实验,你应该记录下实验中涉及的参数,这些参数应该足以让其他人在以后的日子里复制这个精确的实验。researcher
喜欢的方法是有一个helper函数,该函数接受参数字典,在这些参数下运行一个实验,并返回实验结果。类似以下不完整的代码片段:
importresearcherasrsimporttensorflowastfdefrun_experiment(params):model=tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape=(28,28,1)),tf.keras.layers.Dense(params["depth"],activation=params["activation_function"]),tf.keras.layers.Dense(10,activation=params["final_activation"])])model.compile(loss='sparse_categorical_crossentropy',optimizer=tf.keras.optimizers.Adam(params["lr"]),metrics=['accuracy'],)model.fit(SOME_DATASET,epochs=params["epochs"],validation_data=SOME_OTHER_DATASET,)returnmodel.historyparams={"activation_function":"relu","final_activation":"softmax","depth":256,"epochs":8,"lr":0.001}results=run_experiment(params)
通过改变params
你可以在不同的条件下进行多个实验。好的做法是给每个params
字典一个"title"
键,它总结了实验,并使将来快速识别实验变得更容易。在
2。保存实验结果
当你以一致的格式记录结果时,数据科学实验会变得更加有用。然后,如果你发现了什么重要的东西,你就可以很容易地与他人分享你的发现,并以一种可量化的形式对其进行跟踪,从而为你将来的利益服务。这就是researcher
的帮助。首先创建一个空目录来保存所有实验数据:
mkdir records
然后,每次运行实验时,只需将结果打包到字典中,并使用researcher
将其与实验参数一起保存在该目录中。在
final_results={}forkey,valuesinresults.history.items():final_results[key]=valuesrs.record_experiment(params,"records/",observations=final_results)
参数和结果将被保存到records/
目录中的.json
文件中,并给出一个唯一的实验哈希,以后可以使用它来识别它(尽管"title"
键也很有帮助)。在
Note:由于researcher
使用JSON序列化实验,因此在使用researcher
时,不能在{
3。加载并查看实验结果
researcher
还可以帮助您加载和可视化保存的实验:
experiments=rs.all_experiments("records/")
实验被加载到一个researcher.experiment.Experiment
实例中,该实例是原始参数和最初保存的结果的简单包装:
experiments[0].data# {# 'title': 'deep-adam-relu',# 'activation_function': 'relu',# 'final_activation': 'softmax',# 'depth': 256,# 'epochs': 8,# 'lr': 0.001,# 'hash': 'eebb49b9d1487396dd6c0e5271cc3083',# 'timestamp': '2020-12-10_00:01:04',# 'observations': {'loss': [0.35920432209968567,# 0.16782893240451813,# 0.12179006636142731,# 0.09385494887828827,# 0.07634902000427246],# 'accuracy': [0.9017833471298218,# 0.9524166584014893,# 0.9652500152587891,# 0.972683310508728,# 0.9780666828155518],# 'val_loss': [0.1982543170452118,# 0.1372576504945755,# 0.11536946892738342,# 0.1035531759262085,# 0.08903338760137558],# 'val_accuracy': [0.9441999793052673,# 0.9607999920845032,# 0.9675999879837036,# 0.9672999978065491,# 0.9717000126838684]},# }
您也可以使用一些预先构建的绘图函数来可视化这些实验结果(请参见researcher/dashboard.py
),但根据您正在运行的实验类型,您可能需要定义自己的实验。在
importmatplotlib.pyplotaspltdefplot_metric(e,metric):plt.plot(e.data["observations"][metric])plot_metric(experiments[0],"loss")plot_metric(experiments[0],"val_loss")
- 项目
标签: