前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不用写代码,就能训练测试深度学习模型!Uber开源AI工具箱Ludwig

不用写代码,就能训练测试深度学习模型!Uber开源AI工具箱Ludwig

作者头像
量子位
发布2019-03-08 11:03:07
9670
发布2019-03-08 11:03:07
举报
文章被收录于专栏:量子位量子位
乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAI

让代码的归代码,让AI的归AI。

在不写代码就能进行AI开发的道路上,Uber今日又往前踏了一步。

刚刚,Uber宣布开源Ludwig,一个基于TensorFlow的工具箱。

有了它,不用写代码就能够训练和测试深度学习模型。

Uber表示,对于AI开发者来说,Ludwig可以帮助他们更好地理解深度学习方面的能力,并能够推进模型快速迭代。

对于AI专家来说,Ludwig可以简化原型设计和数据处理过程,从而让他们能够专注于开发深度学习模型架构。

训练只需数据文件和配置文件

Ludwig提供了一套AI架构,可以组合起来,为给定的用例创建端到端的模型。

开始模型训练,只需要一个表格数据文件(如CSV)和一个YAML配置文件——用于指定数据文件中哪些列是输入特征,哪些列是输出目标变量。

如果指定了多个输出变量,Ludwig将学会同时预测所有输出。

使用Ludwig训练模型,在模型定义中可以包含附加信息,比如数据集中每个特征的预处理数据和模型训练参数, 也能够保存下来,可以在日后加载,对新数据进行预测。

灵活组合,适用多种任务

对于Ludwig支持的数据类型(文本、图像、类别等),其提供了一个将原始数据映射到张量的编码器,以及将张量映射到原始数据的解码器。张量是线性代数中使用的数据结构。

内置的组合器,能够自动将所有输入编码器的张量组合在一起,对它们进行处理,并将其返回给输入解码器。

Uber表示,通过组合这些特定于数据类型的组件,用户可以将Ludwig用于各种任务。比如,组合文本编码器和类别解码器,就可以获得一个文本分类器。

每种数据类型有多个编码器和解码器。例如,文本可以用卷积神经网络(CNN),循环神经网络(RNN)或其他编码器编码。

用户可以直接在模型定义文件中指定要使用的参数和超参数,而无需编写单行代码。

基于这种灵活的编码器-解码器架构,即使是经验较少的深度学习开发者,也能够轻松地为不同的任务训练模型。

比如文本分类、目标分类、图像字幕、序列标签、回归、语言建模、机器翻译、时间序列预测和问答等等。

多种功能,不断拓展

为了让工具变得更好用,Ludwig还提供了各种工具:

  • 用于训练、测试模型和获得预测的命令行程序;
  • 用于评估模型并通过可视化比较预测结果的工具;
  • 用于用户训练或加载模型,并获得对新数据预测的Python编程API。

此外,Ludwig还能够使用开源分布式培训框架Horovod,在多个GPU上训练模型,并快速迭代。

目前,Ludwig有用于二进制值,浮点数,类别,离散序列,集合,袋(bag),图像,文本和时间序列的编码器和解码器,并且支持选定的预训练模型。

Uber表示,未来将为每种数据类型添加几个新的编码器,比如用于文本的Transformer,ELMo和BERT,以及用于图像的DenseNet和FractalNet。

还将添加其他的数据类型,比如音频、点云和图形,同时集成更多可扩展的解决方案来管理大数据集,如Petastorm。

来个例子,上手看看

在这个例子中, 训练的是一个根据书名、作者、描述和封面来预测一本书的类型和价格的模型。数据集的形式如下所示:

模型使用书名、作者、描述和封面来作为输入,类型和价格作为输出,模型的配置文件是这样的:

代码语言:javascript
复制
input_features:
 –
  name: title
  type: text
 –
  name: author
  type: category
 –
  name: description
  type: text
 –
  name: cover
  type: image
output_features:
 –
  name: genre
  type: category
 –
  name: price
  type: numerical
training:
 epochs: 10

然后输入在控制台中,输入下列命令,开始训练。

代码语言:javascript
复制
ludwig train –data_csv path/to/file.csv –model_definition_file model_definition.yaml

然后,Ludwig会在训练、验证和测试集中对数据进行随机分割,进行预处理,并为四个输入建立四个不同的编码器,为两个输出目标建立一个组合器和两个解码器。

并在训练集上训练模型,直到验证集的精确度停止提高或者达到十个训练周期。

默认情况下,文本特征由CNN编码器编码,但是也可以使用RNN编码器,使用状态大小为200的双向LSTM来编码书名。

我们只需要将书名编码器的定义更改为下面这样:

代码语言:javascript
复制
name: title
type: text
encoder: rnn
cell_type: lstm
bidirectional: true

如果想改变训练参数,如周期数、学习率和批尺寸(batch size),可以这样改变模型配置:

代码语言:javascript
复制
input_features:
 – …
output_features:
 – …
training:
 epochs: 100
 learning_rate: 0.001
 batch_size: 64

训练结束之后,可以将训练的结果可视化,比如下图这样,显示训练周期中函数的损失和准确性。

也能够使用模型去预测新数据的结果,如果数据集中有ground truth信息,还能够进行对比,结果如下图所示:

此外,Ludwig还会提供一个简单的Python编程API,用户可以用它来训练或加载一个模型,并使用它来获得对新数据的预测,在这个例子中,代码如下所示:

代码语言:javascript
复制
from ludwig import LudwigModel

# train a model
model_definition = {…}
model = LudwigModel(model_definition)
train_stats = model.train(training_dataframe)
# or load a model
model = LudwigModel.load(model_path)

# obtain predictions
predictions = model.predict(test_dataframe)

model.close()

各种操作指南,在Uber提供的Ludwig用户指南中都有详细介绍,请收好传送门:

用户指南:

https://uber.github.io/ludwig/user_guide/

GitHub项目地址:

https://github.com/uber/ludwig

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子位 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 训练只需数据文件和配置文件
  • 灵活组合,适用多种任务
  • 多种功能,不断拓展
  • 来个例子,上手看看
相关产品与服务
机器翻译
机器翻译(Tencent Machine Translation,TMT)结合了神经机器翻译和统计机器翻译的优点,从大规模双语语料库自动学习翻译知识,实现从源语言文本到目标语言文本的自动翻译,目前可支持十余种语言的互译。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档