Pytorch框架 + MINST手写数字图像识别项目

10分钟入门神经网络 PyTorch 手写数字识别-哔哩哔哩】 https://b23.tv/nwjMNSz

pytorch tutorial: PyTorch 手写数字识别 教程代码

手写数字识别项目

安装库: pip3 install numpy torch torchvision matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple/

运行: python test.py

通过 pip list可以查看Pillow版本信息

python版本:3.12

Pillow版本信息10.4.0(注意默认是10.2.0会报错),执行升级到最新即可

pip3 install --upgrade Pillow  -i https://pypi.tuna.tsinghua.edu.cn/simple/
 

import torch
from torch.utils.data import DataLoader
from torchvision import transforms
from torchvision.datasets import MNIST
import matplotlib.pyplot as plt


class Net(torch.nn.Module):

    def __init__(self):
        super().__init__()
        self.fc1 = torch.nn.Linear(28*28, 64)
        self.fc2 = torch.nn.Linear(64, 64)
        self.fc3 = torch.nn.Linear(64, 64)
        self.fc4 = torch.nn.Linear(64, 10)
    
    def forward(self, x):
        x = torch.nn.functional.relu(self.fc1(x))
        x = torch.nn.functional.relu(self.fc2(x))
        x = torch.nn.functional.relu(self.fc3(x))
        x = torch.nn.functional.log_softmax(self.fc4(x), dim=1)
        return x


def get_data_loader(is_train):
    to_tensor = transforms.Compose([transforms.ToTensor()])
    data_set = MNIST("", is_train, transform=to_tensor, download=True)
    return DataLoader(data_set, batch_size=15, shuffle=True)


def evaluate(test_data, net):
    n_correct = 0
    n_total = 0
    with torch.no_grad():
        for (x, y) in test_data:
            outputs = net.forward(x.view(-1, 28*28))
            for i, output in enumerate(outputs):
                if torch.argmax(output) == y[i]:
                    n_correct += 1
                n_total += 1
    return n_correct / n_total


def main():

    train_data = get_data_loader(is_train=True)
    test_data = get_data_loader(is_train=False)
    net = Net()
    
    print("initial accuracy:", evaluate(test_data, net))
    optimizer = torch.optim.Adam(net.parameters(), lr=0.001)
    for epoch in range(2):
        for (x, y) in train_data:
            net.zero_grad()
            output = net.forward(x.view(-1, 28*28))
            loss = torch.nn.functional.nll_loss(output, y)
            loss.backward()
            optimizer.step()
        print("epoch", epoch, "accuracy:", evaluate(test_data, net))

    for (n, (x, _)) in enumerate(test_data):
        if n > 3:
            break
        predict = torch.argmax(net.forward(x[0].view(-1, 28*28)))
        plt.figure(n)
        plt.imshow(x[0].view(28, 28))
        plt.title("prediction: " + str(int(predict)))
    plt.show()


if __name__ == "__main__":
    main()

执行后,可以看到效果

其他:如何安装dlib 、  opencv

需要安装以下命令:

 pip3 install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple/  

conda install -c conda-forge dlib -i https://pypi.tuna.tsinghua.edu.cn/simple/  

CV2对应opencv-python

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
pip3  install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python

 train_test_split对应 scikit-learn模块

pip3 install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple/
 



 

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: PyTorch是一种深度学习框架,可以用来进行手写体识别。MNIST是一个手写数字的数据集,包含了60000个训练样本和10000个测试样本。使用PyTorch可以很方便地对这个数据集进行训练和测试,从而实现手写体识别的功能。具体的实现方法可以参考PyTorch官方文档或者相关的教程。 ### 回答2: Pytorch是一个Python的开源深度学习库,它不仅支持GPU加速,而且拥有众多的功能,比如自动求导、动态计算图等。而手写体识别(MINST)则是深度学习的一个重要应用领域之一,通过对手写数字的图像进行识别,可以应用到很多领域,比如数字化办公、足球运动员数据分析等等。 Pytorch在MNIST手写体识别中的应用主要分为以下几个步骤: 1. 数据处理: Pytorch中的torchvision包括一些常用的数据集和模型,如MNIST、CIFAR、ImageNet等等,因此可以很方便地从torchvision中导入MNIST数据集。数据集可以通过DataLoader进行封装,进行随机化和批处理,以便于更好地训练模型。 2. 建立模型: Pytorch中的nn包包括了深度学习中常用的模型和组件,可以方便地构建MNIST手写体识别的模型。一个简单的模型可以包括一个卷积层( Conv2d) 、一个池化层( MaxPool2d) 、一个全连接层( Linear) 和一个激活函数(ReLU) 。 3. 训练模型: 在Pytorch中,训练模型的主要流程包括前向传播、计算损失函数、反向传播和参数优化等步骤。训练过程包括多次迭代,每一次迭代需要根据损失函数进行反向传播,并通过优化器(如SGD)进行参数的更新,最终得到最优的模型。 4. 测试模型:为了验证训练好的模型的泛化能力,需要用测试数据集来进行测试。测试数据集和训练数据集的处理方式一样,可以采用DataLoader来进行批处理。在测试过程中,模型会根据输入图像进行前向传播,得到输出概率分布,需要根据这个概率分布进行预测。 最后,在Pytorch中进行MNIST手写体识别,需要注意的是要避免过拟合现象,可以采用Dropout等技术防止过拟合。另外,还可以对模型进行调优,如修改网络参数、修改学习率等。通过不断细化模型的表达能力,可以得到更高的识别率。 ### 回答3: PyTorch MNIST 手写体识别是一项基于深度学习的计算机视觉任务。该任务旨在通过训练深度神经网络模型,让计算机能够准确地识别手写数字。MNIST 手写体数据集包括大约 6 万张训练图片和 1 万张测试图片,这些图片由许多不同人写的手写数字组成,是机器学习界很受欢迎的基准数据集之一。 为了进行手写体识别,我们需要使用 PyTorch 深度学习框架来构建神经网络。首先需要完成数据集的预处理,包括对数据集进行归一化处理和将图片转换为张量类型。通过 PyTorch 提供的 DataLoader 将数据划分为小批次,每个小批次都包含多个图片和它们对应的标签。 接下来就是构建深度神经网络模型。一个经典的 CNN 模型包括卷积层、池化层、全连接层等。通过 PyTorch 中的 nn 模块,可以使用预定义的神经网络层构建自己的深度神经网络。在每个训练批次中,向前传播通过神经网络,计算损失值,然后通过反向传播来更新神经网络中的权重值。 模型训练完成后,通过测试集对模型进行评估,计算模型的准确率。最终,我们可以使用训练好的模型对新的手写数字进行识别。 需要注意的是,在进行深度学习任务时,模型的超参数对于模型的性能有很大的影响。例如,学习率、优化器等都需要进行适当的调整,以获得更好的结果。 总的来说,PyTorch MNIST 手写体识别是一项非常实用的计算机视觉任务,基于深度学习技术构建模型可以让计算机准确地识别手写数字,为人们提供更加方便快捷的服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhousenshan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值