news 2026/8/6 19:51:51

PyTorch深度学习入门笔记(小土堆)P26-32

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PyTorch深度学习入门笔记(小土堆)P26-32

PyTorch深度学习入门笔记P26-32

@ZZHow(ZZHow1024)

参考课程:

PyTorch深度学习快速入门教程【小土堆】

[https://www.bilibili.com/video/BV1hE411t7RN]

P26. 完整的模型训练套路(一)

  • 训练部分
    • model.py

      importtorchfromtorchimportnnfromtorch.nnimportSequential# 搭建神经网络classMyModel(torch.nn.Module):def__init__(self):super(MyModel,self).__init__()self.model=Sequential(nn.Conv2d(in_channels=3,out_channels=32,kernel_size=5,stride=1,padding=2),nn.MaxPool2d(kernel_size=2),nn.Conv2d(in_channels=32,out_channels=32,kernel_size=5,stride=1,padding=2),nn.MaxPool2d(kernel_size=2),nn.Conv2d(in_channels=32,out_channels=64,kernel_size=5,stride=1,padding=2),nn.MaxPool2d(kernel_size=2),nn.Flatten(),nn.Linear(in_features=64*4*4,out_features=64),nn.Linear(in_features=64,out_features=10),)defforward(self,x):x=self.model(x)returnx# 测试神经网络模型结构的正确性if__name__=='__main__':model=MyModel()input=torch.ones([64,3,32,32])output=model(input)print(output.shape)
    • train.py

      importtorchimporttorchvision.datasetsfrommodelimportMyModel# 准备数据集train_data=torchvision.datasets.CIFAR10('dataset',train=True,transform=torchvision.transforms.ToTensor(),download=True)test_data=torchvision.datasets.CIFAR10('dataset',train=False,transform=torchvision.transforms.ToTensor(),download=True)# 获取数据集的长度train_data_size=len(train_data)test_data_size=len(test_data)print(f'训练数据集的长度为:{train_data_size}')print(f'测试数据集的长度为:{test_data_size}')# 使用 Dataloader 加载数据集train_dataloader=torch.utils.data.DataLoader(train_data,batch_size=64)test_dataloader=torch.utils.data.DataLoader(test_data,batch_size=64)# 创建网络模型model=MyModel()# 损失函数loss_fn=torch.nn.CrossEntropyLoss()# 优化器learning_rate=1e-2optimizer=torch.optim.SGD(model.parameters(),lr=learning_rate)# 设置训练网络的参数total_train_step=0# 训练次数total_test_step=0# 测试次数epoch=10# 训练轮次foriinrange(epoch):print(f'---第{i+1}轮训练开始---')# 训练步骤开始fordataintrain_dataloader:images,targets=data outputs=model(images)loss=loss_fn(outputs,targets)# 优化器优化模型optimizer.zero_grad()loss.backward()optimizer.step()total_train_step+=1print(f'训练次数:{total_train_step},Loss:{loss.item()}')

P27. 完整的模型训练套路(二)

  • 测试(验证)部分

    # 测试步骤开始total_test_loss=0# 总测试 Losstotal_accuracy=0# 总正确率withtorch.no_grad():fordataintest_dataloader:images,targets=data outputs=model(images)loss=loss_fn(outputs,targets)total_test_loss+=loss.item()accuracy=(outputs.argmax(1)==targets).sum()total_accuracy+=accuracy writer.add_scalar('test_loss',total_test_loss,total_test_step)writer.add_scalar('test_accuracy',total_accuracy/test_data_size,total_test_step)print(f'测试集上的总 Loss:{total_test_loss}')print(f'测试集上的总 正确率:{total_accuracy/test_data_size}')torch.save(model.state_dict(),os.path.join('model',f'model_{i}.pth'))print(f'模型已保存,文件名:model_{i}.pth')total_test_step+=1

P28. 完整的模型训练套路(三)

  • 训练步骤开始时

    model.train()
  • 测试步骤开始时

    model.eval()
  • 案例演示:model.pytrain.py

P29. 利用GPU训练(一)

  • 方式一

    • 在网络模型、数据(输入,标注)和损失函数后加上.cuda()
    # 创建网络模型model=MyModel()iftorch.cuda.is_available():model=model.cuda()# 损失函数loss_fn=torch.nn.CrossEntropyLoss()iftorch.cuda.is_available():loss_fn=loss_fn.cuda()# 数据(输入,标注)images,targets=dataiftorch.cuda.is_available():images=images.cuda()targets=targets.cuda()
  • 案例演示:train_gpu_1.py

P30. 利用GPU训练(二)

  • 方式二

    • 在网络模型、数据(输入,标注)和损失函数后通过.to(device)转移到对应设备
    # 训练设备device='cpu'iftorch.cuda.is_available():device='cuda'eliftorch.mps.is_available():device='mps'print(f'训练设备:{device}')# 创建网络模型model=MyModel()model.to(device)# 损失函数loss_fn=torch.nn.CrossEntropyLoss()loss_fn=loss_fn.to(device)# 数据(输入,标注)images,targets=data images=images.to(device)targets=targets.to(device)
  • 案例演示:train_gpu_2.py

P31. 完整的模型验证套路

  • test.py

    importosimporttorchimporttorchvisionfromPILimportImagefrommodelimportMyModel# 测试图片名称image_name='dog.png'# 测试模型名称model_name='model_29.pth'# 测试设备device='cpu'iftorch.cuda.is_available():device='cuda'eliftorch.mps.is_available():device='mps'print(f'测试设备:{device}')# 测试图片路径image_path=os.path.join('images',image_name)image=Image.open(image_path)image=image.convert('RGB')print(image)# 图片预处理transform=torchvision.transforms.Compose([torchvision.transforms.Resize((32,32)),torchvision.transforms.ToTensor()])image=transform(image)image=torch.reshape(image,(1,3,32,32))print(image.shape)# 加载模型model=MyModel()model.load_state_dict(torch.load(os.path.join('model',model_name),map_location=torch.device(device)))# 开始测试model.eval()withtorch.no_grad():output=model(image)print(output)print(output.argmax(1))
  • 注意:若训练模型的设备与当前加载加载模型的设备不一致时,需要在torch.load()时指定map_location=torch.device(device)

  • 案例演示:test.py

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 19:51:12

springboot 一站式Web家政服务预约管理系统

一、关键词家政服务预约、家政人员管理、服务订单、服务评价二、作品包含源码数据库万字设计文档PPT全套环境和工具资源本地部署教程三、项目技术前端技术: Html、Css、Js、Vue3.2、Element-Plus后端技术:Java、SpringBoot3.2.0、MyBatis-Plus四、运行环…

作者头像 李华
网站建设 2026/8/6 19:49:58

FasterImage实战案例:打造高性能React Native图片画廊

FasterImage实战案例:打造高性能React Native图片画廊 【免费下载链接】faster-image Fast image loading for React Native backed by performant native libraries. 项目地址: https://gitcode.com/gh_mirrors/fa/faster-image 在移动应用开发中&#xff0…

作者头像 李华
网站建设 2026/8/6 19:48:27

重读CV系列——2、Fast-RCNN学习

1、详细工作流程步骤操作与R-CNN的差异1. 生成候选区域同样使用Selective Search,生成约2000个候选框。无变化,候选框生成依然独立。2. 整图特征提取将整张图片输入CNN,得到一张共享的、高分辨率的特征图(Feature Map)…

作者头像 李华
网站建设 2026/8/6 19:45:13

多智能体(Multi-Agent)编排实战:用 LangGraph 构建生产级 AI 系统

1. 引言:为什么需要多智能体编排随着大语言模型(LLM)能力的持续提升,单一智能体在复杂业务场景中逐渐暴露出局限性:上下文窗口有限、工具调用链路过长、职责边界模糊、错误难以隔离。多智能体(Multi-Agent&…

作者头像 李华