PyTorch完整的神经网络模型训练(使用GPU训练)

 1.什么是CUDA:

CUDA(Compute Unified Device Architecture)是由NVIDIA开发的一种并行计算平台和编程模型。它允许开发者在NVIDIA GPU上进行通用目的的并行计算,包括深度学习、科学计算、图形处理和加密等任务。

CUDA通过提供一组编程接口和工具,使开发者能够利用GPU的并行计算能力。它包括以下主要组件:

1. CUDA编程模型:CUDA提供了一种基于C/C++编程语言的并行编程模型。开发者可以使用CUDA C/C++语言扩展来编写GPU上的并行代码。CUDA编程模型包括主机代码(在CPU上执行)和设备代码(在GPU上执行),开发者可以在主机和设备之间进行数据传输和协同计算。

2. CUDA运行时和驱动程序:CUDA运行时是一个库,提供了访问GPU设备和执行CUDA代码的接口。驱动程序是与GPU硬件交互的软件组件。开发者可以使用CUDA运行时库和驱动程序来加载和执行CUDA代码。

3. CUDA工具集:CUDA提供了一套工具集,用于帮助开发者进行CUDA程序的开发、调试和优化。这些工具包括编译器、调试器、性能分析器和可视化工具等。

CUDA的主要优势在于其并行计算能力和广泛的支持。通过利用GPU的大规模并行计算单元,CUDA可以加速各种计算密集型任务。它在深度学习领域得到广泛应用,许多深度学习框架如PyTorch和TensorFlow都支持CUDA,使得开发者能够在GPU上高效地进行深度学习训练和推理。

需要注意的是,CUDA只能在NVIDIA的GPU上运行,因此它是特定于NVIDIA硬件的。其他厂商的GPU使用不同的并行计算平台和编程模型,如AMD的ROCm和Intel的OneAPI。

2.使用GPU进行神经网络模型训练

        使用GPU进行神经网络模型训练可以加速训练速度、处理大规模数据和模型、提供更好的模型性能,并且与PyTorch等深度学习框架良好地集成。这些优点使得GPU成为加速神经网络训练的重要工具,为研究人员和从业者提供了更高效的深度学习开发环境。

        要在PyTorch中使用GPU训练完整的神经网络模型,需要执行以下步骤:

  1. 检查GPU可用性:首先,确保计算机上有可用的GPU。如果使用的是具有NVIDIA GPU的计算机,确保已经安装了适当的NVIDIA驱动程序和CUDA工具包。

  2. 导入必要的库:在Python脚本的开头,导入PyTorch和其他必要的库。

import torch
import torch.nn as nn

     3.接下来便是使用GPU进行神经网络训练的完整代码

# encoding=gbk
# 开发时间:2024/3/10 19:51
# 使用GPU进行训练:
'''
网络模型
数据
损失函数
三者调用cuda()
'''
import torch
import torchvision
from torch import nn
from torch.nn import MaxPool2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
from nn_mode import *

#准备数据集
train_data=torchvision.datasets.CIFAR10(root='../chap4_Dataset_transforms/dataset',train=True,transform=torchvision.transforms.ToTensor())
test_data=torchvision.datasets.CIFAR10(root='../chap4_Dataset_transforms/dataset',train=False,transform=torchvision.transforms.ToTensor())
#输出数据集的长度
train_data_size=len(train_data)
test_data_size=len(test_data)
print(train_data_size)
print(test_data_size)
#加载数据集
train_loader=DataLoader(dataset=train_data,batch_size=64)
test_loader=DataLoader(dataset=test_data,batch_size=64)
#创建神经网络
sjnet=Sjnet()

sjnet=sjnet.cuda()#网络模型调用cuda

#损失函数
loss_fn=nn.CrossEntropyLoss()

loss_fn=loss_fn.cuda()#损失函数调用cuda
#优化器
learn_lr=0.01#便于修改
YHQ=torch.optim.SGD(sjnet.parameters(),lr=learn_lr)

#设置训练网络的参数
train_step=0#训练次数
test_step=0#测试次数
epoch=10#训练轮数

writer=SummaryWriter('wanzheng_GPU_logs')

