贝叶斯主动学习库。

baal的Python项目详细描述


贝叶斯主动学习

CircleCIDocumentation StatusGitter

BaaL是一个在 ElementAI。此存储库包含技术 以及可重用的组件,使所有人都可以进行主动学习。在

阅读https://baal.readthedocs.io上的文档。在

我们的论文可以在arXiv上阅读。它包括使主动学习在生产中可用的技巧和技巧。在

您也可以阅读我们的blog post。在

安装及要求

BaaL需要Python>=3.6。在

要使用pip安装baal:pip install baal

要从源安装baal:pip install -e .

有关要求,请参见:requirements.txt。在

什么是主动学习?在

主动学习是机器学习的一个特例 算法能够交互式地查询用户(或其他一些信息) 在新的数据点获得所需的输出 (要更深入地理解这个概念,请参阅我们的tutorial)。在

BaaL框架

目前,BaaL支持以下方法来执行主动学习。在

  • 蒙特卡洛辍学(Gal等人,2015年)
  • MCDropConnect(Mobiny等人,2019年)

请参阅我们的路线图below

montecarlo Dropout方法是贝叶斯神经网络的一种已知近似方法 网络。该方法在训练和测试中都使用了脱落层 时间。通过多次运行模型,同时随机降低权重,我们使用heuristics.py中的一个不确定度测量来计算预测的不确定性。在

框架由四个主要部分组成,如以下流程图所示:

  • 动态学习数据集
  • 启发式
  • 模型包装器
  • 主动学习回路

首先,将数据集包装到我们的ActiveLearningDataset类中。这将确保将数据集拆分为 trainingpool集。pool集表示训练集的一部分 被贴上标签。在

我们提供了一个类似于keras.Model的轻量级对象ModelWrapper,以便于模型的训练和测试。如果您的模型没有准备好进行主动学习,我们提供模块来准备它们。在

例如,MCDropoutModule包装器更改了现有的dropout层 用于训练和推理时间,ModelWrapper使 指定在训练和推理时运行的迭代次数。在

总之,您的脚本应该类似于:

dataset=ActiveLearningDataset(your_dataset)dataset.label_randomly(INITIAL_POOL)# label some datamodel=MCDropoutModule(your_model)model=ModelWrapper(model,your_criterion)active_loop=ActiveLearningLoop(dataset,get_probabilities=model.predict_on_dataset,heuristic=heuristics.BALD(shuffle_prop=0.1),ndata_to_label=NDATA_TO_LABEL)foral_stepinrange(N_ALSTEP):model.train_on_dataset(dataset,optimizer,BATCH_SIZE,use_cuda=use_cuda)ifnotactive_loop.step():# We're done!break

对于一个完整的实验,我们提供experiments/来理解如何 写一个积极的训练过程。通常,我们使用ActiveLearningLoop 提供于src/baal/active/active_loop.py。 此类提供了获取未标记池的预测的功能 在每(几个)个历元之后,对下一组要标记的数据项进行排序 基于池的计算不确定度。在

路线图(根据社区的不同而有所变化)

  • [x] 使用MCDropout首次发布FOSS(Gal等人,2015年)
  • [x] MCDropConnect(Mobiny等人,2019年)
  • []贝叶斯层(Shridhar等人,2019年)
  • []无监督方法
  • []NNGP(Panov等人,2019年)
  • []SWAG(Zellers等人,2018年)

重新运行我们的实验

^{pr2}$

使用BaaL进行实验

只需克隆repo,并创建类似于 示例位于experiments/vgg_experiment.py。确保使用四个主要部件 巴力框架。快乐跑步实验

Dev安装

只需构建Dockerfile,如下所示:

git clone git@github.com:ElementAI/baal.git
nvidia-docker build [--target base_baal] -t baal-dev .

现在你已经具备了开始为巴力贡献力量的所有要求。耶!

贡献!

要投稿,请参阅CONTRIBUTING.md。在

我们是谁!

“还有激情然而,平静,平静;平静。”

在ElementAI,BaaL团队测试并实现了关于不确定性估计和主动学习的最新论文。 巴力团队是来为你服务的!在

如何引用

如果您在某个项目中使用BaaL,我们将非常感谢您使用此Bibtex引用此库:

@misc{atighehchian2019baal,
  title={BaaL, a bayesian active learning library},
  author={Atighehchian, Parmida and Branchaud-Charron, Frederic and Freyberg, Jan and Pardinas, Rafael and Schell, Lorne},
  year={2019},
  howpublished={\url{https://github.com/ElementAI/baal/}},
}

许可证

要获取有关此API许可证的信息,请阅读LICENCE

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

推荐PyPI第三方库


热门话题
我可以用C++代码使用java代码吗?   java使用JSR303在派生类中提供更具体的约束   java在这个查找唯一路径数算法中我做错了什么?   java如何为2个不同的服务提供商使用2个不同的SSL证书?   java在Gridview上绘制文本   java使用连接for循环构建字符串名   java StringBuilder拆分无法处理某些文件   java事件关注EditText   Java Web Start“找不到URL的缓存资源”   java程序从命令行运行的速度比在Eclipse中慢   java为什么HttpServletRequest会截断#字符上的url输入?   java自定义折叠工具栏平滑标题大小调整   使用Mockito对安卓 java中调用另一个静态函数的函数进行单元测试   http在java客户机中使用cachecontrol头   java如何使用。是否使用Delimiter从输入文件中排除标点符号和数字?   使用上下文作为参数/参数的java   java更有效地从Jar中提取文件   java为多个JButton提供相同的actionListener