利用GPU进行训练

news2025/2/4 8:50:57

文章目录

    • 一、GPU训练模型
    • 二、对比使用gpu和cpu进行训练所花费的时间
    • 三、GPU训练模型的第二种表达方式

一、GPU训练模型

GPU只能够训练三种变量,分别是:

网络模型
数据(输入,标注targets)
损失函数

使用方式是.cuda()

除了以上的三种,在别的地方是引用不上cuda的。

使用方式:

1.网络模型

#创建网络模型
class Sen(nn.Module):
    def __init__(self):
        super(Sen, self).__init__()
        self.model = nn.Sequential(
            nn.Conv2d(3, 32, 5, 1, 2),
            nn.MaxPool2d(2),
            nn.Conv2d(32, 32, 5, 1 ,2),
            nn.MaxPool2d(2),
            nn.Conv2d(32, 64, 5, 1, 2),
            nn.MaxPool2d(2),
            nn.Flatten(),
            nn.Linear(64*4*4, 64),
            nn.Linear(64, 10)
        )
    def forward(self,x):
        x = self.model(x)
        return x
sen = Sen()
sen.cuda()

2、损失函数

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

3、数据

    for data in train_dataloader:
        imgs, targets = data
        imgs = imgs.cuda()
        targets = targets.cuda()
        outputs = sen(imgs)
        loss = loss_fn(outputs, targets)

如果电脑上没有GPU的话,以上这么写会发生报错,更好的写法应该是加上if判断是否有GPU
例下:

if torch.cuda.is_available():
    sen.cuda()
if torch.cuda.is_available():
	loss_fn = loss_fn.cuda()
if torch.cuda.is_available():
  imgs = imgs.cuda()
  targets = targets.cuda()

这样可以保证有gpu先试用gpu,没有gpu也能够正常运行。

二、对比使用gpu和cpu进行训练所花费的时间

引入记录时间函数:

import time
start_time = time.time()
end_time = time.time()
print(f"使用gpu训练使用的时间{end_time - start_time}")

在模型训练开始与结束时候分别记录start_time和end_time:

start_time = time.time()
for i in range(epoch):
    print(f"-------第{i+1}轮训练开始-------")

    #训练步骤开始
    sen.train()
    for data in train_dataloader:
        imgs, targets = data
        imgs = imgs.cuda()
        targets = targets.cuda()
        outputs = sen(imgs)
        loss = loss_fn(outputs, targets)

        #优化器模型
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        total_train_step = total_train_step + 1
        if total_train_step % 100 == 0:
            end_time = time.time()
            print(f"使用gpu训练使用的时间{end_time - start_time}")
            print(f"训练次数:{total_train_step},Loss:{loss.item()}")
            writer.add_scalar("train_loss", loss.item(), total_train_step)

1.使用gpu训练结果:
在这里插入图片描述

可以看到平均100次只使用1s。

2.使用cpu进行训练结果:
在这里插入图片描述
可以看到没训练100次花费时间是7s

因此使用gpu进行训练模型能大大提升算力。

三、GPU训练模型的第二种表达方式

先定义训练的设备:

device = torch.device("cpu")

再在变量当中调用

sen = Sen()
sen = sen.to(device)
#损失函数
loss_fn = nn.CrossEntropyLoss()
loss_fn = loss_fn.to(device)
     imgs, targets = data
     imgs = imgs.to(device)
     targets = targets.to(device)

调用gpu只需要改变训练模型即可,变量当中依旧用.to(device):

device = torch.device("cuda")

‘:0’的写法等同于cuda

device = torch.device("cuda:0")

如果电脑上有两个不同的gpu,可以用以下调用第二个gpu进行训练

device = torch.device("cuda:1")

为了适用于不同环境,可以用以下代码来写:

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

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

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

相关文章

精品WordPress主题/响应式个人博客主题Kratos

Kratos 是一款专注于用户阅读体验的响应式 WordPress 主题,整体布局简洁大方,针对资源加载进行了优化。 Kratos主题基于Bootstrap和Font Awesome的WordPress一个干净,简单且响应迅速的博客主题,Vtrois创建和维护, 主…

rockylinux9安装软件报错

1、rocky linux9再安装软件的时候报错: [rootClient119 yum.repos.d]# yum -y install epel-release [rootClient119 yum.repos.d]# yum -y install libcgroup Extra Packages for Enterprise Linux 9 - x86_64 …

【MySQL 09】表的内外连接

目录 1.内连接 创建表(案例准备) 案例: 2.外连接 2.1左外连接 案例: 2.2右外连接 案例: 1.内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过…

什么是pip? -- Python 包管理工具

前言 不同的编程语言通常都有自己的包管理工具,这些工具旨在简化项目的依赖管理、构建过程和开发效率,同时促进代码的复用和共享。每个包管理工具都有其独特的特点和优势,开发者可以根据自己的编程语言和项目需求选择合适的包管理工具。 pip是…

R语言的下载、安装及环境配置(RstudioVSCode)

0x01 R语言篇 一、软件介绍 R for Windows是一个免费的用于统计计算和统计制图的优秀工具,是R语言开发工具。它拥有数据存储和处理系统、数组运算工具(其向量、矩阵运算方面功能尤其强大)、完整连贯的统计分析工具、优秀的统计制图等功能。…

