摘要: 本文对TensorFlow Hub库的介绍,并举例说明其用法。
在软件开发中,最常见的失误就是容易忽视共享代码库,而库则能够使软件开发具有更高的效率。从某种意义上来说,它改变了编程的过程。我们常常使用库构建块或模块,并将其连接在一起进行编程。
开发人员是如果使用库的呢?除了共享代码之外,我们还可以共享预训练模型。共享预训练模型能够使开发人员有针对性的开发该模型,而不需要访问计算资源或手头上用于训练模型的原始数据。例如,NASNet架构在GPU上花费数千个小时进行训练。通过共享学习到的权重,其他开发人员就能够更容易重用库和构建模型或架构。
机器学习模型内部的“组成部分”,可以使用TensorFlow Hub进行打包和共享。从某种意义上来讲,除了架构本身,共享预先训练好的模型的同时,也共享了开发模型的计算时间和数据集。
为机器学习开发者提供库产生了TensorFlow Hub库。TensorFlow Hub库是一个在TensorFlow中进行发布和重用中机器学习模块的平台。我们可以在其他类似的任务中重复使用一个模块(一个TensorFlow的独立片段及其权重)。 开发人员也可以重用一个模块使用一个更小的数据集来训练模型,来提高泛化或加快训练速度。下面来看几个具体的例子。
图像再训练
首先,我们从少量的训练数据开始——图像分类器。现代图像识别模型具有数百万个参数,如果从头开始训练,就需要大量的标记数据和计算能力。使用图像再训练技术,就可以使用很少的数据来训练模型,并且计算时间也少得多。以下是TensorFlow Hub的外观。
其基本思想是,用一个现成的图像识别模块从图像中提取特征训练一个新的分类器。正如你所看到的一样,TensorFlow Hub模块可以在构建TensorFlow图时通过URL(或文件路径)进行实例化。TensorFlow Hub上有多种模块可供选择,包括NASNet、MobileNet(包括其最近的V2)、Inception、ResNet等。想要使用某一模块,首先导入TensorFlow Hub,然后将模块的URL地址复制/粘贴到代码中即可。
TensorFlow Hub上提供的图像模块
每个模块都有一个已定义的接口,在不了解其内在结构的情况下,也能够替换使用。这个模块提供了一个检索预期图像大小的方法:只需提供一组有正确形状的图像,然后调用该模块来检索图像的特征表示。该模块负责对图像进行预处理,可以直接将图像转换为其特征表示,然后再构建一个线性模型或其他类型的分类器。
请注意,我们使用的模块是由Google开发的,并且是版本化的(因此模块在实验中不会改变)。和普通Python函数一样,我们也可以使用该模块来构建模型的一部分。一旦导出到磁盘,模块是独立的,无需访问创建和训练该模块的代码和数据(也可以发布代码和数据),也能供其他人所使用。
文本分类
现在你想训练一个模型:将电影评论分为正面或负面,但是只有少量的训练数据(比如只有几百个正面和负面的电影评论)。由于训练数据有限,因此你打算使用以前在大得多的语料库上训练过的词嵌入数据集。以下是使用TensorFlow Hub思路。
同样,首先选择一个模块。TensorFlow Hub提供了多种文本模块,包括基于各种语言(EN,JP,DE和ES)的神经网络语言模型,在维基百科上训练的Word2vec模型和在Google新闻上训练的NNLM嵌入。
在TensorFlow Hub上的一些文本模块
在这里,我们使用一个模块来进行文本嵌入。使用上面的代码下载一个模块,用来对一个句子进行预处理,然后检索每个块的嵌入,这就意味着可以直接将数据集中的句子转换为适合分类器的格式。该模块负责标记句子和其他逻辑(如处理词典外的单词)。预处理逻辑和嵌入都封装在一个模块中,使在各种不同的数据集上的文字嵌入和预处理策略变得更加容易,而不必对代码进行大幅度的变动。
使用TensorFlow Hub的文本分类教程
通用句子编码器
我们还分享了一个新的TensorFlow Hub模块!下面是通用句子编码器。它是在各种各样的数据集(“通用”)上训练的句级嵌入模块。其功能是语义相似性、自定义文本分类和聚类。
这篇文章展示了如何在任何一个可嵌入句子的TF-Hub模块上训练一个简单的二进制文本分类器。
如在图像再训练中,使用相对较少的标记数据使模块适应某一任务,如餐厅评论。查看本教程以了解更多信息。
其他模块
TensorFlow Hub不仅仅是图像和文本分类。用于Progressive GAN和Google地标深层特征的其他模块请查看链接。
注意事项
使用TensorFlow Hub模块时需要考虑几个重要因素:首先,请记住模块包含的可运行的代码,一定要使用可信来源的模块;其次,正如所有的机器学习一样,公平性是一个很重要的因素。
上面的两个例子都使用了预先训练好的大数据集。当重复使用这样的数据集时,注意其包含的数据是否存在偏差,以及这些是如何影响正在构建的模型和用户的。
原文链接
干货好文,请关注扫描以下二维码: