如何使用TensorBoard針對PyTorch的embedding輸出進行2D或3D的T-SNE視覺化?

Yanwei Liu
4 min readNov 18, 2021

--

如何使用PyTorch的Feature Extractor輸出進行t-SNE視覺化?文章當中,介紹了如何進行2D的視覺化輸出方式。

在本文當中,將介紹透過TensorBoard進行2D與3D T-SNE輸出的方法,比起之前所介紹的方法,方便許多。但是TensorBoard方法若遇到上萬張大尺寸(如:224x224)的圖片時,執行速度會較慢。

範例程式碼

import tensorboardX as tbx     # 本範例會使用到tensorboardX套件
writer = tbx.SummaryWriter()

重點如下:

features為經由feature extractor萃取出來的特徵、labels為樣本實際的標籤資料、label_imgs為圖片的Tensor資料(N x C x H x W)格式

  • mat (torch. Tensor or numpy.array): 一個矩陣,每行代表特徵空間的一個數據點。mat的維度是(N, D),其中N為圖片數量;D為特徵維度
  • metadata (list or torch. Tensor or numpy.array, optional): 一個一維清單,mat 中每行數據的 label,大小應和 mat 行數相同
  • label_img (torch. Tensor, optional): 一個形如 NxCxHxW 的張量,對應 mat 每一行數據顯示出的圖像,N 應和 mat 行數相同。N*W開根號後須小於或等於8192才能被Tensorboard正常載入,否則會出現Error: Sprite image of dimensions 16384px x 16384px exceeds maximum dimensions 8192px x 8192px
import tensorboardX as tbx
writer = tbx.SummaryWriter()
writer.add_embedding(mat=features, metadata=labels, label_img=label_imgs)
writer.close()

當程式執行完後,會自動將資料保存到runs資料夾,這時候使用以下指令,根據Terminal回傳的網址,即可至網頁上觀看視覺化的效果。右上角的下拉式選單要選擇PROJECTOR才會正常顯示。

tensorboard --logdir=runs

效果

下圖為示意圖,透過該方法能夠將圖片呈現在2D或3D的環境當中,除此之外,也能切換使用UMAP、T-SNE、PCA這三個不同的方法的視覺效果。

--

--