文章目錄
- 在PyTorch中使用TensorBoard
- 1.安裝
- 2.TensorBoard使用
- 2.1創建SummaryWriter實例
- 2.2利用add_scalar()記錄metrics
- 2.3關閉Writer
- 2.4啟動TensorBoard
- 3.本地連接服務器使用TensorBoard
- 3.1方法一:使用SSH命令進行本地端口轉發
- 3.2方法二:啟動TensorBoard時添加參數--bind_all(推薦?)
- 3.3方法三:在終端工具里面配置SSH隧道或端口轉發
- 參考
在PyTorch中使用TensorBoard
在機器學習中,要改進模型的某些參數,我們通常需要對其進行衡量。TensorBoard 是用于提供機器學習工作流期間所需測量和呈現的工具。它使我們能夠跟蹤實驗指標(例如損失和準確率),呈現模型計算圖,將嵌入向量投影到較低維度的空間等。
1.安裝
pip install tensorboard
2.TensorBoard使用
2.1創建SummaryWriter實例
import torch
from torch.utils.tensorboard import SummaryWriter# 記錄的內容保存在“./log”里面,log里面會生成events.out.tfevents的文件
writer = SummaryWriter('./log')
2.2利用add_scalar()記錄metrics
了解損失等關鍵指標以及它們在訓練過程中的變化是非常重要的。標量有助于保存每個訓練步驟的損失值,或者每個epoch之后的精度。
使用 add_scalar(tag, scalar_value, global_step=None, walltime=None)
記錄標量值。
# 用法示例:
writer.add_scalar('loss', loss, epoch)
writer.add_scalar('accuracy', accuracy, epoch)
'''
* @name: tensorboard_test.py
* @description:創建一個線性回歸模型,并使用add_scalar記錄損失值
'''
x = torch.arange(-5, 5, 0.1).view(-1, 1)
y = -5 * x + 0.1 * torch.randn(x.size())model = torch.nn.Linear(1, 1)
criterion = torch.nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr = 0.1)def train_model(total_epoch):for epoch in range(total_epoch):y1 = model(x)loss = criterion(y1, y)writer.add_scalar("Loss/train", loss, epoch) # <-- 注意看這里!!!optimizer.zero_grad()loss.backward()optimizer.step()train_model(10)writer.flush() # 調用flush()方法確保所有掛起的事件都已寫入磁盤
2.3關閉Writer
最后調用 close()
方法來關閉Writer
,釋放資源。
writer.close()
2.4啟動TensorBoard
最后,啟動TensorBoard,指定上面我們使用的根日志目錄。當不需要可視化時,在終端按下Ctrl+C關閉TensorBoard即可。
# 第一種寫法
tensorboard --logdir=./log --host=127.0.0.1 --port=6006 --bind_all
# 第二種寫法
tensorboard --logdir ./log --host 127.0.0.1 --port 6006 --bind_all# 常用啟動命令(只需給定--logdir參數,其余默認)
tensorboard --logdir ./log
- 參數
--logdir
指向TensorBoard將在其中查找它可以顯示的事件文件的目錄。TensorBoard將遞歸遍歷以logdir為根的目錄結構,尋找.*tfevents.
*文件。 - 參數
--host
表示IP地址,默認為127.0.0.1 - 參數
--port
表示端口號,默認為6006 - 參數
--bind_all
指定 TensorBoard 綁定所有網絡接口,而不僅僅是本地接口。默認情況下,TensorBoard 僅在本地主機上運行,只能通過localhost
訪問。如果添加--bind_all
參數,就可以從網絡中的其他設備訪問 TensorBoard。這在需要遠程訪問時非常有用,例如在服務器上訓練模型并從個人電腦上查看訓練過程。
該儀表板顯示了損失隨著epoch的變化,還可以使用它來跟蹤訓練速度、學習率和其他標量值。
3.本地連接服務器使用TensorBoard
由于我們通常是在服務器上運行項目,那么TensorBoard生成的events.out.tfevents
格式文件是保存在服務器上面的,如果想要觀測 metrics 就需要將文件下載到本地,然后啟動TensorBoard才可以在本地查看。為了解決這一問題,我們可以使用SSH隧道(也稱SSH端口轉發),將遠程服務器的TensorBoard轉發到本地。具體實現如下:
3.1方法一:使用SSH命令進行本地端口轉發
ssh -L [本地端口]:[遠程地址]:[遠程端口] [用戶名]@[遠程服務器IP]# example:
ssh -L 6006:127.0.0.1:6006 root@192.168.1.224
解釋:這條命令將本地的6006端口轉發到遠程服務器192.168.1.224的6006端口上。這樣我們就可以通過在本地訪問127.0.0.1:6006來訪問遠程服務器的127.0.0.1:6006。
3.2方法二:啟動TensorBoard時添加參數–bind_all(推薦?)
tensorboard --logdir ./log --bind_all
在本地通過(遠程服務器IP地址):6006/
來查看訓練過程。
3.3方法三:在終端工具里面配置SSH隧道或端口轉發
流行的終端工具肯定是Xshell,Xshell的隧道配置可以查看這篇博客【使用Xshell/ssh 連接 遠程服務器使用Tensorboard】。但是我個人喜歡使用Tabby,Tabby是一款免費的顏值很高的終端工具,也推薦大家使用。
Tabby的端口轉發的添加,在設置->配置和連接->端口
里面進行配置添加。
參考
- How to use TensorBoard with PyTorch
- Visualizing Models, Data, and Training with TensorBoard
- torch.utils.tensorboard官方文檔
- 使用TensorBoard可視化訓練過程
- 在Pytorch中使用Tensorboard可視化訓練過程
😃😃😃