一个轻率而全面的python实验管理器

ExperimentManager的Python项目详细描述


实验管理器

轻率和全面的python实验管理器。它的主要目的是自动化所有与保存文件和日志记录相关的后台工作。experimentmanager可以很容易地用于:

  • 使用自动验证和日志管理所有实验文件的保存和加载目录。
  • 记录实验的输出并保存所有源文件以获得更高的可复制性。
  • 保存(几乎)任何对象而不必担心任何事情。
  • 轻率地记录所有指标。
  • 直接在指定功能中管理、编辑和插入配置用语
  • 封装实验中的单个运行。任何函数都可以用于创建运行;这将自动在saved_runs中生成一个新的运行目录,其中包含专用的saved_filessaved_metrics目录以及一个特定的日志文件。

免责声明

这是测试版。它在我的测试环境(ubuntu和特定的库verisons)中是稳定的,但没有在其他环境中测试过。很多功能还没有记录下来!

对于那些熟悉神圣图书馆的人来说,这个项目源于他们的实验管理员,但是他们的目标是纠正一些行为问题(在他们的问题中提到),同时允许更好和更灵活的特性,并且在本地做所有事情(不依赖其他数据库管理员)。在特定环境中安装起来可能不灵活或很棘手的界面)。这里使用的代码中只有函数签名捕获部分。

安装

要安装,只需在git目录中使用pip install。。

这个beta版本运行tensorflow 1.13和keras 2.2.4(用于tensorboard和模型保存功能)。早期版本未经测试。

用法

要创建实验,只需在主文件中添加以下行:

fromExperimentManagerimportcreateExperimentmanager=createExperiment('my first experiment')

创建实验时可以指定许多参数,主要参数有:

  • 名称:实验的名称。如果需要,将用于创建保存目录。
  • 实验目录:希望管理器保存和记录的可选父目录。
  • project_dir:用于运行实验的代码的父目录。这主要用于备份源代码以获得更高的可复制性。如果没有提供,将使用调用init的文件的父目录。
  • load_dir:用于更容易导入的目录,它将在使用manager生成的所有路径上加前缀。get_load_path
  • 详细:0、1或2。1将在experience_info.log中添加一些内部日志,而2将在debug.log中记录每个内部函数调用的详细信息(仅用于测试该类的行为,这会使进程慢很多!)
  • tensorboard:true或false,使用度量日志记录方法时记录到tensorboard事件
  • ghost:true或false(默认为false)。如果为true,则将禁用所有保存和日志记录功能,而不会创建单个目录或文件。这在运行测试时很有用。

experimentmanager也可以使用manager=experimentmanager.getmanagerfromconfig('config.json')从配置文件创建。示例配置文件可以在演示目录中找到。

管理目录

创建实验管理器将自动生成以下目录结构:

./
-- (your_source_code)
-- managed_experiments/
---- my first experiment DATETIME/
-------  saved_files/
-------  saved_sources/
-------  saved_metrics/
-------  saved_runs/
-------  experiment_info.log
-------  debug.log
-------  stdout_capture.log

请注意,manager_experiments direcotry是在与源代码相同的目录中创建的。更准确地说,如果在初始化时没有指定实验目录,则目录将是包含名为experimentmanager.createmanager的代码的目录。

所有创建的目录都有相当直接的目标。保存的运行包含有关在例如,使用管理器进行实验。运行命令。使用此方法的优点在下面的"运行"部分中进行了说明。

每个目录的路径都是管理器的一个属性,因此您可以随时访问它。特别是,可以使用manager.experiment\u dir访问"我的第一个实验日期时间"目录。

要在任何文件中访问您的实验管理器,只需使用experismanager的getexperiment方法。它将恢复活动的实验管理器:experismanager.getexperience()

可复制性和控制性

默认情况下,实验管理器还将在saved_sources中保存所有项目源文件(.py)的副本,并在专用记录器("stoud_capture.log")中捕获stdout。这通常足以牢牢掌握过去的任何实验并重现其结果。

储蓄,前所未有

在任何时候,您都可以简单地调用manager.save(object,name)并且experimentmanager将:

  • 检测它应该保存在哪个文件夹中:generalsaved_files目录位于my first experience datetime或特定的run子目录中。
  • 检测应使用的保存方法。
  • 如果需要,请改名。

