如何使用TensorBoard針對PyTorch的embedding輸出進行2D或3D的T-SNE視覺化?
在如何使用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這三個不同的方法的視覺效果。
可能會遇到的問題
1. 卡再Fetching sprite image…
[1]tensorboard fetching sprite image_UI_Shero的专栏-CSDN博客[2]Tensorboard parsing metadata or fetching sprite images takes forever - Stack Overflow調整projector_config.pbtxt中的路徑:
embeddings {
tensor_name: "default:00000"
tensor_path: "00000/default/tensors.tsv"
metadata_path: "00000/default/metadata.tsv"
sprite {
image_path: "00000/default/sprite.png"
single_image_dim: 112
single_image_dim: 112
}
}
參考資料
[转载]Pytorch学习笔记8-可视化 — 云远·笨小孩 — 博客园 (cnblogs.com)
pytorch 中使用tensorboard,详解writer.add_embedding函数的作用(一)_小白的博客-CSDN博客
把pytorch產生的影像資料用tensorboard 的 embedding visualization 顯示出來,感覺蠻不錯der | by Tzu-Wei Huang | Medium
TensorBoard: Embedding Visualization TensorFlow Guide官方教程 w3cschool