利用cnn实现手写数据集识别

文章详细描述了如何使用预训练权重对MNIST数据集进行模型测试,包括加载权重、模型评估和计算精度的过程。
摘要由CSDN通过智能技术生成

        先是数据集训练的文件,这里我用的是三层卷积、三次最大池化,然后两层线性层,梯度优化那里使用的是Adam算法,先运行训练文件,可以得到对应的数据集和权重文件。然后这里,'/home/wxc/data/MNIST/raw/model_weights.pth',这个是权重文件保存路径,记得修改到自己想保存的位置。这个训练精确度大家可以训练一次就跑一次test,看看精确度,然后精确度最高的一次保留下来,就可以今后直接调用了

import numpy as np
import torch 
from torch import optim as optim
from torch.utils.data import DataLoader
from torchvision import datasets, transforms
from shibie_train import M_CNN


transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean=(0.5,),std=(0.5,))]) # 转变成张量在标准化
test_dataset = datasets.MNIST(root='./data', train=False, transform=transform, download=True)
test_loader = DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)# 这里是在传输数据
model = M_CNN()

device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Using {device} device") # 确保在使用GPU进行运算
model.load_state_dict(torch.load('/home/wxc/data/MNIST/raw/model_weights.pth', map_location=device))

model = model.to(device)
# 设置模型为评估模式
model.eval()

# 在测试集上应用模型
correct = 0
total = 0
with torch.no_grad():
    for data in test_loader:
        images, labels = data[0].cuda(), data[1].cuda()
        # 这里是类型转换,因为输入的是torch.cuda.FloatTensor类型,权重文件是torch.FloatTensor类,所以要转成一样类型
        
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1) # 这个就是找到输出最大一个概率
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print('Accuracy on the test set: %d %%' % (100 * correct / total)) # 计算一下相等的数据与总体数据占比

        然后在进行测试

import numpy as np
import torch 
from torch import optim as optim
from torch.utils.data import DataLoader
from torchvision import datasets, transforms
from shibie_train import M_CNN


transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean=(0.5,),std=(0.5,))]) # 转变成张量在标准化
test_dataset = datasets.MNIST(root='./data', train=False, transform=transform, download=True)
test_loader = DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)# 这里是在传输数据
model = M_CNN()

device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Using {device} device") # 确保在使用GPU进行运算
model.load_state_dict(torch.load('/home/wxc/data/MNIST/raw/model_weights.pth', map_location=device))
model = model.to(device)
# 设置模型为评估模式
model.eval()

# 在测试集上应用模型
correct = 0
total = 0
with torch.no_grad():
    for data in test_loader:
        images, labels = data[0].cuda(), data[1].cuda()
        # 这里是类型转换,因为输入的是torch.cuda.FloatTensor类型,权重文件是torch.FloatTensor类,所以要转成一样类型
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1) # 这个就是找到输出最大一个概率
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print('Accuracy on the test set: %d %%' % (100 * correct / total)) # 计算一下相等的数据与总体数据占比

        这个是测试准确度的代码

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值