您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何在pytorch中使用 visdom 處理簡單分類,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
1.PyTorch是相當簡潔且高效快速的框架;2.設計追求最少的封裝;3.設計符合人類思維,它讓用戶盡可能地專注于實現自己的想法;4.與google的Tensorflow類似,FAIR的支持足以確保PyTorch獲得持續的開發更新;5.PyTorch作者親自維護的論壇 供用戶交流和求教問題6.入門簡單
環境
系統 : 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
數據準備
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()
可視化如下看一下:
visdom可視化準備
先建立需要觀察的windows
viz = visdom.Visdom() colors = np.random.randint(0,255,(4,3)) #顏色隨機 #線圖用來觀察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"] ), )
效果如下:
邏輯回歸處理
輸入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##############")
優化器和loss函數:
loss_f = nn.CrossEntropyLoss() optimizer_l = optim.SGD(logstic.parameters(), lr=0.001)
訓練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()
訓練過成觀察及可視化:
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"])) #這里的數據如果用gpu跑會出錯,要把數據換成cpu的數據 .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運行一次,結果如下:
然后用gpu運行一下,結果如下:
發現cpu的速度比gpu快很多,但是我聽說機器學習應該是gpu更快啊,百度了一下,知乎上的答案是:
我的理解就是gpu在處理圖片識別大量矩陣運算等方面運算能力遠高于cpu,在處理一些輸入和輸出都很少的,還是cpu更具優勢。
添加神經層:
net = nn.Sequential( nn.Linear(2, 10), nn.ReLU(), #激活函數 nn.Linear(10, 4) )
添加一層10單元神經層,看看效果是否會有所提升:
使用cpu:
使用gpu:
上述內容就是如何在pytorch中使用 visdom 處理簡單分類,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。