小土堆pytorch--tensorboard的使用
- 小土堆pytorch--tensorboard的使用
- 0.介紹
- 1.使用tensorboard繪制 y = x 等簡單函數
- 1.1 相應的代碼
- 1.2 對上述代碼的解釋
- 1.3 可能遇到的問題
- 1.3.1 問題
- 1.3.2 解決方法
- 2.使用tensorboard加載數據集中的圖片
- 2.1 相應代碼
- 2.2 對上述代碼的解釋
- 2.2.1 代碼功能概述
- 2.2.2代碼逐行解釋
- 2.3 后續操作
小土堆pytorch–tensorboard的使用
0.介紹
TensorBoard 是 TensorFlow 提供的一組可視化工具 ,能將機器學習實驗數據圖形化展示,助力理解、調試、優化模型,也可用于 PyTorch 等框架結合使用來可視化相關數據。
主要功能
- 可視化模型結構:呈現模型計算圖,展示張量、變量和操作流程,助于理解模型架構和參數。
- 跟蹤訓練指標:實時呈現損失函數、準確率、梯度等訓練指標變化,以折線圖等形式展示,方便評估模型性能和優化訓練過程。
- 可視化數據分布:通過直方圖展示張量分布,了解權重、激活值等分布及變化;用平面展示數據分布情況,分析數據特征。
- 展示圖像音頻:展示訓練過程中的圖像(如輸入圖像、輸出圖像、中間層特征圖 )和音頻數據,輔助理解模型對多媒體數據的處理。
- 高維數據降維可視化:利用技術將高維嵌入向量投影到低維空間展示,分析向量關系和分布。
1.使用tensorboard繪制 y = x 等簡單函數
1.1 相應的代碼
from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter("logs")# writer.add_image()
# y = x
for i in range(0, 100):writer.add_scalar("y=x", i, i)writer.close()
運行這段代碼后,會在當前目錄下生成一個名為 logs 的文件夾,其中包含了記錄 y = x 數據的日志文件。接下來,可以在命令行中使用以下命令啟動 TensorBoard 服務:
tensorboard --logdir=logs
然后在瀏覽器中打開 http://localhost:6006,就可以看到 y = x 函數關系的可視化圖表。
然后就可以看到圖表
1.2 對上述代碼的解釋
-
導入模塊
from torch.utils.tensorboard import SummaryWriter
這行代碼從 torch.utils.tensorboard 模塊中導入 SummaryWriter 類。SummaryWriter 是一個重要的類,它可以將各種數據(如標量、圖像、直方圖等)寫入日志文件,以便后續使用 TensorBoard 進行可視化分析。
-
創建 SummaryWriter 實例
writer = SummaryWriter("logs")
這行代碼創建了一個 SummaryWriter 類的實例 writer,并指定日志文件的保存目錄為 “logs”。也就是說,后續通過 writer 記錄的數據都會被保存到這個名為 logs 的文件夾中。如果該文件夾不存在,程序會自動創建它。
運行這段代碼后,IDE會自動生成logs文件夾 -
循環記錄標量數據
# y = x for i in range(0, 100):writer.add_scalar("y=x", i, i)
for i in range(0, 100)::這是一個 for 循環,循環變量 i 從 0 到 99 依次取值。
writer.add_scalar(“y=x”, i, i):調用 writer 的 add_scalar 方法,該方法有三個主要參數:
A 第一個參數 “y=x” 是一個字符串,作為數據的標簽,用于在 TensorBoard 中標識這組數據。
B 第二個參數 i 是要記錄的標量值,也就是 y 的值,因為這里 y = x,所以 y 的值就等于 i。
C 第三個參數 i 是全局步數(global_step),用于表示數據點的順序,在 TensorBoard 中,global_step 通常對應 x 軸,用于展示數據隨時間或迭代次數的變化。TIPS:
我們用CTRL+鼠標左鍵點擊add_scalar會跳出該函數的定義,以及對參數的講解
-
關閉 SummaryWriter
writer.close()
這行代碼調用 writer 的 close 方法,關閉 SummaryWriter 實例。關閉操作會確保所有的數據都被正確寫入到日志文件中,釋放相關資源。
綜上所述,這段代碼的主要目的是使用 SummaryWriter 記錄 y = x 函數關系的數據,并將其保存到日志文件中,以便后續使用 TensorBoard 進行可視化分析。
1.3 可能遇到的問題
1.3.1 問題
這是這段代碼的運行結果
也會對應在logs目錄下生成相應的文件
假如我們修改代碼,其實就這一點變化,我們在tensorboard上查看結果的時候會發現問題
**導致錯誤的原因:**多次記錄了相同標簽(都標為 y = 5x )的數據,且每次記錄的數據范圍、采樣方式等有差異,導致多組數據在同一圖表中疊加顯示,出現多條看似混亂的線。
1.3.2 解決方法
首先我們在pycharm中按ctrl+c殺掉當前進程
然后我們手動刪除這兩個文件
然后再次運行上述代碼,問題就可以解決了
2.使用tensorboard加載數據集中的圖片
2.1 相應代碼
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Imagewriter = SummaryWriter("logs")
image_path = "dataset/train/ants/5650366_e22b7e1065.jpg"
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)
print(img_array.shape)writer.add_image("test", img_array, 1, dataformats = 'HWC')writer.close()
2.2 對上述代碼的解釋
2.2.1 代碼功能概述
這段代碼的主要功能是使用PyTorch 中的 torch.utils.tensorboard
模塊,將一張本地的圖像文件添加到 TensorBoard 的日志中,以便后續使用 TensorBoard 工具對該圖像進行可視化展示。
2.2.2代碼逐行解釋
- 導入必要的模塊
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
:從torch.utils.tensorboard
模塊中導入SummaryWriter
類。SummaryWriter
用于將各種數據(如標量、圖像、直方圖等)寫入日志文件,方便后續使用 TensorBoard 進行可視化分析。import numpy as np
:導入numpy
庫,并將其重命名為np
。numpy
是一個用于科學計算的強大庫,在處理數組和矩陣時非常有用。from PIL import Image
:從PIL
(Python Imaging Library)庫中導入Image
類。PIL
是 Python 中常用的圖像處理庫,Image
類可以用于打開、操作和保存多種圖像文件格式。
- 創建
SummaryWriter
實例
writer = SummaryWriter("logs")
創建一個 SummaryWriter
類的實例 writer
,并指定日志文件的保存目錄為 "logs"
。如果該目錄不存在,程序會自動創建它。后續通過 writer
記錄的數據都會被保存到這個目錄下的日志文件中。
3 打開圖像文件
image_path = "dataset/train/ants/5650366_e22b7e1065.jpg"
img_PIL = Image.open(image_path)
image_path = "dataset/train/ants/5650366_e22b7e1065.jpg"
:定義一個字符串變量image_path
,用于指定要打開的圖像文件的路徑。img_PIL = Image.open(image_path)
:使用Image.open()
方法打開指定路徑的圖像文件,并將其存儲為PIL
圖像對象img_PIL
。
4 將 PIL
圖像對象轉換為 numpy
數組
img_array = np.array(img_PIL)
使用 np.array()
函數將 PIL
圖像對象 img_PIL
轉換為 numpy
數組 img_array
。numpy
數組更適合進行數值計算和處理,方便后續傳遞給 SummaryWriter
進行記錄。
5 打印圖像數組的形狀
print(img_array.shape)
打印 img_array
的形狀,即圖像的高度、寬度和通道數。例如,對于 RGB 圖像,形狀通常為 (height, width, 3)
。
6 向 TensorBoard 日志中添加圖像
writer.add_image("test", img_array, 1, dataformats = 'HWC')
調用 writer
的 add_image
方法,將圖像添加到 TensorBoard 日志中。該方法有幾個參數:
- 第一個參數
"test"
是一個字符串,作為圖像的標簽,用于在 TensorBoard 中標識這張圖像。 - 第二個參數
img_array
是要添加的圖像數據,即前面轉換得到的numpy
數組。 - 第三個參數
1
是全局步數(global_step
),用于表示圖像的順序或迭代次數,在 TensorBoard 中,global_step
通常對應 x 軸,用于展示數據隨時間或迭代次數的變化。 dataformats = 'HWC'
:指定圖像數據的格式。'HWC'
表示圖像數據的維度順序為高度(Height)、寬度(Width)和通道數(Channels)。
注意:在add_image的定義中如果tensor的形狀是(H,W,3)則需要使用 dataformats = ‘HWC’
7. 關閉 SummaryWriter
writer.close()
調用 writer
的 close
方法,關閉 SummaryWriter
實例。關閉操作會確保所有的數據都被正確寫入到日志文件中,并釋放相關資源。
2.3 后續操作
運行這段代碼后,會在當前目錄下生成一個名為 logs
的文件夾,其中包含了記錄圖像數據的日志文件。接下來,可以在命令行中使用以下命令啟動 TensorBoard 服務:
tensorboard --logdir=logs
然后在瀏覽器中打開 http://localhost:6006
,就可以在 TensorBoard 的界面中看到名為 "test"
的圖像。
綜上所述,這段代碼的主要目的是使用 SummaryWriter
將本地的一張圖像添加到 TensorBoard 日志中,以便后續進行可視化分析。
這樣我們就可以在tensorboard中看到相應的圖像
然后我們可以變換圖像(使用圖片的相對路徑),然后把參數step=2