pytorch中如何实现手写数字图片识别
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,小编给大家分享一下pytorch中如何实现手写数字图片识别,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下数据集:MNIST数据集,代码中会自动下载,不用自己手动下载。数据
千家信息网最后更新 2026年11月04日pytorch中如何实现手写数字图片识别
小编给大家分享一下pytorch中如何实现手写数字图片识别,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
具体内容如下
数据集:MNIST数据集,代码中会自动下载,不用自己手动下载。数据集很小,不需要GPU设备,可以很好的体会到pytorch的魅力。
模型+训练+预测程序:
import torchfrom torch import nnfrom torch.nn import functional as Ffrom torch import optimimport torchvisionfrom matplotlib import pyplot as pltfrom utils import plot_image, plot_curve, one_hot# step1 load datasetbatch_size = 512train_loader = torch.utils.data.DataLoader( torchvision.datasets.MNIST('mnist_data', train=True, download=True, transform=torchvision.transforms.Compose([ torchvision.transforms.ToTensor(), torchvision.transforms.Normalize( (0.1307,), (0.3081,) ) ])), batch_size=batch_size, shuffle=True)test_loader = torch.utils.data.DataLoader( torchvision.datasets.MNIST('mnist_data/', train=False, download=True, transform=torchvision.transforms.Compose([ torchvision.transforms.ToTensor(), torchvision.transforms.Normalize( (0.1307,), (0.3081,) ) ])), batch_size=batch_size, shuffle=False)x , y = next(iter(train_loader))print(x.shape, y.shape, x.min(), x.max())plot_image(x, y, "image_sample")class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(28*28, 256) self.fc2 = nn.Linear(256, 64) self.fc3 = nn.Linear(64, 10) def forward(self, x): # x: [b, 1, 28, 28] # h2 = relu(xw1 + b1) x = F.relu(self.fc1(x)) # h3 = relu(h2w2 + b2) x = F.relu(self.fc2(x)) # h4 = h3w3 + b3 x = self.fc3(x) return xnet = Net()optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)train_loss = []for epoch in range(3): for batch_idx, (x, y) in enumerate(train_loader): #加载进来的图片是一个四维的tensor,x: [b, 1, 28, 28], y:[512] #但是我们网络的输入要是一个一维向量(也就是二维tensor),所以要进行展平操作 x = x.view(x.size(0), 28*28) # [b, 10] out = net(x) y_onehot = one_hot(y) # loss = mse(out, y_onehot) loss = F.mse_loss(out, y_onehot) optimizer.zero_grad() loss.backward() # w' = w - lr*grad optimizer.step() train_loss.append(loss.item()) if batch_idx % 10 == 0: print(epoch, batch_idx, loss.item())plot_curve(train_loss) # we get optimal [w1, b1, w2, b2, w3, b3]total_correct = 0for x,y in test_loader: x = x.view(x.size(0), 28*28) out = net(x) # out: [b, 10] pred = out.argmax(dim=1) correct = pred.eq(y).sum().float().item() total_correct += correcttotal_num = len(test_loader.dataset)acc = total_correct/total_numprint("acc:", acc)x, y = next(iter(test_loader))out = net(x.view(x.size(0), 28*28))pred = out.argmax(dim=1)plot_image(x, pred, "test")主程序中调用的函数(注意命名为utils):
import torchfrom matplotlib import pyplot as pltdef plot_curve(data): fig = plt.figure() plt.plot(range(len(data)), data, color='blue') plt.legend(['value'], loc='upper right') plt.xlabel('step') plt.ylabel('value') plt.show()def plot_image(img, label, name): fig = plt.figure() for i in range(6): plt.subplot(2, 3, i + 1) plt.tight_layout() plt.imshow(img[i][0]*0.3081+0.1307, cmap='gray', interpolation='none') plt.title("{}: {}".format(name, label[i].item())) plt.xticks([]) plt.yticks([]) plt.show()def one_hot(label, depth=10): out = torch.zeros(label.size(0), depth) idx = torch.LongTensor(label).view(-1, 1) out.scatter_(dim=1, index=idx, value=1) return out看完了这篇文章,相信你对"pytorch中如何实现手写数字图片识别"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
图片
数据
数字
篇文章
不用
主程序
也就是
代码
内容
函数
向量
完了
手动
更多
模型
知识
程序
网络
行业
要是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
保险科技 互联网保险
伟宏互联网科技
科技互联网龙头
科技和互联网公司
A股互联网金融科技公司
河南真二互联网科技有限公司
互联网下的科技发展
深圳天众互联网科技公司
郑州华宇互联网科技
互联网金融 科技创新
互联网大会黑科技排名
厦门比较好的科技互联网公司
宝灵互联网科技有限公司
苏州铭阳互联网科技有限公司
互联网科技创新的路径
2021世界互联网领先科技成果发布
全球科技与互联网公司市值变化
张家口科技产业互联网平台
三亚科技创新互联网基地
互联网科技创新方面的资料
美国互联网科技
成都互联网科技公司
智慧科技互联网
北京大学互联网科技怎么样
汽车互联网创新科技园
科技与互联网哪个更好
城市宝互联网科技有限公司
领航科技大厦互联网公司
风投北京互联网科技
广州全民伙伴互联网科技有限公司