閱讀42 返回首頁    go 技術社區[雲棲]


通過SketchRNN、PCA和t-SNE從Google QuickDraw數據集中顯示矢量圖的潛在空間|附源碼

https://yq.aliyun.com/cloud

79b373d51eb109fd75ac6dd612fe1d96b9107ad9

本文是作者最近發布的Google QuickDraw數據集一係列筆記的第三部分,使用的最近發布的SketchRNN模型。下麵介紹QuickDraw數據集及SketchRNN模型。

QuickDraw數據集是由世界各地1500多萬人參與的“快速繪畫” AI實驗後收集數百萬幅圖畫建成,參與者要在20秒內繪製屬於某個類(例如“貓”)的圖像

2fe2089ec0ed5b84a527913712fa475ca9591aea
         SketchRNN是一個令人吃驚的生成模型,被訓練使用上述數據集生成矢量它巧妙地集合了機器學習中最近開發的許多最新的工具和技術,例如Variational AutoencodersHyperLSTMs(一個用於LSTM的HyperNetwork)自回歸模型 ,Layer NormalizationRecurrent DropoutAdam optimizerSketchRNN係統是由穀歌探究AI能否創作藝術的新項目的一部分,類似於教AI去繪畫,另外不僅僅是讓人工智能學習如何畫畫,還要能夠“用類似於人類的方式概括歸納抽象的概念”,比如去畫“豬”的廣義概念,而不是畫特定的動物,這顯然不是一件簡單的事情。

70a2d2c1d429e95023c9ba0b0674aa0373548164
         本文的代碼丟棄了那些旨在解釋或演示代碼塊,隻保留運行實驗所需的代碼。“潛在空間中的主成分分析 ”部分的所有內容直接從以前的博客摘取。隨意跳過該部分,因為接下來是真正有趣的分析。這裏是第一第二博客的鏈接之前所講述的一切都是一些實用功能,以便於現在的可視化分析
         本文是筆記代碼的結合,作者已經做出了風格以及其它一些細微的改變,以確保Python3向前兼容

  • 1. 本文有點令人誤解這是因為本文主要是探索Aaron Koblin羊市場 aaron-sheep數據集,這是一個較小的輕量級數據集,以及一個手冊,演示了在這個數據集已經預先訓練的各種模型。由於數據集模式與QuickDraw數據集相同,因此在此數據集上執行的實驗也不失一般性。
  • 2. Magenta目前隻支持Python 2版本

260a4122bad0cd267dd1ecc681f4616f03269718

接下來都是實驗的所需的python代碼:
在[2]中:


[3]中





在[6]中:



獲得預訓練的模型和數據

在[7]中:




在[8]中:


輸出[8]:
'https://github.com/hardmaru/sketch-rnn-datasets/raw/master/aaron_sheep/'

在[9]中:


輸出[9]:'https://download.magenta.tensorflow.org/models/sketch_rnn.zip'

在[10]中:




INFO:tensorflow:Downloading pretrained models from https://download.magenta.tensorflow.org/models/sketch_rnn.zip...
INFO:tensorflow:Download complete.
INFO:tensorflow:Unzipping /tmp/sketch_rnn/models/sketch_rnn.zip...
INFO:tensorflow:Unzipping complete.

接下來讓我們看看aaron_sheep現在數據集訓練的規範化層模型。

在[11]中:


在[12]中:






在[13]中:




在[14]中:




加載預先訓練的模型

在[15]中:




INFO:tensorflow:Model using gpu.
INFO:tensorflow:Input dropout mode = False.
INFO:tensorflow:Output dropout mode = False.
INFO:tensorflow:Recurrent dropout mode = True.
INFO:tensorflow:Model using gpu.
INFO:tensorflow:Input dropout mode = False.
INFO:tensorflow:Output dropout mode = False.
INFO:tensorflow:Recurrent dropout mode = False.
INFO:tensorflow:Model using gpu.
INFO:tensorflow:Input dropout mode = False.
INFO:tensorflow:Output dropout mode = False.
INFO:tensorflow:Recurrent dropout mode = False.

在[16]中:




在[17]中:




INFO:tensorflow:Loading model /tmp/sketch_rnn/models/aaron_sheep/layer_norm/vector.
INFO:tensorflow:Restoring parameters from /tmp/sketch_rnn/models/aaron_sheep/layer_norm/vector

在[18]中:





在[19]中:



用主成分分析探索潛在空間

下麵,我們將測試集中的所有草圖編碼為學習的128維潛在空間中的表示。

在[20]中:


輸出[20]

300,128 

然後,找到潛在空間中編碼數據中代表最大方差方向的兩個主軸。 

在[22]中:


在[23]中:




輸出[23]



這兩個組成部分分別方差2 

在[24]中:




輸出[24]