for i in range(epoch):
    print("第{}轮训练".format(i+1))
    #开始训练
    for data in train_loader:
        imgs,targets=data

        imgs=imgs.cuda()
        targets=targets.cuda()#数据调用cuda

        outputs=sjnet(imgs)
        loss=loss_fn(outputs,targets)
        #优化器
        YHQ.zero_grad()  # 将神经网络的梯度置零,以准备进行反向传播
        loss.backward()  # 执行反向传播,计算神经网络中各个参数的梯度
        YHQ.step()  # 调用优化器的step()方法,根据计算得到的梯度更新神经网络的参数,完成一次参数更新
        train_step =train_step+1
        if train_step%100==0:
            print('训练次数为:{},loss为:{}'.format(train_step,loss))
            writer.add_scalar('train_loss',loss,train_step)

    #开始测试
    total_loss=0
    with torch.no_grad():#上下文管理器,用于指示在接下来的代码块中不计算梯度。
        for data in test_loader:
            imgs,targets=data

            imgs = imgs.cuda()
            targets = targets.cuda()#数据调用cuda


            outputs = sjnet(imgs)
            loss = loss_fn(outputs, targets)#使用损失函数 loss_fn 计算预测输出与目标之间的损失。
            total_loss=total_loss+loss#将当前样本的损失加到总损失上,用于累积所有样本的损失。
    print('整体测试集上的loss:{}'.format(total_loss))
    writer.add_scalar('test_loss', total_loss, test_step)
    test_step = test_step+1

    torch.save(sjnet,'sjnet_{}.pth'.format(i))
    print("模型已保存!")

writer.close()

 其代码相比于使用CPU的区别在于,网络模型、数据、损失函数这三者调用了cuda()

从运行窗口的输出:

 其速度远超使用CPU进行训练的速度。

在TensorBoard中的损失值展示:

3.PyTorch使用GPU进行神经网络模型训练具有以下优点:

  1. 加速训练速度:GPU(图形处理器)具有并行计算能力,可以同时执行多个计算任务。相比于使用CPU进行训练,使用GPU可以显著加速神经网络的训练过程。GPU的并行计算能力可以同时处理大量的矩阵运算,这是神经网络训练中的关键操作,从而加快了训练速度。

  2. 处理大规模数据和模型:神经网络模型和数据集的规模不断增大,需要更强大的计算能力来处理。GPU提供了更多的计算资源,可以有效地处理大规模数据和模型。通过将模型和数据加载到GPU内存中,可以充分利用GPU的并行计算能力,加快训练速度和内存处理速度。

  3. 支持深度学习框架:PyTorch是一种广泛使用的深度学习框架,它提供了对GPU的良好支持。PyTorch提供了简单易用的API,使得将模型和数据移动到GPU上变得简单,并且可以轻松地在GPU上执行计算。这使得使用GPU进行模型训练变得更加方便和高效。

  4. 更好的模型性能:由于GPU可以并行处理大量计算任务,使用GPU进行训练可以提高模型的性能。通过加速训练速度,可以更快地迭代和优化模型,从而提高模型的准确性和泛化能力。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vulhub中Weblogic WLS Core Components 反序列化命令执行漏洞复现(CVE-2018-2628)

Oracle 2018年4月补丁中,修复了Weblogic Server WLS Core Components中出现的一个反序列化漏洞(CVE-2018-2628),该漏洞通过t3协议触发,可导致未授权的用户在远程服务器执行任意命令。 访问http://your-ip:7001/consol…

人工智能:探索智慧的未来

目录 前言1 人工智能的简介1.1 人工智能的定义1.2 任务范围1.3 模拟人类认知 2 人工智能发展2.1 起步阶段2.2 发展阶段2.3 繁荣阶段 3 弱人工智能和强人工智能3.1 弱人工智能(ANI)3.2 强人工智能(AGI) 4 人工智能主要技术4.1 机器…

【C++11】包装器和bind

文章目录 一. 为什么要有包装器?二. 什么是包装器?三. 包装器的使用四. bind 函数模板1. 为什么要有 bind ?2. 什么是 bind ?3. bind 的使用场景 一. 为什么要有包装器? function 包装器,也叫作适配器。C 中的 funct…

Elastic Stack--06--JavaAPI----索引(创建-查询- 删除)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 环境准备添加依赖&#xff1a;HelloElasticsearch JavaAPI-索引1.创建2.查询3.删除 环境准备 添加依赖&#xff1a; <dependencies><dependency><g…

第G3周:CGAN入门|生成手势图像

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 一、前置知识 CGAN&#xff08;条件生成对抗网络&#xff09;的原理是在原始GAN的基础上&#xff0c;为生成器和判别器提供 额外的条件信息…

vue3 ref获取子组件显示 __v_skip : true 获取不到组件的方法 怎么回事怎么解决

看代码 问题出现了 当我想要获取这个组件上的方法时 为什么获取不到这个组件上的方法呢 原來&#xff1a; __v_skip: true 是 Vue 3 中的一个特殊属性&#xff0c;用于跳过某些组件的渲染。当一个组件被标记为 __v_skip: true 时&#xff0c;Vue 将不会对该组件进行渲染&am…

ABAP接口-RFC连接(ABAP TO ABAP)

目录 ABAP接口-RFC连接&#xff08;ABAP TO ABAP&#xff09;创建ABAP连接RFC函数的调用 ABAP接口-RFC连接&#xff08;ABAP TO ABAP&#xff09; 创建ABAP连接 事务代码&#xff1a;SM59 点击创建&#xff0c;填写目标名称&#xff0c;选择连接类型&#xff1a; 填写主机名…

