pytorch 笔记:tensorboardX
1 SummaryWriter
1.1 創建
首先,需要創建一個 SummaryWriter 的示例:
from tensorboardX import SummaryWriter#以下是三種不同的初始化 SummaryWriter 的方法writer1 = SummaryWriter('runs/exp') #提供一個路徑,將使用該路徑來保存日志writer2 = SummaryWriter() #無參數,默認將使用 runs/日期時間 路徑來保存日志writer3 = SummaryWriter(comment='resnet') #提供一個 comment 參數,將使用 runs/日期時間-comment 路徑來保存日志????????一般來講,我們對于每次實驗新建一個路徑不同的 SummaryWriter,叫作一個 run,如 runs/exp1、runs/exp2。
1.2?可視化
????????接下來,我們就可以調用 SummaryWriter 實例的各種 add_something 方法向日志中寫入不同類型的數據了。想要在瀏覽器中查看可視化這些數據,只要在命令行中開啟 tensorboard 即可:
tensorboard --logdir=<your_log_dir>????????其中的 <your_log_dir> 可以是單個 run 的路徑,如上面 writer1 生成的 runs/exp;
???????? <your_log_dir> 也可以是多個 run 的父目錄,如??runs/?下面可能會有很多的子文件夾,每個文件夾都代表了一次實驗,我們令?--logdir=runs/?,就可以在 tensorboard 可視化界面中方便地橫向比較?runs/?下不同次實驗所得數據的差異。
2 使用add 記錄數據
2.1 添加數字 add_scalar
記錄數字常量。
2.1.1 基本使用方法
add_scalar(tag, scalar_value, global_step=None, walltime=None)2.1.2 參數介紹
| tag?(string) | 數據名稱,不同名稱的數據使用不同曲線展示 |
| scalar_value?(float) | 數字常量值 |
| global_step?(int, optional) | 訓練的 step |
| walltime?(float, optional) | 記錄發生的時間,默認為?time.time() |
2.1.3 舉例
from tensorboardX import SummaryWriter writer = SummaryWriter('runs/scalar_example') for i in range(10):writer.add_scalar('quadratic', i**2, global_step=i)writer.add_scalar('exponential', 2**i, global_step=1)首先,在對應的路徑出現了scalar_example 文件夾
?????????然后可視化之(這里我已經cd到runs的路徑上了,所以使用的是相對路徑。當然絕對路徑也是可以的)
tensorboard --logdir=scalar_example? ? ? ? 會出來一行這個:
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all TensorBoard 2.7.0 at http://localhost:6006/ (Press CTRL+C to quit)2.1.4 多個?writer
from tensorboardX import SummaryWriter writer = SummaryWriter('runs/example_test/scalar_example') for i in range(10):writer.add_scalar('quadratic', i**2, global_step=i)writer.add_scalar('exponential', 2**i, global_step=i) writer1 = SummaryWriter('runs/example_test/scalar_example1') for i in range(10):writer1.add_scalar('quadratic', i**3, global_step=i)writer1.add_scalar('exponential', 3**i, global_step=i)?2.1.5 add_scalar注意事項
????????這里的 scalar_value 一定是 float 類型。
????????如果是 PyTorch scalar tensor,則需要調用 .item() 方法獲取其數值。
????????我們一般會使用 add_scalar 方法來記錄訓練過程的 loss、accuracy、learning rate 等數值的變化,直觀地監控訓練過程。
?
2.2 add_histogram 添加直方圖
2.2.1 使用方法
add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None)2.2.2 參數說明
| tag?(string) | ?數據名稱 |
| values?(torch.Tensor, numpy.array, or string): | 用來構建直方圖的數據 |
| global_step?(int, optional) | 訓練的 step |
| bins?(string, optional) | ?該參數決定了分桶的方式 具體見:numpy.histogram_bin_edges — NumPy v1.21 Manual |
| walltime?(float, optional) | 記錄發生的時間,默認為?time.time() |
| max_bins?(int, optional) | 最大分桶數 |
2.2.3 使用舉例
from tensorboardX import SummaryWriterwriter = SummaryWriter('runs/embedding_example2')writer.add_histogram('normal_centered5', np.random.normal(0, 1, 1000), global_step=1,max_bins=100) writer.add_histogram('normal_centered5', np.random.normal(0, 2, 1000), global_step=1,max_bins=100) writer.add_histogram('normal_centered5', np.random.normal(0, 3, 1000), global_step=1,max_bins=100)writer.add_histogram('normal_centered6', np.random.normal(0, 1, 1000), global_step=1,max_bins=100) writer.add_histogram('normal_centered6', np.random.normal(0, 2, 1000), global_step=5,max_bins=100) writer.add_histogram('normal_centered6', np.random.normal(0, 3, 1000), global_step=10,max_bins=100)在tensorboard的histograms里面有:(但我并沒有弄明白這時候的global_step有什么作用。。。望評論區賜教)、
overlay
【global_step=1,1,1? VS global_step=1,5,10】
?offset
【global_step=1,1,1? VS global_step=1,5,10】
?2.3? add_graph 添加圖
?使用?add_graph?方法來可視化一個神經j
2.3.1 基本使用方法
add_graph(model, input_to_model=None, verbose=False, **kwargs)?2.3.2 參數使用說明
| model?(torch.nn.Module): | 待可視化的網絡模型 |
| input_to_model?(torch.Tensor or list of torch.Tensor, optional) | ?待輸入神經網絡的變量或一組變量 |
2.3.3 使用舉例?
pytorch筆記:VGG 16_UQI-LIUWJ的博客-CSDN博客
import torch, torchvisionmodel = torchvision.models.vgg16()writer=SummaryWriter('graph') writer.add_graph(model,torch.ones((1,3, 224, 224)))?展開之后是
?隨便點開一個block:
?
?2.4 add_embedding?
使用?add_embedding?方法可以在二維或三維空間可視化 embedding 向量。
2.4.1 使用方法
add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None)2.4.2 參數說明
| mat?(torch.Tensor or numpy.array) | 一個矩陣,每行代表特征空間的一個數據點 |
| metadata?(list or torch.Tensor or numpy.array, optional) | 一個一維列表,mat 中每行數據的 label,大小應和 mat 行數相同 |
| global_step?(int, optional) | 訓練的 step |
| label_img?(torch.Tensor, optional) | 一個形如 NxCxHxW 的張量,對應 mat 每一行數據顯示出的圖像,N 應和 mat 行數相同 |
| tag?(string, optional) | 數據名稱,不同名稱的數據將分別展示 |
2.4.3 舉例
from tensorboardX import SummaryWriter import torchvisionwriter = SummaryWriter('runs/embedding_example') mnist = torchvision.datasets.MNIST('mnist', download=True) writer.add_embedding(mnist.train_data.reshape((-1, 28 * 28))[:100,:],#每一行是一個數據,前100個數據metadata=mnist.train_labels[:100],label_img = mnist.train_data[:100,:,:].reshape((-1, 1, 28, 28)).float() / 255,global_step=0 )?
?
2.4.4 作用
????????add_embedding 是一個很實用的方法,不僅可以將高維特征使用PCA、t-SNE等方法降維至二維平面或三維空間顯示,還可觀察每一個數據點在降維前的特征空間的K近鄰情況。
? ? ? ? 上面的例子中我們取 MNIST 訓練集中的 100 個數據,將圖像展成一維向量直接作為 embedding,使用 TensorboardX 可視化出來。
2.4.5 注意事項
add_embedding?方法需要注意的幾點:
- mat?是二維 NxM,metadata?是一維 N,label_img?是四維 NxCxHxW!
- label_img?記得歸一化為 0-1 之間的 float 值
參考資料:
詳解PyTorch項目使用TensorboardX進行訓練可視化_淺度寺-CSDN博客_tensorboardx
總結
以上是生活随笔為你收集整理的pytorch 笔记:tensorboardX的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NTU课程笔记 mas714复习:例题
- 下一篇: tensorboardX笔记:理解gra