在Pytorch中使用Tensorboard可視化訓練過程

這篇是我對嗶哩嗶哩up主 @霹靂吧啦Wz 的視頻的文字版學習筆記 感謝他對知識的分享

本節課我們來講一下如何在pytouch當中去使用我們的tensorboard

對我們的訓練過程進行一個可視化

左邊有一個visualizing?models?data?and?training?with?tensorboard

主要是這么一個教程

那么這里我想問一下大家

平時你們在使用tensorboard的時候

主要會去使用它的哪些功能

反正在我個人使用當中呢

我主要會使用其中的四個功能

第一個就是去保存一下網絡的一個結構圖

比如說在我們tensorboard的graphs當中

會有我們模型的一個結構圖

然后這個圖當中呢其實就能夠比較清晰地看到我們整個模型

它的搭建的每一個模塊

第二個呢就是保存我們在訓練過程當中

訓練集它的一個損失loss?還有驗證集的accuracy?還有我們的學習率變化等等

在我們的scalars當中

那么這里呢就比如說我們這里有tracy

還有我們的learning?rate

還有我們的train?loss

那么第三個就是保存權重數值

它的一個分布在tensorboard當中的histogram當中

在這個里面呢一般就是保存我們每一個層結構

它的一個權重的數值的一個分布

那么最后一個呢就是保存我們預測圖片的一些信息

就比如說在我們的image當中保存有我們訓練的每一個step對于我們給定的一些圖片

它的一個預測的一個結果

首先我們這里需要建一個文件夾

叫做plot?image

那么在這個文件夾當中呢

我們所保存的圖片是我們待會兒在訓練過程當中

會對我們的這些圖片進行預測

由于本節課訓練是以我們之前的花分類數據集為例

所以呢我們這里需要先提前準備好我們的花分類數據集

我這里有給下載花分類數據集的一個地址

下載完之后呢

我們這里的image?root就指向我們解壓之后文件夾它的一個路徑

那么準備好我們的數據集之后呢

接下來就是關于預訓練權重了

那么這里也是根據你個人的需求來進行選擇了

如果你是需要去使用它的預訓練權重的話

你就在這個pytorch官方的這個地址上去下載這個權重文件

然后將這里的defaul指向你剛剛下載這個權重路徑就可以了

那如果你不去指認的話

那么它默認的就是不去使用任何預訓練權重了

那么本教程其實是沒有去使用這個預訓練權重的

因為如果你使用了預訓練權重之后呢

你會發現它的accuracy?loss基本上是沒有變化的

因為在你訓練的第一個epoch

它的準確率就已經達到97%了

所以基本看不出有什么變化

這里我不去使用預訓練權重

就可以看到它的loss變化以及accuracy變化

那么這個參數freeze?layers

就是說是否去凍結我們的除全連接層以外的所有網絡結構啊

這里默認是false

就是不去凍結

如果你設置為true的話

它就會去單獨訓練最后這個全連接層

之前的權重是不會去訓練的

那么如果你使用這個預訓練權重的話

你可以將這里設置為true

可以加快模型的訓練

首先我們這里的summary?writer

它是來自于touch?utils的tensorboard的模塊當中導入進來的

所以我們這里先實例化我們的tensorboard對象

這里我們需要插入這個參數呢

就是說我們將我們的tensorboard的文件保存在哪里

我這里就是保存在當前項目目錄下的runs

然后flower?experiment這個文件夾當中

那么當我們實例化之后呢

它就會在我們當前項目想創建一個runs這個文件

然后會將我們對應的tbd文件保存在flower?experiment當中

實例化我們的tensorboard對象之后呢

這里有去添加我們網絡的一個結構圖

在我們實例化我們的模型之后呢

緊接著在這里我創建了一個initial?image

它就是一個零矩陣了

這里為什么要去創建一個initial?image呢

因為在我們添加這個graph的時候

我們是需要將我們這個initial?image傳入到我們的模型當中

讓它進行一個這樣傳播

然后會根據我們輸入的數據

在模型中正向傳播的一個流程來創建我們的網絡結構圖

所以我們這里傳入的數據只要和我們的圖片大小相同就可以了

所以呢我這里就有創建一個initial?image

那么我們通過我們實例化的tensorboard

它的add?graph這個函數項目的模型

以及我們初始的一個圖片傳入進去就ok了

在我們的這個位置有使用到add?scaler

那么這里呢其實就是在我們訓練的每個epoch之后

也就是在我們驗證完我們的模型之后

我們會去保存一下我們當前這一輪訓練的訓練集的平均損失loss

還有我們驗證集的accuracy

以及我們的learning?rate

我們傳入有這五個變量

第一個那就是我們實例化的模型

第二個image

第二對應的就是我們剛剛這個plot?image它的一個根目錄

第三個transform對應著我們驗證集所使用的一個圖像預處理

第四個參數對應就是我們總共要展示多少張圖片

第五參數就是我們說使用的device信息

然后接下來我們再往下走就到了我們這里的add?figure

也就是添加我們預測plot?image文件夾下這幾張圖片