打卡--MySQL8.0 一(单机部署)

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; MySQL 8.0 简介 MySQL 8.0与5.7的区别主要体现在&#xff1a;1、性能提升&#xff1b;2、新的默认…

02-app端文章查看,静态化freemarker,分布式文件系统minIO

app端文章查看&#xff0c;静态化freemarker,分布式文件系统minIO 1)文章列表加载 1.1)需求分析 文章布局展示 1.2)表结构分析 ap_article 文章基本信息表 ap_article_config 文章配置表 ap_article_content 文章内容表 三张表关系分析 1.3)导入文章数据库 1.3.1)导入数据…

【vue.js】文档解读【day 2】 | 响应式基础

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 本人会很热心的阐述自己的想法&#xff01;谢谢&#xff01;&#xff01;&#xff01; 文章目录 响应式基础声明响应式状态(属性)响应式代理 vs 原始值声明方法深层响应性DOM 更新时机有状态方法 响应式…

电脑数据安全新防线:文件备份的终极指南

一、数据守护者的使命&#xff1a;文件备份的重要性 在数字化日益普及的今天&#xff0c;电脑已成为我们日常生活和工作的必备工具&#xff0c;文件作为我们储存、交流和处理信息的主要载体&#xff0c;其重要性不言而喻。然而&#xff0c;无论是由于硬件故障、软件崩溃&#…

Autosar教程-Mcal教程-GPT配置教程

3.3GPT配置、生成 3.3.1 GPT配置所需要的元素 GPT实际上就是硬件定时器,需要配置的元素有: 1)定时器时钟:定时器要工作需要使能它的时钟源 2)定时器分步:时钟源进到定时器后可以通过分频后再给到定时器 定时器模块选择:MCU有多个定时器模块,需要决定使用哪个定时器模块作…

【动态规划】代码随想录算法训练营第三十九天 |62.不同路径,63.不同路径II(待补充)

62.不同路径 1、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右…

JavaScript高级Ⅱ(全面版)

接上文 JavaScript高级Ⅰ JavaScript高级Ⅰ(自认为很全面版)-CSDN博客 目录 第2章 DOM编程 2.1 DOM编程概述 2.1.4 案例演示(商品全选) 2.1.5 dom操作内容 代码演示&#xff1a; 运行效果&#xff1a; 2.1.6 dom操作属性 代码演示&#xff1a; 运行效果&#xff1a; 2…

H264/265编码参数2: Profile Level Tier

profile和level profile和level是视频编码中两个很重要的概率&#xff0c;中文一般叫做档次和级别。 在MPEG2标准里边&#xff0c;按不同的压缩比分成五个档次&#xff0c;按视频清晰度分为四个级别&#xff0c;如下图所示&#xff1a; 档次和级别共有 20 种组合&#xff0c;…

2024年【化工自动化控制仪表】考试总结及化工自动化控制仪表作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【化工自动化控制仪表】考试总结及化工自动化控制仪表作业考试题库&#xff0c;包含化工自动化控制仪表考试总结答案和解析及化工自动化控制仪表作业考试题库练习。安全生产模拟考试一点通结合国家化工自动化控…

day-18 长度最小的子数组

运用队列的思维&#xff0c;求出每种满足题意的子数组长度&#xff0c;最小的即为答案&#xff0c;否则返回0 code class Solution {public int minSubArrayLen(int target, int[] nums) {int l0,r0;int ansInteger.MAX_VALUE;int total0;while(r<nums.length){totalnums[r…

C++:类和对象(三)——拷贝构造函数和运算符重载

目录 一、拷贝构造函数 1.概念 2.特性 二、赋值运算符重载 1.运算符重载 2.赋值运算符重载 &#xff08;1&#xff09;注意的点&#xff1a; &#xff08;2&#xff09;赋值运算符不允许被重载为全局函数&#xff0c;只能重载为类的成员函数 &#xff08;3&#xff09;…

STM32单片机示例:ETH_LAN8742_DHCP_NonOS_Poll_H743

文章目录 目的基础说明关键配置关键代码示例链接总结 目的 以太网是比较常用到的功能&#xff0c;STM32系列单片机使用CubeMX配置使用以太网功能比非常方便。不过对于H7系列来说需要使能 DCache 才能启用LwIP&#xff0c;启用Cache后又会带来一些需要特别注意的事情。这篇文章…

HarBor私有镜像仓库安装部署

环境准备 #>>> redis $ yum -y install redis $ systemctl enable --now redis $ vim /etc/redis.conf modify: bind <ipaddress> $ systemctl restart redis#>>> nfs $ yum -y install nfs-utils $ mkdir -p /data/harbor $ vi /etc/exports /data/h…