Tensorboard--模型可視化工具

Tensorboard

  • 1.tensorboard in tensorflow
    • 1.1 tensorboard的啟動過程
    • 1.2 tf.summary 可視化類型
    • 1.3 tf.summary 使用demo
  • 2.tensorboard in pytorch
    • 2.1 SummaryWriter 使用demo1
    • 2.2 tSummaryWriter 使用demo2
    • 2.3 tensorboard 數據再讀取

tensorboard in tensorflow :tensorboard 是一套用于tensorflow訓練過程可視化工具,能夠可視化模型的結構,參數,損失函數等。最常用于記錄訓練過程中參數和損失函數值的變化,用來反饋模型性能指標的變化。

TensorBoard github readme–基礎概念、操作,tf.summary.xxx
Get started with TensorBoard–圖像、網絡圖、網絡參數的可視化

tensorboard in pytorch: 有多種方式來使用tensorboard。本文想推薦的是通過 TensorboardX [第三方庫] 來使用tensorboard。底層實際還是tensorflow的tensorboard. 在pytorch 代碼框架下想要使用tensorboard 的話,需安裝以下兩個包。 pip install tensorboardX、pip install tensorflow # cpu 版本即可。

PyTorch 自帶 TensorBoard 使用教程 – from torch.utils.tensorboard import SummaryWriter
PyTorch 使用 TensorboardX 進行網絡可視化–from tensorboardX import SummaryWriter

(pytorch 和 tensorflow 使用tensorboard 之間的差別后續在整理。本文先著重于整理tensor low中tensor board的使用。)

從標黃的三個地方可以看出,Summary這個對象蠻重要的。

1.tensorboard in tensorflow

1.1 tensorboard的啟動過程

# 1.創建writer,用于寫日志文件
writer=tf.summary.FileWriter('/path/to/logs', tf.get_default_graph())
# 2.保存日志文件
writer.close()
# 3.運行可視化命令,啟動服務
tensorboard –logdir /path/to/logs
# 4.打開可視化界面
通過瀏覽器打開服務器訪問端口http://xxx.xxx.xxx.xxx:6006

參考文檔–Tensorboard 詳解(上篇)

1.2 tf.summary 可視化類型

Tensorboard 需要將可視化的數據存盤,這些數據來自 summary操作[summary ops]。 summary操作和tensorflow的其他ops性質是一致的,它能夠產生序列化的protobufs數據,然后使用summary.FileWriter寫入磁盤。

tensorboard支持以下操作,也就是tensor board能夠可視化的對象類型。

tf.summary.FileWriter()    # 指定一個文件用來保存圖,可以調用其add_summary()方法將訓練過程數據保存在filewriter指定的文件中,詳見使用demo
tf.summary.scalar          # 用于追蹤模型的loss,
tf.summary.image
tf.summary.audio
tf.summary.text
tf.summary.histogram
tf.summary.merge_all      # 可以將所有summary全部保存到磁盤

tf.summary.scalar、tf.summary.histogram
建議給每類數據賦予一個tag, scalar 和 histogram 的標簽里如果有/, 這些數據在存儲的時候會存入對應的目錄文件中。

1.3 tf.summary 使用demo

自動管理: tf.summary.merge_all(),猜測是直接將訓練輸出到tensor board中

summary_writer = tf.summary.FileWriter(dir, flush_secs=60)
summary_writer.add_graph(sess.graph)   #添加graph圖
tf.summary.scalar('loss', loss)
tf.summary.scalar('accuracy', accuracy)
sum_ops = tf.summary.merge_all()      #自動管理,就是說要算loss 和 accuracy 唄
metall = sess.run(sum_ops, feed_dict={X: batch_x_test, Y: batch_y_test, keep_prob: 1.})
summary_writer.add_summary(metall, global_step=step) # 寫入文件

手動管理:

