在軟件開發(fā)中容易被忽視的重要事情之一是共享代碼存儲庫的想法。作為程序員,充分利用第三方庫使開發(fā)更高效。從某種意義上說,他們改變了軟件的開發(fā)過程。
機器學(xué)習(xí)開發(fā)者如何尋找滿足自己需求的第三方庫?當(dāng)然,除了共享代碼之外,我們還想分享預(yù)訓(xùn)練模型。共享預(yù)訓(xùn)練模型使開發(fā)人員可以根據(jù)不用領(lǐng)域、不用場景進(jìn)行自定義,而無需訪問計算資源或用于訓(xùn)練原始模型的數(shù)據(jù)。例如,NASNet 需要數(shù)千小時進(jìn)行模型訓(xùn)練。通過共享學(xué)習(xí)的權(quán)重,模型開發(fā)人員可以使其他人更容易重用和構(gòu)建工作。
機器學(xué)習(xí)模型的 “成分” 被打包,并通過 TensorFlow Hub 進(jìn)行共享 。從某種意義上說,除了架構(gòu)本身之外,共享預(yù)先訓(xùn)練的模型還共享用于開發(fā)模型所用的計算時間和數(shù)據(jù)集。
TensorFlow Hub 專門為機器學(xué)習(xí)開發(fā)者提供第三方庫。在本文中,我們將簡單介紹 TensorFlow Hub 中常用的幾種庫。TensorFlow Hub 是一個平臺,主要被用于發(fā)布、發(fā)現(xiàn)和重用機器學(xué)習(xí)模塊。一個模塊,我們指的是 TensorFlow 圖形的一個獨立部分及其權(quán)重,可以在其他類似任務(wù)中重復(fù)使用。通過重用模塊,開發(fā)人員可以使用較小的數(shù)據(jù)集訓(xùn)練模型,提升泛化能力或簡單地加速訓(xùn)練。讓我們看幾個例子來說明這一點。
圖像再訓(xùn)練
作為第一個例子,讓我們看一下可以用來訓(xùn)練圖像分類器的技術(shù),僅從少量訓(xùn)練數(shù)據(jù)開始。現(xiàn)代圖像識別模型具有數(shù)百萬個參數(shù),當(dāng)然,從頭開始訓(xùn)練需要大量標(biāo)記數(shù)據(jù)和計算能力。使用稱為圖像重新訓(xùn)練的技術(shù),您可以使用更少量的數(shù)據(jù)訓(xùn)練模型,并且使用更少的計算時間。如下所示:
1# Download and use NASNet feature vector 2module.
3module = hub.Module(
4“https://tfhub.dev/google/imagenet/nasnet_large/feature_vector/1")
5features = module(my_images)
6logits = tf.layers.dense(features, NUM_CLASSES)
probabilities = tf.nn.softmax(logits)
基本思想是重用現(xiàn)有的圖像識別模塊從圖像中提取特征,然后在這些特征之上訓(xùn)練新的分類器。如您所見,在構(gòu)造 TensorFlow 圖時,可以從 URL(或從文件系統(tǒng)路徑)實例化 TensorFlow Hub 模塊。
TensorFlow Hub 上有多種模塊供您選擇,包括 NASNet,MobileNet(包括最近的 V2),Inception,ResNet 等。要使用模塊,請導(dǎo)入 TensorFlow Hub,然后將模塊的 URL 復(fù)制/粘貼到代碼中。

每個模塊都定義了接口,我們可以在很少或根本不了解其內(nèi)部的情況下以可替換的方式使用。在這種情況下,此模塊有一個方法可用于獲取預(yù)期的圖像大小。作為開發(fā)人員,您只需要提供正確形狀的一批圖像,并調(diào)用模塊以獲取特征表示。此模塊負(fù)責(zé)為您預(yù)處理圖像,因此您可以在一個步驟中直接從一批圖像轉(zhuǎn)到特征表示。從這里開始,您可以在這些基礎(chǔ)上學(xué)習(xí)線性模型或其他類型的分類器。
請注意我們正在使用的模塊由 Google 托管,并且已經(jīng)進(jìn)行版本控制。模塊可以像普通的 Python 函數(shù)一樣應(yīng)用,以構(gòu)建圖形的一部分。一旦導(dǎo)出到磁盤,模塊就是自包含的,并且可以被其他人使用而無需訪問用于創(chuàng)建和訓(xùn)練它的代碼和數(shù)據(jù)。
文本分類
我們來看看第二個例子。想象一下,你想訓(xùn)練一個模型,將電影評論分類為正面或負(fù)面,從少量的訓(xùn)練數(shù)據(jù)開始(比如幾百個正面和負(fù)面的電影評論)。由于您的示例數(shù)量有限,因此您決定利用先前在更大的語料庫中訓(xùn)練的單詞嵌入數(shù)據(jù)集。如下所示:
1# Download a module and use it to retrieve word embeddings.
2embed = hub.Module(“https://tfhub.dev/google/nnlm-en-dim50/1")
3embeddings = embed([“The movie was great!”])
和以前一樣,我們首先選擇一個模塊。TensorFlow Hub 有多種文本模塊供您探索,包括各種語言的神經(jīng)網(wǎng)絡(luò)語言模型,以及在維基百科上訓(xùn)練的 Word2vec,以及在 Google 新聞上訓(xùn)練的 NNLM。

在這種情況下,我們將使用一個模塊進(jìn)行字嵌入。上面的代碼下載一個模塊,用它來預(yù)處理一個句子,然后獲取每個標(biāo)記的嵌入。
這意味著您可以直接從數(shù)據(jù)集中的句子轉(zhuǎn)換為適合分類器的格式。該模塊負(fù)責(zé)對句子進(jìn)行標(biāo)記,以及其他邏輯。預(yù)處理邏輯和嵌入都封裝在一個模塊中,可以更輕松地試驗各種單詞嵌入數(shù)據(jù)集或不同的預(yù)處理策略,而無需大幅更改代碼。

如果您想嘗試,請使用本教程進(jìn)行操作,并了解 TensorFlow Hub 模塊如何與 TensorFlow Estimators 配合使用。
注:教程鏈接
https://www.tensorflow.org/hub/tutorials/text_classification_with_tf_hub
通用句子編碼器
我們還分享了一個新的 TensorFlow Hub 模塊!下面是使用 Universal Sentence Encoder 的示例。它是一個句子級嵌入模塊,適用于各種數(shù)據(jù)集。它擅長語義相似性,自定義文本分類和聚類。

與圖像再訓(xùn)練一樣,需要相對較少的標(biāo)記數(shù)據(jù)使模塊適應(yīng)特定的任務(wù)。如下所示:
1# Use pre-trained universal sentence encoder to build text vector
2review = hub.text_embedding_column(
3“review”, “https://tfhub.dev/google/universal-sentence-encoder/1")
4features = {
5“review”: np.array([“this movie is a masterpiece”, “this movie was terrible”, …])
6}
7labels = np.array([[1], [0], …])
8input_fn = tf.estimator.input.numpy_input_fn(features, labels, shuffle=True)
9estimator = tf.estimator.DNNClassifier(hidden_units, [review])
10estimator.train(input_fn, max_steps=100)
查看本教程以了解更多信息。
注:教程鏈接
https://www.tensorflow.org/hub/tutorials/text_classification_with_tf_hub
其他模塊
TensorFlow Hub 不僅僅有圖像和文本分類庫。在網(wǎng)站上,你還可以找到幾個 Progressive GAN 模型和 Google Landmarks Deep Local Features.
注意事項
使用 TensorFlow Hub 模塊時有幾個重要注意事項。首先,請記住模塊包含可運行的代碼。并始終使用受信任來源的模塊。其次,與所有機器學(xué)習(xí)一樣,fairness 是一個重要的考慮因素。我們上面展示的兩個示例都利用了大量預(yù)先訓(xùn)練的數(shù)據(jù)集。重用這樣的數(shù)據(jù)集時,重要的是要注意它包含哪些數(shù)據(jù),以及它們?nèi)绾斡绊懩跇?gòu)建的產(chǎn)品及其用戶。
-
分類器
+關(guān)注
關(guān)注
0文章
153瀏覽量
13786 -
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8553瀏覽量
136931 -
tensorflow
+關(guān)注
關(guān)注
13文章
334瀏覽量
62177
原文標(biāo)題:TensorFlow Hub:可重用的機器學(xué)習(xí)模型庫
文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
機器學(xué)習(xí)開發(fā)者如何尋找滿足自己需求的第三方庫?
評論