數組([0.021402470.02067117] 

接下來將數據從128潛在空間映射為由前兩個主要分量構建的二維空間 

在[25]中:




[25]

300,2 

在[26]中:




10074f8ae3f998247196cc8b710294b002a94514

         我們想在上圖中通過圖中的對應點可視化原始草圖,其中每個點對應於草圖降維到2維隱藏代碼。然而,由於圖像太密集,在沒有重疊的情況下無法適應足夠大的草圖。因此,我們將注意力限製在包含80%數據點的較小區域,藍色陰影矩形突出顯示感興趣的區域。 

在[106]中:




在[107]中:




在[108]中:




501b3b92fec57aa1697920cf662a9eedb199614a

在[109]中:




0bb5ce7f30aadc771cb1f9cb68fcb559424ff2cd

你可以在這裏找到SVG圖像。

備注:一個更加聰明的方法涉及使用matplotlib變換Collections API,具體是通過實例化帶有關鍵參數oofets的PathCollection

PCA投影中的線性插值

在先前定義的矩形區域生成100個均勻間隔的網格,下圖網格中的點以橙色表示,覆蓋在測試數據點的頂部。 

在[35]中:




在[36]中:




在[37]中:




在[38]中:




ca59cf88c62e628fdbae5b1724e3a83aee2322d8

接下來,通過應用PCA的逆變換來將網格上的100個點投影到原始的128維潛在空間。 

在[39]中:




輸出[39]

10102 

在[40]中:



輸出[40]

1010128 

然後,使用這些隱藏代碼及譯碼器重建相應的草圖,並觀察草圖如何在所關注的矩形區域範圍之間轉換特別是草圖從左到右從上到下轉換,因為這些是潛在表示中最大差異的方向。首先,以較低的溫度設置τ=0.1運行譯碼器以最小化樣本的隨機性。 

在[94]中:




fd1df68981c9dbc48f39d82545322415f64ef174

可以從上圖中觀察一些有趣的變換和模式。右下角可以看到一群類似的修剪過或者無修飾的當向左上方移動時,開始看到一些羊毛粗糙的圓形塗鴉的羊;沿著中間部分可以看到最逼真的羊在左上角,可以看到一些抽象的草圖
運行溫度τ=0.6時不能產生更多的洞察力。 

在[95]中:




3460dfd54dfbfb4243327af44b3460796f9dc624

特征羊分解
本文將草圖學習潛在代表主要組成部分稱為特征羊

使用譯碼器,可以可視化前2特征羊的草圖表示這些特征羊是將潛在表示轉換為二維子空間的正交權重矢量。通過將它們視為隱藏代碼,並將其重構建草圖,我們能夠提煉出一些有意義的解釋。 

在[48]中:




在[49]中:




輸出[49]

數組([0.021402470.02067117] 

在[50]中:




輸出[50]

陣列([2.513943172.42804484] 

我們從τ=.01...1.0增加溫度繪製特征羊的重建草圖每個溫度設置采集5個樣品。 

在[58]中:




a74dcd0ce663c22315214a172fc0d4ce2fa8a595

在[63]中:




2da9d11183046ef318eb401fc5507fe5095484f2

         對於第一特征羊,在τ=0.1主要看到一個圓形的黑色頭發有兩條長的圓形腿一些尾巴。沿著軸線方向可以看到,羊頭部和腿部結構會發生變化,這占據了草圖的大部分差異。

現在看看第二特征羊,集中τ值較低時生成的樣品,可以看到一些粗略潦草的圓圈代表羊的身體3-4個鬆散連接的腿和一個小圓頭。從上到下的觀察,可以發現,與第一特征不同的是這似乎是沿著羊身體結構變化的方向。

t-SNE可視化
        t分布隨機相鄰嵌入(t-SNE)是一種常用的非線性降維技術,通常用於可視化高維數據。它是幾種嵌入方法之一,其目的是將數據點嵌入到較低維空間中,以保持原始高維空間中的點對點的距離,一般適用於二維空間的可視化

       特別地,t-SNE通常用於深度學習,以檢查和可視化深層神經網絡學到的內容。例如,在圖像分類問題中,可以將卷積神經網絡視為一係列變換,逐漸將圖像轉換為表示,使得類可以更容易地被線性分類器區分。因此,可以分類器前的最後一層輸出作為代碼然後使用t-SNE在二維中嵌入和可視化圖像代碼表示。

在這裏,將每個矢量繪圖的128隱藏代碼嵌入到二維中,並將其在該二維子空間中進行可視化。 

在[97]中:




在[98]中:




在[99]中:




36da666fa84c604b892bab2a677a61dc24e1cb21

在[100]中:




輸出[100]

2.2818214893341064 

像以前一樣,定義一個矩形區域 

在[101]中:




在[102]中:




在[103]中:




圖片

在[104]中:




f3e240d59e9d21aa95b8ce2ee27d63d13b22c369

完整的SVG圖片可以在此獲得。雖然這產生了很好的結果,但作者認為如果可視化在一個具有多類的更大數據集上會更有說服力。通過這種方式,可以看到t-SNE有效地形成了對不同類的聚類圖,並突出顯示了每個集群中的變化。

1. Visualizing MNIST

2. Visualizing Representations

3. Latent space visualization

4. Analyzing 50k fonts using deep neural networks

5. Organizing the World of Fonts with AI

作者信息

Louis Tiao計算機科學和數學的研究者,研究領域集中於算法設計與分析、計算機科學理論、人工智能和機器學習

Linkedin:https://www.linkedin.com/in/ltiao/?ppe=1

Githubhttps://github.com/scikit-learn/scikit-learn

本文由北郵@愛可可-愛生活老師推薦,阿裏雲雲棲社區組織翻譯。

文章原標題《Visualizing the Latent Space of Vector Drawings from the Google QuickDraw Dataset with SketchRNN, PCA and t-SNE》,作者:Louis Tiao,譯者:海棠,審閱: 

文章為簡譯,更為詳細的內容,請查看原文

最後更新:2017-06-10 00:01:51

  上一篇:go  基於飛天專有雲敏捷版構建應用DevOps實踐操作
  下一篇:go  一次Eclipse插件修改經曆