记录和分析数据科学实验的工具

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"键,它总结了实验,并使将来快速识别实验变得更容易。在

^{pr2}$

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时,不能在{}中包含任何非JSON可序列化对象。在

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")

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java不兼容类型:MainActivity无法转换为LifecycleOwner   java安卓是一种更有效的读取大文本文件的方法   java导出LWJGL本地人与项目?(IntelliJ IDEA)   JDK更新后,JavaJShell不再在下一行打印输出   父类对象上的继承Java比较子属性   Java:有没有一个容器可以有效地结合HashMap和ArrayList?   安卓 Java对象指针   java在annotationdriven Spring MVC应用程序中实现大气   java 安卓源代码构建应用找不到安卓supportv4。罐子   文件系统上的抽象层和Java中的jar/zip   java在水平滚动视图中添加多个图像?   java如何从firebase实时数据库中获取字符串数组   WIndows 10工作站上的java未满足链接错误   java命令在终端中工作,但在使用过程中出现“无结束引号”错误。执行官