pytorch 中使用tensorboard,詳解writer.add_embedding函數的作用(一)

首先給出pytorch官方文檔對tensorboard的教程

https://pytorch.apachecn.org/docs/1.4/6.html

目錄

1 導包 

2 實例化

3 顯示圖片(writer.add_image)

 4 查看網絡結構(writer.add_image),第一個參數爲自定義網絡,第二個參數爲輸入

5 低維映射(writer.add_embedding)

6 查看訓練過程中訓練情況(writer.add_figure)

 


1 導包 

from torch.utils.tensorboard import SummaryWriter

2 實例化

# default `log_dir` is "runs" - we'll be more specific here
writer = SummaryWriter('runs/fashion_mnist_experiment_1')

記住這個目錄runs,是相對位置,等下需要進到runs所在目錄(如a/runs,就要進入a中)執行

tensorboard --logdir runs

這裏的runs與之前的runs是同一個東西,你如果寫runss,這裏就改成runss,

3 顯示圖片(writer.add_image)

writer.add_image('four_fashion_mnist_images', img_grid)

第一個參數是名稱,第二個參數是要顯示的圖片(三維tensor,如果是四維小batch tensor會報錯,解決方式在圖中),小tips:jupyter notebook中使用help函數可以查看函數細節

 4 查看網絡結構(writer.add_image),第一個參數爲自定義網絡,第二個參數爲輸入

writer.add_graph(net, images)#把圖寫入
writer.close()

必須加上close函數,因此建議如下格式

with writer as w:

         w.add_graph(net, images)

會自動調用close函數 

tips:?和help()類似,更好看點

5 低維映射(writer.add_embedding)

writer.add_embedding(features,
                    metadata=class_labels,
                    label_img=images.unsqueeze(1))
writer.close()

說實話這個函數很抽象,看api不太可能看出來他是在做什麼,不信看下圖

 乾脆不看,直接看效果圖

截了兩個角度,大概看出貓膩了,其實就是在可視化高維數據,三維空間中每一個點都是一個三維tensor,可以通過這個方式觀察數據點之間的最近鄰關係,這個時候回過頭再看參數,加粗部分是說人話系列,根據該例描述其作用

writer.add_embedding(features,
                    metadata=class_labels,
                    label_img=images.unsqueeze(1))

mat (torch.Tensor or numpy.array): 一個矩陣,每行代表特徵空間的一個數據點(features:二維tensor,每行代表一張照片的特徵,其實就是把一張圖片的28*28個像素拉平,一張圖片就產生了784個特徵

metadata (list or torch.Tensor or numpy.array, optional): 一個一維列表,mat 中每行數據的 label,大小應和 mat 行數相同(metadata:一維列表,代表每張圖片的類別,圖中不同顏色代表着不同類別) 

label_img (torch.Tensor, optional): 一個形如 NxCxHxW 的張量,對應 mat 每一行數據顯示出的圖像,N 應和 mat 行數相同

首先先說images,是一百張圖片,features就是這裏的特徵,但是因爲這裏是灰度圖,所以是N*H*W,api這麼設計是爲了RGB彩圖考慮的,因此我們需要reshape一下,滿足api要求,具體看下面

global_step (int, optional): 訓練的 step

tag (string, optional): 數據名稱,不同名稱的數據將分別展示

6 查看訓練過程中訓練情況(writer.add_figure)

 writer.add_figure('predictions vs. actuals',
                            plot_classes_preds(net, inputs, labels),
                            global_step=epoch * len(trainloader) + i)

 參數爲標題,測試結果,測試時長,比如再經過訓練1000次(step=1000)時,網絡的表現如何?可以使用這個方式

困了睡覺,剩下的丟下一篇繼續寫咯

pytorch 中使用tensorboard,詳解writer.add_pr_curve函數的作用(二)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章