深度学习实验工具箱
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模型,还需要安装horovod
和mpi4py
包。
请按照horovod的存储库上的说明进行安装。
基本原则
ludwig提供了两个主要功能:训练模型和使用它们进行预测。 它基于数据类型抽象,因此在共享数据类型的不同数据集上执行相同的数据预处理和后处理,为一个任务开发的相同编码和解码模型可用于不同的任务。
在路德维希训练一个模特很简单:提供csv数据集和模型定义yaml文件。
模型定义包含输入特性和输出特性的列表,您只需指定CSV中输入到模型的列的名称及其数据类型,以及CSV中将要输出的列的名称,模型将要输出的目标变量学会预测。 路德维希将相应地构建一个深度学习模型,并为您进行培训。
目前Ludwig中可用的数据类型是:
- 二进制
- 数值
- 类别
袋 - 顺序
- 文本
- 时间序列
- 图像
模型定义可以包含额外的信息,特别是如何预处理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文档中的。
可扩展性
路德维希是从头开始建造的,考虑到了可扩展性。 通过添加特定于数据类型的抽象类实现(包含预处理、编码和解码数据的函数),可以轻松添加其他数据类型。
此外,通过实现一个类,可以很容易地添加具有自己特定超参数的新模型,该类接受张量(根据数据类型,具有特定的秩)作为输入,并提供张量作为输出。 这鼓励重用和与社区共享新模型。 有关详细信息,请参阅《开发人员指南》。