Pytorch实现图像识别之数字识别(附详细注释)

以下是使用PyTorch实现数字识别的完整攻略,包括两个示例说明。

1. 实现简单的数字识别

以下是使用PyTorch实现简单的数字识别的步骤:

  1. 导入必要的库

python
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt

  1. 加载数据集

```python
# 定义数据预处理
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))])

# 加载数据集
trainset = torchvision.datasets.MNIST(root='./data', train=True,
download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
shuffle=True, num_workers=2)

testset = torchvision.datasets.MNIST(root='./data', train=False,
download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
shuffle=False, num_workers=2)
```

  1. 定义神经网络模型

```python
class Net(nn.Module):
def init(self):
super(Net, self).init()
self.conv1 = nn.Conv2d(1, 6, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16 * 4 * 4, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)

   def forward(self, x):
       x = self.pool(torch.relu(self.conv1(x)))
       x = self.pool(torch.relu(self.conv2(x)))
       x = x.view(-1, 16 * 4 * 4)
       x = torch.relu(self.fc1(x))
       x = torch.relu(self.fc2(x))
       x = self.fc3(x)
       return x

net = Net()
```

  1. 定义损失函数和优化器

python
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

  1. 训练模型

```python
for epoch in range(2): # 多次循环数据集
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
# 获取输入数据
inputs, labels = data

       # 梯度清零
       optimizer.zero_grad()

       # 前向传播、反向传播、优化
       outputs = net(inputs)
       loss = criterion(outputs, labels)
       loss.backward()
       optimizer.step()

       # 打印统计信息
       running_loss += loss.item()
       if i % 2000 == 1999:    # 每2000个小批量数据打印一次
           print('[%d, %5d] loss: %.3f' %
                 (epoch + 1, i + 1, running_loss / 2000))
           running_loss = 0.0

print('Finished Training')
```

  1. 测试模型

```python
# 测试模型
correct = 0
total = 0
with torch.no_grad():
for data in testloader:
images, labels = data
outputs = net(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()

print('Accuracy of the network on the 10000 test images: %d %%' % (
100 * correct / total))
```

运行上述代码,即可训练和测试数字识别模型。

2. 实现卷积神经网络的数字识别

以下是使用PyTorch实现卷积神经网络的数字识别的步骤:

  1. 导入必要的库

python
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt

  1. 加载数据集

```python
# 定义数据预处理
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))])

# 加载数据集
trainset = torchvision.datasets.MNIST(root='./data', train=True,
download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
shuffle=True, num_workers=2)

testset = torchvision.datasets.MNIST(root='./data', train=False,
download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
shuffle=False, num_workers=2)
```

  1. 定义神经网络模型

```python
class Net(nn.Module):
def init(self):
super(Net, self).init()
self.conv1 = nn.Conv2d(1, 6, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16 * 4 * 4, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)

   def forward(self, x):
       x = self.pool(torch.relu(self.conv1(x)))
       x = self.pool(torch.relu(self.conv2(x)))
       x = x.view(-1, 16 * 4 * 4)
       x = torch.relu(self.fc1(x))
       x = torch.relu(self.fc2(x))
       x = self.fc3(x)
       return x

net = Net()
```

  1. 定义损失函数和优化器

python
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

  1. 训练模型

```python
for epoch in range(2): # 多次循环数据集
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
# 获取输入数据
inputs, labels = data

       # 梯度清零
       optimizer.zero_grad()

       # 前向传播、反向传播、优化
       outputs = net(inputs)
       loss = criterion(outputs, labels)
       loss.backward()
       optimizer.step()

       # 打印统计信息
       running_loss += loss.item()
       if i % 2000 == 1999:    # 每2000个小批量数据打印一次
           print('[%d, %5d] loss: %.3f' %
                 (epoch + 1, i + 1, running_loss / 2000))
           running_loss = 0.0

print('Finished Training')
```

  1. 测试模型

