因為在做實驗的時候,需要記錄數(shù)據(jù),為了方便記錄數(shù)據(jù),可以使用tensorboard在運行的過程中就將實驗結(jié)果記錄其中,以對比那次實驗的結(jié)果是最好的.
tensorboard常用的功能有,保存模型網(wǎng)絡(luò)結(jié)構(gòu),保存訓(xùn)練集的損失,下面就介紹tensorboard的幾個常用的功能.
1.tensorboard面板介紹
1252a95d51c64081bddf4be25dd39269.png
這個面板圖源自:https://blog.csdn.net/Zhangsan0219/article/details/121763073
我是參考這個作者重新寫了一遍筆記,便于自己記錄.
2.畫折現(xiàn)統(tǒng)計圖
- 將多張圖分開畫
# -*- coding: utf-8 -*-
# @Author :WenShuai Xiao
# @Time:2022-05-30
# @File:Tensorboard_line.py
import os.path
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from tqdm import tqdm
if __name__=='__main__':
print('測試開始')
'''
畫線
啟動命令 tensorboard --logdir=logs
指定端口 tensorboard --logdir=logs --port=6007
'''
# 創(chuàng)建編輯器,保存日志
# log_dir保存路徑
logs_path=os.path.join("./logs","trian")
if not os.path.exists(logs_path):
print('路徑不存在')
os.makedirs(logs_path)
writer=SummaryWriter(log_dir=logs_path)
# 模擬添加每個epoch的loss和Acc
for n_iter in tqdm(range(100)):
# writer.add_scalar函數(shù)用于添加標(biāo)量值
# add_scalar(tags, scalar_value, global_stop)
# tags: string, 記錄對象的標(biāo)簽
# scalar_valud: float, 記錄的數(shù)值
# global_step: int, x軸的數(shù)值
writer.add_scalar('Loss/Train',np.random.random(),n_iter)
writer.add_scalar('Loss/Test',np.random.random(),n_iter)
writer.add_scalar('Accuracy/train',np.random.random(),n_iter)
writer.add_scalar('Accuracy/test',np.random.random(),n_iter)
writer.close()
print('測試結(jié)束')
運行完之后就會在logs文件下生成記錄的文件,然后找到這個路徑,在這個路徑下面輸入cmd->回車,就可以直接進入這個路徑下的dos命令
image.png
然后輸入以下代碼,把最后一個鏈接復(fù)制到瀏覽器就可以看到了結(jié)果
# 激活環(huán)境
conda activate pytorch
# 使用tensorboard打開路徑
tensorboard --dirlogs=logs
image.png
- 將多張圖畫在一起
# =====================================================
'''
writer.add_scalars(main_tag, tag_scalar_dict, global_step=None)
該函數(shù)用于將多個scalar添加到同一個圖中
main_tag: string, 父標(biāo)簽
tag_scalar_dict: dict, 將多個scalar組合在一起的字典對象,
該字典的key表示tag, value為記錄的scalar值
global_step: int, 圖片的x軸
'''
# ====================================================
for i in tqdm(range(100),desc='多張圖畫在一起'):
writer2.add_scalars(
'run_14h',{
'xsinx':i*np.sin(i/5),
'xcosx':i*np.cos(i/5),
'tanx':np.tan(i/5)
},i
)
writer2.close()
顯示結(jié)果
image.png
后面的直方圖,等我需要的時候在繼續(xù)補充筆記
3.畫模型圖
# -*- coding: utf-8 -*-
# @Author :WenShuai Xiao
# @Time:2022-05-30
# @File:Tensorboard_model.py
from torch import ones
from torch.utils.tensorboard import SummaryWriter
from torch.nn import Linear,ReLU,Sequential
import os
if __name__=='__main__':
logs_path = os.path.join("./logs", "model_graph")
if not os.path.exists(logs_path):
print('路徑不存在')
os.makedirs(logs_path)
writer=SummaryWriter(logs_path)
# 寫一個模型
model=Sequential(
Linear(1,10),
ReLU(),
Linear(10,1)
)
data=ones(10,1)
'''
add_graph
畫出模型的結(jié)構(gòu)
模型雙擊查看
'''
writer.add_graph(model=model,input_to_model=data)
writer.close()
查看模型圖:
image.png
4.多模型對比
有的時候需要調(diào)參對比實驗的結(jié)果,可以使用這個方法將每次的實驗結(jié)果保存到tensorboard中,如果學(xué)會了bash語法,直接可以使用bash語法自動傳參數(shù),這樣就不用自己操作了,只需要耐心的等待實驗結(jié)果就好了.
# -*- coding: utf-8 -*-
# @Author :WenShuai Xiao
# @Time:2022-05-30
# @File:Tensorboard_mutil_model.py
import os
import datetime
from torch.utils.tensorboard import SummaryWriter
if __name__=='__main__':
# 動態(tài)生成時間
log_dir=os.path.join('logs',datetime.datetime.now().strftime("%Y%m%d_%H%M%S"))
if not os.path.exists(log_dir):
os.makedirs(log_dir)
writer=SummaryWriter(log_dir=log_dir)
# y=2x
for i in range(100):
writer.add_scalar(tag='y=2x',scalar_value=1.5*i,global_step=i)
writer.close()
查看實驗結(jié)果:
image.png