PyText以PyTorch为基础进行语言识别

互联网2020-08-28 19:55:20
导读虽然深度神经网络风靡一时,但主要框架的复杂性已成为新机器学习用户使用的障碍。已经提出了几种用于构建神经网络模型的改进和简化的高级

虽然深度神经网络风靡一时,但主要框架的复杂性已成为新机器学习用户使用的障碍。已经提出了几种用于构建神经网络模型的改进和简化的高级API的建议,所有这些建议从远处看起来看起来相似但在仔细检查时显示出差异。

Keras是领先的高级神经网络API之一。它是用Python编写的,支持多个后端神经网络计算引擎。

鉴于TensorFlow项目已采用Keras作为即将推出的TensorFlow 2.0版本的高级API,Keras看起来是一个赢家,如果不一定是赢家。在本文中,我们将探讨Keras的原理和实现,着眼于理解为什么它是对低级深度学习API的改进。

即使在TensorFlow 1.12中,官方的TensorFlow入门教程也使用了TensorFlow中嵌入的高级Keras API,tf.keras。相比之下,TensorFlow Core API需要使用TensorFlow计算图,张量,操作和会话,当您刚刚开始使用TensorFlow时,其中一些很难理解。使用低级TensorFlow Core API有一些优点,主要是在调试时,但幸运的是,您可以根据需要混合使用高级和低级TensorFlow API。

Keras原则

Keras的创建是为了用户友好,模块化,易于扩展,并与Python一起使用。API是“为人类而不是机器设计的”,并且“遵循减少认知负荷的最佳实践”。

神经层,成本函数,优化器,初始化方案,激活函数和正则化方案都是独立模块,您可以将它们组合在一起以创建新模型。新模块很容易添加,作为新的类和函数。模型在Python代码中定义,而不是单独的模型配置文件。

为什么Keras?

使用Keras的最大原因源于其指导原则,主要是关于用户友好的原则。除了易于学习和简化模型构建之外,Keras还具有广泛采用的优势,支持广泛的生产部署选项,与至少五个后端引擎(TensorFlow,CNTK,Theano,MXNet和PlaidML)集成,并强烈支持多个GPU和分布式培训。此外,Keras还得到了谷歌,微软,亚马逊,苹果,Nvidia,优步等公司的支持。

Keras本身并不进行自己的低级操作,例如张量积和卷积; 它依赖于后端引擎。尽管Keras支持多个后端引擎,但其主要(和默认)后端是TensorFlow,其主要支持者是Google。Keras API打包在TensorFlow中tf.keras,如前所述,它将成为TensorFlow 2.0的主要TensorFlow API。

要更改后端,只需编辑$HOME/.keras/keras.json文件并指定其他后端名称,例如theano或CNTK。或者,您可以KERAS_BACKEND通过在shell中或使用os.environ["KERAS_BACKEND"]属性在Python代码中定义环境变量来覆盖已配置的后端。

Keras型号

该模型是Keras的核心数据结构。Keras中有两种主要的模型类型:Sequential模型,以及Model与功能API一起使用的类。

Keras顺序模型

该Sequential模型是层的线性堆栈,并且可以非常简单地描述层。以下是Keras文档中的一个示例,该文档用于model.add()在Sequential模型中定义两个密集层:

Facebook开源了PyText项目,这是一个用于自然语言处理(NLP)的机器学习库,旨在使实验项目和生产系统更容易组合在一起。

PyText是用Facebook现有的用于机器学习的PyTorch库构建的,并由公司内部使用,旨在解决如何使用神经网络(例如NLP)进行机器学习。他们在一篇文章中说,这些库通常是“在为实验优化的框架和为生产优化的框架之间进行权衡”。

为实验而构建的框架允许快速原型设计,但遭受“生产中延迟和内存使用增加”,Facebook的工程师写道。另一方面,为生产而构建的框架在负载下工作得更好,但更难以快速开发。

