加速金属学习研究的模块化工具箱:火箭:

meta-blocks的Python项目详细描述



PyPI - Python VersionPyPI Status BadgeBuild StatusDocumentation StatusCoverage StatusLanguage grade: PythonCode style: black

MetaBlocks是一个模块化的工具箱,用于研究、实验和可复制的学习学习算法的基准测试。 工具箱提供了一个灵活的API来处理MetaDatasetsTaskDistributions和{}。 API完全解耦了数据处理、学习任务(及其分布)的构建、自适应算法和模型体系结构,并使这些基本构建块的不同组合的实验变得更加容易,并为不断增长的生态系统添加新的组件。 此外,该库还具有一个suite of benchmarks的特性,可以实现再现性。 一切都可以通过hydra进行高度配置。在

该库正在积极开发中。 最新的文档可从:https://meta-blocks.readthedocs.io/获得。在


安装

元块需要Python3.5+和TensorFlow 2.2+。在

典型使用

我们建议使用pip安装库的最新版本:

$ pip install meta-blocks            # normal install
$ pip install --upgrade meta-blocks  # or update if needed
$ pip install --pre meta-blocks      # or include pre-release version for new features

或者,要从master分支安装最新版本:

^{pr2}$

注意:为了能够访问和运行基准测试,您需要克隆存储库。在

发展和贡献

您可以安装其他开发需求,如下所示:

$ pip install -r requirements/dev.txt

另外,请确保安装预提交挂钩,以确保代码样式和格式正确:

$ pip install pre-commit      # install pre-commit
$ pre-commit install          # install git hooks
$ pre-commit run --all-files  # run pre-commit on all the files

入门和使用案例

您可以将该库用作(1)模块化基准测试套件或(2)新学习学习算法的脚手架API。在

标杆管理

为了实现可重复的研究,我们维护了一套benchmarks/。 要运行基准测试,只需克隆repo,将工作目录更改为相应的基准,然后执行一个运行脚本。 例如:

$ git clone https://github.com/alshedivat/meta-blocks.git
$ cd meta-blocks/benchmarks/omniglot
$ ./fetch_data                    # fetches data for the benchmark
$ ./run_classic_supervised.sh     # runs an experiment (train and eval routines in parallel)

有关详细信息,请参阅benchmarks/README.md。在

元块API

MetaBlocks提供了实现为Python类层次结构的多个API层。 三个主要组件是MetaDatasetTaskDistribution,和{}:

  1. MetaDataset提供对从底层DataSource构造的Dataset实例的访问。 Dataset表示数据张量的集合(例如,在多类分类的情况下,它是一个输入张量的集合,每个类别一个)。在
  2. TaskDistribution进一步构建在MetaDataset之上,并提供对指定学习任务语义的Task实例的访问。 E、 例如,一些快照分类任务提供对非重叠支持和查询子集的访问。 任务分布决定了如何对任务进行采样和构造。 目前,我们支持supervisedself-supervised任务进行少量镜头分类。在
  3. MetaLearner封装了一个参数化模型(你最喜欢的神经网络)和一个自适应算法,用于使模型适应新任务。 自适应算法必须使用Task公开的API。在

注意:将任务与数据集和(元)学习方法分离是元块相对于其他库的核心优势之一。在

以下是库当前支持的组件:

添加您自己的元数据集

要添加自己的元数据集,您需要子类MetaDataset并实现一些方法。在

[TODO:提供详细的演练示例。]

如果用于构造元数据集的完整数据量很轻并且很容易放入内存中,则可以按照the implementation of Omniglot进行操作。 如果数据集太大或需要一些繁重的预处理,最好的方法是使用tf.data.DatasetAPI。 作为一个起点,您可以遵循miniImageNet implementation。在

添加自己的元学习者

要添加您自己的元学习算法,您需要子类MetaLearner并实现两个方法:_get_adapted_model(必须返回一个经过调整的模型实例)和{}(必须构建一个部件)与模型相适应的计算图)。 示例:prototype-based adaptation_build_adaptation方法内的支持集生成原型,并在调用_get_adapted_model时返回一个带有相应原型的模型。在

[TODO:提供详细的演练示例。]


引文

如果你使用元块进行研究,请引用如下。在

@misc{metablocks,
  title={MetaBlocks: A modular toolbox for meta-learning research with a focus on speed and reproducibility.},
  year={2020},
  publisher={GitHub},
  journal={GitHub repository},
  howpublished={\url{https://github.com/alshedivat/meta-blocks}},
}

相关项目

一些值得注意的相关项目:

ProjectDescription
TorchmetaA PyTorch library that implements multiple few-shot learning methods.
learn2learnA PyTorch library that supports meta-RL.

参考文献

[1]Finn,C.,Abbeel,p.和Levine,S.用于快速适应深层网络的模型不可知论元学习。ICML 2017年。在

[2]Nichol,A.,Achiam,J.和Schulman,J.关于一阶元学习算法。arXiv预印本arXiv:1803.02999。在

[3]Snell,J.,Swersky,K.和Zemel,R.《少镜头学习的典型网络》。NeurIPS 2017年。在

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

推荐PyPI第三方库


热门话题
java无法设置@Async方法   在Java中设置链表   未设置id时遇到java StaleObjectStateException   java如何保存程序的状态并加载它?   java映射类和schemaderived类之间有什么区别?   控制器类中的java全局变量在最新会话打开时被覆盖   java Hystrix和连接池   java Sonar在我不关闭ignite对象时引发拦截器问题   java无法在Junit TestCase中为控制器设置Mockito值   java保证异步传递消息   java如何高亮显示按钮,直到为微调器提供有效值?   java在Android中使用ImageView控件创建错误   JMX垃圾收集和系统之间的java差异。gc()?   java在尝试向标记添加信息窗口时卡住了?   java JavaFX检测与后台的冲突   java将光标放在按钮上时更改按钮的位置   java Maven。如何从paren pom继承配置文件。xml?   带空格的Java填充字符串   java将两个对象设置为相等,并找到其布尔结果