第一個是我們這張圖片它的一個名稱

它的一個標題

然后第二個參數對應的就是figure這個對象

第三個global?step朋友們是通過epoch來指定的

首先在我們訓練過程當中呢

我們會去生成一個json文件

這個json文件保存的就是我們類別索引

以及它的一個名稱的一個對應關系

那么這里呢只要是正常訓練的話

就會生成它

那如果它不存在的話

就說明訓練過程是有問題的

那么這里就會報出一個錯誤

就是沒有找到這個文件

然后接下來我們就會讀取這個文件

我們通過touch?stack方法將我們的images

也就是我們剛剛所保存的一個圖片的列表進行一個拼接

拼接成一個batch

那么這里大家需要注意的是

我們的stack方法會對我們的數據增加一個新的維度

那么通過我們剛才預處理之后

其實我們的每一個圖片就變成了一個tensor的格式

它的shape就是3x224x224

那么這里呢我們會在它的最前面新增一個維度

那么就變成了拼接之后呢

它就變成了batch?x?3x224x224

我已經將我之前訓練好的結果保存在對應的文件夾下面了

那么接下來我們就來打開tenor?board來看一下

那么首先進入我們的項目根目錄

然后呢進入我們的runs文件

然后打開終端

打開終端之后呢

然后就輸入tensorboard

然后logdir

然后就輸入當前路徑就可以了

然后接下來大家需要注意的是

我們還需要再加上一個參數啊

就是這個samples?per?plugin

然后在這個參數當中

我們需要指定一下我們所展示圖片的一個數目

如果我們不指定這個參數的話

它默認會去采樣十張圖片

因為在我這個訓練過程當中呢

如果按照默認參數來的話

只能看到十張

所以我這里會加上這么一個參數

指定為50之后呢

它就會展示所有的圖片了

那么回車之后呢

終端就提示我們在local?host?端口可以看到

那么我們就進入瀏覽器

輸入local?host?6006回車

然后就可以看到我們訓練過程當中保存了一系列的數據了

那么在這個blog當中

我們可以看到我們那個數據的流向

就是根據這個箭頭可以判斷出數據的流向

我們的初始化方法中只定義了一個relu

也就是說我們在我們主干分支當中所使用的這個relu結構

與我們主干分支與捷徑分支相加之后所經過的機函的relu是同一個

所以這里會有一個往回流的一個箭頭

然后經過relu之后呢

它就會輸入到下一個模塊當中

如果你想為了這個圖看起來更好看的話

其實你可以在定義block的時候

定義兩個relu

主分支上使用主分支這個relu

然后相加之后再使用另外一個relu

這樣的話就不會出現像我們這個箭頭往回指的這個情況

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

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

相關文章

Flutter一直 Running Gradle task ‘assembleDebug‘

Flutter升級到3.13.7之后,一直Running Gradle task ‘assembleDebug’,之前運行還沒問題。 試了各種方法,比如添加阿里云鏡像,flutter\packages\flutter_tools\gradle目錄下修改build.gradle.kts文件,都不行。 參考大佬…

Termux+Hexo結合內網穿透輕松實現安卓手機搭建博客網站發布公網訪問

文章目錄 前言 1.安裝 Hexo2.安裝cpolar3.遠程訪問4.固定公網地址 前言 Hexo 是一個用 Nodejs 編寫的快速、簡潔且高效的博客框架。Hexo 使用 Markdown 解析文章,在幾秒內,即可利用靚麗的主題生成靜態網頁。 下面介紹在Termux中安裝個人hexo博客并結合…

ArkTS語言難嗎?鴻蒙指南

HarmonyOS的開發語言是ArkTS、JS(JavaScript)。 ArkTS簡介 ArkTS是HarmonyOS優選的主力應用開發語言。ArkTS圍繞應用開發在TypeScript(簡稱TS)生態基礎上做了進一步擴展,繼承了TS的所有特性,是TS的超集。因此,在學習…

骨傳導耳機品牌排行榜哪家強?盤點2024年骨傳導耳機排行榜前十

隨著科技的發展,耳機已經從單純的音樂播放工具,演變為我們生活中不可或缺的伴侶。其中,骨傳導耳機憑借其獨特的傳聲方式,逐漸受到越來越多消費者的青睞。骨傳導耳機通過骨頭直接傳遞聲音,避免了外耳道感染和中耳疾病&a…

Java中不同轉換符實現不同數據類型到字符串的轉換

String類的format()方法用于創建格式化的字符串以及連接多個字符串對象。熟悉C語言的同學應該記得C語言的sprintf()方法,兩者有類似之處。format()方法有兩種重載形式。 format(String format, Object... args) 新字符串使用本地語言環境,制定字符串格式…

(企業項目)SpringBoot實現雪花算法id注冊功能