Spring Cloud之OpenFeign的具体实践

1 基本概念 OpenFeign基于Feign框架开发,而Feign是Netflix开源的一个声明式Web服务客户端。OpenFeign通过定义接口、注解和动态代理等方式,将服务调用的过程封装起来,使得开发者只需要定义服务接口,而无需关心底层的HTTP请求和序列…

qt 使用svg 图标的使用

1. 添加模块 在cmakeList.txt 中添加svg模块 2. 使用示例 这里已给已初始化的按钮设置图标为例: int width 12;int height 12;QSvgRenderer *minRenderer new QSvgRenderer(QString(":/resources/icon/min_window.svg"));QPixmap pixmap(width, h…

CSS——属性值计算

CSS——属性值计算 今天来详细讲解一下 CSS的属性值计算过程,这是 CSS 的核心之一(另一个是视觉可视化模型,个人理解,这个相对复杂,以后再讲)。 基本概念 层叠样式表:Cascade Style Sheet&am…

【YOLO学习】YOLOv5口罩检测实战

文章目录 1. 环境配置2. 下载代码3. 安装库3.1 安装pytorch3.2 安装其他库 4. 测试5. 数据标注6. 模型训练7. 界面可视化 1. 环境配置 1. 先参考其他文章安装 Anaconda 或者 Miniconda,我安装的是 Miniconda。 2. 更换国内源,以加快速度 。可以参考下面这…

使用Buildpacks构建Docker镜像

## 使用Buildpacks构建Docker镜像 ![](../assets/运维手册-Buildpacks-Buildpacks.io.png) ### Buildpacks简介 与Dockerfile相比,Buildpacks为构建应用程序提供了更高层次的抽象。具体来说,Buildpacks: * 提供一个平衡的控制,…

Koa2项目实战2(路由管理、项目结构优化)

添加路由(处理不同的URL请求) 路由:根据不同的URL,调用对应的处理函数。 每一个接口服务,最核心的功能是:根据不同的URL请求,返回不同的数据。也就是调用不同的接口返回不同的数据。 在 Node…

1C++入门基础(一)

文章目录 什么是C?C的发展史C关键字(C98)命名空间命名空间的定义命名空间的使用 C中的输入和输出缺省参数缺省参数的概念缺省参数分类全缺省参数半缺省参数 函数重载函数重载的概念函数重载的原理(名字修饰) extern#1. 符号的声明与定义#1.1 变量的声明与定义#1.2 函数的声明和…

均值模板和二阶差分模板的频率响应

均值模板和二阶差分模板都是偶对称。实偶函数的傅里叶变换仍是实偶函数。 给个证明过程 实偶函数 一个函数 f ( x ) f(x) f(x) 被称为实偶函数,如果它满足以下条件: f ( − x ) f ( x ) f(-x) f(x) f(−x)f(x) 傅里叶变换 对于一个实偶函数 f (…

实验 | 使用本地大模型从论文PDF中提取结构化信息

非结构文本、图片、视频等数据是待挖掘的数据矿藏, 在经管、社科等研究领域中谁拥有了_从非结构提取结构化信息的能力_,谁就拥有科研上的数据优势。正则表达式是一种强大的文档解析工具,但它们常常难以应对现实世界文档的复杂性和多变性。而随…

【Codeforces】CF 2007 E

E. Iris and the Tree #树形结构 #贪心 #数学 题目描述 Given a rooted tree with the root at vertex 1 1 1. For any vertex i i i ( 1 ≤ i ≤ n 1 \leq i \leq n 1≤i≤n) in the tree, there is an edge connecting vertices i i i and p i p_i pi​ ( 1 ≤ p i ≤…

Python使用matplotlib绘制图形大全(曲线图、条形图、饼图等)

matplotlib 的主要组成部分是 pyplot,它是一个类似于 MATLAB 的绘图框架。pyplot 提供了一个 MATLAB 式的接口,可以隐式地创建图形和轴,使得绘图变得简单。 以下是一个简单的 matplotlib 使用示例,用于绘制一条简单的折线图&…

Linux:进程间通信之信号量

system V的进程间通信除了共享内存,还有消息队列和信号量 IPC(进程间通信的简称) 消息队列 消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同…

Electron 使⽤ electron-builder 打包应用

electron有几种打包方式,我使用的是electron-builder。虽然下载依赖的时候让我暴躁,使用起来也很繁琐,但是它能进行很多自定义,打包完成后的体积也要小一些。 安装electron-builder: npm install electron-builder -…

cherry-markdown开源markdown组件详细使用教程

文章目录 前言开发定位目标调研技术方案前提工作量安排数据库表设计实现步骤1、引入依赖2、实现cherry-markdown的vue组件(修改上传接口路径)3、支持draw.io组件4、支持展示悬浮目录toc前端使用:编辑状态使用cherry-markdown的vue组件前端使用…

图像转3D视差视频:DepthFlow

参看: https://github.com/BrokenSource/DepthFlow 通过深度图实现图像3d效果 安装 https://brokensrc.dev/get/pypi/#installing pip insatll depthflow shaderflow broken-source pianola spectronote turbopipe 使用 1、下载项目 git clone https://github.com/BrokenS…