PyText的主要区别在于其工作流程,Facebook声称可以针对实验或生产使用进行优化。可以将框架的组件拼接在一起以创建整个NLP管道,或者可以在其他上下文中分解和重用各个部分。

训练新模型可以分布在多个节点上,并且可以同时训练多个模型。PyText还可以使用许多现有模型进行文本分类,完全不需要在这些情况下进行培训。

PyText还通过上下文模型提高了理解能力,这是一种丰富模型对以前输入文本的理解的方法。例如,聊天机器人可以在讨论中重用早期消息中的信息来塑造其答案。

PyText中的一个功能显示了由Python驱动的机器学习系统如何找到避免语言可能出现的性能问题的方法。PyText模型可以以优化的ONNX格式导出,以便使用Caffe2进行快速推理。这样,推理过程不受Python运行时的限制,但Python仍然用于组装管道和编排模型训练。

PyTorch本身最近获得了正式的1.0版本,其自身的功能部分旨在加速训练和推理,而不受Python的限制。其中之一,Torch Script,及时编译Python代码以加速其执行,但它只能用于语言的一个子集。

PyText的近期计划包括“支持多语言建模和其他建模功能,使模型更易于调试,并为分布式培训添加进一步优化”,Facebook的工程师说。

上面代码中的注释值得一读。还有一点值得注意的是,与低级TensorFlow API相比,实际代码中有多少。每个层定义需要一行代码,编译(学习过程定义)需要一行代码,拟合(训练),评估(计算损失和度量),以及预测训练模型的输出每行需要一行代码。

Keras功能API

Keras Sequential模型很简单,但在模型拓扑中受到限制。所述Keras功能API是用于与共享层创建复杂的模型,如多输入/多输出模式,有向非循环图(DAG),和模型是有用的。

功能API使用与Sequential模型相同的层,但在将它们组合在一起时提供了更大的灵活性。在功能API中,首先定义图层,然后创建模型,编译它,然后拟合(训练)它。评估和预测与Sequential模型基本相同,因此在下面的示例代码中已省略。

在前面的例子中,我们只使用了Dense图层。Keras有多种预定义的图层类型,还支持编写自己的图层。

核心层包括Dense(点积加偏差),Activation(传递函数或神经元形状),Dropout(在每次训练更新时随机将输入单位的一部分设置为0以避免过度拟合),Lambda(将任意表达式包装为Layer对象),以及其他几个。卷积层(使用滤波器创建要素图)从1D到3D运行,包括最常见的变体,例如每个维度的裁剪和转置卷积层。2D卷积受到视觉皮层功能的启发,通常用于图像识别。

池(缩减)层从1D到3D运行并包括最常见的变体,例如最大和平均池。局部连接的层就像卷积层一样,除了权重是非共享的。循环层包括简单(完全连接的重复),门控,LSTM等; 这些对于语言处理以及其他应用程序非常有用。噪声层有助于避免过度拟合。

Keras通过keras.datasets课程提供了七个常见的深度学习样本数据集。这包括cifar10和cifar100小彩色图像,IMDB电影评论,路透社新闻专题,MNIST手写数字,MNIST时尚图片和波士顿房价。

Keras还提供十种着名的模型,称为Keras应用程序,预先针对ImageNet:Xception,VGG16,VGG19,ResNet50,InceptionV3,InceptionResNetV2,MobileNet,DenseNet,NASNet,MobileNetV2TK。您可以使用它们来预测图像的分类,从中提取特征,以及在不同的类集上微调模型。

顺便说一句,微调现有模型是加速培训的好方法。例如,您可以根据需要添加图层,冻结基础图层以训练新图层,然后解冻一些基础图层以微调培训。您可以通过设置冻结图层layer.trainable = False。

该Keras实例库包含超过40个样本模型。它们涵盖了视觉模型,文本和序列以及生成模型。

免责声明:本文由用户上传,如有侵权请联系删除!