深度学习实验工具箱

ludwig的Python项目详细描述


路德维希

简介

Ludwig是一个建立在TensorFlow之上的工具箱,它允许培训和测试深度学习模型,而无需编写代码。

您只需要提供一个包含数据的csv文件、一个用作输入的列列表和一个用作输出的列列表,ludwig将完成剩下的工作。 可以使用简单的命令在本地和分布式方式训练模型,并使用它们预测新数据。

为了使用python代码中的ludwig,还提供了编程api。 一套可视化工具允许您分析和比较模型的培训和测试性能。

Ludwig是根据可扩展性原则构建的,它基于数据类型抽象,便于添加对新数据类型和新模型架构的支持。

它可以被实践者用来快速地训练和测试深度学习模型,也可以被研究者用来获得强大的比较基线,并有一个实验设置,通过执行标准的数据预处理和可视化来确保可比性。

ludwig提供了一组模型架构,可以组合在一起为给定的用例创建端到端模型。以此类推,如果深度学习图书馆提供了建造您的建筑的积木,路德维希则提供了建造您的城市的建筑,您可以在可用建筑中进行选择,也可以将您自己的建筑添加到可用建筑的集合中。

我们加入工具箱的核心设计原则是:

  • 无需编码:培训模型并将其用于获取预测不需要编码技能。
  • 通用性:一种新的基于数据类型的深度学习模型设计方法,使该工具可用于许多不同的用例。
  • 灵活性:经验丰富的用户可以广泛地控制模型的建立和培训,而新手会发现它很容易使用。
  • 扩展性:易于添加新的模型架构和新的功能数据类型。
  • 可理解性:深度学习模型内部常常被认为是黑匣子,但是我们提供标准的可视化来理解它们的性能并比较它们的预测。
  • 开源:apache许可证2.0

安装

路德维希的要求如下:

  • 努比
  • 熊猫
  • scipy
  • SCIKIT学习
  • SCIKIT图像
  • 间距
  • 张量流
  • matplotlib
  • 肖伯恩
  • 赛顿
  • h5py
  • 全面质量管理
  • 制表
  • 皮亚姆

Ludwig是用Python3开发和测试的。 如果没有安装python 3,请运行以下命令安装:

sudo apt install python3  # on ubuntu
brew install python3      # on mac

您可能希望使用虚拟环境来维护隔离的python环境

要安装Ludwig,请运行:

pip install ludwig
python -m spacy download en

或者通过构建存储库中的源代码来安装它:

git clone https://github.com/uber/ludwig.git
cd ludwig
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.txt
python -m spacy download en
python setup.py install

请注意,在requirements.txt文件中,tensorflow包是常规包,而不是启用gpu的包。 要安装启用了GPU的GPU,请将其替换为tensorflow GPU

如果要以分布式方式培训ludwig模型,还需要安装horovodmpi4py包。 请按照horovod的存储库上的说明进行安装。

基本原则

ludwig提供了两个主要功能:训练模型和使用它们进行预测。 它基于数据类型抽象,因此在共享数据类型的不同数据集上执行相同的数据预处理和后处理,为一个任务开发的相同编码和解码模型可用于不同的任务。

在路德维希训练一个模特很简单:提供csv数据集和模型定义yaml文件。

模型定义包含输入特性和输出特性的列表,您只需指定CSV中输入到模型的列的名称及其数据类型,以及CSV中将要输出的列的名称,模型将要输出的目标变量学会预测。 路德维希将相应地构建一个深度学习模型,并为您进行培训。

目前Ludwig中可用的数据类型是:

  • 二进制
  • 数值
  • 类别
  • SE/
  • 顺序
  • 文本
  • 时间序列
  • 图像

模型定义可以包含额外的信息,特别是如何预处理csv中的每个列、每个列使用哪个编码器和解码器、特征超参数和训练参数。 这使新手易于使用,专家灵活。

培训

例如,给定如下文本分类数据集:

<表><广告>文档文本 类 < /广告><正文>前总统奥巴马…政治尤文图斯聘请了克里斯蒂亚诺·罗纳尔多……运动勒布朗·詹姆斯加入湖人……运动……

您需要学习一个模型,该模型使用doc\u文本列的内容作为输入来预测列中的值。 您可以使用以下模型定义:

{input_features:[{name:doc_text, type:text}], output_features:[{name:class, type:category}]}

然后开始训练,在控制台中键入以下命令:

ludwig train --data_csv path/to/file.csv --model_definition "{input_features: [{name: doc_text, type: text}], output_features: [{name: class, type: category}]}"

ludwig将对数据进行随机分割,对其进行预处理,建立一个wordcnn模型(文本特征的默认值),通过softmax分类器对输出类进行解码,在训练集上训练模型,直到验证集的精度停止提高。 训练进度将显示在控制台中,但也可以使用TensorBoard。

如果您更喜欢使用RNN编码器并增加您希望模型训练的时段数,您只需将模型定义更改为:

{input_features:[{name:doc_text, type:text, encoder:rnn}], output_features:[{name:class, type:category}], training:{epochs:50}}

请参阅《用户指南》以了解模型定义中提供的所有选项,并查看示例以了解如何使用ludwig几个不同的任务。

训练结束后,ludwig将在results下创建一个目录,其中包含训练模型及其超参数和训练过程的摘要统计信息。 您可以使用visualize工具中的几个可视化选项之一来可视化它们,例如:

ludwig visualize --visualization learning_curves --training_statistics path/to//training_statistics.json

这些命令将显示一个如下所示的图形,在该图形中,您可以看到损失和精度作为列车迭代次数的函数:

学习曲线

有多种可视化功能,请参阅可视化功能。

分布式培训

您可以使用horovod来分发您的模型培训,它允许在一台具有多个gpu的机器上以及在多台具有多个gpu的机器上进行培训。 有关详细信息,请参阅《用户指南》。

预测

如果你有新的数据并且你想要你的previo经过训练的模型可以预测目标输出值,您可以在控制台中键入以下命令:

ludwig predict --data_csv path/to/data.csv --model_path /path/to/model

如果数据集包含要比较的基本事实信息,则运行此命令将返回模型预测和一些测试性能统计信息。 这些可以通过visualize工具可视化,该工具还可以用于比较不同模型的性能和预测,例如:

ludwig visualize --visualization compare_performance --test_stats path/to/test_stats_model_1.json path/to/test_stats_model_2.json

将返回比较不同度量的模型的条形图:

性能比较

此外,还提供了一个方便的ludwig实验命令,该命令可以一个接一个地执行训练和预测。

编程API

ludwig还提供了一个简单的编程api,允许您训练或加载一个模型,并使用它获得对新数据的预测:

sudo apt install python3  # on ubuntu
brew install python3      # on mac
0

model_definition是包含yaml文件相同信息的字典。 有关更多详细信息,请参见用户指南和API文档中的。

可扩展性

路德维希是从头开始建造的,考虑到了可扩展性。 通过添加特定于数据类型的抽象类实现(包含预处理、编码和解码数据的函数),可以轻松添加其他数据类型。

此外,通过实现一个类,可以很容易地添加具有自己特定超参数的新模型,该类接受张量(根据数据类型,具有特定的秩)作为输入,并提供张量作为输出。 这鼓励重用和与社区共享新模型。 有关详细信息,请参阅《开发人员指南》。

完整文档

您可以在这里找到完整的文档

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

推荐PyPI第三方库


热门话题
java如何在windows上的eclipse中运行nutch 1.9?   登录JavaWebApp并显示jsp模板   Java测试字符串处理   java如何在MVC中为模型创建junit测试   java使用。替换密码   java如何在一个面板上添加3个不同的数字(垂直排列)?   JPanel和组合框上的java背景图像   java查找包含重复项的最小缺失数   你好。我是新来的。很抱歉我正在尝试让此文件读取器与构造函数一起运行。。。但坦率地说。它不起作用了   当我使用Intellij IDEA开发java程序时,总会有一个调试配置窗口。那我连编码都不会   使用改型响应时出现java空指针异常   Java如何获取没有全名的文件   java是否可以通过Selenium RC加载外部javascript?   java如何从另一个模块maven导入类   java JPanel的工作方式与它的设计预览不一样   java递归线性搜索堆栈溢出错误   java如何防止从一个数据库导出到另一个数据库时“自动编号”字段发生冲突?   JavaGoogleAppEngine推送任务始终返回405