当前位置:网站首页>MNIST dataset
MNIST dataset
2022-07-23 06:18:00 【Like a few dollars】
MNIST Data set introduction
MNIST Include 6 Thousands of copies 28x28 Training sample ,1 10000 test samples , Can be said to be CV Inside “Hello Word”. This article uses CNN The network will be MNIST The recognition rate of data has been improved to 99%. Now let's start the actual combat .
Import package
import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim from torchvision import datasets, transforms torch.__version__
Define super parameters
BATCH_SIZE=512
EPOCHS=20
DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") Data sets
We use it directly PyTorch The built-in dataset, And use DataLoader Read the training data and test data respectively . If you downloaded the dataset here download Can choose False
train_loader = torch.utils.data.DataLoader(
datasets.MNIST('data', train=True, download=True,
transform=transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
])),
batch_size=BATCH_SIZE, shuffle=True)
test_loader = torch.utils.data.DataLoader(
datasets.MNIST('data', train=False, transform=transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
])),
batch_size=BATCH_SIZE, shuffle=True)
Defining network
The network consists of two convolution layers and two linear layers , The final output 10 Dimensions , I.e. on behalf of 0-9 Ten figures .
class ConvNet(nn.Module):
def __init__(self):
super().__init__()
self.conv1=nn.Conv2d(1,10,5) # input:(1,28,28) output:(10,24,24)
self.conv2=nn.Conv2d(10,20,3) # input:(10,12,12) output:(20,10,10)
self.fc1 = nn.Linear(20*10*10,500)
self.fc2 = nn.Linear(500,10)
def forward(self,x):
in_size = x.size(0)
out = self.conv1(x)
out = F.relu(out)
out = F.max_pool2d(out, 2, 2)
out = self.conv2(out)
out = F.relu(out)
out = out.view(in_size,-1)
out = self.fc1(out)
out = F.relu(out)
out = self.fc2(out)
out = F.log_softmax(out,dim=1)
return outInstantiate the network
model = ConvNet().to(DEVICE) # Move network to gpu On optimizer = optim.Adam(model.parameters()) # Use Adam Optimizer
Define training function
def train(model, device, train_loader, optimizer, epoch):
model.train()
for batch_idx, (data, target) in enumerate(train_loader):
data, target = data.to(device), target.to(device)
optimizer.zero_grad()
output = model(data)
loss = F.nll_loss(output, target)
loss.backward()
optimizer.step()
if(batch_idx+1)%30 == 0:
print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
epoch, batch_idx * len(data), len(train_loader.dataset),
100. * batch_idx / len(train_loader), loss.item()))Define test functions
def test(model, device, test_loader):
model.eval()
test_loss = 0
correct = 0
with torch.no_grad():
for data, target in test_loader:
data, target = data.to(device), target.to(device)
output = model(data)
test_loss += F.nll_loss(output, target, reduction='sum').item() # Add up the losses of a batch
pred = output.max(1, keepdim=True)[1] # Find the subscript with the highest probability
correct += pred.eq(target.view_as(pred)).sum().item()
test_loss /= len(test_loader.dataset)
print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(
test_loss, correct, len(test_loader.dataset),
100. * correct / len(test_loader.dataset)))
Start training
for epoch in range(1, EPOCHS + 1): train(model, DEVICE, train_loader, optimizer, epoch) test(model, DEVICE, test_loader)
experimental result
Train Epoch: 1 [14848/60000 (25%)] Loss: 0.375058 Train Epoch: 1 [30208/60000 (50%)] Loss: 0.255248 Train Epoch: 1 [45568/60000 (75%)] Loss: 0.128060 Test set: Average loss: 0.0992, Accuracy: 9690/10000 (97%) Train Epoch: 2 [14848/60000 (25%)] Loss: 0.093066 Train Epoch: 2 [30208/60000 (50%)] Loss: 0.087888 Train Epoch: 2 [45568/60000 (75%)] Loss: 0.068078 Test set: Average loss: 0.0599, Accuracy: 9816/10000 (98%) Train Epoch: 3 [14848/60000 (25%)] Loss: 0.043926 Train Epoch: 3 [30208/60000 (50%)] Loss: 0.037321 Train Epoch: 3 [45568/60000 (75%)] Loss: 0.068404 Test set: Average loss: 0.0416, Accuracy: 9859/10000 (99%) Train Epoch: 4 [14848/60000 (25%)] Loss: 0.031654 Train Epoch: 4 [30208/60000 (50%)] Loss: 0.041341 Train Epoch: 4 [45568/60000 (75%)] Loss: 0.036493 Test set: Average loss: 0.0361, Accuracy: 9873/10000 (99%) Train Epoch: 5 [14848/60000 (25%)] Loss: 0.027688 Train Epoch: 5 [30208/60000 (50%)] Loss: 0.019488 Train Epoch: 5 [45568/60000 (75%)] Loss: 0.018023 Test set: Average loss: 0.0344, Accuracy: 9875/10000 (99%) Train Epoch: 6 [14848/60000 (25%)] Loss: 0.024212 Train Epoch: 6 [30208/60000 (50%)] Loss: 0.018689 Train Epoch: 6 [45568/60000 (75%)] Loss: 0.040412 Test set: Average loss: 0.0350, Accuracy: 9879/10000 (99%) Train Epoch: 7 [14848/60000 (25%)] Loss: 0.030426 Train Epoch: 7 [30208/60000 (50%)] Loss: 0.026939 Train Epoch: 7 [45568/60000 (75%)] Loss: 0.010722 Test set: Average loss: 0.0287, Accuracy: 9892/10000 (99%) Train Epoch: 8 [14848/60000 (25%)] Loss: 0.021109 Train Epoch: 8 [30208/60000 (50%)] Loss: 0.034845 Train Epoch: 8 [45568/60000 (75%)] Loss: 0.011223 Test set: Average loss: 0.0299, Accuracy: 9904/10000 (99%) Train Epoch: 9 [14848/60000 (25%)] Loss: 0.011391 Train Epoch: 9 [30208/60000 (50%)] Loss: 0.008091 Train Epoch: 9 [45568/60000 (75%)] Loss: 0.039870 Test set: Average loss: 0.0341, Accuracy: 9890/10000 (99%) Train Epoch: 10 [14848/60000 (25%)] Loss: 0.026813 Train Epoch: 10 [30208/60000 (50%)] Loss: 0.011159 Train Epoch: 10 [45568/60000 (75%)] Loss: 0.024884 Test set: Average loss: 0.0286, Accuracy: 9901/10000 (99%) Train Epoch: 11 [14848/60000 (25%)] Loss: 0.006420 Train Epoch: 11 [30208/60000 (50%)] Loss: 0.003641 Train Epoch: 11 [45568/60000 (75%)] Loss: 0.003402 Test set: Average loss: 0.0377, Accuracy: 9894/10000 (99%) Train Epoch: 12 [14848/60000 (25%)] Loss: 0.006866 Train Epoch: 12 [30208/60000 (50%)] Loss: 0.012617 Train Epoch: 12 [45568/60000 (75%)] Loss: 0.008548 Test set: Average loss: 0.0311, Accuracy: 9908/10000 (99%) Train Epoch: 13 [14848/60000 (25%)] Loss: 0.010539 Train Epoch: 13 [30208/60000 (50%)] Loss: 0.002952 Train Epoch: 13 [45568/60000 (75%)] Loss: 0.002313 Test set: Average loss: 0.0293, Accuracy: 9905/10000 (99%) Train Epoch: 14 [14848/60000 (25%)] Loss: 0.002100 Train Epoch: 14 [30208/60000 (50%)] Loss: 0.000779 Train Epoch: 14 [45568/60000 (75%)] Loss: 0.005952 Test set: Average loss: 0.0335, Accuracy: 9897/10000 (99%) Train Epoch: 15 [14848/60000 (25%)] Loss: 0.006053 Train Epoch: 15 [30208/60000 (50%)] Loss: 0.002559 Train Epoch: 15 [45568/60000 (75%)] Loss: 0.002555 Test set: Average loss: 0.0357, Accuracy: 9894/10000 (99%) Train Epoch: 16 [14848/60000 (25%)] Loss: 0.000895 Train Epoch: 16 [30208/60000 (50%)] Loss: 0.004923 Train Epoch: 16 [45568/60000 (75%)] Loss: 0.002339 Test set: Average loss: 0.0400, Accuracy: 9893/10000 (99%) Train Epoch: 17 [14848/60000 (25%)] Loss: 0.004136 Train Epoch: 17 [30208/60000 (50%)] Loss: 0.000927 Train Epoch: 17 [45568/60000 (75%)] Loss: 0.002084 Test set: Average loss: 0.0353, Accuracy: 9895/10000 (99%) Train Epoch: 18 [14848/60000 (25%)] Loss: 0.004508 Train Epoch: 18 [30208/60000 (50%)] Loss: 0.001272 Train Epoch: 18 [45568/60000 (75%)] Loss: 0.000543 Test set: Average loss: 0.0380, Accuracy: 9894/10000 (99%) Train Epoch: 19 [14848/60000 (25%)] Loss: 0.001699 Train Epoch: 19 [30208/60000 (50%)] Loss: 0.000661 Train Epoch: 19 [45568/60000 (75%)] Loss: 0.000275 Test set: Average loss: 0.0339, Accuracy: 9905/10000 (99%) Train Epoch: 20 [14848/60000 (25%)] Loss: 0.000441 Train Epoch: 20 [30208/60000 (50%)] Loss: 0.000695 Train Epoch: 20 [45568/60000 (75%)] Loss: 0.000467 Test set: Average loss: 0.0396, Accuracy: 9894/10000 (99%)
边栏推荐
- hcip--复习第二天作业
- 2. 输入一个圆半径r,当r>=0时,计算并输出圆的面积和周长,否则,输出提示信息。
- Chapter7 循环神经网络-2
- yapi和Apifox 哪个好用?深度分析 yapi 和Apifox 的功能特性
- 從鍵盤輸入一串字符,輸出不同的字符以及每個字符出現的次數。(輸出不按照順序)運用String類的常用方法解題
- 视频直播系统源码,保存平台视频内容到本地
- 优化器(Optimizer)(SGD、Momentum、AdaGrad、RMSProp、Adam)
- 中国电子信息产业发展研究院院长张立:打造我国主导的开源价值链
- 2020_ ACM MM_ MISA: Modality-Invariant and -Specific Representations for Multimodal Sentiment Analysis
- Two very simple TCPUDP programs, communication between raspberry pie and PC
猜你喜欢

