最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python第三方庫(kù)visdom的使用入門(mén)教程

 更新時(shí)間:2021年05月19日 11:03:09   作者:All_In_gzx_cc  
Visdom:一個(gè)靈活的可視化工具,可用來(lái)對(duì)于 實(shí)時(shí),富數(shù)據(jù)的 創(chuàng)建,組織和共享,本文主要介紹了python第三方庫(kù)visdom的使用入門(mén)教程,分享給大家,感興趣的可以了解一下

概述

Visdom:一個(gè)靈活的可視化工具,可用來(lái)對(duì)于 實(shí)時(shí),富數(shù)據(jù)的 創(chuàng)建,組織和共享。支持Torch和Numpy還有pytorch。

visdom
可以實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)的可視化,對(duì)科學(xué)實(shí)驗(yàn)有很大幫助。我們可以遠(yuǎn)程的發(fā)送圖片和數(shù)據(jù),并進(jìn)行在ui界面顯示出來(lái),檢查實(shí)驗(yàn)結(jié)果,或者debug.

要用這個(gè)先要安裝,對(duì)于python模塊而言,安裝都是蠻簡(jiǎn)單的:

pip install visdom

安裝完每次要用直接輸入代碼打開(kāi):

python -m visdom.server

然后根據(jù)提示在瀏覽器中輸入相應(yīng)地址即可,默認(rèn)地址為:http://localhost:8097/

使用示例

1. vis.text(), vis.image()

import visdom  # 添加visdom庫(kù)
import numpy as np  # 添加numpy庫(kù)
vis = visdom.Visdom(env='test')  # 設(shè)置環(huán)境窗口的名稱(chēng),如果不設(shè)置名稱(chēng)就默認(rèn)為main
vis.text('test', win='main')  # 使用文本輸出
vis.image(np.ones((3, 100, 100)))  # 繪制一幅尺寸為3 * 100 * 100的圖片,圖片的像素值全部為1

其中:

visdom.Visdom(env=‘命名新環(huán)境')
vis.text(‘文本', win=‘環(huán)境名')
vis.image(‘圖片',win=‘環(huán)境名')

在這里插入圖片描述

2. 畫(huà)直線 .line() 一條

import visdom
import numpy as np
vis = visdom.Visdom(env='my_windows')  # 設(shè)置環(huán)境窗口的名稱(chēng),如果不設(shè)置名稱(chēng)就默認(rèn)為main
x = list(range(10))
y = list(range(10))
# 使用line函數(shù)繪制直線 并選擇顯示坐標(biāo)軸
vis.line(X=np.array(x), Y=np.array(y), opts=dict(showlegend=True))

vis.line([x], [y], opts=dict(showlegend=True)[展示說(shuō)明])

在這里插入圖片描述

兩條

import visdom
import numpy as np
vis = visdom.Visdom(env='my_windows')
x = list(range(10))
y = list(range(10))
z = list(range(1,11))
vis.line(X=np.array(x), Y=np.column_stack((np.array(y), np.array(z))),  opts=dict(showlegend=True))

vis.line([x], [y=np.column_stack((np.array(y),np.array(z),np.array(還可以增加)))])
np.column_stack(a,b), 表示兩個(gè)矩陣按列合并

在這里插入圖片描述

sin(x)曲線

import visdom
import torch
vis = visdom.Visdom(env='sin')
x = torch.arange(0, 100, 0.1)
y = torch.sin(x)
vis.line(X=x,Y=y,win='sin(x)',opts=dict(showlegend=True))

在這里插入圖片描述

持續(xù)更新圖表

import visdom
import numpy as np
vis = visdom.Visdom(env='my_windows')
# 利用update更新圖像
x = 0
y = 0
my_win = vis.line(X=np.array([x]), Y=np.array([y]), opts=dict(title='Update'))
for i in range(10):
    x += 1
    y += i
    vis.line(X=np.array([x]), Y=np.array([y]), win=my_win, update='append')

使用“append”追加數(shù)據(jù),“replace”使用新數(shù)據(jù),“remove”用于刪除“name”中指定的跟蹤。

在這里插入圖片描述

vis.images()

import visdom
import torch
# 新建一個(gè)連接客戶(hù)端
# 指定env = 'test1',默認(rèn)是'main',注意在瀏覽器界面做環(huán)境的切換
vis = visdom.Visdom(env='test1')
# 繪制正弦函數(shù)
x = torch.arange(1, 100, 0.01)
y = torch.sin(x)
vis.line(X=x,Y=y, win='sinx',opts={'title':'y=sin(x)'})
# 繪制36張圖片隨機(jī)的彩色圖片
vis.images(torch.randn(36,3,64,64).numpy(),nrow=6, win='imgs',opts={'title':'imgs'})

在這里插入圖片描述

在這里插入圖片描述

繪制loss函數(shù)的變化趨勢(shì)

#繪制loss變化趨勢(shì),參數(shù)一為Y軸的值,參數(shù)二為X軸的值,參數(shù)三為窗體名稱(chēng),參數(shù)四為表格名稱(chēng),參數(shù)五為更新選項(xiàng),從第二個(gè)點(diǎn)開(kāi)始可以更新
vis.line(Y=np.array([totalloss.item()]), X=np.array([traintime]),
                win=('train_loss'),
                opts=dict(title='train_loss'),
                update=None if traintime == 0 else 'append'
                )

對(duì)于Visdom更詳細(xì)的代碼示例詳見(jiàn) 鏈接1

更多介紹詳見(jiàn) 鏈接2

實(shí)際代碼

此代碼出自CycleGAN的 utils.py 里一個(gè)實(shí)現(xiàn)

# 記錄訓(xùn)練日志,顯示生成圖,畫(huà)loss曲線 的類(lèi)
class Logger():
    def __init__(self, n_epochs, batches_epoch):
        '''
        :param n_epochs:  跑多少個(gè)epochs
        :param batches_epoch:  一個(gè)epoch有幾個(gè)batches
        '''
        self.viz = Visdom() # 默認(rèn)env是main函數(shù)
        self.n_epochs = n_epochs
        self.batches_epoch = batches_epoch
        self.epoch = 1 # 當(dāng)前epoch數(shù)
        self.batch = 1 # 當(dāng)前batch數(shù)
        self.prev_time = time.time()
        self.mean_period = 0
        self.losses = {}
        self.loss_windows = {} # 保存loss圖的字典集合
        self.image_windows = {} # 保存生成圖的字典集合

    def log(self, losses=None, images=None):
        self.mean_period += (time.time() - self.prev_time)
        self.prev_time = time.time()

        sys.stdout.write('\rEpoch %03d/%03d [%04d/%04d] -- ' % (self.epoch, self.n_epochs, self.batch, self.batches_epoch))

        for i, loss_name in enumerate(losses.keys()):
            if loss_name not in self.losses:
                self.losses[loss_name] = losses[loss_name].data.item() #這里losses[loss_name].data是個(gè)tensor(包在值外面的數(shù)據(jù)結(jié)構(gòu)),要用item方法取值
            else:
                self.losses[loss_name] = losses[loss_name].data.item()

            if (i + 1) == len(losses.keys()):
                sys.stdout.write('%s: %.4f -- ' % (loss_name, self.losses[loss_name]/self.batch))
            else:
                sys.stdout.write('%s: %.4f | ' % (loss_name, self.losses[loss_name]/self.batch))

        batches_done = self.batches_epoch * (self.epoch - 1) + self.batch
        batches_left = self.batches_epoch * (self.n_epochs - self.epoch) + self.batches_epoch - self.batch
        sys.stdout.write('ETA: %s' % (datetime.timedelta(seconds=batches_left*self.mean_period/batches_done)))

        # 顯示生成圖
        for image_name, tensor in images.items(): # 字典.items()是以list形式返回鍵值對(duì)
            if image_name not in self.image_windows:
                self.image_windows[image_name] = self.viz.image(tensor2image(tensor.data), opts={'title':image_name})
            else:
                self.viz.image(tensor2image(tensor.data), win=self.image_windows[image_name], opts={'title':image_name})

        # End of each epoch
        if (self.batch % self.batches_epoch) == 0: # 一個(gè)epoch結(jié)束時(shí)
            # 繪制loss曲線圖
            for loss_name, loss in self.losses.items():
                if loss_name not in self.loss_windows:
                    self.loss_windows[loss_name] = self.viz.line(X=np.array([self.epoch]), Y=np.array([loss/self.batch]),
                                                                 opts={'xlabel':'epochs', 'ylabel':loss_name, 'title':loss_name})
                else:
                    self.viz.line(X=np.array([self.epoch]), Y=np.array([loss/self.batch]), win=self.loss_windows[loss_name], update='append') #update='append'可以使loss圖不斷更新
                # 每個(gè)epoch重置一次loss
                self.losses[loss_name] = 0.0
            # 跑完一個(gè)epoch,更新一下下面參數(shù)
            self.epoch += 1
            self.batch = 1
            sys.stdout.write('\n')
        else:
            self.batch += 1

train.py中調(diào)用代碼是

# 繪畫(huà)Loss圖
logger = Logger(opt.n_epochs, len(dataloader))

for epoch in range(opt.epoch, opt.n_epochs):
    for i, batch in enumerate(dataloader):
    	
    	......
		
		# 記錄訓(xùn)練日志
            # Progress report (http://localhost:8097) 顯示visdom畫(huà)圖的網(wǎng)址
            logger.log({'loss_G': loss_G, 'loss_G_identity': (loss_identity_A + loss_identity_B),
                        'loss_G_GAN': (loss_GAN_A2B + loss_GAN_B2A),
                        'loss_G_cycle': (loss_cycle_ABA + loss_cycle_BAB), 'loss_D': (loss_D_A + loss_D_B)},
                       images={'real_A': real_A, 'real_B': real_B, 'fake_A': fake_A, 'fake_B': fake_B})

在這里插入圖片描述

到此這篇關(guān)于python第三方庫(kù)visdom的使用入門(mén)教程的文章就介紹到這了,更多相關(guān)python visdom使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?Bytes壓縮新手速成

    Python?Bytes壓縮新手速成

    掌握Python?Bytes壓縮的秘訣,讓你的數(shù)據(jù)輕裝上陣!本指南將帶你一探Bytes壓縮的奧秘,告別臃腫的數(shù)據(jù),快來(lái)發(fā)現(xiàn)如何讓你的代碼和應(yīng)用在性能高速公路上馳騁吧!
    2023-12-12
  • Python+OpenCV圖像處理——實(shí)現(xiàn)直線檢測(cè)

    Python+OpenCV圖像處理——實(shí)現(xiàn)直線檢測(cè)

    這篇文章主要介紹了Python+OpenCV如何實(shí)現(xiàn)直線檢測(cè),幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-10-10
  • python爬取內(nèi)容存入Excel實(shí)例

    python爬取內(nèi)容存入Excel實(shí)例

    這篇文章主要為大家詳細(xì)介紹了python爬取內(nèi)容存入Excel實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • django基于存儲(chǔ)在前端的token用戶(hù)認(rèn)證解析

    django基于存儲(chǔ)在前端的token用戶(hù)認(rèn)證解析

    這篇文章主要介紹了django基于存儲(chǔ)在前端的token用戶(hù)認(rèn)證解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python的@裝飾器的作用小結(jié)

    Python的@裝飾器的作用小結(jié)

    本文給大家講解Python的@裝飾器的用途,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-11-11
  • KMP算法精解及其Python版的代碼示例

    KMP算法精解及其Python版的代碼示例

    KMP算法基本上被人們用作字符串的匹配操作,這里我們就來(lái)介紹KMP算法精解及其Python版的代碼示例,需要的朋友可以參考下
    2016-06-06
  • 解決windows下命令行執(zhí)行python3失效,會(huì)打開(kāi)應(yīng)用商店問(wèn)題

    解決windows下命令行執(zhí)行python3失效,會(huì)打開(kāi)應(yīng)用商店問(wèn)題

    這篇文章主要介紹了解決windows下命令行執(zhí)行python3失效,會(huì)打開(kāi)應(yīng)用商店問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python類(lèi)中方法getitem和getattr詳解

    Python類(lèi)中方法getitem和getattr詳解

    這篇文章主要介紹了Python類(lèi)中方法getitem和getattr詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 使用Python和XPath解析動(dòng)態(tài)JSON數(shù)據(jù)的操作指南

    使用Python和XPath解析動(dòng)態(tài)JSON數(shù)據(jù)的操作指南

    JSON動(dòng)態(tài)數(shù)據(jù)在Python中扮演著重要的角色,為開(kāi)發(fā)者提供了處理實(shí)時(shí)和靈活數(shù)據(jù)的能力,動(dòng)態(tài)JSON數(shù)據(jù)的獲取可能涉及到網(wǎng)絡(luò)請(qǐng)求和API調(diào)用,可以使用Python和XPath來(lái)解析動(dòng)態(tài)JSON數(shù)據(jù),接下來(lái)小編就給大家介紹一下操作步驟
    2023-09-09
  • Python利用matplotlib.pyplot繪圖時(shí)如何設(shè)置坐標(biāo)軸刻度

    Python利用matplotlib.pyplot繪圖時(shí)如何設(shè)置坐標(biāo)軸刻度

    Matplotlib是Python提供的一個(gè)二維繪圖庫(kù),所有類(lèi)型的平面圖,包括直方圖、散點(diǎn)圖、折線圖、點(diǎn)圖、熱圖以及其他各種類(lèi)型,都能由Python制作出來(lái)。本文主要介紹了關(guān)于Python利用matplotlib.pyplot繪圖時(shí)如何設(shè)置坐標(biāo)軸刻度的相關(guān)資料,需要的朋友可以參考下。
    2018-04-04

最新評(píng)論

祥云县| 武陟县| 紫阳县| 永平县| 桦南县| 广西| 宜良县| 抚宁县| 富民县| 屯留县| 大余县| 屯昌县| 吉木乃县| 铁岭县| 饶阳县| 通渭县| 都江堰市| 嘉鱼县| 青河县| 长海县| 慈溪市| 遂川县| 宜阳县| 咸宁市| 建阳市| 玉龙| 华容县| 武冈市| 冕宁县| 乌拉特后旗| 长春市| 大理市| 遂溪县| 神池县| 毕节市| 锡林郭勒盟| 绥德县| 宜阳县| 凭祥市| 原阳县| 隆安县|