实训题

news/2025/10/17 12:52:17/文章来源:https://www.cnblogs.com/666888com/p/19147565

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
from multiprocessing import freeze_support
import sys

def load_data():
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])

trainset = torchvision.datasets.CIFAR10(
root='./data',
train=True,
download=True,
transform=transform
)
trainloader = torch.utils.data.DataLoader(
trainset,
batch_size=4,
shuffle=True,
num_workers=2
)

testset = torchvision.datasets.CIFAR10(
root='./data',
train=False,
download=True,
transform=transform
)
testloader = torch.utils.data.DataLoader(
testset,
batch_size=4,
shuffle=False,
num_workers=2
)

classes = ('plane', 'car', 'bird', 'cat',
'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

return trainloader, testloader, classes

class Net(nn.Module):
def init(self):
super().init()
self.conv1 = nn.Conv2d(3, 6, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)

def forward(self, x):
x = self.pool(torch.relu(self.conv1(x)))
x = self.pool(torch.relu(self.conv2(x)))
x = torch.flatten(x, 1) # 展平
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
x = self.fc3(x)
return x

def compile_model(net):
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
return criterion, optimizer

def train(net, trainloader, criterion, optimizer, device, epochs=2):
for epoch in range(epochs):
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
inputs, labels = data

核心:数据与模型设备同步
inputs, labels = inputs.to(device), labels.to(device)

# 梯度清零
optimizer.zero_grad()# 前向计算 + 反向传播 + 优化参数
outputs = net(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()# 打印训练日志
running_loss += loss.item()
if i % 2000 == 1999:  # 每2000个batch打印一次print(f'[{epoch + 1}, {i + 1:5d}] loss: {running_loss / 2000:.3f}')running_loss = 0.0

print('训练完成')

def test(net, testloader, classes, device):
correct = 0
total = 0

测试时不计算梯度,加快速度
with torch.no_grad():
for data in testloader:
images, labels = data

数据与模型设备同步
images, labels = images.to(device), labels.to(device)
outputs = net(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()

print(f'测试集整体准确率: {100 * correct // total} %')

按类别统计准确率
correct_pred = {classname: 0 for classname in classes}
total_pred = {classname: 0 for classname in classes}

with torch.no_grad():
for data in testloader:
images, labels = data
images, labels = images.to(device), labels.to(device)
outputs = net(images)
_, predictions = torch.max(outputs, 1)

统计每个类别的预测结果

for label, prediction in zip(labels, predictions):
if label == prediction:
correct_pred[classes[label]] += 1
total_pred[classes[label]] += 1

打印各类别准确率
for classname, correct_count in correct_pred.items():
accuracy = 100 * float(correct_count) / total_pred[classname]
print(f'类别: {classname:5s} 准确率: {accuracy:.1f} %')
if name == 'main':
freeze_support() # 解决Windows多进程问题

自动选择设备(有GPU用GPU,无则用CPU)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(f"当前使用设备: {device}")

加载数据、初始化模型和优化器
trainloader, testloader, classes = load_data()
net = Net().to(device) # 模型放到指定设备
criterion, optimizer = compile_model(net)

重定向输出到文件,同时保留控制台打印
original_stdout = sys.stdout
with open('cifar10_result.txt', 'w') as f:
sys.stdout = f
print(f"当前使用设备: {device}")
train(net, trainloader, criterion, optimizer, device)
test(net, testloader, classes, device)
sys.stdout = original_stdout # 恢复控制台输出

print("训练完成!结果已保存到 cifar10_result.txt ")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GoodSync 2025年10月17日

GoodSync 2025年10月17日https://www.autoahk.com/archives/53171www.cnblogs.com/delphixx

书本p66实训题第2题

import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms import matplotlib.pyplot as plt import numpy as np 数据预处理 transform = t…

2025全屋定制厂家推荐:聚焦异形空间+特色色系,森佰特木业领衔优质之选

伴随家居个性化需求的持续升级,2025 年全屋定制市场不再局限于基础款式,而是朝着 “精准适配空间”“特色风格表达” 方向发展,异形空间全屋定制“莫兰迪色系全屋定制”“现代风全屋定制” 等细分需求显著增长。然而…

springboot 上传图片到服务器之后,前段不能正确加载图片问题

技术说明: springboot:2.1.4.RELEASE jQuery Ajax mysql:8.0.32 问题描述: springboot打成jar包,上传到服务器之后,在同目录下,又创建了一个upload目录,用来储存照片,但是前端引用url路径之后不能显示图片 问…

springboot 设置文件上传大小

技术说明: springboot:2.1.4.RELEASE jQuery Ajax mysql:8.0.32 问题描述: 上传文件一直报错,提示这问题,在yml配置了也没有用,后来发现问题了#文件上传servlet:multipart:# 设置单个文件最大内存max-file-size…

【光照】UnityURP[屏幕空间环境光遮蔽SSAO]原理剖析实践

本文探讨Unity URP中屏幕空间环境光遮蔽(SSAO)技术的实现。SSAO通过计算像素周围几何体的遮挡关系增强场景真实感,其发展经历了传统算法、优化改进和URP集成三个阶段。核心技术包括深度纹理采样、法线重建、遮蔽计算和…

Ai元人文:讨论一种新的决策科学

Ai元人文:讨论一种新的决策科学 岐金兰: 其实,问题的根源是人们狭隘的偏见, 更是,人们在工程化“价值”时忘记了, 或者是,有意无意地在回避, 在现实中,面对价值冲突时的真实场景和解决方法。 而且,在我们的构…

2025年流量计厂家权威推荐榜单:热式/模拟式/数字式/高压/高温/耐腐蚀/多气体/4-20mA/RS485/分体式/不锈钢高精度流量计公司精选

2025年流量计厂家权威推荐榜单:热式/模拟式/数字式/高压/高温/耐腐蚀/多气体/4-20mA/RS485/分体式/不锈钢高精度流量计公司精选在工业自动化与过程控制领域,流量计作为关键测量设备,其性能直接影响生产效率和产品质…

深入解析:云原生时代的数据流高速公路:深入解剖Apache Pulsar的架构设计哲学

深入解析:云原生时代的数据流高速公路:深入解剖Apache Pulsar的架构设计哲学pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fa…

DeepResearch代码浅析

DeepResearch代码浅析 概述 代码:DeepResearch 主要看一下inference下面的ReAct推理流程。 inference ├── eval_data │ ├── example_with_file.jsonl │ ├── example.jsonl │ └── file_corpus │…

2025年连铸机厂家权威推荐榜单:扇形段/大包回转台/钢包中间罐/结晶器总成/拉矫机/引锭杆/输送辊道/液压剪等核心部件专业供应商

2025年连铸机厂家权威推荐榜单:扇形段/大包回转台/钢包中间罐/结晶器总成/拉矫机/引锭杆/输送辊道/液压剪等核心部件专业供应商在钢铁工业持续转型升级的背景下,连铸机作为钢铁生产流程中的关键设备,其性能直接影响…

机器人控制利器:MPC入门与实践解析 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年10月中国专精特新申报服务机构推荐榜:五强实测

在选择中国专精特新申报服务机构时,关键在于找到最适合自身实际需求的解决方案。工信部中小企业局2024年度《优质中小企业梯度培育工作通报》显示,截至2024年6月,全国累计公告“专精特新小巨人”企业1.2万家,全年申…

静态初始化块的执行顺序

class Root { static { System.out.println("Roota"); } { System.out.println("Rootb"); } public Root() { System.out.println("Rootc"); } } class Mid extends Root { static { Sy…

正态总体中标准化单样本残差的分布推导

本文完整推导了从正态总体 $N(\mu, \sigma^2)$ 中抽取的样本中,单个标准化残差 $W = (X_1 - \bar{X}) / \sqrt{\sum(X_i - \bar{X})^2}$ 的概率密度函数。证明过程利用了赫尔默特变换与多元正态分布的旋转不变性,将 …

2025年轧钢设备厂家权威推荐榜:冷轧机、热轧机源头生产厂家,技术实力与市场口碑深度解析

2025年轧钢设备厂家权威推荐榜:冷轧机、热轧机源头生产厂家,技术实力与市场口碑深度解析行业背景与发展现状钢铁工业作为国民经济的重要支柱产业,其生产装备的技术水平直接关系到产品质量和生产效率。冷轧机与热轧机…

实用指南:在鸿蒙NEXT中发起HTTP网络请求:从入门到精通

实用指南:在鸿蒙NEXT中发起HTTP网络请求:从入门到精通pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

10.16 CSP-S 模拟赛总结

ContestT1 我很神秘。数据水理论复杂度 \(O(nk^2)\) 暴力过了。 实际上只要想到对 \(k\) 取模就会做了。因为满足要求的情况即为存在一段 \([l,r]\) 的子区间和对 \(k\) 取模为 \(0\),那么等价于两次前缀和对 \(k\) 取…

远程无钥匙进入(PKE)技术:便利与安全的完美融合

PKE 远程无钥匙进入 在智能汽车时代,远程无钥匙进入(Passive Keyless Entry,简称PKE)已成为提升用户体验的核心技术。它允许车主无需手动操作钥匙,只需携带智能钥匙靠近车辆,即可自动解锁车门或启动引擎。根据20…

灵动岛iPhone状态栏获得高度不对 iOS iPhone14pro iPhone14pro max状态栏获得高度不对

之前的获得状态栏高度代码是(CGFloat)statusRectHeight { if (@available(iOS 13.0, *)) { _statusRectHeight = [UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager.statusBarFram…