中兴通讯云基础设施开源与标准总监李响:面向企业的开源风险与开源治理

Win10 系统下VisualStudio2019 配置点云库 PCL1.12.1

Transformer

蓝桥杯31天冲刺之二十一day(C语言)

递归级联网络:基于无监督学习的医学图像配准

堆基础练习题 —— 1

PWN --- ret2shellcode

中国工程院院士倪光南:拥抱开源 与世界协同创新

Stack overflow basic exercise - 6 (string vulnerability under 64 bits)

Pad in pytorch_ sequence、pack_ padded_ Sequence and pad_ packed_ Sequence function
随机推荐
2019_AAAI_Multi-Interactive Memory Network for Aspect Based Multimodal Sentiment Analysis
视频直播源码,重置当前密码的相关改动
初学者备战蓝桥杯历程(大学编程学习历程记录,题目思路献给需要备考蓝桥杯的同学)
Activation function (sigmoid, tanh, relu, softmax)
激活函数(sigmoid、tanh、ReLU、softmax)
PWN —— ret2libc2
[foundation 2] - container
3步就能制作漫画头像的机器人,想拥有一个吗?
【基础2】——容器
ESP IDF vscode configuration from downloading tool chain to creating project, step record
Introduction to SQL -- Basic additions, deletions, modifications, and exercises
Robot Arm 机械臂源码解析
51单片机的入门知识(献给初学者最易懂的文章)
CSDN has accompanied me for four years of undergraduate life, and I have begun to record it well
Greatest common divisor and least common multiple
关于博主帅soserious的一些感想.
Conditions affectant la vitesse de requête de l'interface
Over fitting weight regularization and dropout regularization
Two very simple TCPUDP programs, communication between raspberry pie and PC
[Fifth space 2019 finals]pwn5 - two solutions