0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在TensorFlow中訓(xùn)練嵌入

Tensorflowers ? 來源:lq ? 2018-12-19 14:25 ? 次閱讀

今天的文章介紹了嵌入這一概念,并且舉了一個簡單的例子來說明如何在 TensorFlow 中訓(xùn)練嵌入,此外還說明了如何使用 TensorBoard Embedding Projector 查看嵌入(真實示例http://projector.tensorflow.org/?hl=zh-CN)。前兩部分適合機器學(xué)習(xí)或 TensorFlow 新手,而 Embedding Projector 指南適合各個層次的用戶。

有關(guān)這些概念的另一個教程,請參閱《機器學(xué)習(xí)速成課程》的 “嵌入” 部分(https://developers.google.cn/machine-learning/crash-course/embeddings/video-lecture?hl=zh-CN)。

嵌入是從離散對象(例如字詞)到實數(shù)向量的映射。例如,英語字詞的 300 維嵌入可能包括:

blue: (0.01359, 0.00075997, 0.24608, ..., -0.2524, 1.0048, 0.06259)blues: (0.01396, 0.11887, -0.48963, ..., 0.033483, -0.10007, 0.1158)orange: (-0.24776, -0.12359, 0.20986, ..., 0.079717, 0.23865, -0.014213)oranges: (-0.35609, 0.21854, 0.080944, ..., -0.35413, 0.38511, -0.070976)

這些向量中的各個維度通常沒有固有含義,機器學(xué)習(xí)所利用的是向量的位置和相互之間的距離這些整體模式。

嵌入對于機器學(xué)習(xí)的輸入非常重要。分類器(更籠統(tǒng)地說是神經(jīng)網(wǎng)絡(luò))適用于實數(shù)向量。它們訓(xùn)練密集向量時效果最佳,其中所有值都有助于定義對象。不過,機器學(xué)習(xí)的很多重要輸入(例如文本的字詞)沒有自然的向量表示。嵌入函數(shù)是將此類離散輸入對象轉(zhuǎn)換為有用連續(xù)向量的標(biāo)準(zhǔn)和有效方法。

嵌入作為機器學(xué)習(xí)的輸出也很有價值。由于嵌入將對象映射到向量,因此應(yīng)用可以將向量空間中的相似性(例如歐幾里德距離或向量之間的角度)用作一項強大而靈活的標(biāo)準(zhǔn)來衡量對象相似性。一個常見用途是找到最近的鄰點。例如,下面是采用與上述相同的字詞嵌入后,每個字詞的三個最近鄰點和相應(yīng)角度:

blue: (red, 47.6°), (yellow, 51.9°), (purple, 52.4°)blues: (jazz, 53.3°), (folk, 59.1°), (bluegrass, 60.6°)orange: (yellow, 53.5°), (colored, 58.0°), (bright, 59.9°)oranges: (apples, 45.3°), (lemons, 48.3°), (mangoes, 50.4°)

這樣應(yīng)用就會知道,在某種程度上,蘋果和橙子(相距 45.3°)的相似度高于檸檬和橙子(相距 48.3°)。

TensorFlow 中的嵌入

要在 TensorFlow 中創(chuàng)建字詞嵌入,我們首先將文本拆分成字詞,然后為詞匯表中的每個字詞分配一個整數(shù)。我們假設(shè)已經(jīng)完成了這一步,并且word_ids是這些整數(shù)的向量。例如,可以將 “I have a cat.” 這個句子拆分成[“I”, “have”, “a”, “cat”, “.”],那么相應(yīng)word_ids張量的形狀將是[5],并且包含 5 個整數(shù)。為了將這些字詞 ID 映射到向量,我們需要創(chuàng)建嵌入變量并使用tf.nn.embedding_lookup函數(shù),如下所示:

word_embeddings = tf.get_variable(“word_embeddings”, [vocabulary_size, embedding_size])embedded_word_ids = tf.nn.embedding_lookup(word_embeddings, word_ids)

完成此操作后,示例中張量embedded_word_ids的形狀將是[5, embedding_size],并且包含全部 5 個字詞的嵌入(密集向量)。在訓(xùn)練結(jié)束時,word_embeddings將包含詞匯表中所有字詞的嵌入。

嵌入可以通過很多網(wǎng)絡(luò)類型進行訓(xùn)練,并具有各種損失函數(shù)和數(shù)據(jù)集。例如,對于大型句子語料庫,可以使用遞歸神經(jīng)網(wǎng)絡(luò)根據(jù)上一個字詞預(yù)測下一個字詞,還可以訓(xùn)練兩個網(wǎng)絡(luò)來進行多語言翻譯。字詞的向量表示教程中介紹了這些方法。

直觀顯示嵌入

TensorBoard 包括Embedding Projector,這是一款可讓您以交互的方式直觀顯示嵌入的工具。此工具可以讀取模型中的嵌入,并以二維或三維方式渲染這些嵌入。

Embedding Projector 具有三個面板:

數(shù)據(jù)面板:位于左上方,您可以在其中選擇運行、嵌入變量和數(shù)據(jù)列,以對點進行著色和標(biāo)記

投影面板:位于左下方,您可以在其中選擇投影類型

檢查工具面板:位于右側(cè),您可以在其中搜索特定點并查看最近鄰點的列表

投影

Embedding Projector 提供三種方法來降低數(shù)據(jù)集的維度。

t-SNE:一種非線性不確定性算法(T 分布式隨機鄰點嵌入),它會嘗試保留數(shù)據(jù)中的局部鄰點,通常以扭曲全局結(jié)構(gòu)為代價。您可以選擇是計算二維還是三維投影。

PCA:一種線性確定性算法(主成分分析),它嘗試用盡可能少的維度捕獲盡可能多的數(shù)據(jù)可變性。PCA 會突出數(shù)據(jù)中的大規(guī)模結(jié)構(gòu),但可能會扭曲本地鄰點。Embedding Projector 會計算前 10 個主成分,您可以從中選擇兩三個進行查看。

自定義:線性投影到您使用數(shù)據(jù)中的標(biāo)簽指定的水平軸和垂直軸上。例如,您可以通過為 “左” 和 “右” 指定文本格式來定義水平軸。Embedding Projector 會查找標(biāo)簽與 “左” 格式相匹配的所有點,并計算這些點的形心;“右” 格式與此類似。穿過這兩個形心的線定義了水平軸。同樣地,計算與 “上” 和 “下” 文本格式相匹配的點的形心可定義垂直軸。

要查看其他實用文章,請參閱如何有效使用 t-SNE和直觀介紹主成分分析。

探索

您可以使用自然的點擊并拖動手勢來縮放、旋轉(zhuǎn)和平移,從而進行直觀探索。將鼠標(biāo)懸停在某個點上即可看到該點的所有元數(shù)據(jù)。您還可以檢查最近的鄰點子集。點擊某個點以后,右窗格中會列出最近的領(lǐng)點,以及到當(dāng)前點的距離。投影中還會突出顯示最近的鄰點。

有時,將視圖限制為點的子集并僅投影這些點非常有用。要執(zhí)行此操作,您可以通過多種方式選擇點:

點擊某個點之后,其最近的鄰點也會處于選中狀態(tài)

搜索之后,與查詢匹配的點會處于選中狀態(tài)

啟用選擇,點擊某個點并拖動可定義選擇范圍

然后,點擊右側(cè)檢查工具窗格頂部的 “隔離 nnn 個點” 按鈕。下圖顯示已選擇 101 個點,因此用戶可以點擊 “隔離 101 個點”:

在字詞嵌入數(shù)據(jù)集中選擇 “重要” 一詞的最近鄰點

高級技巧:使用自定義投影進行過濾可能會非常有用。我們在下圖中濾出了 “政治” 一詞的 100 個最近鄰點,并將它們投影到 “最差” - “最優(yōu)” 向量上作為 x 軸。y 軸是隨機的。這樣一來,我們可以發(fā)現(xiàn) “想法”、“科學(xué)”、“視角”、“新聞” 這些字詞位于右側(cè),而 “危機”、“暴力” 和 “沖突” 這些字詞位于左側(cè)。

自定義投影控件。 “政治” 的鄰點到 “最優(yōu)” - “最差” 向量的自定義投影

要分享您的發(fā)現(xiàn),可以使用右下角的書簽面板并將當(dāng)前狀態(tài)(包括任何投影的計算坐標(biāo))保存為小文件。接著可以將 Projector 指向一個包含一個或多個這些文件的集合,從而生成下面的面板。然后,其他用戶就可以查看一系列書簽。

元數(shù)據(jù)

如果您使用嵌入,則可能需要向數(shù)據(jù)點附加標(biāo)簽/圖片。您可以通過生成一個元數(shù)據(jù)文件(其中包含每個點的標(biāo)簽),并在 Embedding Projector 的數(shù)據(jù)面板中點擊 “加載數(shù)據(jù)” 來完成此操作。

元數(shù)據(jù)可以是標(biāo)簽,也可以是圖片,它們存儲在單獨的文件中。如果是標(biāo)簽,則格式應(yīng)該是TSV 文件(制表符顯示為紅色),其中第一行包含列標(biāo)題(以粗體顯示),而后續(xù)行包含元數(shù)據(jù)值。例如:

Word FrequencyAirplane 345Car 241...

假設(shè)元數(shù)據(jù)文件中的行順序與嵌入變量中的向量順序相匹配,但標(biāo)題除外。那么,元數(shù)據(jù)文件中的第 (i+1) 行對應(yīng)于嵌入變量的第 i 行。如果 TSV 元數(shù)據(jù)文件僅有一列,那么不會有標(biāo)題行,并且假設(shè)每行都是嵌入的標(biāo)簽。我們之所以包含此例外情況,是因為它與常用的“詞匯表文件”格式相匹配。

要將圖片用作元數(shù)據(jù),您必須生成一個sprite 圖片,其中包含小縮略圖,嵌入中的每個向量都有一個小縮略圖。sprite 應(yīng)該按照行在前的順序存儲縮略圖:將第一個數(shù)據(jù)點放置在左上方,最后一個數(shù)據(jù)點放在右下方,但是最后一行不必填充,如下所示。

點擊 此鏈接 可查看 Embedding Projector 中的一個有趣縮略圖示例(https://tensorflow.google.cn/images/embedding-mnist.mp4?hl=zh-CN)。

迷你版常見問題解答

“嵌入” 是一種操作還是一種事物?都是。人們一直說的是在向量空間中嵌入字詞(操作),以及生成字詞嵌入(事物)。兩者的共同點在于嵌入這一概念,即從離散對象到向量的映射。創(chuàng)建或應(yīng)用該映射是一種操作,但映射本身是一種事物。

嵌入是高維度還是低維度?視情況而定。例如,與可包含數(shù)百萬個字詞和短語的向量空間相比,一個 300 維的字詞和短語向量空間通常被視為低維度(且密集)空間。但從數(shù)學(xué)角度上來講,它是高維度空間,顯示的很多屬性與人類直覺了解的二維和三維空間大相徑庭。

嵌入與嵌入層是否相同?不同。嵌入層是神經(jīng)網(wǎng)絡(luò)的一部分,而嵌入則是一個更寬泛的概念。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴

原文標(biāo)題:如何在 TensorFlow 中訓(xùn)練嵌入

文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    何在Raspberry Pi上安裝TensorFlow

     在本教程,我們將學(xué)習(xí)如何在 Raspberry Pi 上安裝 TensorFlow,并將展示一些在預(yù)訓(xùn)練神經(jīng)網(wǎng)絡(luò)上進行簡單圖像分類的示例。
    發(fā)表于 09-01 16:35 ?2136次閱讀
    如<b class='flag-5'>何在</b>Raspberry Pi上安裝<b class='flag-5'>TensorFlow</b>

    【大聯(lián)大世平Intel?神經(jīng)計算棒NCS2試用體驗】訓(xùn)練模型軟件 tensorflow 的艱難安裝

    OpenVINO安裝完成后,需要提供項目的模型文件,才能進行參數(shù)調(diào)優(yōu)和深度學(xué)習(xí)推理。所以需要進行數(shù)據(jù)收集,數(shù)據(jù)標(biāo)注,進行模型訓(xùn)練。訓(xùn)練的模型很多,有Tensorflow、Caffee等,我選用
    發(fā)表于 07-15 23:29

    情地使用Tensorflow吧!

    在節(jié)點間相互聯(lián)系的多維數(shù)據(jù)數(shù)組,即張量(tensor)。它靈活的架構(gòu)讓你可以在多種平臺上展開計算,例如臺式計算機的一個或多個CPU(或GPU),服務(wù)器,移動設(shè)備等等。TensorFlow 最初由
    發(fā)表于 07-22 10:13

    TensorFlow是什么

    更長。TensorFlow 使這一切變得更加簡單快捷,從而縮短了想法到部署之間的實現(xiàn)時間。在本教程,你將學(xué)習(xí)如何利用 TensorFlow 的功能來實現(xiàn)深度神經(jīng)網(wǎng)絡(luò)。TensorFlow
    發(fā)表于 07-22 10:14

    淺談深度學(xué)習(xí)之TensorFlow

    TensorFlow 實現(xiàn)所有這些。數(shù)據(jù)集DNN 依賴于大量的數(shù)據(jù)??梢允占蛏蓴?shù)據(jù),也可以使用可用的標(biāo)準(zhǔn)數(shù)據(jù)集。TensorFlow 支持三種主要的讀取數(shù)據(jù)的方法,可以在不同的數(shù)據(jù)集中使用;本教程中用來
    發(fā)表于 07-28 14:34

    TensorFlow優(yōu)化器種類及其用法詳解

    的 tf.train.exponential_decay 方法來實現(xiàn)這一點。根據(jù) TensorFlow 文檔,在訓(xùn)練模型時,通常建議在訓(xùn)練過程中降低學(xué)習(xí)率。該函數(shù)利用指數(shù)衰減函數(shù)初
    發(fā)表于 07-28 14:39

    何在WINDOWS系統(tǒng)下使用tensorflow來下圍棋呢

    1、如何在WINDOWS系統(tǒng)下安裝tensorflow并使用tensorflow來下圍棋呢 tensorflow0.12版本支持windows,需要python3.5.x。(1)下載并
    發(fā)表于 06-02 16:17

    如何使用TensorFlow將神經(jīng)網(wǎng)絡(luò)模型部署到移動或嵌入式設(shè)備上

    有很多方法可以將經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型部署到移動或嵌入式設(shè)備上。不同的框架在各種平臺上支持Arm,包括TensorFlow、PyTorch、Caffe2、MxNet和CNTK,如Android
    發(fā)表于 08-02 06:43

    嵌入式DHCP Server如何在vxWorks

    嵌入式DHCP Server如何在vxWorks的軟件實現(xiàn)
    發(fā)表于 03-29 12:27 ?23次下載

    TensorFlow Lite是TensorFlow針對移動和嵌入式設(shè)備的輕量級解決方案

    TensorFlow Lite 目前處于開發(fā)人員預(yù)覽階段,因此可能不支持 TensorFlow 模型的所有操作。但是它支持常見的圖像分類模型,包括 Inception 和 MobileNets。在
    的頭像 發(fā)表于 07-31 15:37 ?2.6w次閱讀
    <b class='flag-5'>TensorFlow</b> Lite是<b class='flag-5'>TensorFlow</b>針對移動和<b class='flag-5'>嵌入</b>式設(shè)備的輕量級解決方案

    基于tensorflow.js設(shè)計、訓(xùn)練面向web的神經(jīng)網(wǎng)絡(luò)模型的經(jīng)驗

    NVIDIA顯卡。tensorflow.js在底層使用了WebGL加速,所以在瀏覽器訓(xùn)練模型的一個好處是可以利用AMD顯卡。另外,在瀏覽器訓(xùn)練
    的頭像 發(fā)表于 10-18 09:43 ?4044次閱讀

    何在TensorFlow2高效培訓(xùn)1130億參數(shù)推薦系統(tǒng)

    在這篇文章,我介紹了使用混合并行來訓(xùn)練大型推薦系統(tǒng)的想法。測試結(jié)果表明, DGX A100 是在 TensorFlow 2 訓(xùn)練參數(shù)超過
    的頭像 發(fā)表于 04-19 15:12 ?864次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>TensorFlow</b>2<b class='flag-5'>中</b>高效培訓(xùn)1130億參數(shù)推薦系統(tǒng)

    何在TensorFlow構(gòu)建并訓(xùn)練CNN模型

    TensorFlow構(gòu)建并訓(xùn)練一個卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型是一個涉及多個步驟的過程,包括數(shù)據(jù)預(yù)處理、模型設(shè)計、編譯、訓(xùn)練以及評估。下面,我將詳細闡述這些步驟,并附上一個完整的代碼
    的頭像 發(fā)表于 07-04 11:47 ?583次閱讀

    tensorflow簡單的模型訓(xùn)練

    在本文中,我們將詳細介紹如何使用TensorFlow進行簡單的模型訓(xùn)練。TensorFlow是一個開源的機器學(xué)習(xí)庫,廣泛用于各種機器學(xué)習(xí)任務(wù),包括圖像識別、自然語言處理等。我們將從安裝
    的頭像 發(fā)表于 07-05 09:38 ?413次閱讀

    何在Tensorflow實現(xiàn)反卷積

    ,扮演著重要角色。以下將詳細闡述如何在TensorFlow實現(xiàn)反卷積,包括其理論基礎(chǔ)、TensorFlow的實現(xiàn)方式、以及實際應(yīng)用
    的頭像 發(fā)表于 07-14 10:46 ?492次閱讀