溫馨提示×

溫馨提示×

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

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

如何在pytorch中使用 visdom 處理簡單分類

發(fā)布時間:2021-05-11 18:09:37 來源:億速云 閱讀:238 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章為大家展示了如何在pytorch中使用 visdom 處理簡單分類,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

pytorch的優(yōu)點

1.PyTorch是相當(dāng)簡潔且高效快速的框架;2.設(shè)計追求最少的封裝;3.設(shè)計符合人類思維,它讓用戶盡可能地專注于實現(xiàn)自己的想法;4.與google的Tensorflow類似,F(xiàn)AIR的支持足以確保PyTorch獲得持續(xù)的開發(fā)更新;5.PyTorch作者親自維護(hù)的論壇 供用戶交流和求教問題6.入門簡單

環(huán)境

系統(tǒng) : win 10
顯卡:gtx965m
cpu :i7-6700HQ
python 3.61
pytorch 0.3

包引用

import torch
from torch.autograd import Variable
import torch.nn.functional as F
import numpy as np
import visdom
import time
from torch import nn,optim

數(shù)據(jù)準(zhǔn)備

use_gpu = True
ones = np.ones((500,2))
x1 = torch.normal(6*torch.from_numpy(ones),2)
y1 = torch.zeros(500) 
x2 = torch.normal(6*torch.from_numpy(ones*[-1,1]),2)
y2 = y1 +1
x3 = torch.normal(-6*torch.from_numpy(ones),2)
y3 = y1 +2
x4 = torch.normal(6*torch.from_numpy(ones*[1,-1]),2)
y4 = y1 +3 

x = torch.cat((x1, x2, x3 ,x4), 0).float()
y = torch.cat((y1, y2, y3, y4), ).long()

可視化如下看一下:

如何在pytorch中使用 visdom 處理簡單分類

visdom可視化準(zhǔn)備

先建立需要觀察的windows

viz = visdom.Visdom()
colors = np.random.randint(0,255,(4,3)) #顏色隨機(jī)
#線圖用來觀察loss 和 accuracy
line = viz.line(X=np.arange(1,10,1), Y=np.arange(1,10,1))
#散點圖用來觀察分類變化
scatter = viz.scatter(
  X=x,
  Y=y+1, 
  opts=dict(
    markercolor = colors,
    marksize = 5,
    legend=["0","1","2","3"]),)
#text 窗口用來顯示loss 、accuracy 、時間
text = viz.text("FOR TEST")
#散點圖做對比
viz.scatter(
  X=x,
  Y=y+1, 
  opts=dict(
    markercolor = colors,
    marksize = 5,
    legend=["0","1","2","3"]
  ),
)

效果如下:

如何在pytorch中使用 visdom 處理簡單分類

邏輯回歸處理

輸入2,輸出4

logstic = nn.Sequential(
  nn.Linear(2,4)
)

gpu還是cpu選擇:

if use_gpu:
  gpu_status = torch.cuda.is_available()
  if gpu_status:
    logstic = logstic.cuda()
    # net = net.cuda()
    print("###############使用gpu##############")
  else : print("###############使用cpu##############")
else:
  gpu_status = False
  print("###############使用cpu##############")

優(yōu)化器和loss函數(shù):

loss_f = nn.CrossEntropyLoss()
optimizer_l = optim.SGD(logstic.parameters(), lr=0.001)

訓(xùn)練2000次:

start_time = time.time()
time_point, loss_point, accuracy_point = [], [], []
for t in range(2000):
  if gpu_status:
    train_x = Variable(x).cuda()
    train_y = Variable(y).cuda()
  else:
    train_x = Variable(x)
    train_y = Variable(y)
  # out = net(train_x)
  out_l = logstic(train_x)
  loss = loss_f(out_l,train_y)
  optimizer_l.zero_grad()
  loss.backward()
  optimizer_l.step()

訓(xùn)練過成觀察及可視化:

if t % 10 == 0:
  prediction = torch.max(F.softmax(out_l, 1), 1)[1]
  pred_y = prediction.data
  accuracy = sum(pred_y ==train_y.data)/float(2000.0)
  loss_point.append(loss.data[0])
  accuracy_point.append(accuracy)
  time_point.append(time.time()-start_time)
  print("[{}/{}] | accuracy : {:.3f} | loss : {:.3f} | time : {:.2f} ".format(t + 1, 2000, accuracy, loss.data[0],
                                  time.time() - start_time))
  viz.line(X=np.column_stack((np.array(time_point),np.array(time_point))),
       Y=np.column_stack((np.array(loss_point),np.array(accuracy_point))),
       win=line,
       opts=dict(legend=["loss", "accuracy"]))
   #這里的數(shù)據(jù)如果用gpu跑會出錯,要把數(shù)據(jù)換成cpu的數(shù)據(jù) .cpu()即可
  viz.scatter(X=train_x.cpu().data, Y=pred_y.cpu()+1, win=scatter,name="add",
        opts=dict(markercolor=colors,legend=["0", "1", "2", "3"]))
  viz.text("<h4 align='center' style='color:blue'>accuracy : {}</h4><br><h4 align='center' style='color:pink'>"
       "loss : {:.4f}</h4><br><h4 align ='center' style='color:green'>time : {:.1f}</h4>"
       .format(accuracy,loss.data[0],time.time()-start_time),win =text)

我們先用cpu運(yùn)行一次,結(jié)果如下:

如何在pytorch中使用 visdom 處理簡單分類

然后用gpu運(yùn)行一下,結(jié)果如下:

如何在pytorch中使用 visdom 處理簡單分類

發(fā)現(xiàn)cpu的速度比gpu快很多,但是我聽說機(jī)器學(xué)習(xí)應(yīng)該是gpu更快啊,百度了一下,知乎上的答案是:

如何在pytorch中使用 visdom 處理簡單分類

我的理解就是gpu在處理圖片識別大量矩陣運(yùn)算等方面運(yùn)算能力遠(yuǎn)高于cpu,在處理一些輸入和輸出都很少的,還是cpu更具優(yōu)勢。

添加神經(jīng)層:

net = nn.Sequential(
  nn.Linear(2, 10),
  nn.ReLU(),  #激活函數(shù)
  nn.Linear(10, 4)
)

添加一層10單元神經(jīng)層,看看效果是否會有所提升:

使用cpu:

如何在pytorch中使用 visdom 處理簡單分類 

使用gpu:

如何在pytorch中使用 visdom 處理簡單分類

上述內(nèi)容就是如何在pytorch中使用 visdom 處理簡單分類,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI