42
技術社區[雲棲]
通過SketchRNN、PCA和t-SNE從Google QuickDraw數據集中顯示矢量圖的潛在空間|附源碼
本文是作者最近發布的Google QuickDraw數據集一係列筆記中的第三部分,使用的最近發布的SketchRNN模型。下麵介紹QuickDraw數據集及SketchRNN模型。
QuickDraw數據集是由世界各地1500多萬人參與的“快速繪畫” AI實驗後收集數百萬幅圖畫建成,參與者要在20秒內繪製出屬於某個類(例如“貓”)的圖像。


本文是筆記與代碼的結合,作者已經做出了風格以及其它一些細微的改變,以確保Python3能向前兼容。
- 1. 本文有點令人誤解,這是因為本文主要是探索Aaron Koblin羊市場 (aaron-sheep)數據集,這是一個較小的輕量級數據集,以及一個手冊,演示了在這個數據集上已經預先訓練好的各種模型。由於該數據集模式與QuickDraw數據集相同,因此在此數據集上執行的實驗也不失一般性。
- 2. Magenta目前隻支持Python 2版本。

接下來都是實驗的所需的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.02140247,0.02067117])
接下來將數據從128維的潛在空間映射為由前兩個主要分量構建的二維空間
在[25]中:
輸出[25]:
(300,2)
在[26]中:

我們想在上圖中通過圖中的對應點可視化出原始草圖,其中每個點對應於草圖降維到2維的隱藏代碼。然而,由於圖像太密集,在沒有重疊的情況下無法適應足夠大的草圖。因此,我們將注意力限製在包含80%數據點的較小區域,藍色陰影矩形突出顯示感興趣的區域。
在[106]中:
在[107]中:
在[108]中:
在[109]中:
你可以在這裏找到SVG圖像。
備注:一個更加聰明的方法涉及到使用matplotlib變換和Collections API,具體是通過實例化帶有關鍵參數oofets的PathCollection。
PCA投影中的線性插值
在先前定義的矩形區域生成100個均勻間隔的網格,下圖網格中的點以橙色表示,覆蓋在測試數據點的頂部。
在[35]中:
在[36]中:
在[37]中:
在[38]中:
接下來,通過應用PCA的逆變換來將網格上的100個點投影到原始的128維潛在空間。
在[39]中:
輸出[39]:
(10,10,2)
在[40]中:
輸出[40]:
(10,10,128)
然後,使用這些隱藏代碼及譯碼器重建相應的草圖,並觀察草圖如何在所關注的矩形區域範圍之間轉換,特別是草圖從左到右、從上到下的轉換,因為這些是潛在表示中最大差異的方向。首先,以較低的溫度設置τ=0.1運行譯碼器以最小化樣本的隨機性。
在[94]中:
可以從上圖中觀察到一些有趣的變換和模式。在右下角,可以看到一群類似的修剪過或者無修飾的羊;當向左上方移動時,會開始看到一些羊毛、粗糙的圓形塗鴉的羊;沿著中間部分,可以看到最逼真的羊;在左上角,可以看到一些抽象的草圖。
運行溫度為τ=0.6時不能產生更多的洞察力。
在[95]中:
特征羊分解
本文將草圖學習的潛在代表主要組成部分稱為特征羊。
使用譯碼器,可以可視化前2個特征羊的草圖表示,這些特征羊是將潛在表示轉換為二維子空間中的正交權重矢量。通過將它們視為隱藏代碼,並將其重構建為草圖,我們能夠提煉出一些有意義的解釋。
在[48]中:
在[49]中:
輸出[49]:
數組([0.02140247,0.02067117])
在[50]中:
輸出[50]:
陣列([2.51394317,2.42804484])
我們從τ=.01...1.0增加溫度並繪製特征羊的重建草圖,每個溫度設置采集5個樣品。
在[58]中:
在[63]中:
對於第一特征羊,在τ=0.1,主要看到一個圓形的黑色頭發、有兩條長的圓形腿和一些尾巴。沿著軸線方向可以看到,羊的頭部和腿部結構會發生變化,這占據了草圖的大部分差異。
現在看看第二特征羊,集中τ值較低時生成的樣品,可以看到一些粗略潦草的圓圈代表羊的身體、3-4個鬆散連接的腿和一個小圓頭。從上到下的觀察,可以發現,與第一特征不同的是這似乎是沿著羊身體結構變化的方向。
t-SNE可視化
t分布隨機相鄰嵌入(t-SNE)是一種常用的非線性降維技術,通常用於可視化高維數據。它是幾種嵌入方法之一,其目的是將數據點嵌入到較低維空間中,以保持原始高維空間中的點對點的距離,一般適用於二維空間的可視化。
特別地,t-SNE通常用於深度學習,以檢查和可視化深層神經網絡學到的內容。例如,在圖像分類問題中,可以將卷積神經網絡視為一係列變換,逐漸將圖像轉換為表示,使得類可以更容易地被線性分類器區分。因此,可以將分類器前的最後一層輸出作為“代碼”,然後使用t-SNE在二維中嵌入和可視化圖像的代碼表示。
- 1.關於PCA與t-SNE的詳細比較可以查看筆者先前的博客。
- 2. Wattenberg, et al.“How to Use t-SNE Effectively”, Distill, 2016.
- 3. 斯坦福大學CS231n:卷積神經網絡視覺識別課程中關於網絡的可視化課程筆記。
在這裏,將每個矢量繪圖的128維隱藏代碼嵌入到二維中,並將其在該二維子空間中進行可視化。
在[97]中:
在[98]中:
在[99]中:
在[100]中:
輸出[100]:
2.2818214893341064
像以前一樣,定義一個矩形區域
在[101]中:
在[102]中:
在[103]中:
圖片
在[104]中:
完整的SVG圖片可以在此獲得。雖然這產生了很好的結果,但作者認為如果可視化在一個具有多類的更大數據集上會更有說服力。通過這種方式,可以看到t-SNE有效地形成了對不同類的聚類圖,並突出顯示了每個集群中的變化。
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
Github:https://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