```python
# 测试模型
correct = 0
total = 0
with torch.no_grad():
for data in testloader:
images, labels = data
outputs = net(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()

print('Accuracy of the network on the 10000 test images: %d %%' % (
100 * correct / total))
```

运行上述代码,即可训练和测试卷积神经网络的数字识别模型。

以上就是使用PyTorch实现数字识别的完整攻略,包括两个示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pytorch实现图像识别之数字识别(附详细注释) - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 使用PyTorch实现随机搜索策略

    使用PyTorch实现随机搜索策略 随机搜索是一种常见的超参数优化方法,它可以用于寻找最优的超参数组合。本文将详细讲解如何使用PyTorch实现随机搜索策略,并提供两个示例说明。 1. 随机搜索的基本原理 随机搜索的基本原理是在超参数空间中随机采样一组超参数组合,并使用这组超参数组合进行模型训练和评估。重复这个过程多次,直到找到最优的超参数组合为止。 在实际…

    PyTorch 2023年5月16日
    00
  • pytorch-gpu安装的经验与教训

    在使用PyTorch进行深度学习任务时,使用GPU可以大大加速模型的训练。在本文中,我们将分享一些安装PyTorch GPU版本的经验和教训。我们将使用两个示例来说明如何完成这些步骤。 示例1:使用conda安装PyTorch GPU版本 以下是使用conda安装PyTorch GPU版本的步骤: 首先,我们需要安装Anaconda。可以从官方网站下载适合您…

    PyTorch 2023年5月15日
    00
  • Pytorch的torch.cat实例

    import torch    通过 help((torch.cat)) 可以查看 cat 的用法 cat(seq,dim,out=None) 其中 seq表示要连接的两个序列,以元组的形式给出,例如:seq=(a,b), a,b 为两个可以连接的序列 dim 表示以哪个维度连接,dim=0, 横向连接 dim=1,纵向连接   #实例: #dim=0 时:…

    PyTorch 2023年4月8日
    00
  • pytorch normal_(), fill_()

    比如有个张量a,那么a.normal_()就表示用标准正态分布填充a,是in_place操作,如下图所示: 比如有个张量b,那么b.fill_(0)就表示用0填充b,是in_place操作,如下图所示:   这两个函数常常用在神经网络模型参数的初始化中,例如 import torch.nn as nn net = nn.Linear(16, 2) for m…

    2023年4月7日
    00
  • Anaconda+vscode+pytorch环境搭建过程详解

    Anaconda+VSCode+PyTorch环境搭建过程详解 在使用PyTorch进行深度学习开发时,我们通常需要搭建一个适合自己的开发环境。本文将介绍如何使用Anaconda、VSCode和PyTorch来搭建一个完整的深度学习开发环境,并演示两个示例。 示例一:使用Anaconda创建新的环境并安装PyTorch 下载并安装Anaconda:从Anac…

    PyTorch 2023年5月15日
    00
  • 莫烦pytorch学习笔记(一)——torch or numpy

    Q1:什么是神经网络? Q2:torch vs numpy Numpy:NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高 效的多(该结构也可以用来表示矩阵(matrix))。专为进行严格的数字处理而产生。   Q3:numpy和Torch…

    2023年4月8日
    00
  • 动手学深度学习PyTorch版-task03

    课后习题 训练集、验证集和测试集的意义https://blog.csdn.net/ch1209498273/article/details/78266558有了模型后,训练集就是用来训练参数的,说准确点,一般是用来梯度下降的。而验证集基本是在每个epoch完成后,用来测试一下当前模型的准确率。因为验证集跟训练集没有交集,因此这个准确率是可靠的。那么为啥还需要…

    2023年4月8日
    00
  • pytorch中 model.cuda的作用

    在pytorch中,即使是有GPU的机器,它也不会自动使用GPU,而是需要在程序中显示指定。调用model.cuda(),可以将模型加载到GPU上去。这种方法不被提倡,而建议使用model.to(device)的方式,这样可以显示指定需要使用的计算资源,特别是有多个GPU的情况下。

    PyTorch 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部