summary_writer = tf.summary.FileWriter(dir', flush_secs=60)
summary_writer.add_graph(sess.graph)        #添加graph圖
loss_scalar = tf.summary.scalar('loss', loss)
accuracy_scalar = tf.summary.scalar('accuracy', accuracy)
loss_metall, accuracy_metall, = sess.run([loss_scalar, accuracy_scalar], feed_dict={X: batch_x_test, Y: batch_y_test, keep_prob: 1.})
summary_writer.add_summary(loss_metall, global_step=step)     # 寫入文件
summary_writer.add_summary(accuracy_metall, global_step=step) # 寫入文件

參考文檔:
Tensorflow學習筆記——Summary用法
tf.summary.merge_all()

構建更復雜的圖的代碼demo

2.tensorboard in pytorch

2.1 SummaryWriter 使用demo1

from tensorboardX import SummaryWriter
writer1 = SummaryWriter('runs/exp')       # 日志保存在‘runs/exp’路徑下
writer2 = SummaryWriter()                 # 默認將使用‘runs/日期時間’路徑來保存日志
writer3 = SummaryWriter(comment='resnet') # 使用 runs/日期時間-comment 路徑來保存日志# 調用 SummaryWriter 實例的各種 add_something 方法向日志中寫入不同類型的數據# 標量
writer1.add_scalar(tag, scalar_value, global_step=None, walltime=None)
# tag 子圖標識。相同tag的saclar被放在了同一張圖表中,方便對比觀察
# scalar_value 要求float類型。如果是tensor,則需要調用.item() 方法獲取其數值。# 圖像
writer1.add_image(tag, img_tensor, global_step=None, walltime=None, dataformats='CHW')
# img_tensor (torch.Tensor / numpy.array): 圖像數據
# dataformats (string, optional): 圖像數據的格式# 直方圖
writer1.add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None)
# values (torch.Tensor, numpy.array, or string/blobname): 用來構建直方圖的數據# 網絡結構
writer1.add_graph(model, input_to_model=None, verbose=False, **kwargs)
# model (torch.nn.Module): 待可視化的網絡模型
# input_to_model (torch.Tensor or list of torch.Tensor, optional): 待輸入神經網絡的變量或一組變量# 嵌入向量 (embedding),作用:高維特征使用PCA、t-SNE等方法降維至二維平面或三維空間顯示,還可觀察每一個數據點在降維前的特征空間的K近鄰情況。
writer1.add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None)
# 可以運行一下參考論文中的demo 加深印象

參考論文:
詳解PyTorch項目使用TensorboardX進行訓練可視化

2.2 tSummaryWriter 使用demo2

1.記錄數據