以下是使用 Spring Boot 實現雪花算法的完整代碼。 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class SnowflakeGeneratorApplication {public static void mai…

Java 簡易版 TCP(一對一)聊天

客戶端 import java.io.*; import java.net.Socket; import java.util.Date; import javax.swing.*;public class MyClient {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;private Date data;p…

刪除有序數組中的重復元素-練習雙指針編程最好的一道題-費元星

這是練習編成雙指針最好的一道題,邏輯簡單,優化簡單。 簡單理解:采用雙指針,總左邊進行開始,如果有新元素則將前面移動到后面。然后加一個剪枝操作,如果前后元素大于1,再移動。 給你一個 非嚴格…

檢驗科LIS系統源碼,臨床檢驗數據的采集、存貯、處理、提取、傳輸、匯總

檢驗科LIS系統源碼 臨床檢驗信息管理系統是醫院信息管理系統的重要組成部分,實現對LIS系統所涉及的人流、物流、財流進行綜合管理,對在臨床檢驗活動各階段中產生的數據進行采集、存貯、處理、提取、傳輸、匯總、加工生成各種信息,從而為醫院的…

freeswitch編譯mod_av支持webrtc MCU通話

系統環境 一、FS相關網站 二、第三方庫安裝 1.apt安裝 2.指定版本sofia-sip安裝 3.指定版本spandsp安裝 4.指定版本libks安裝 5.指定版本openssl安裝 三、指定版本FS安裝 1.CPPFLAGS配置 2.編譯器版本 3.FS配置編譯 四、FS,fs_cli運行,模塊加載 附錄 1.安…

word一鍵接受所有修訂并保留修訂痕跡

目的:讓word修訂插入的內容在接受修訂后保留痕跡。 文章目錄 目的:讓word修訂插入的內容在接受修訂后保留痕跡。1. 打開批注的word文件2. 同時按住:*AltF11*,然后右鍵:Normal -->插入--> 模塊3. 在出現的代碼框中…

代碼隨想錄算法訓練營第五十九天【單調棧part2】 | 503.下一個更大元素II、42. 接雨水

503.下一個更大元素II 題目鏈接 力扣(LeetCode)官網 - 全球極客摯愛的技術成長平臺 求解思路 重點在如何處理循環數組。 方案一: 直接將兩個數組拼接在一起,然后使用單調棧求下一個最大值。 方案二: 在遍歷的過…

elementUI中的 “this.$confirm“ 基本用法,“this.$confirm“ 調換 “確認“、“取消“ 按鈕的位置

文章目錄 前言具體操作總結 前言 elementUI中的 "this.$confirm" 基本用法&#xff0c;"this.$confirm" 調換 "確認"、"取消" 按鈕的位置 具體操作 基本用法 <script> this.$confirm(這是數據&#xff08;res.data&#xff0…

使用ASIRequest庫進行Objective-C網絡爬蟲示例

在Objective-C中&#xff0c;ASIHTTPRequest是一個非常受歡迎的庫&#xff0c;用于處理HTTP請求。它可用于下載網頁內容&#xff0c;處理API請求&#xff0c;甚至進行復雜的網絡交互。下面是一個簡單的示例&#xff0c;展示了如何使用ASIHTTPRequest庫來爬取網頁代碼。 首先&a…

使用項目管理工具進行新媒體運營管理的策略與方法

使用Zoho Projects項目管理工具&#xff0c;新媒體運營可輕松駕馭從策劃選題、撰寫到排期發布的全流程。運用項目管理工具對新媒體運營進行精細化管理&#xff0c;助力團隊更高效地規劃、執行和追蹤各項任務與活動。 以下是運用項目管理工具管理新媒體運營的妙招&#xff1a; 1…

oracle 下載java之前版本

登錄oracle官網&#xff1a;Oracle | Cloud Applications and Cloud Platform 點擊resource 進入該頁面 點擊這個 出現之前版本

初識Linux:權限(2)

目錄 權限 用戶&#xff08;角色&#xff09; 文件權限屬性 文件的權限屬性&#xff1a; 有無權限的區別&#xff1a; 身份匹配&#xff1a; 擁有者、所屬組的修改&#xff1a; 八進制的轉化&#xff1a; 文件的類型&#xff1a; x可執行權限為什么不能執行&#xf…

03DockerFile

03DockerFile 1.DockerFile的概念 用來構建docker?鏡像的構建文件,由一系列參數和命令構成的腳本 大體總覽: ?? ? 1.構建過程 要遵循的規則: ?? 2.執行流程 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

Java并發編程指南:實現高效并發操作

引言&#xff1a; 在當今的軟件開發領域&#xff0c;多核處理器的普及使得并發編程成為了一個重要的話題。并發編程是指多個線程同時執行不同的任務&#xff0c;以提高程序的性能和響應能力。然而&#xff0c;并發編程也帶來了一系列的挑戰&#xff0c;如線程安全、死鎖等問題。…

Docker安裝postgres最新版

1. postgres數據庫 PostgreSQL是一種開源的關系型數據庫管理系統&#xff08;RDBMS&#xff09;&#xff0c;它是一種高度可擴展的、可靠的、功能豐富的數據庫系統。以下是關于PostgreSQL的一些介紹&#xff1a; 開源性&#xff1a;PostgreSQL是一個開源項目&#xff0c;可以…