PyTorch:Softmax 다 분류 실전 조작
MNIST 데이터 세트
MNIST 데이터 세트(손 으로 쓴 디지털 데이터 세트)는 미국 국가 표준 과 기술 연구소,National Institute of Standards and Technology(NIST)에서 나 왔 다.훈련 집(training set)은 250 개의 서로 다른 손 으로 쓴 숫자 로 구성 되 어 있 으 며 이 중 50%는 고등 학생 이다.인구 센서 스 국(the Census Bureau)의 50%가 근무 하고 있 으 며,테스트 세트(test set)도 같은 비율의 필기 숫자 데이터 다.MNIST 데이터 세트 다운로드 주소:http://yann.lecun.com/exdb/mnist/。손 으로 쓴 숫자의 MNIST 데이터 베 이 스 는 60,000 개의 훈련 집 샘플 과 10,000 개의 테스트 집 샘플 을 포함한다.
그 중:
train-images-idx 3-ubyte.gz(훈련 데이터 세트 사진)
train-labels-idx1-ubyte.gz(훈련 데이터 세트 태그 유형)
t10k-images-idx3-ubyte.gz:(테스트 데이터 세트)
t10k-labels-idx1-ubyte.gz(테스트 데이터 세트 태그 클래스)
MNIST 데이터 세트 는 10 개의 카 테 고리(0 에서 9)를 포함 한 전형 적 인 이미지 데이터 세트 입 니 다.모든 그림 을 벡터 로 끌 어 당 기 는 것 은 다음 그림 784 차원 벡터 를 1 층 입력 특징 으로 한다.
Softmax 분류
softmax 함수 의 본질은 하나의 K 차원 의 임 의 실수 벡터 를 다른 K 차원 의 실수 벡터 로 압축 하 는 것 이다.그 중에서 벡터 중의 모든 요소 의 수 치 는(0,1)사이 에 있 고 압축 된 K 개의 수 치 는 1(확률 분포 로 변 함)과 같다.Softmax 를 선택 하여 다 중 분 류 를 할 때 값 의 크기 에 따라 다 중 분류 작업 을 할 수 있 습 니 다.예 를 들 어 가중치 가 가장 큰 1 차원 입 니 다.softmax 소개 와 공식 인터넷 이 많 습 니 다.여 기 는 소개 하지 않 겠 습 니 다.다음은 Pytorch 를 사용 하여 다 층 네트워크(4 개의 숨겨 진 층,마지막 층 softmax 확률 을 획일 화)를 정의 합 니 다.출력 층 은 10 가지 로 10 가지 에 대응 합 니 다.
PyTorch 실전
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms
from torch.autograd import Variable
# Training settings
batch_size = 64
# MNIST Dataset
train_dataset = datasets.MNIST(root='./mnist_data/',
train=True,
transform=transforms.ToTensor(),
download=True)
test_dataset = datasets.MNIST(root='./mnist_data/',
train=False,
transform=transforms.ToTensor())
# Data Loader (Input Pipeline)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
batch_size=batch_size,
shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset,
batch_size=batch_size,
shuffle=False)
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.l1 = nn.Linear(784, 520)
self.l2 = nn.Linear(520, 320)
self.l3 = nn.Linear(320, 240)
self.l4 = nn.Linear(240, 120)
self.l5 = nn.Linear(120, 10)
def forward(self, x):
# Flatten the data (n, 1, 28, 28) --> (n, 784)
x = x.view(-1, 784)
x = F.relu(self.l1(x))
x = F.relu(self.l2(x))
x = F.relu(self.l3(x))
x = F.relu(self.l4(x))
return F.log_softmax(self.l5(x), dim=1)
#return self.l5(x)
model = Net()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)
def train(epoch):
# barch_idx
for batch_idx, (data, target) in enumerate(train_loader):
data, target = Variable(data), Variable(target)
optimizer.zero_grad()
output = model(data)
# loss
loss = F.nll_loss(output, target)
loss.backward()
# update
optimizer.step()
if batch_idx % 200 == 0:
print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
epoch, batch_idx * len(data), len(train_loader.dataset),
100. * batch_idx / len(train_loader), loss.data[0]))
def test():
test_loss = 0
correct = 0
#
for data, target in test_loader:
data, target = Variable(data, volatile=True), Variable(target)
output = model(data)
# sum up batch loss
test_loss += F.nll_loss(output, target).data[0]
# get the index of the max
pred = output.data.max(1, keepdim=True)[1]
correct += pred.eq(target.data.view_as(pred)).cpu().sum()
test_loss /= len(test_loader.dataset)
print('
Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)
'.format(
test_loss, correct, len(test_loader.dataset),
100. * correct / len(test_loader.dataset)))
for epoch in range(1,6):
train(epoch)
test()
:
Train Epoch: 1 [0/60000 (0%)] Loss: 2.292192
Train Epoch: 1 [12800/60000 (21%)] Loss: 2.289466
Train Epoch: 1 [25600/60000 (43%)] Loss: 2.294221
Train Epoch: 1 [38400/60000 (64%)] Loss: 2.169656
Train Epoch: 1 [51200/60000 (85%)] Loss: 1.561276
Test set: Average loss: 0.0163, Accuracy: 6698/10000 (67%)
Train Epoch: 2 [0/60000 (0%)] Loss: 0.993218
Train Epoch: 2 [12800/60000 (21%)] Loss: 0.859608
Train Epoch: 2 [25600/60000 (43%)] Loss: 0.499748
Train Epoch: 2 [38400/60000 (64%)] Loss: 0.422055
Train Epoch: 2 [51200/60000 (85%)] Loss: 0.413933
Test set: Average loss: 0.0065, Accuracy: 8797/10000 (88%)
Train Epoch: 3 [0/60000 (0%)] Loss: 0.465154
Train Epoch: 3 [12800/60000 (21%)] Loss: 0.321842
Train Epoch: 3 [25600/60000 (43%)] Loss: 0.187147
Train Epoch: 3 [38400/60000 (64%)] Loss: 0.469552
Train Epoch: 3 [51200/60000 (85%)] Loss: 0.270332
Test set: Average loss: 0.0045, Accuracy: 9137/10000 (91%)
Train Epoch: 4 [0/60000 (0%)] Loss: 0.197497
Train Epoch: 4 [12800/60000 (21%)] Loss: 0.234830
Train Epoch: 4 [25600/60000 (43%)] Loss: 0.260302
Train Epoch: 4 [38400/60000 (64%)] Loss: 0.219375
Train Epoch: 4 [51200/60000 (85%)] Loss: 0.292754
Test set: Average loss: 0.0037, Accuracy: 9277/10000 (93%)
Train Epoch: 5 [0/60000 (0%)] Loss: 0.183354
Train Epoch: 5 [12800/60000 (21%)] Loss: 0.207930
Train Epoch: 5 [25600/60000 (43%)] Loss: 0.138435
Train Epoch: 5 [38400/60000 (64%)] Loss: 0.120214
Train Epoch: 5 [51200/60000 (85%)] Loss: 0.266199
Test set: Average loss: 0.0026, Accuracy: 9506/10000 (95%)
Process finished with exit code 0
훈련 교체 횟수 가 증가 함 에 따라 테스트 집의 정확 도 는 여전히 매우 높 아 졌 다.또한 교체 횟수 가 5 일 때 이런 간단 한 네트워크 를 사용 하면 95%의 정확도 에 이 를 수 있다.이상 의 PyTorch:Softmax 다 분류 실전 작업 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 었 으 면 좋 겠 습 니 다.여러분 들 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
IceVision에서 형식별 데이터를 읽는 방법2021년에 가장 멋있는 물체 검출 프레임워크라고 해도 과언이 아닌 IceVision을 사용해, VOC format과 COCO format의 데이터 세트에 대해 Object Detection을 간단하게 실시하기 위한...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.