pytorch+visdom 에서 간단 한 분류 문 제 를 처리 하 는 예제
시스템:win 10
그래 픽 카드:gtx 965 m
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("<h3 align='center' style='color:blue'>accuracy : {}</h3><br><h3 align='center' style='color:pink'>"
"loss : {:.4f}</h3><br><h3 align ='center' style='color:green'>time : {:.1f}</h3>"
.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 사용:
비교 관찰 해 보면 별 차이 가 없 는 것 같 습 니 다.간단 한 분류 문제(입 출력 이 적 음)를 처리 하 는 것 같 습 니 다.신경 층 과 gpu 는 기계 학습 에 도움 이 되 지 않 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정확도에서 스케일링의 영향데이터셋 스케일링은 데이터 전처리의 주요 단계 중 하나이며, 데이터 변수의 범위를 줄이기 위해 수행됩니다. 이미지와 관련하여 가능한 최소-최대 값 범위는 항상 0-255이며, 이는 255가 최대값임을 의미합니다. 따...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.