TensorFlow Hub介紹:TensorFlow中可重用的機器學習模組庫

NO IMAGE

摘要: 本文對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模組時需要考慮幾個重要因素:首先,請記住模組包含的可執行的程式碼,一定要使用可信來源的模組;其次,正如所有的機器學習一樣,公平性是一個很重要的因素。

上面的兩個例子都使用了預先訓練好的大資料集。當重複使用這樣的資料集時,注意其包含的資料是否存在偏差,以及這些是如何影響正在構建的模型和使用者的。

原文連結
閱讀更多幹貨好文,請關注掃描以下二維碼:
圖片描述