Pytorch入门之mnist分类实例
发布时间:2020-05-23 23:47:48 所属栏目:Python 来源:互联网
导读:本文实例为大家分享了Pytorch入门之mnist分类的具体代码,供大家参考,具体内容如下
|
本文实例为大家分享了Pytorch入门之mnist分类的具体代码,供大家参考,具体内容如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'denny'
__time__ = '2017-9-9 9:03'
import torch
import torchvision
from torch.autograd import Variable
import torch.utils.data.dataloader as Data
train_data = torchvision.datasets.MNIST(
'./mnist',train=True,transform=torchvision.transforms.ToTensor(),download=True
)
test_data = torchvision.datasets.MNIST(
'./mnist',train=False,transform=torchvision.transforms.ToTensor()
)
print("train_data:",train_data.train_data.size())
print("train_labels:",train_data.train_labels.size())
print("test_data:",test_data.test_data.size())
train_loader = Data.DataLoader(dataset=train_data,batch_size=64,shuffle=True)
test_loader = Data.DataLoader(dataset=test_data,batch_size=64)
class Net(torch.nn.Module):
def __init__(self):
super(Net,self).__init__()
self.conv1 = torch.nn.Sequential(
torch.nn.Conv2d(1,32,3,1,1),torch.nn.ReLU(),torch.nn.MaxPool2d(2))
self.conv2 = torch.nn.Sequential(
torch.nn.Conv2d(32,64,torch.nn.MaxPool2d(2)
)
self.conv3 = torch.nn.Sequential(
torch.nn.Conv2d(64,torch.nn.MaxPool2d(2)
)
self.dense = torch.nn.Sequential(
torch.nn.Linear(64 * 3 * 3,128),torch.nn.Linear(128,10)
)
def forward(self,x):
conv1_out = self.conv1(x)
conv2_out = self.conv2(conv1_out)
conv3_out = self.conv3(conv2_out)
res = conv3_out.view(conv3_out.size(0),-1)
out = self.dense(res)
return out
model = Net()
print(model)
optimizer = torch.optim.Adam(model.parameters())
loss_func = torch.nn.CrossEntropyLoss()
for epoch in range(10):
print('epoch {}'.format(epoch + 1))
# training-----------------------------
train_loss = 0.
train_acc = 0.
for batch_x,batch_y in train_loader:
batch_x,batch_y = Variable(batch_x),Variable(batch_y)
out = model(batch_x)
loss = loss_func(out,batch_y)
train_loss += loss.data[0]
pred = torch.max(out,1)[1]
train_correct = (pred == batch_y).sum()
train_acc += train_correct.data[0]
optimizer.zero_grad()
loss.backward()
optimizer.step()
print('Train Loss: {:.6f},Acc: {:.6f}'.format(train_loss / (len(
train_data)),train_acc / (len(train_data))))
# evaluation--------------------------------
model.eval()
eval_loss = 0.
eval_acc = 0.
for batch_x,batch_y in test_loader:
batch_x,batch_y = Variable(batch_x,volatile=True),Variable(batch_y,volatile=True)
out = model(batch_x)
loss = loss_func(out,batch_y)
eval_loss += loss.data[0]
pred = torch.max(out,1)[1]
num_correct = (pred == batch_y).sum()
eval_acc += num_correct.data[0]
print('Test Loss: {:.6f},Acc: {:.6f}'.format(eval_loss / (len(
test_data)),eval_acc / (len(test_data))))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 您可能感兴趣的文章:
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
