当前位置: 首页 > news >正文

数字

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
from torchvision import datasets, transforms

===================== 1. 基础配置(极简版) =====================

设备:优先GPU,无则CPU(CPU也能快速运行)

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

超参数:极致简化,减少耗时

BATCH_SIZE = 32 # 批次缩小,减少内存占用
EPOCHS = 3 # 仅训练3轮,几十秒完成
LR = 0.001 # 学习率适中

===================== 2. 数据加载(自动下载+极简预处理) =====================

仅做「转张量 + 归一化」,无多余操作

transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,)) # MNIST通用归一化参数
])

加载MNIST数据集(自动下载,约100MB,首次运行稍慢,后续秒加载)

train_data = datasets.MNIST('./data', train=True, download=True, transform=transform)
test_data = datasets.MNIST('./data', train=False, download=True, transform=transform)

数据加载器:简化参数,无多线程(避免系统适配问题)

train_loader = DataLoader(train_data, batch_size=BATCH_SIZE, shuffle=True)
test_loader = DataLoader(test_data, batch_size=BATCH_SIZE, shuffle=False)

===================== 3. 极简模型(1卷积+2全连接) =====================

class SimpleMNIST(nn.Module):
def init(self):
super().init()
# 卷积层:提取基础特征(28x28→14x14)
self.conv = nn.Sequential(
nn.Conv2d(1, 16, 3, padding=1), # 输入1通道,输出16通道
nn.ReLU(),
nn.MaxPool2d(2)
)
# 全连接层:分类(161414=3136 → 10类)
self.fc = nn.Sequential(
nn.Flatten(), # 展平卷积结果
nn.Linear(161414, 128), # 隐藏层
nn.ReLU(),
nn.Linear(128, 10) # 输出0-9
)

def forward(self, x):x = self.conv(x)x = self.fc(x)return x

初始化模型并移至设备

model = SimpleMNIST().to(device)

===================== 4. 训练+测试(极简流程) =====================

损失函数+优化器(基础配置,无多余操作)

criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=LR)

训练循环(极简版,无进度条,仅打印关键信息)

print("开始训练(仅3轮,很快完成)...")
for epoch in range(EPOCHS):
model.train() # 训练模式
for data, target in train_loader:
data, target = data.to(device), target.to(device)
# 前向+反向+更新(核心三步)
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
print(f"第{epoch+1}轮训练完成")

测试精度(极简版,仅计算整体准确率)

model.eval() # 验证模式
correct = 0
total = 0
with torch.no_grad(): # 禁用梯度,加速计算
for data, target in test_loader:
data, target = data.to(device), target.to(device)
output = model(data)
_, pred = torch.max(output, 1) # 取预测结果
correct += (pred == target).sum().item()
total += target.size(0)

输出最终结果

acc = 100 * correct / total
print(f"\n训练完成!测试集准确率:{acc:.2f}%")

可选:单样本预测演示(验证模型可用)

print("\n单样本预测演示:")
test_img, test_label = test_data[0] # 取第一个测试样本
test_img = test_img.unsqueeze(0).to(device) # 增加批次维度
model.eval()
with torch.no_grad():
pred = model(test_img)
pred_label = torch.argmax(pred).item()
print(f"真实标签:{test_label},模型预测:{pred_label}")
print("\n学号:2024310143004")

http://www.jsqmd.com/news/140202/

相关文章:

  • 12月24日日记
  • 昇腾 NPU 环境下 GPT-2 模型本地部署全指南(含踩坑排错)
  • 《具身智能》读书笔记
  • PhysicReviewsNotes
  • 2025最新!专科生必看9大AI论文平台测评与推荐
  • 150_尚硅谷_数组应用实例(2)
  • 大一职业规划
  • 怎么制作一个可执行的测试计划
  • 江苏诚信的港澳台联考机构哪家专业
  • 告别论文恐惧症!2025年7款最强AI写作神器,一键生成、轻松降重、查重无忧!
  • ios跟安卓出现崩溃怎么获取日志
  • linux 中 sed命令跳过指定行
  • 汉字
  • 业绩很牛的销售,都在练基本功!
  • CF803C Maximal GCD做题笔记
  • 观bilibi《超强动画,一步一步一步深入浅出解释Transformer原理!》有感
  • 性能测试中关于硬件环境的测试
  • Java-Spring 依赖注入详解--多个类实现与选择 - 若
  • 一键激活 Windows 与 Office 的轻量绿色工具!
  • centos7配置yum软件源
  • 2025年西安电子科技大学计算机考研复试机试真题(附 AC 代码 + 解题思路)
  • 学长亲荐8个AI论文工具,研究生轻松搞定开题报告!
  • 2025最新!9款AI论文软件测评:本科生写论文痛点全解析
  • ubuntu虚拟机mysql数据库忘记密码
  • Selenium + 超级鹰实现猎聘网滑块验证码自动登录
  • 2025年北京邮电大学计算机考研复试机试真题(附 AC 代码 + 解题思路)
  • 「AI元人文构想」对话全记录:从困境、构想到系统自洽的七十日
  • 链表|160.相交链表234.回文指针141环形链表
  • Linux中级の自动运维工具Ansible基础
  • 【图数据库与知识图谱入门】3.5 知识图谱的典型应用场景