【pytorch24】Visdom可視化

TensorboardX

pytorch有一個工具借鑒了tensorboard

pip install tensorboardX
在這里插入圖片描述
有查看變量的數值、監聽曲線等功能

如何使用
在這里插入圖片描述
新建SummaryWriter()實例

要把監聽的數據,比如說要監聽dummy_s1[0](y
坐標)存放到data/scalar1中,n_iter是哪一個epoch的(即x坐標,n_iter時間戳的數據)

tensorboard本質上是抽取numpy的數據,如果要跟tensor直接做轉換的話,需要把tensor轉換到cpu上

Visdom

visdom可以接收tensor,且運行效率更高,因為tensorboard會把數據寫到文件里面去,經常會導致監聽文件非常大
在這里插入圖片描述
如何安裝visdompip install visdom

安裝完成之后需要開啟監聽的進程,visdom本質上是可一個web服務器,程序向web服務器丟數據,這個web服務器會把數據渲染到網頁上去
,因此確保程序在運行之前要確保開啟visdompython -m visdom.server

在這里插入圖片描述
在windows上可能會遇到這個問題

如果遇到這個問題,從0開始安裝

  1. 先把現在安裝的visdom卸載pip unstall visdom
  2. 從官方網頁下載最新的源代碼visdom
  3. 進入visdom目錄中運行pip install -e.

在這里插入圖片描述

這樣安裝會省略很多麻煩

退回到用戶目錄運行python -m visdom.server
在這里插入圖片描述
在這里插入圖片描述

功能

畫一條曲線,比如train loss

在這里插入圖片描述
創建一條直線viz.line([0.],[0.],win='train_loss',opts=dict(title='train loss')) 首先給一個初始的點,這里只有一個點,第一個[0.]的意思是Y賦值為0,第二個[0.]的意思是X賦值為0,win是一個唯一的標識符可以理解為id,還有另外一個id叫env,visdom每一個大的窗口是一個env,這個窗口可以理解為程序,一個程序里面可能有很多小窗口,env不指定的話默認是main,會在main窗口里面創建小窗口,查詢現有的窗口有沒有train_loss這個id,沒有的話就會創建一個win,opts會配置額外的配置信息,比如把窗口名字命名成train_loss,可以很好的識別倒是的train_loss,還是test_loss

通過這句話會創建一個train_loss窗口,點只有[0,0]

viz.line([loss.item()],[global_step],win='train loss',update='append'),在訓練的時候把數據逐步添加進去,X坐標是[global_step](時間戳),Y坐標是[loss.item()],對于非image數據傳入的還是一個numpy數據,但是image可以直接接收tensor,需要指定update操作時append,添加在當前的直線后面
在這里插入圖片描述

多條曲線

在這里插入圖片描述
一個曲線占用一個窗口的話,會使得窗口非常多

比如要同時看train loss 和 test loss,此時Y要同時傳入兩個數值[Y1,Y2],legend接收list,代表了Y1的label和Y2的label

在這里插入圖片描述
兩條線范圍不一樣,loss是0到100,accuracy是0到1,看起來會很奇怪

visual X

可視化

在這里插入圖片描述
data是[batch,1,28,28]的tensor,如果使用tensorboardX的話必須復制到cpu上,即.cpu().numpy()數據才能傳給tensorboard