from tensorboardX import SummaryWriter
# 設置路徑
# 數據將存在代碼運行文件目錄下的./run/xxxyyy/下的文件中,其中run文件目錄,xxx附加名稱是自動生成的
path = “yyy” 
selfwriter = SummaryWriter(comment=os.path.split(path)
# 添加要觀察數據add_scalar方法保證實時觀察
# global_step 數據步長
selfwriter.add_scalar("Grad/gradD", d_grad_mean, global_step=dis_iter# ations)
....
selfwriter.add_scalar("Loss/lossD", loss_D, global_step=dis_iterations)
....

2.顯示數據:切換至./run/xxxpath/下,運行以下命令,在輸出信息中打開對應的網頁鏈接

tensorboard --logdir .

2.3 tensorboard 數據再讀取

使用tensorboard 記錄實驗數據,可以啟動服務后,在網頁上實時看到被記錄指標的變換情況。有時需操作記錄下來的數據,那么就涉及到tensorboar 數據再讀取問題。

參考博文:https://blog.csdn.net/nima1994/article/details/82844988#commentBox
讀取的接口的github 庫:https://github.com/tensorflow/tensorboard/blob/master/tensorboard/backend/event_processing/event_accumulator.py

from tensorboard.backend.event_processing import event_accumulator
import matplotlib.pyplot as plt
# 加載日志數據
path = "./runs/xxxyyy/events.out.tfevents.1609854743.pp-System-Product-Name"
ea = event_accumulator.EventAccumulator(path)
# 數據再載入
ea.Reload()
# 輸出所有圖對應的keys,之后會依據這個keys取出對應的數據
print(ea.scalars.Keys())grad_d = ea.scalars.Items('Grad/gradD')
grad_g = ea.scalars.Items('Grad/gradG')
nd, ng = len(grad_d), len(grad_g)
# 數據長度,event_accumulator默認的數據載入壓縮比為500:1,最多載入10000個點
# 所以數據很多的話。最多也就是載入10000個點,我是有后續的點被舍棄掉了么?兩個都是10000,但是數據量明明不一樣?
print(nd,ng)
# 數據后加工,這里就是展示了繪制
# 數據是[(.step, .value),(),()] 的形式存的
figure = plt.figure()
axes1 = figure.add_subplot(2,1,1)
axes2 = figure.add_subplot(2,1,2)
axes1.plot([i.step for i in grad_d], [i.value for i in grad_d])
axes2.plot([i.step for i in grad_g], [i.value for i in grad_g])
axes1.set_title("grad d")
axes2.set_title("grad g")
plt.savefig("grad_any.png")

下圖中上下兩子圖都包含1萬個點,那只能說明采樣率不同?(60萬個點采1萬個Vs 12萬個點采1萬個)

在這里插入圖片描述

如何實現的自動采樣率?修改總的采樣點數,還需要查看官網接口。(具體效果沒有驗證過)
初步查看應該修改event_accumulator.EventAccumulator(path)類實例話時的參數size_guidance,不傳入時默認為:

DEFAULT_SIZE_GUIDANCE = {COMPRESSED_HISTOGRAMS: 500,IMAGES: 4,AUDIO: 4,SCALARS: 10000,HISTOGRAMS: 1,TENSORS: 10,
}

tf.summary.merge_all 可以將所有summary全部保存到磁盤,以便tensorboard顯示。
這個tensorbord 可以顯示模型結構?
再看一看這個玩意
summary.merge_all() 的用法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444645.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444645.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444645.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

opencv findContours 報錯_acrt_first_block == header

報錯_acrt_first_block header 之前一直使用OpenCV3.3VS2015 void AOIAlgorithm::findUnits(Mat& blkGray, vector<vector<cv::Point>> & blkContours) {Mat blkOBW;blur(blkGray, blkGray, cv::Size(5, 5));threshold(blkGray, blkOBW, 0, 255, CV_THR…

TensorFlow(2)-訓練數據載入

tensorflow 訓練數據載入1. tf.data.Dataset2. dataset 創建數據集的方式2.1 tf.data.Dataset.from_tensor_slices()2.2 tf.data.TextLineDataset()2.3 tf.data.FixedLengthRecordDataset()2.4 tf.data.TFRecordDataset()3. dateset 迭代操作iterator3.1 make_one_shot_iterato…

leetcode66. 加一

給定一個由整數組成的非空數組所表示的非負整數&#xff0c;在該數的基礎上加一。 最高位數字存放在數組的首位&#xff0c; 數組中每個元素只存儲單個數字。 你可以假設除了整數 0 之外&#xff0c;這個整數不會以零開頭。 示例 1: 輸入: [1,2,3] 輸出: [1,2,4] 解釋: 輸入…

設備硬件加密方法

在機器視覺或者一些傳統制造業行業里經常牽扯到軟件加密算法,或者一些簡單的加密,比如相機綁定,或者USB接口綁定之類的,那么針對這些硬件設備綁定加密方式,我這里簡單的提供一個方法來實現: 方法很簡單,從設備管理器里查找關心的USB設備,對比PID,VID和全球唯一標識GU…

addr2line 和 tombstone問題分析

做安卓開發的同學對于tombstone問題應該是很熟悉了,但是對于如何排查和分析值得總結和整理的,這篇文章對入門安卓開發的技術來說是個入門指導,同時對安卓開發的中高級開發也有借鑒。 首先我們來說下什么是tombstone : 當一個動態庫(native 程序)開始執行時,系統會注冊…

TensorFlow(3)-與訓練相關的操作

與訓練相關的操作0 gpu版本的tensor flow安裝1. tf.control_dependencies(update_ops)0 gpu版本的tensor flow安裝 cuda10.2 conda create -n py27 python2.7 conda activate py27 pip install tensorflow1.14.0 驗證 gpu版本的tensor可用 import tensorflow as tf print(tf.t…

leetcode14. 最長公共前綴

編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴&#xff0c;返回空字符串 ""。 示例 1: 輸入: ["flower","flow","flight"] 輸出: "fl" 示例 2: 輸入: ["dog","racecar",&quo…

Android在子線程里使用Toast報錯Can't toast on a thread that has not called Looper.prepare()

在接android SDK的時候有時候為了方便debug調試查看&#xff0c;通過Toast輸出相關信息&#xff0c; 實際上這個是在子線程中輸出的&#xff0c;在logcat里查看有如下報錯java.lang.RuntimeException: Cant toast on a thread that has not called Looper.prepare()。 解決辦法…

虛擬機安裝windows2012和虛擬機安裝國產系統deepin

虛擬機安裝windows2012和虛擬機安裝國產系統deepin 一.安裝windows20121.安裝VMWare虛擬機2.1.注意點一&#xff1a;VMWare虛擬網卡2.2.注意點二&#xff1a;配置虛擬網絡編輯器3.安裝配置Windows Server 2012 R2 二.虛擬機安裝deepin1.deepin官網下載ios鏡像2.deepin下載合適的…

leetcode876 鏈表中間的結點

給定一個帶有頭結點 head 的非空單鏈表&#xff0c;返回鏈表的中間結點。 如果有兩個中間結點&#xff0c;則返回第二個中間結點。 示例 1&#xff1a; 輸入&#xff1a;[1,2,3,4,5] 輸出&#xff1a;此列表中的結點 3 (序列化形式&#xff1a;[3,4,5]) 返回的結點值為 3 。 …

TensorFlow(4)-TFRecord

TFRecord1. tf.train.Example1.1 tfrecord 數據范式轉化1.2 demo 數據集構建2. TFRecord 讀寫2.1 寫入1-tf.io.TFRecordWriter()2.3 讀取-tf.data.TFRecordDataset()2.3 data -> dataset -> 存儲-tf.data.experimental.TFRecordWriter()tfrecord 用于存儲二進制序列數據的…

Playfab開發(一)如何調用PlayFab接口

本人從事海外游戲制作和發行,參與了不少海外研發團隊studio的項目,這里我將個人接觸到的一些使用Playfab開發的項目心得分享給大家。 PlayFab簡介 playfab是一家主要為游戲開發人員提供游戲開發和管理的跨平臺工具及服務的公司, PlayFab正在構建當今游戲所需的所有基于云的…

PlayFab(二)如何通過Demo應用來進一步熟悉Playfab

有時候剛開始接觸新的平臺會兩眼一麻黑,不過這個文章希望能給讀者一些啟示,Playfab默認會給開發者提供一個應用,這里我暫且叫他”我的游戲“; 我通過官網提供的DEMO測試地址: https://www.vanguardoutrider.com/#/ 來為該應用配置服務器。 如果你是第一次進入這個頁面想為…

leetcode718 最長重復子數組

給兩個整數數組 A 和 B &#xff0c;返回兩個數組中公共的、長度最長的子數組的長度。 示例 1: 輸入: A: [1,2,3,2,1] B: [3,2,1,4,7] 輸出: 3 解釋: 長度最長的公共子數組是 [3, 2, 1]。 說明: 1 < len(A), len(B) < 1000 0 < A[i], B[i] < 100 思路&#xf…

PaperNotes(20)-TGAN-DeliGAN

GAN的文章2篇1.從RS-GAN說起2.TGANAbstract1 Reviews of GANs2.3 Relate to Turing Test3 Related Works4 Experiments4.1 Design of Discriminator5.Conclusion3 DeliGANAbstract1. Introduction2. Related Work3.GAN4.本文方法5.實驗5.1. Modified Inception Score5.2. Toy D…

ubuntu apache配置負載均衡篇(一)

首先下載apache2服務器 apt-get install apache2 使得代理生效: a2enmod proxy proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_http 修改配置 sudo vi /etc/apache2/mods-enabled/proxy.conf ProxyRequests Off <Proxy *> Order deny,allow Deny …

leetcode108 將有序數組轉換為二叉搜索樹

將一個按照升序排列的有序數組&#xff0c;轉換為一棵高度平衡二叉搜索樹。 本題中&#xff0c;一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。 示例: 給定有序數組: [-10,-3,0,5,9], 一個可能的答案是&#xff1a;[0,-3,9,-10,null,…

ubuntu apache配置負載均衡篇(二)

上篇文章說到了基本的負載均衡配置,這次再說下負載均衡里的反向代理配置項參數:ProxyPass與ProxyPassReverse及ProxyPassMatch 1、ProxyPass: 語法:ProxyPass [path] !|url 它主要是用作URL前綴匹配,不能有正則表達式,它里面配置的Path實際上是一個虛擬的路徑,在反向…

MachineLearning(12)- RNN-LSTM-tf.nn.rnn_cell

RNN-LSTM1.RNN2.LSTM3. tensorflow 中的RNN-LSTM3.1 tf.nn.rnn_cell.BasicRNNCell()3.2 tf.nn.rnn_cell.BasicLSTMCell()3.3 tf.nn.dynamic_rnn()--多步執行循環神經網絡1.RNN RNN-Recurrent Neural Network-循環神經網絡 RNN用來處理序列數據。多層感知機MLP層間節點全聯接&…

判斷微信小游戲用戶是否真的分享

作為開發者,傳統的微信分享拿到分享的狀態碼并不能完全確定玩家是否分享到好友或群。 因此一部分開發者給分享做一個定時器,超過5秒就判定玩家分享成功,實際上很容易被玩家利用。 因此我們可以利用微信分享過程中的圖片url鏈接做文章: 1.需要一個web服務器,提供給客戶端…