精品文章,第一时间送达
转载自:机器之心,未经允许不得二次转载
TensorFlow 和 PyTorch 的框架之争愈演愈烈。二者各有优缺点,选择起来需要费一番脑筋。但是,有句话说得好,「小孩子才做选择,成年人全都要」。为此,来自Petuum Inc 和卡内基梅隆大学的研究者开源了一个通用机器学习包——Texar-PyTorch,结合了 TensorFlow 和 PyTorch 中的许多实用功能与特性。
-
数据:内置常用的预处理、创建批次(batching)、迭代、随机打乱方法。所有方法均采取最佳实践,并可以结合缓存与惰性加载达到高效率。该项目也实现了类似 TFRecord 的模块,以支持复杂类型的大型数据集。
-
模型模块:丰富的功能和完美的模块化的机器学习(ML)模型,比如统一接口的序列模型,包括用于文本生成的解码器、注意力机制(attention)和 RNN 等。
-
训练:开发者基于 TF Estimator 和 keras.Model 的高级 API,设计了更加灵活的训练模块。该模块集模型训练、评估、预测、TensorBoard 可视化于一体,并能与第三方的超参数调优工具完美结合。
-
最先进的模型构建模块—搭建 ML 模型就和搭积木一样,你可以随心所欲地替换模型模块。
-
简单而高效的数据处理—丰富的内置数据处理模块,适用于常见类型的数据集。用户可以利用简单的接口实现自定义数据处理模块,而无需担心性能问题。
-
一体化的自定义模型训练模块—不用再写千篇一律的训练代码,也不用为了简洁而牺牲可拓展性。
代码示例 1:使用 Texar-PyTorch 搭建并训练条件 GPT-2 模型 (用于摘要生成等任务)。
-
同时支持 TensorFlow & PyTorch。有时,你无法选择使用哪个底层框架,而学习新的工具包就和自己编写一样费时。现在,使用 Texar,你可以在这两个框架中使用几乎相同的接口,只需对代码进行最小限度的更改。两个版本的工具包还能共享下载的预训练模型权重。
-
一个工具包,覆盖所有自然语言处理任务。Texar 提供了自然语言处理任务(尤其是文本生成任务)中常用的大多数神经网络模型。图 1 给出了 Texar 各模块的简介。Texar 内置了最先进的预训练模型,同时还包括了数据处理、建模、训练和评估所需的各类实用方法。一切尽在 Texar 掌握中。
-
方便新手和行家。无论你是刚刚入门深度学习,还是一名经验丰富的研究员,Texar 都适合你。Texar 提供最先进的内置组件,同时具有足够的灵活性可以自定义。
图 1:Texar 为数据处理、模型架构、损失函数、训练、评估以及一系列先进的预训练 ML/NLP 模型 (例如,BERT, GPT-2 等) 提供了全套的模块。
-
通过简单地设置解码器参数 decoding_strategy=「train_greedy」,就可以方便地调用常用的解码策略,例如,teacher-forcing 方法。
-
另一方面,用户可以使用 Helper 类进行更复杂的解码策略,例如,用 GumbelSoftmaxHelper 在对抗学习中使用 Gumbel softmax 解码。经验丰富的用户可以进一步定义新的 Helper 类来定制任意解码策略。
代码示例 2:构建预训练的 GPT-2 语言模型,使用最大似然学习和对抗学习 (使用 BERT 作为判别器) 进行微调。
-
完美的模块化—通过简单地插入/交换几个模块,就可以在不同的使用场景之间进行切换。
-
多层级的接口—为新手用户提供高层级的简单 API,为专家用户提供底层级的自定义 API。
-
内置最先进的预训练模块—BERT, GPT-2, RoBERTa, XLNet 等,用于文本编码、分类、序列标记和生成等任务。
-
解耦单个实例预处理和批次构建 – 以获得更清晰的程序逻辑和更简便的自定义。
-
基于缓冲区的随机打乱、缓存和惰性加载 – 以提高效率。
-
通用的数据集迭代器 – 无需额外的用户配置。
-
更直观的 APIs – 在项目中获得最佳实践不需要任何专业知识。
-
每隔 logging_step 次迭代,在命令行、日志文件和 Tensorboard 上记录进度。
-
每隔`validate_steps`次迭代在验证集上评估模型,使用 BLEU 来评估模型性能。
-
如果验证结果有所改善,保存当前模型权重。如果连续`patience`次验证结果都没有改善,那么载入之前存储的模型权重,并调整学习率。
问:如果我们还想在每个周期结束后在验证集上评估呢?
答:只需将` validate_every` 更改为:
问:如果我们想在调整学习率`early_stop_patience`次后提前停止训练呢?
答:只需将`action_on_plateau`改为:
问:如果我们还想测量单词级别的损失呢?
答:只需在`valid_metrics`中添加一个新的度量即可:
问:如果我们想要进行超参数调优并多次训练模型,该怎么办?
答:只需为你想要测试的每一组超参数创建 Executor。由于 Executor 负责模型创建之外的所有进程,所以不需要担心消耗额外的内存或意外地保留以前运行的对象。这是一个在 Hyperopt 中使用 Executor 的示例。
问:如果在每个周期结束后,我们想把当前的模型权重上传到服务器,发送一封电子邮件汇报进度,然后出门去遛狗,该如何操作?
答:很奇怪,但没问题。只需在你选择的条件下注册一个自定义操作,并做你想做的任何事情:
-
文档:该项目对每个模块和功能都有详细的文档。
-
链接:https://texar-pytorch.readthedocs.io/en/latest/
-
示例:开发者强烈建议我们查看项目中的示例,以了解在实践中如何使用 Texar。这些示例都有明确的文档记录,涵盖了丰富的用例。
-
链接:https://github.com/asyml/texar-pytorch/blob/master/examples/README.md
-
ASYML 工具库:查找到所有 Texar 资源的快速链接。
-
链接:https://asyml.io/
你与世界只差一个
磐创AI
点击阅读原文,获得更多精彩内容
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2019/11/09/37915508b3/