使机器学习和其他计算机实验自动化
experitur的Python项目详细描述
快速性
experitur自动化机器学习和其他计算机实验。包括网格搜索和恢复中止的实验。没有锁定,您的所有数据都可以以基于文本的机器可读yaml格式轻松访问。
实验说明
每个实验都在一个普通的python文件中描述。@experiment
装饰符用于标记实验入口点。
fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...
参数网格
实验的核心是它的参数网格。它的工作方式类似于sklearn.model_selection.parametergrid
。每个参数都有一个可以接受的值列表。从每个参数的值的交叉积中产生许多试验。
入口点
实验是用@experiment
修饰的正则函数(除非它是抽象的或派生的)。执行时,使用当前试用版调用函数。它可能会返回结果字典。
签名:(试用)->;dict
fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""print("parameters:",pformat(parameters))return{}
现在,您可以运行实验:
$ experitur run example.py
...
如您所见,run
被调用四次,每次组合为[1,2]x[a,b]。
多次实验
python文件可以包含多个实验:
fromexperiturimportexperiment@experiment(...)defexample1(trial):...@experiment(...)defexample2(trial):...
实验遗传
一个实验可以使用parent
参数继承另一个实验的设置。
fromexperiturimportexperiment@experiment(...)defexample1(trial):...# Derived with own entry point:@experiment(parent=example1)defexample2(trial):...# Derived with inherited entry point:example3=experiment("example3",parent=example2)
参数替换
experitur
包含递归参数替换引擎。每个值字符串都被视为递归格式字符串,并使用试验的整个参数集进行解析。
@experiment(parameter_grid={"a1":[1],"a2":[2],"b":[1,2],"a":["{a_{b}}"],})defexample(trial):...
$ experitur run parsub
...
这样,您可以使用依赖于其他设置的设置轻松运行复杂的设置。
递归格式字符串的工作方式与string.formatter类似,但有两个例外:
递归字段名:字段名本身可以是格式字符串:
format("{foo_{bar}}", bar="baz", foo_baz="foo") -> "foo"
文本输出:如果格式字符串仅由替换字符串组成字段,不包含格式规范,不执行字符串转换:
format("{}", 1) -> 1
这允许对非字符串值使用格式字符串。
应用程序
如果要对不同的数据集运行实验,但对每个数据集需要稍有不同的设置,则此功能尤其有用。
假设我们有两个数据集,"bees"和"flowers"。
fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...0
实验将对每个数据集执行一次,其中"蜜蜂"数据集的试验["作物"]==10
和"花"数据集的试验["作物"]==0
。
试用版
对象
每个实验都会收到一个试验对象,该对象允许访问试验的参数和元数据。
参数通过[]
运算符访问(例如trial["a"]
),元数据通过运算符访问(例如
trial.wdir
)。
访问父数据
…
文件
当experitur执行脚本时,它会在dox文件所在的目录中创建以下文件结构:
fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...1
<;script>;/<;实验id>;/<;试用id>;/experitur.yaml
包含参数和试用结果,例如:
fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...2
大多数项目应该是不言而喻的。参数
是传递到入口点的参数。id
是从参数网格中变化的参数派生的。这样,您就可以轻松地解释文件结构。
收集结果
使用experitur collect script.py
将所有实验的结果(包括参数和元数据)收集到位于script/results.csv
的单个csv文件中
调用函数和默认参数
实验函数可能会调用其他具有默认参数的函数。
experitur
为您提供一些实用程序函数,用于提取这些默认参数,并将它们添加到参数列表中。
对于以下示例,假设trial["p_a"]=1
和trial["p_b"]=2
试用版。不带前缀(前缀:str,参数:dict)->;dict
:提取所有以前缀开头的参数fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...
3试用版。应用(前缀:str,callable_u:callable,*args,**kwargs)
:callcallable_u
参数以前缀开始
fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...
4trial.record_defaults(前缀,[可调用的]**默认值)
:为以前未设置的参数设置默认值。defaults
中的值覆盖可调用的默认参数
fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...
5
最好过度使用set_default_parameters
和apply_parameters
。这样,结果文件始终包含完整的参数集。
有关简单示例,请参见examples/example.py。
安装
experitur
打包在pypi上
fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...6
请注意,该软件包目前正在进行大量开发,任何时候都可能发生变化!
示例
- examples/example.py:一个非常基本的示例,显示了设置默认参数和应用参数的工作过程。
- examples/classifier.py:尝试使用
sklearn.svc
的不同参数对手写数字进行分类(mnistmnist)。运行该示例,添加更多参数值,并查看如何在下一次运行期间跳过已存在的配置。理>
贡献
Experitur正在积极开发中,因此非常感谢任何用户反馈、错误报告、评论、建议或请求。请使用存储库中的漏洞跟踪器和fork。
兼容性
experitur
是用python 3.5、3.6和3.7测试的
类似软件
推荐PyPI第三方库