亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python的visdom工具怎么使用

發布時間:2022-02-19 16:43:20 來源:億速云 閱讀:245 作者:iii 欄目:開發技術

這篇文章主要講解了“python的visdom工具怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python的visdom工具怎么使用”吧!

概述

Visdom:一個靈活的可視化工具,可用來對于 實時,富數據的 創建,組織和共享。支持Torch和Numpy還有pytorch。

visdom
可以實現遠程數據的可視化,對科學實驗有很大幫助。我們可以遠程的發送圖片和數據,并進行在ui界面顯示出來,檢查實驗結果,或者debug.

要用這個先要安裝,對于python模塊而言,安裝都是蠻簡單的:

pip install visdom

安裝完每次要用直接輸入代碼打開:

python -m visdom.server

然后根據提示在瀏覽器中輸入相應地址即可,默認地址為:http://localhost:8097/

使用示例

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

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

其中:

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

2. 畫直線 .line() 一條

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

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

兩條

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), 表示兩個矩陣按列合并

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))

持續更新圖表

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”追加數據,“replace”使用新數據,“remove”用于刪除“name”中指定的跟蹤。

vis.images()

import visdom
import torch
# 新建一個連接客戶端
# 指定env = 'test1',默認是'main',注意在瀏覽器界面做環境的切換
vis = visdom.Visdom(env='test1')
# 繪制正弦函數
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張圖片隨機的彩色圖片
vis.images(torch.randn(36,3,64,64).numpy(),nrow=6, win='imgs',opts={'title':'imgs'})

繪制loss函數的變化趨勢

#繪制loss變化趨勢,參數一為Y軸的值,參數二為X軸的值,參數三為窗體名稱,參數四為表格名稱,參數五為更新選項,從第二個點開始可以更新
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'
                )

實際代碼

此代碼出自CycleGAN的 utils.py 里一個實現

# 記錄訓練日志,顯示生成圖,畫loss曲線 的類
class Logger():
    def __init__(self, n_epochs, batches_epoch):
        '''
        :param n_epochs:  跑多少個epochs
        :param batches_epoch:  一個epoch有幾個batches
        '''
        self.viz = Visdom() # 默認env是main函數
        self.n_epochs = n_epochs
        self.batches_epoch = batches_epoch
        self.epoch = 1 # 當前epoch數
        self.batch = 1 # 當前batch數
        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('Epoch %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是個tensor(包在值外面的數據結構),要用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形式返回鍵值對
            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: # 一個epoch結束時
            # 繪制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圖不斷更新
                # 每個epoch重置一次loss
                self.losses[loss_name] = 0.0
            # 跑完一個epoch,更新一下下面參數
            self.epoch += 1
            self.batch = 1
            sys.stdout.write('
')
        else:
            self.batch += 1

train.py中調用代碼是

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

for epoch in range(opt.epoch, opt.n_epochs):
    for i, batch in enumerate(dataloader):
    	
    	......
		
		# 記錄訓練日志
            # Progress report (http://localhost:8097) 顯示visdom畫圖的網址
            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})

感謝各位的閱讀,以上就是“python的visdom工具怎么使用”的內容了,經過本文的學習后,相信大家對python的visdom工具怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥中县| 涞水县| 甘南县| 奉新县| 冕宁县| 广西| 明水县| 名山县| 前郭尔| 枣强县| 曲阳县| 集贤县| 礼泉县| 平乐县| 武夷山市| 天等县| 溆浦县| 恩平市| 伊吾县| 博客| 桓仁| 诸暨市| 清远市| 霍城县| 阿勒泰市| 利辛县| 铜梁县| 斗六市| 道孚县| 巴彦淖尔市| 滕州市| 玉林市| 新化县| 临沭县| 夹江县| 邵东县| 甘南县| 桃园县| 竹山县| 宝山区| 新巴尔虎右旗|