日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pytorch 笔记:tensorboardX

發布時間:2025/4/5 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。