from torch.utils.tensorboard import SummaryWriter
引數詳解:
log_dir:輸入資料夾的名稱(string)。如果為None,預設位置為:runs/**CURRENT_DATETIME_HOSTNAME**
其他不常用引數:comment, purge_step, max_queue, flush_secs, fliename_suffix. 具體用處可以在pycharm中ctrl+單擊SummaryWriter檢視。
tag(string): Data的指定方式,圖表的標題
scalar(float or string/blobname): 需要儲存的數值
global_step(int): 訓練的步數(Global step value to record),結合scalar,那就是訓練到多少步的時候scalar的數值是多少。
walltime(float): (不常用引數,可選)Optional override default walltime(time.time()) with seconds after epoch of event
更直觀的引數解釋,可以表示為下圖的方式:
from torch.utils.tensorboard import SummaryWriter
writer=SummaryWriter("logs") #將事件檔案儲存到logs這個資料夾底下
#繪製一個y=2x的影象
for i in range(100):
writer.add_scalar("y=x",2*i,i) # writer.add_scalar(影象標題,y軸,x軸)
writer.close()
tag(string): Data的指定方式,圖表的標題
img_tensor(torch.Tensor, numpy.array, or string/blobname): 影象資料
global_step(int): 訓練的步數(Global step value to record),結合img_tensor,那就是訓練到多少步的時候img_tensor的影象是什麼。
walltime(float): (不常用引數,可選)Optional override default walltime(time.time()) with seconds after epoch of event
預設輸入影象資料形狀:
(3, H, W):三通道,高,寬
注意:如果輸入資料為 (H, W, 3) 也是可以的,但是需要設定dataformats
,如dataformats='HWC'
使用範例:
資料下載地址:百度網路硬碟 請輸入提取碼 (baidu.com)
提取碼:zsh8
from PIL import Image
image_path="E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train\\ants\\0013035.jpg" #圖片路徑
img=Image.open(image_path) #讀取圖片資訊
print(type(img))
'''
[Run]
<class 'PIL.JpegImagePlugin.JpegImageFile'>
'''
img_tensor
的要求,所以不能用PIL讀取利用numpy.array(),對PIL圖片進行轉換,具體操作如下:
from torch.utils.tensorboard import SummaryWriter
from PIL import Image
import numpy as np
writer=SummaryWriter("Image")
image_path="E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train\\ants\\0013035.jpg" #圖片路徑
img_PIL=Image.open(image_path) #讀取圖片的PIL格式
img_array=np.array(img_PIL) #將PIL型別的圖片資料轉為numpy型資料
print(img_array.shape) #檢檢視片資料的格式. [Run] (512, 768, 3);即3通道在最後一位
#新增image到SummaryWriter
#由shape資料可知,3通道在最後一位,所以設定為‘HWC’
writer.add_image("test", img_array, 1, dataformats='HWC')
writer.close()
在上面writer=SummaryWriter("logs")
程式碼的基礎上,建立了一個名稱為logs的檔案,下面我們學習如何開啟它。
tensorboard --logdir=logs
並按回車,需要注意的是:logdir=事件檔案所在的檔名
。得到如下語句:TensorFlow installation not found - running with reduced feature set.
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.13.0 at http://localhost:6006/ (Press CTRL+C to quit)
其中,http://localhost:6006/
為tensorboard的開啟位置,可直接單擊開啟
但有的時候,一臺伺服器上有好幾個人在使用,如果都指向6006視窗,則會導致與其他人發生衝突,所以我們可以指定一個埠:
tensorboard --logdir=logs --port=6007
開啟可能會出現下面這個頁面:
存在原因及解決辦法如下:
tensorboard --logdir=路徑中含有中文
解決方法:把中文改成英文
路徑錯誤
解決方法:tensorboard --logdir=路徑,其中這個輸入的路徑不用帶引號
tensorboard語句錯誤
解決方法:在一些tensorboard版本中,開啟路徑的語句為tensorboard --logdir=路徑
,但在另一些版本中,開啟路徑的語句為tensorboard --logdir"路徑"
如果反覆更改上面的程式碼並執行,比如說把\(y=2x\)改為\(y=3x\),那麼可能會出現這樣的影象:
也就是說\(y=2x\)和\(y=3x\)會同時出現在同一個影象上,並且還會出現一條擬合這兩個函數的線。解決方法如下:
方法一:把--logdir
中對應的資料夾找到,並直接刪除。然後再執行一次程式,繪製想要的圖片。
方法二:建立一個子檔案
方法同上
如果要同時讀取幾張圖片,可以有以下方法:
將writer.add_image("test", img_array, 1, dataformats='HWC')
中的step由1改為2或多個,此時可在同一個影象上,翻頁顯示
將writer.add_image("test", img_array, 1, dataformats='HWC')
中的tag由"test"改為另一個名字,此時可開啟一個新的框來顯示影象