# PyTorch使用神经网络进行手写数字识别实战（附源码，包括损失图像和准确率图像）

## 1：数据预处理

PyTorch提供了torchvision.transforms用于处理数据及数据增强，它可以将数据从[0,255]映射到[0,1]

## 3：构建神经网络模型

class MLP(nn.Module):
def __init__(self):
super(MLP,self).__init__()
self.inputlayer=nn.Sequential(nn.Linear(28*28,256),nn.ReLU(),nn.Dropout(0.2))
self.hiddenlayer=nn.Sequential(nn.Linear(256,256),nn.ReLU(),nn.Dropout(0.2))
self.outputlayer=nn.Sequential(nn.Linear(256,10))
def forward(self,x):
x=x.view(x.size(0),-1)
x=self.inputlayer(x)
x=self.hiddenlayer(x)
x=self.outputlayer(x)
return x

## 4：模型评估

import torch
import torchvision
import  torch.nn as nn
from torch import  optim
from tqdm import  tqdm
import torch.utils.data.dataset
for i,j in enumerate(np.random.randint(0,len(mnist),(10,))):
data,label=mnist[j]
plt.subplot(2,5,i+1)
plt.show()
trans=transforms.Compose(
[
transforms.ToTensor(),
transforms.Normalize((0.1307,),(0.3081,))
]
)
normalized=trans(mnist[0][0])
from torchvision import  transforms
def imshow(img):
img=img*0.3081+0.1307
npimg=img.numpy()
plt.imshow(np.transpose(npimg,(1,2,0)))
imshow(torchvision.utils.make_grid(images))
class MLP(nn.Module):
def __init__(self):
super(MLP,self).__init__()
self.inputlayer=nn.Sequential(nn.Linear(28*28,256),nn.ReLU(),nn.Dropout(0.2))
self.hiddenlayer=nn.Sequential(nn.Linear(256,256),nn.ReLU(),nn.Dropout(0.2))
self.outputlayer=nn.Sequential(nn.Linear(256,10))
def forward(self,x):
x=x.view(x.size(0),-1)
x=self.inputlayer(x)
x=self.hiddenlayer(x)
x=self.outputlayer(x)
return x
print(MLP())
trans=transforms.Compose(
[
transforms.ToTensor(),
transforms.Normalize((0.1307,),(0.3081,))
]
)
#模型
model=MLP()
#优化器
optimizer=oD(model.parameters(),lr=0.01,momentum=0.9)
#损失函数
celoss=nn.ssEntropyLoss()
best_acc=0
#计算准确率
def accuracy(pred,target):
pred_label=torch.amax(pred,1)
correct=sum(pred_label==target).to(torch.float)
return correct,len(pred)
acc={'train':[],"val}
loss_all={'train':[],"val":[]}
for epoch in tqdm(range(5)):
model.eval()
numer_val,denumer_val,loss_tr=0.,0.,0.
output=model(data)
loss=celoss(output,target)
loss_tr+=loss.data
num,denum=accuracy(output,target)
numer_val+=num
denumer_val+=denum
#设置为训练模式
model.train()
numer_tr,denumer_tr,loss_val=0.,0.,0.
output=model(data)
loss=celoss(output,target)
loss_val+=loss.data
loss.backward()
optimer.step()
num,denum=accuracy(output,target)
numer_tr+=num
denumer_tr+=denum
acc['train'].pend(numer_tr/denumer_tr)
acc['val'].append(numer_val/denumer_val)
"""
plt.plot(loss_all['train'])
plt.plot(loss_all['val'])
"""
plt.plot(acc['train'])
plt.plot(acc['val'])
plt.show()

|
11天前
|

【8月更文挑战第27天】在数字化浪潮中，信息安全成为保护个人隐私和企业资产的关键。本文深入探讨了网络安全的两大支柱——安全漏洞管理和数据加密技术，以及如何通过提升安全意识来构建坚固的防御体系。我们将从基础概念出发，逐步揭示网络攻击者如何利用安全漏洞进行入侵，介绍最新的加密算法和协议，并分享实用的安全实践技巧。最终，旨在为读者提供一套全面的网络安全解决方案，以应对日益复杂的网络威胁。
22 2
|
11天前
|

PyTorch 中的动态计算图：实现灵活的神经网络架构
【8月更文第27天】PyTorch 是一款流行的深度学习框架，它以其灵活性和易用性而闻名。与 TensorFlow 等其他框架相比，PyTorch 最大的特点之一是支持动态计算图。这意味着开发者可以在运行时定义网络结构，这为构建复杂的模型提供了极大的便利。本文将深入探讨 PyTorch 中动态计算图的工作原理，并通过一些示例代码展示如何利用这一特性来构建灵活的神经网络架构。
31 1
|
20天前
|

【深度学习】使用PyTorch构建神经网络：深度学习实战指南
148 59
|
8天前
|

【8月更文挑战第30天】在当今快速发展的IT时代，自动化运维已成为提升效率、减少错误的关键。本文将介绍Ansible，一种流行的自动化运维工具，通过简单易懂的语言和实际案例，带领读者从零开始掌握Ansible的使用。我们将一起探索如何利用Ansible简化日常的运维任务，实现快速部署和管理服务器，以及如何处理常见问题。无论你是运维新手还是希望提高工作效率的资深人士，这篇文章都将为你开启自动化运维的新篇章。
24 5
|
8天前
|
Java
【实战演练】JAVA网络编程高手养成记：URL与URLConnection的实战技巧，一学就会！
【实战演练】JAVA网络编程高手养成记：URL与URLConnection的实战技巧，一学就会！
21 3
|
9天前
|
Java API UED
【实战秘籍】Spring Boot开发者的福音：掌握网络防抖动，告别无效请求，提升用户体验！
【8月更文挑战第29天】网络防抖动技术能有效处理频繁触发的事件或请求，避免资源浪费，提升系统响应速度与用户体验。本文介绍如何在Spring Boot中实现防抖动，并提供代码示例。通过使用ScheduledExecutorService，可轻松实现延迟执行功能，确保仅在用户停止输入后才触发操作，大幅减少服务器负载。此外，还可利用@Async注解简化异步处理逻辑。防抖动是优化应用性能的关键策略，有助于打造高效稳定的软件系统。
24 2
|
17天前
|

39 1
|
25天前
|

【PyTorch】PyTorch深度学习框架实战（一）：实现你的第一个DNN网络
【PyTorch】PyTorch深度学习框架实战（一）：实现你的第一个DNN网络
69 1
|
1月前
|

PyTorch代码实现神经网络

64 9
|
4天前
|
SQL 安全 网络安全

【9月更文挑战第2天】在数字时代的浪潮中，网络安全成为保护个人隐私和企业资产的坚固盾牌。本文深入探讨了网络安全的两个核心要素：防御漏洞和加密技术。我们将从基础概念入手，逐步剖析常见的网络攻击手段，并分享如何通过实践加强安全意识。同时，提供代码示例以增强理解，旨在为读者构建一道坚不可摧的网络安全防线。
12 0

DDNS