1 引言
? ? ? 我們都知道tensorflow框架可以使用tensorboard這一高級的可視化的工具罕模,為了使用tensorboard這一套完美的可視化工具评腺,未免可以將其應(yīng)用到Pytorch中,用于Pytorch的可視化淑掌。這里特別感謝Github上的解決方案:?https://github.com/lanpa/tensorboardX蒿讥。
? ? ? 本文主要是針對該解決方案提供一些介紹。
? ? ?TensorboardX支持scalar,?image,?figure,?histogram,?audio,?text,?graph,?onnx_graph,?embedding,?pr_curve?and?videosummaries等不同的可視化展示方式抛腕,具體介紹移步至項目Github 觀看詳情芋绸。
2 環(huán)境安裝
本教程代碼環(huán)境依賴:
python 3.6+
Pytorch 0.4.0+
tensorboardX:? ?pip install tensorboardX、pip install tensorflow
3 代碼教程
? ? ? ?TensorboardX可以提供中很多的可視化方式兽埃,本文主要介紹scalar 和 graph侥钳,其他類型相似适袜。
3.1 scalar教程
? ? ? ? 對上述代碼進行解釋柄错,首先導(dǎo)入:from tensorboardXimport SummaryWriter,然后定義一個SummaryWriter() 實例苦酱。在SummaryWriter()上鼠標ctrl+b我們可以看到SummaryWriter()的參數(shù)為:def __init__(self, log_dir=None, comment='', **kwargs): 其中l(wèi)og_dir為生成的文件所放的目錄售貌,comment為文件名稱。默認目錄為生成runs文件夾目錄疫萤。我們運行上述代碼:生成結(jié)果為:
? ? ? 當(dāng)我們?yōu)镾ummaryWriter(comment='base_scalar')颂跨。生成結(jié)果為:
? ? ? 當(dāng)我們?yōu)镾ummaryWriter(log_dir='scalar') 添加log_dir參數(shù),可以看到第二條數(shù)據(jù)的文件名稱包括了base_scalar值扯饶。生成結(jié)果目錄為:
? ? ? ?接著解釋writer.add_scalar('scalar/test', np.random.rand(), epoch)恒削,這句代碼的作用就是,將我們所需要的數(shù)據(jù)保存在文件里面供可視化使用尾序。 這里是Scalar類型钓丰,所以使用writer.add_scalar(),其他的隊形使用對應(yīng)的函數(shù)每币。第一個參數(shù)可以簡單理解為保存圖的名稱携丁,第二個參數(shù)是可以理解為Y軸數(shù)據(jù),第三個參數(shù)可以理解為X軸數(shù)據(jù)兰怠。當(dāng)Y軸數(shù)據(jù)不止一個時梦鉴,可以使用writer.add_scalars().運行代碼之后生成文件之后,我們在runs同級目錄下使用命令行:tensorboard --logdir runs. 當(dāng)SummaryWriter(log_dir='scalar')的log_dir的參數(shù)值 存在時揭保,將tensorboard --logdir runs 改為 tensorboard --logdir 參數(shù)值
? ? ? ?最后調(diào)用writer.close()肥橙。
? ? ? 點擊鏈接即可看到我們的最終需要的可視化結(jié)果。
? ? ? ?可以分別點擊對應(yīng)的圖片查看詳情秸侣〈娣ぃ可以看到生成的Scalar名稱為'scalar/test'與'scalar/test'一致娜庇。注:可以使用左下角的文件選擇你想顯示的某個或者全部圖片。
3.2 Graph教程
? ? ? ?首先我們定義一個神經(jīng)網(wǎng)絡(luò)取名為Net1方篮。然后將其添加到tensorboard可是可視化中名秀。
with SummaryWriter(comment='Net1')as w:
? ? ? ? ?w.add_graph(model, (dummy_input,))
? ? ? 我們重點關(guān)注最后兩句話,其中使用了python的上下文管理藕溅,with 語句匕得,可以避免因w.close未寫造成的問題。推薦使用此方式巾表。
? ? ? ?因為這是一個神經(jīng)網(wǎng)絡(luò)架構(gòu)汁掠,所以使用?w.add_graph(model, (dummy_input,)),其中第一個參數(shù)為需要保存的模型集币,第二個參數(shù)為輸入值考阱,元祖類型。打開tensorvboard控制臺鞠苟,可得到如下結(jié)果乞榨。
????????點擊Net1部分可以將其網(wǎng)絡(luò)展開,查看網(wǎng)絡(luò)內(nèi)部構(gòu)造当娱。
????????其他部分可以繼續(xù)一次展開查看詳情吃既。
3.3 網(wǎng)絡(luò)訓(xùn)練綜合教程
????????解釋完上述兩部分知識之后,我們可以綜合運用上述兩部分內(nèi)容跨细,實現(xiàn)線性擬合的訓(xùn)練過程中的loss可視化和模型的保存鹦倚。
????????我們將運行過程中l(wèi)oss和model分別保存,最后打開tensorboard控制臺冀惭,可以得到模型結(jié)果和loss的結(jié)果為下圖.
????????注:不同的graph的可視化可以使用上圖Run旁邊的下拉框選擇震叙。
3.4 Tensorboard綜合Demo
????????本Demo代碼為TensorboardX提供的官方Demo代碼。
最終運行的所有可視化結(jié)果為:
4 結(jié)束語
????????本文是我寫的第一篇比較完整的文章散休,大家如果覺得幫助到了你媒楼,幫忙點個贊唄。
????????本文所有的代碼鏈接為:https://github.com/miaoshuyu/pytorch-tensorboardx-visualization(對你有用的話溃槐,麻煩點個小星星唄)
? ? ? ? 若轉(zhuǎn)載匣砖,請標明出處,謝謝;璧巍猴鲫!