实验测井工具

cox的Python项目详细描述


cox:一个实验设计与分析框架

您可以在cox上找到api文档,以及 在下面穿行。

简介

cox是一个轻量级的、无服务器的框架,用于设计和管理 实验。灵感来自于我们自己在基于特定文件系统的斗争中 实验收集,以及我们无法使用重型框架,cox aims 成为一个最小的负担,同时诱导更多的组织。由logan创建 engstrom和andrew 伊利亚斯

cox的工作原理是帮助您轻松地登录收集,以及 分析实验结果。有关API文档,请参见此处的 提供演示Cox最重要功能的演练。

为什么叫"考克斯"?(旁白):考克斯的名字来源于 舵手 以划船船员的身份驾驶船只,并以格特鲁德的名字命名。 实验先驱考克斯 设计。

安装

Cox可以通过PYPI安装为:

pip3 install cox

cox需要python 3,并且已经用python3.7进行了测试。

引文
@unpublished{cox,
    title={Cox: A Lightweight Experimental Design Library},
    author={Logan Engstrom and Andrew Ilyas},
    year={2019},
    url={https://github.com/MadryLab/cox}
}

快速日志概述

cox测井系统是为处理重复实验而设计的。这个 用户为熊猫定义模式 数据帧 包含每个实验实例所需的所有数据。各 实验运行对应于一个数据存储区和每个指定的数据帧 上面的对应于此存储中的表。实验仓库是 组织在同一目录中。cox有很多实用程序可以运行 从这种性质的实验中收集数据。

交互式介绍

在我们的机器学习工作中,我们大部分使用cox,但是cox对类型或 您编写的代码的样式。为了说明这一点,我们经历了 演练中的简单示例。

演练1:登录cox

注意1:您可以在这里的示例文件中查看此运行示例的所有组件!

注意2:本演练的副本也可与我们的API一起提供 文档,这里

在本演练中,我们将从以下简单的代码开始, 它试图找到二次函数的最小值:

importsysdeff(x):return(x-2.03)**2+3x=...tol=...step=...for_inrange(1000):# Take a uniform step in the direction of decreaseiff(x+step)<f(x-step):x+=stepelse:x-=step# If the difference between the directions# is less than the tolerance, stopiff(x+step)-f(x-step)<tol:break

初始化存储

登录cox是通过store类完成的,该类可以创建如下:

fromcox.storeimportStore# rest of program here...store=Store(OUT_DIR)

构造时,store实例创建一个带有随机的uuid的目录 生成名inout_dir,ahdfstore用于存储数据,一些日志 文件和一个tensorboard目录(名为tensorboard)。因此,在运行此命令之后,我们的out目录应该如下所示:

$ ls OUT_DIR
7753a944-568d-4cc2-9bb2-9019cc0b3f49
$ ls 7753a944-568d-4cc2-9bb2-9019cc0b3f49
save        store.h5    tensorboard

实验id字符串7753a944-568d-4cc2-9bb2-9019cc0b3f49 自动生成。如果我们想把实验命名为别的,我们可以通过 它作为第二个参数;即使用store(out_dir,'exp1') 将使相应的实验idexp1

创建表格

下一步是声明我们要通过表存储的数据。我们可以添加 根据我们的需要任意表,但是我们需要指定构架 提前传递模式。在我们的例子中,我们将从 包含用于运行 上面的程序,以及用于写入结果的表格:

store.add_table('metadata',{'step_size':float,'tolerance':float,'initial_x':float,'out_dir':str})store.add_table('result',{'final_x':float,'final_opt':float})

每个表都与hdfstore中的apandas数据框完全对应。 对象:< /P>

关于序列化的说明

cox支持基本对象类型(如floatintstr等)以及 一种可序列化的对象(通过dill或使用pytorch的序列化 方法)。特别是,如果我们想序列化一个对象,我们可以传递 以下类型:cox.store.[object pickle pytorch_state]作为类型值 在架构字典中映射到的。cox.store.pytorch_state是 特别适用于处理pytorch对象,如权重。 具体来说:对象对应于将对象存储为 表中的序列化字符串,pickle对应于将对象存储为 磁盘上的序列化字符串位于单独的文件中,并且pytorch\u state对应于 使用torch.save

日志记录

现在我们有了一个表,我们可以给它写行了!登录cox是在 逐行方式:任何时候都可以附加一个工作行 to/updated;然后可以刷新行(即写入文件),然后开始 新的(空的)工作行。相关命令是:

# This updates the working row, but does not write it permenantly yet!store['result'].update_row({"final_x":3.0})# This updates it againstore['result'].update_row({"final_opt":3.9409})# Write the row permenantly, and start a new working row!store['result'].flush_row()# A shortcut for appending a row directlystore['metadata'].append_row({'step_size':0.01,'tolerance':1e-6,'initial_x':1.0,'out_dir':'/tmp/'})

使用"更新"行进行增量更新

后续更新行的调用将编辑同一工作行。 如果行的不同部分是用不同的 代码中的函数/位置,因为它不需要传递统计信息 到处都是。

读取数据

通过填充表行,我们实际上只是将行添加到底层 hdfstore表。如果我们以后想看商店,我们可以再开一家 存储在同一位置,然后使用简单的命令读取数据帧:

# Note that EXP_ID is the directory the store wrote to in OUT_DIRs=Store(OUT_DIR,EXP_ID)# Read tables we wrote earliermetadata=s['metadata'].dfresult=s['result'].dfprint(result)

检查result表,我们可以在pandas数据框中看到预期的结果!

     final_x   final_opt
0   3.000000   3.940900

collectionreader:一次阅读许多实验

现在,在我们的二次示例中,我们不打算只尝试一组 参数,我们将尝试为步长设置许多不同的值, 公差初始x,因为我们尚未发现凸优化。 要做到这一点,我们只需运行脚本多次 超参数,为所有运行提供相同的输出目录(调用 cox将自动在内部创建不同的命名文件夹 输出目录用于每个实验。

假设我们已经这样做了(使用任何标准工具,例如slurm中的sbatchsklearngrid search等),我们有一个满是商店的目录(这个 这就是为什么我们使用uuids而不是手工挑选的名称!)

pip3 install cox
0

现在,我们要从这个目录中收集所有结果。我们可以使用 cox.readers.collectionreader以串联方式将所有表一起读取 熊猫表。

pip3 install cox
1

它将所有结果表作为 pandas数据框便于操作:

pip3 install cox
2

pandas有大量强大的实用工具可用于搜索和 操作数据帧。我们建议查看他们的 DOCs< 关于如何做到这一点的信息。为了方便,我们给了一些简单的 以下示例:

pip3 install cox
3

演练2:使用coxtensorboardx

注意:与第一个演练一样,一个工作示例文件包含 这些命令可以在这里找到

在这里,我们将展示如何将coxtensorboardx一起用于日志记录。 我们将使用以下简单的运行示例:

pip3 install cox
4

如前所述,cox.store对象也会自动创建 tensorboard通过 tensorboardx 图书馆。创建的cox.store.store对象实际上是一个writer属性 那是一个功能齐全的 摘要编写器 对象。这意味着我们可以在TensorBoard中绘制所需的线,如下所示:

pip3 install cox
5

不幸的是,tensorboard数据很难通过方法读取/操作 而不是tensorboard接口。为了方便起见,存储对象 提供同时写入表和tensorboardxwriter的能力 通过log_table_和_tb函数的时间,这意味着我们可以替换 上面带有:

pip3 install cox
6

使用cox.tensorboard查看多个tensorboard

注意:python-m cox.tensorboard_视图的cox tensorboard来自命令行

继续我们的运行示例,我们现在可能希望直观地比较 在多个参数设置中使用tensorboard。幸运的是,考克斯 提供实用程序,用于在可读的 方式。在我们的示例中,我们创建了一个store对象和一个表 调用了存储超参数的元数据。我们还演示了如何 通过tensorboardx集成tensorboard日志。我们现在使用 cox.tensorboard视图在 一次(这在比较网格搜索的参数时很有用)。

实现这一点的方法是通过cox.tensorboard_view命令,它是 称为python3-m cox.tensorboard_view,参数如下:

  • --logdir(必需),所有存储所在的目录
  • --端口(默认值6006),运行TensorBoard服务器的端口
  • --元数据表(默认"元数据"),其中 超参数被保存(即运行示例中的"元数据")。这个 应该是一个只有一行的表,如我们的运行示例所示。
  • --filter param(可选)可以多次使用,过滤掉存储 来自tensorboard聚合。对于表单的每个参数 --filter param param_name param_regex,仅存储 元数据匹配param_regex将被保留。
  • --format str(必需)如何显示店铺名称。回忆 默认情况下,每个商店都有一个生成的名称。这个论点 确定它们的名称将如何显示在TensorBoard中。花冠 表示参数值,uuid将始终附加到名称中。所以 在我们的运行示例中,--format str ss-{step_size}将导致 带有ss-1.0-ed892c4f-069f-4a6d-9775-be8fdfce4713形式名称的张力板

所以在我们的运行示例中,如果我们运行以下命令,显示坡度 在张量板的名字和过滤之间的斜率n 1和3:

啊!

AAAAAAA 18

然后导航到localhost:6006结果:

tensorboard view

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

推荐PyPI第三方库


热门话题
java是数据线。getMicrosecondPosition()线程安全?   java我可以设置多个。whereEqualTo在firestore查询中指向文档中的字段?   java Intellij 14 Glassfish服务器未连接。部署不可用   java JPA。如何返回null而不是LazyInitializationException   java TarsosDSP Clap检测   比较基于字符串的java枚举   java空指针异常日历。设定时间   java Hystrix在运行时忽略超时   将数据从Java RESTful服务器推送到Android手机上进行通知   java Jnotify delete vs shift delete问题   java安装失败\u没有匹配\u ABIS res113   TreeJava:传递未实例化的对象引用是如何工作的?   java如何使用Android ringtone manager从资产文件夹播放铃声?   java在Dropwizard的不同状态下使用不同的模拟