還可以看字符串,把pred的值轉換成string類型
在這里插入圖片描述

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transformsfrom visdom import Visdomdef load_data(batch_size):train_loader = torch.utils.data.DataLoader(datasets.MNIST('mnist_data', train=True, download=True,transform=transforms.Compose([transforms.ToTensor(),# transforms.Normalize((0.1307,), (0.3081,))])),batch_size=batch_size, shuffle=True)test_loader = torch.utils.data.DataLoader(datasets.MNIST('mnist_data', train=False, transform=transforms.Compose([transforms.ToTensor(),# transforms.Normalize((0.1307,), (0.3081,))])),batch_size=batch_size, shuffle=True)return train_loader, test_loaderclass MLP(nn.Module):def __init__(self):super(MLP, self).__init__()self.model = nn.Sequential(nn.Linear(784, 200),nn.LeakyReLU(inplace=True),nn.Linear(200, 200),nn.LeakyReLU(inplace=True),nn.Linear(200, 10),nn.LeakyReLU(inplace=True),)def forward(self, x):x = self.model(x)return xdef training(train_loader, device, net, viz, global_step):for batch_idx, (data, target) in enumerate(train_loader):data = data.view(-1, 28 * 28)data, target = data.to(device), target.cuda()logits = net(data)loss = criteon(logits, target)optimizer.zero_grad()loss.backward()# print(w1.grad.norm(), w2.grad.norm())optimizer.step()global_step += 1viz.line([loss.item()], [global_step], win='train_loss', update='append')if batch_idx % 100 == 0:print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(epoch, batch_idx * len(data), len(train_loader.dataset), 100. * batch_idx / len(train_loader),loss.item()))def testing(test_loader, device, net, viz, global_step):test_loss = 0correct = 0for data, target in test_loader:data = data.view(-1, 28 * 28)data, target = data.to(device), target.cuda()logits = net(data)test_loss += criteon(logits, target).item()pred = logits.argmax(dim=1)correct += pred.eq(target).float().sum().item()viz.line([[test_loss, correct / len(test_loader.dataset)]],[global_step], win='test', update='append')viz.images(data.view(-1, 1, 28, 28), win='x')viz.text(str(pred.detach().cpu().numpy()), win='pred',opts=dict(title='pred'))test_loss /= len(test_loader.dataset)print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(test_loss, correct, len(test_loader.dataset),100. * correct / len(test_loader.dataset)))global netif __name__ == '__main__':batch_size = 200learning_rate = 0.01epochs = 10train_loader, test_loader = load_data(batch_size)device = torch.device('cuda:0')net = MLP().to(device)optimizer = optim.SGD(net.parameters(), lr=learning_rate)criteon = nn.CrossEntropyLoss().to(device)# 需要啟動Visdom# python -m visdom.serverviz = Visdom()viz.line([0.], [0.], win='train_loss', opts=dict(title='train loss'))viz.line([[0.0, 0.0]], [0.], win='test', opts=dict(title='test loss&acc.',legend=['loss', 'acc.']))global_step = 0for epoch in range(epochs):training(train_loader, device, net, viz, global_step)testing(test_loader, device, net, viz, global_step)

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

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

相關文章

ASPICE是汽車軟件開發中的質量保證流程

復雜的汽車系統對軟件的質量和可靠性提出了極高的要求。為了確保汽車軟件的高質量和可靠性,ASPICE(Automotive SPICE,汽車軟件過程改進和能力確定)流程應運而生。本文將對ASPICE流程進行詳細介紹。 一、ASPICE概述 ASPICE是汽車行…

【React】React18 Hooks 之 useContext

目錄 useContext1、Provider和 useContext2、Provider 和Consumer3、Provider 嵌套4、React.createContext提供的Provider和class的contextType屬性5、讀、寫Context(1)父組件修改Context(2)子組件修改Context 好書推薦 useContex…

NPDP有什么價值?究竟值不值得去考?

NPDP其實就是產品經理國際資格認證,是美國產品開發管理協會發起的,集理論、方法和實踐一體,在新產品開發方面有一個很全面的知識體系。是國際公認的新產品開發專業認證,具有權威性。 NPDP能夠很好地幫你在做新產品的道路上少走彎…

【已解決】騰訊云安裝了redis,但是本地訪問不到,連接不上

匯總了我踩過的所有問題。 查看配置文件redis.conf 1、把bind 127.0.0.1給注釋掉(前面加個#就是)或者改成bind 0.0.0.0,因為剛下載時它是默認只讓本地訪問。(linux查找文檔里的內容可以輸入/后面加需要匹配的內容,然后…

Perl 語言開發(七):哈希和關聯數組

目錄 1. 哈希與關聯數組的概述 2. 哈希的基本操作 2.1 創建哈希 2.2 訪問哈希值 2.3 添加和修改哈希值 2.4 刪除哈希值 2.5 檢查哈希中是否存在某個鍵 3. 迭代哈希 3.1 使用 keys 和 values 3.2 使用 each 4. 復雜數據結構中的哈希 4.1 哈希的數組 4.2 哈希的哈希…

clickhouse-jdbc-bridge rce

clickhouse-jdbc-bridge 是什么 JDBC bridge for ClickHouse. It acts as a stateless proxy passing queries from ClickHouse to external datasources. With this extension, you can run distributed query on ClickHouse across multiple datasources in real time, whic…

Java基礎-組件及事件處理(上)

(創作不易,感謝有你,你的支持,就是我前行的最大動力,如果看完對你有幫助,請留下您的足跡) 目錄 Swing 概述 MVC 架構 Swing 特點 控件 SWING UI 元素 JFrame SWING 容器 說明 常用方法 示例&a…

服務器信息獲取工具

功能介紹 SSH連接到遠程服務器: 用戶可以輸入目標服務器的IP地址、用戶名、密碼以及SSH端口(默認22)。 工具會嘗試連接到遠程服務器,并在連接失敗時顯示錯誤信息。 運行命令并返回輸出: 工具可以在遠程服務器上運…

python (必看)10個提升接口自動化編寫效率的腳本!

親愛的開發者們,👋 在快速迭代的軟件開發周期中,接口自動化測試扮演著至關重要的角色。今天,我們將分享10個實用的Python小腳本,它們能夠顯著提升你編寫接口自動化測試的效率。無論是初學者還是資深工程師,…

某音商品詳情數據實時API接入

在抖音平臺上,商品詳情數據接口(通常被提及為“item get”或”item_get_app“API)并不是直接對公眾或第三方開發者開放的。抖音的API和接口主要用于其內部系統、合作伙伴以及通過其官方渠道(如抖音小店、抖音開放平臺等&#xff0…

算法體系-26 第二十六節:第26節:單調棧結構 (5節)

一 單調棧知識講解 1.1描述 一個數組里面想的到每個位置與他最近的左邊和右邊比他小的最近的信息 1.2 分析 通過單調棧的特點,for遍歷數組中的每個數,當前數來的時候對比單調棧中的數進行每個數的左右判斷完滿足條件的進行更新到當前i種的 int[][] re…

WPScan漏洞掃描工具的介紹及使用

目錄 1. 介紹2. 常用參數 1. 介紹 WPScan是Kali Linux默認自帶的一款漏洞掃描工具,它采用Ruby編寫,能夠掃描WordPress網站中的多種安全漏洞,其中包括WordPress本身的漏洞、插件漏洞和主題漏洞,最新版本WPScan的數據庫中包含超過18…

采用3種稀疏降噪模型對心電信號進行降噪(Matlab R2021B)

心電信號采集自病人體表,是一種無創性的檢測手段。因此,心電信號采集過程中,本身也已經包含了機體內部其他生命活動帶來的噪聲。同時,由于采集設備和環境中存在電流的變化,產生電磁發射等物理現象,會對心電…

學習測試7-ADB的使用

ADB是什么? ADB,即 Android Debug Bridge(安卓調試橋) 是一種允許模擬器或已連接的 Android 設備進行通信的命令行工具,它可為各種設備操作提供便利,如安裝和調試應用,并提供對 Unix shell&…

最新全國1-5級標準河流水系矢量數據

2023最新全國一級~五級標準河流水系 shp 矢量數據 2023最新全國一級~五級標準河流水系 shp 矢量數據 Arcgis 五級河流水系全國合集和按省區分 坐標系:wgs84 更新年份:2023年 包含20230SM提取全國超詳細水體 Arcgis 矢量數據&a…

AcWing 849. Dijkstra求最短路 I

給定一個 n 個點 m 條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。 請你求出 11 號點到 n 號點的最短距離,如果無法從 1 號點走到 n 號點,則輸出 ?1。 輸入格式 第一行包含整數 n 和 m。 接下來 m 行每行包含三個整…

Python從Excel表中查找指定數據填入新表

#讀取xls文件中的數據 import xlrd file "原表.xls" wb xlrd.open_workbook(file) #讀取工作簿 ws wb.sheets()[0] #選第一個工作表 data [] for row in range(7, ws.nrows): name ws.cell(row, 1).value.strip() #科室名稱 total1 ws.cell(row, 2…

TIA博途與威綸通觸摸屏無實物仿真調試的具體方法示例

TIA博途與威綸通觸摸屏無實物仿真調試的具體方法示例 準備條件: TIA PORTAL V16 S7-PLCSIM V16 EasyBuilderPro V6.9.1 NetToPLCsim V1.2.5 如有需要,可以在這個鏈接中下載 NetToPLCSim - Browse Files at SourceForge.net538 weekly downloads3 weekly downloads12 weekly d…

QTransform 解析

實例: 以點(100,100) 圍繞點(200,150)旋轉45后的坐標, 采用QTransform 類方法實現移動變換. Test1 采用一個QTransform 對象,通過連續的變換后,發現最后的結果與預先的不一致. 原因: 當trans1.translate(-200., -150.); 后,坐標系的原點變成了-200,-150. 之后trans1.rotat…

LoveDA: 遙感土地覆蓋數據集的領域自適應語義分割

引入了土地覆蓋域自適應語義分割(LoveDA)數據集來推進語義和可轉移學習。LoveDA數據集包含來自三個不同城市的5987張高分辨率圖像和166768個帶注釋的對象。與現有數據集相比,LoveDA數據集包含兩個領域(城市和農村),這帶來了相當大的挑戰,因為…