实现的保存方法包括以下数据类型:

  • 列表和听写
  • numpy数组
  • 张量流张量(如果可以计算的话)
  • Keras车型
  • matplotlib图形

可以轻松添加新的保存方法,请参阅"添加保存方法"文档。

日志记录指标

实验管理器支持标量的csv日志和标量和直方图的tensorboard日志。

只需使用manager.log_scalar(metric_name,value)并且experimentmanager将再次检测当前运行并保存度量,必要时对名称进行版本控制。可以在之后添加可选的步骤参数,默认情况下,步骤将自动递增基于0的整数。除非manager.tensorboard设置为false,否则日志标量将记录到runs或global metrics目录中的csv,也将记录到tensorboard目录。metric_name用于命名csv文件以及csv中值列的标题。

要在单个csv中记录多个度量,请使用manager.log\u标量(文件名、值、标题、步骤=无)

记录柱状图的方法与manager.log\u historgram(name,values,step,bins=1000)完全相同(请记住,柱状图只记录到tensorboard,而不是csv,因为csv太重;因此,如果tensorboard支持被禁用,这将不起作用)。

配置

配置是在一个地方(json文件或字典)管理所有实验参数的好方法。除了全局配置用语外,experimentmanager为每次运行都有一个专用的配置用语。对于手工指定的函数,您的管理器将通过更改函数的签名(覆盖默认值)来插入其配置参数。

要添加配置字典,只需使用manager.add_config(字典)(即将提供JSON文件支持)。当前运行或常规配置字典将使用输入字典进行更新。如果运行配置用语中有与通用用语相同的字段,则始终以运行选项为准(当然只能在该运行中!)

若要指定应接收配置值的函数,请添加@manager.capture装饰符。您可以使用prefixes参数精确地指定应该注入哪些字段。下面是一个示例:

manager=createManager('test')config1={"name":"Victor","status":1,"details":{"age":22,"towns":{0:"Brussels",1:"Paris"}}}manager.add_config(config1)#this will update the general configurations dict since we are not in a run@manager.capture()deffunction1(time,name,details):pass@manager.capture()deffunction2(name,status,details):pass@manager.capture(prefixes=['name','details.towns','details.age,'details'])deffunction2(names,towns,details):pass

相当于:

deffunction1(time,name='Victor',details={"age":22,"towns":{0:"Brussels",1:"Paris"}}):passdeffunction2(name='Victor',status=1,details={"age":22,"towns":{0:"Brussels",1:"Paris"}}):passdeffunciton3(name='Victor',towns={0:"Brussels",1:"Paris"},age=22,details={"age":22,"towns":{0:"Brussels",1:"Paris"}}):pass

如您所见,并非所有函数参数都需要覆盖。如果您添加**Kwargs,将添加所有键。

运行

充分利用experimentmanager,使用管理器的run方法运行任务。 当使用保存和记录方法时,experimentmanager将自动检测哪个运行处于活动状态,这样您的文件将始终在正确的位置结束。要开始跑步,您有两个选项:

  • 向函数添加@manager.commanddecorator并使用manager.run(函数的名称)运行它
  • 使用manager.add_command(function)和相同的运行方法。这样做的好处是不需要修改代码的任何部分(通过添加@manager.command),但代价是丢失配置注入。

注意,命令decorator还调用捕获decorator(从而执行配置注入)。

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

推荐PyPI第三方库


热门话题
Android java。伊奥。FileNotFoundException没有这样的文件或>目录,尽管已授予权限   java机器人将鼠标保持在窗口中   java我无法找到程序发送异常的原因   java创建按钮以更改背景   java如何在POJO类中使用HashMap并检索它?   java不可解PMD冲突:可以组合这些嵌套的if语句   java我正在努力提高Springboot+MyBatis中API的性能,仅用于Select查询   java在Spring中实例化Util类   java集合。洗牌(a)魔术?   java Jackson如何在没有已知属性的情况下失败,这与反序列化功能不同。在未知属性上失败   java spring rest@RequestBody未使用@Valid进行验证   如何匹配这种模式?(Java/regex)   java只有一个google play依赖项,但所有google play库都在应用程序外部库上   计算器如何在Java中使用按钮将两个输入放在两个单独的文本字段中?   java我正在尝试从文件中计算字符数   java如何获取工具。Windows上OpenJDK 11的jar?   java在本地时区上独立解析ZoneDateTime   java防止安卓键盘造成延迟   java在服务器上处理Excel文件