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

深度学习 - PyTorch简介

基础知识

1. PyTorch简介
  • PyTorch的特点和优势

    • 动态计算图、易用性、强大的社区支持、与NumPy兼容。
  • 安装和环境配置
    安装和验证PyTorch:

    pip install torch torchvision
    

    验证安装:

    import torch
    print(torch.__version__)
    

    运行结果

    1.9.0  # 具体版本可能不同
    

    配置虚拟环境(推荐使用venvconda):

    # 创建虚拟环境
    python -m venv myenv
    # 激活虚拟环境
    source myenv/bin/activate  # on macOS/Linux
    myenv\Scripts\activate  # on Windows
    
  • 基本数据类型和张量操作

    import torch# 从列表创建张量
    a = torch.tensor([1, 2, 3], dtype=torch.int32)
    print(a)
    

    运行结果

    tensor([1, 2, 3], dtype=torch.int32)
    
2. 张量操作
  • 创建张量

    import torch# 创建全零张量
    b = torch.zeros(2, 3)
    print(b)# 创建全一张量
    c = torch.ones(2, 3)
    print(c)# 创建随机张量
    d = torch.rand(2, 3)
    print(d)# 从NumPy数组创建张量
    import numpy as np
    e = torch.tensor(np.array([1, 2, 3]), dtype=torch.float32)
    print(e)
    

    运行结果

    tensor([[0., 0., 0.],[0., 0., 0.]])
    tensor([[1., 1., 1.],[1., 1., 1.]])
    tensor([[0.4387, 0.4984, 0.5247],[0.2885, 0.3548, 0.9963]])
    tensor([1., 2., 3.])
    
  • 基本张量操作

    # 张量加法
    f = a + torch.tensor([4, 5, 6], dtype=torch.int32)
    print(f)# 张量乘法
    g = b * 3
    print(g)# 索引
    h = d[1, 2]
    print(h)# 切片
    i = d[:, 1]
    print(i)# 张量形状
    shape = d.shape
    print(shape)# 重新调整张量形状
    j = d.view(3, 2)
    print(j)
    

    运行结果

    tensor([5, 7, 9], dtype=torch.int32)
    tensor([[0., 0., 0.],[0., 0., 0.]])
    tensor(0.9963)
    tensor([0.4984, 0.3548])
    torch.Size([2, 3])
    tensor([[0.4387, 0.4984],[0.5247, 0.2885],[0.3548, 0.9963]])
    
  • 广播机制

    a = torch.tensor([1, 2, 3])
    b = torch.tensor([[1], [2], [3]])
    c = a + b
    print(c)
    

    运行结果

    tensor([[2, 3, 4],[3, 4, 5],[4, 5, 6]])
    
  • GPU支持与CUDA

    # 检查GPU是否可用
    if torch.cuda.is_available():device = torch.device("cuda")
    else:device = torch.device("cpu")# 将张量移动到GPU
    a = a.to(device)
    print(a)
    print(a.device)
    

    运行结果

    tensor([1, 2, 3], device='cuda:0')  # 如果有GPU
    cuda:0
    # 或者
    tensor([1, 2, 3])  # 如果没有GPU
    cpu
    

常见问题及解决方案

  1. 安装问题:无法安装PyTorch。

    • 解决方案:确保你使用的Python版本兼容PyTorch,并且已更新pip。尝试使用官方推荐的安装命令。
    pip install torch torchvision
    
  2. CUDA不可用:无法检测到GPU。

    • 解决方案:检查CUDA和cuDNN的安装。确保你的PyTorch版本与CUDA版本兼容。
    import torch
    print(torch.cuda.is_available())  # 应该返回True
    

    运行结果

    True  # 表示CUDA可用
    False  # 表示CUDA不可用
    
  3. 张量形状不匹配:操作中的张量形状不匹配。

    • 解决方案:使用.view().reshape()调整张量形状,使其匹配。
    a = torch.rand(2, 3)
    b = a.view(3, 2)
    print(b)
    

    运行结果

    tensor([[0.9500, 0.2225],[0.6182, 0.6810],[0.5123, 0.9282]])
    
  4. 内存不足:在GPU上运行大模型时,内存不足。

    • 解决方案:尝试减少批量大小,或者使用分布式训练。
    batch_size = 16  # 尝试减少批量大小
    
  5. 梯度计算问题:梯度爆炸或消失。

    • 解决方案:使用梯度裁剪技术,或者尝试不同的优化器。
    torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=2.0)
    
  6. 模型过拟合:训练误差低,但验证误差高。

    • 解决方案:增加正则化(如Dropout),或者使用数据增强技术。
    model = torch.nn.Sequential(torch.nn.Linear(784, 256),torch.nn.ReLU(),torch.nn.Dropout(0.5),torch.nn.Linear(256, 10)
    )
    
  7. 训练速度慢:模型训练速度慢。

    • 解决方案:确保使用了GPU,加大批量大小,或者使用混合精度训练。
    scaler = torch.cuda.amp.GradScaler()
    
  8. 数据加载缓慢:数据加载成为瓶颈。

    • 解决方案:使用多线程数据加载器,并确保数据已预处理好。
    train_loader = torch.utils.data.DataLoader(dataset, batch_size=32, shuffle=True, num_workers=4
    )
    
  9. 张量转换问题:从NumPy到张量转换时出现问题。

    • 解决方案:确保数据类型一致,并使用.astype()方法进行类型转换。
    import numpy as np
    a = np.array([1, 2, 3], dtype=np.float32)
    b = torch.from_numpy(a)
    print(b)
    

    运行结果

    tensor([1., 2., 3.])
    
  10. 模型保存与加载问题:模型保存后加载失败。

    • 解决方案:使用torch.savetorch.load进行模型保存和加载,确保路径正确。
    torch.save(model.state_dict(), 'model.pth')
    model.load_state_dict(torch.load('model.pth'))
    

更多问题咨询

CosAI

相关文章:

深度学习 - PyTorch简介

基础知识 1. PyTorch简介 PyTorch的特点和优势: 动态计算图、易用性、强大的社区支持、与NumPy兼容。 安装和环境配置: 安装和验证PyTorch: pip install torch torchvision验证安装: import torch print(torch.__version__)运行…...

MySQL:CRUD进阶(七千五百字)

文章目录 前置文章:📑1. 数据库约束🌤️1.1 约束类型🌤️1.2 NULL约束🌤️1.3 Unique:唯一约束🌤️1.4 Default:默认值约束🌤️1.5 Primary key:主键约束&…...

与C共舞:让编译更顺滑(2)

1.6 Packed结构体 默认情况下,Zig中的所有结构体字段自然对齐到@alignOf(FieldType)(ABI大小),但没有定义布局。有时,您可能希望具有不符合您的C ABI的定义布局的结构体字段。packed结构体允许您对结构体字段进行极其精确的控制,允许您逐位放置字段。 在packed结构体内…...

Go 群发邮件Redis 实现邮件群发

一、安装 go get github.com/go-redis/redis/v8 go get gopkg.in/gomail.v2 二、使用"gopkg.in/gomail.v2"群发 package mainimport (gomail "gopkg.in/gomail.v2" )func main() {// 邮件内容m : gomail.NewMessage()m.SetHeader("From", &qu…...

夕小瑶:资本寒冬下的AI创业一年

几天前我和几位前大厂朋友约了个饭,朋友纷纷向我透露出一种纠结: “GPT-4o将催生一大波创业机会啊,想离职” “但是现在是资本寒冬啊” “好想像你一样勇敢啊” 说起来这两年的大厂打工人确实比较难,受经济大环境影响&#xff0…...

[JAVASE] 异常 与 SE阶段知识点补充

目录 一. 异常 1.1 什么是异常? 1.2 异常的本质 1.3 异常的分类 1.4 如何处理异常? 1.5 自定义异常 1.6 受查异常 与 非受查异常 与 Error(重要) 二. Object类 三. 内部类 2.1 什么是内部类? 2.2 内部类的分类 2.3 常用内部类的使用 四. 总结 一. 异常 1.1 什么是异…...

可视化数据科学平台在信贷领域应用系列一:数据探索

引言 信贷风险数据建模是金融机构在数据量日益庞杂的时代进行信贷业务风控的关键技术。它能够帮助机构更好地控制风险、减少违约损失,并提高业务效率。通过不断优化建模方法和利用建模工具,金融机构的风险控制能力得到了显著提升。 在本文中,…...

SpringBoot发送Gmail邮件

1. 登录Gmail Gmail网址 点击右上角“小齿轮”,然后点击"查看所有设置" 点击“转发和 POP/IMAP”,按图中设置,然后点击保存: 2. 启用两步验证(https://myaccount.google.com/security) 登录上述网址,找…...

【小海实习日记】金融-现货以及合约理解

在股票和金融市场中,“单项持仓”和“双向持仓”是两个常见的概念,主要用于描述投资者在市场中的头寸及其策略。 单项持仓(单向持仓) 单项持仓是指投资者在市场中只持有一种方向的头寸(多头或空头)&#…...

html 添加元素如何能提升速度

在 HTML 中,如果你需要频繁地添加大量元素,需要确保你的操作能够以最佳性能进行。以下是一些有助于提高添加元素速度的方法: 综上所述,通过使用文档片段、innerHTML、虚拟滚动以及避免频繁的重排和重绘,你可以提高在 H…...

人工智能大模型的进化之路:探索如何让它们变得更“聪明”

一、引言 在人工智能(AI)领域,大模型凭借其强大的处理能力和广泛的应用前景,已经成为研究的热点。然而,尽管这些模型在多个领域展现出了惊人的能力,但它们仍然面临着理解力、泛化能力和适应性等方面的挑战…...

【设计模式深度剖析】【6】【结构型】【外观模式】| 以电脑开关按钮为例,并结合微服务架构的API网关加深理解

👈️上一篇:桥接模式 | 下一篇:享元模式👉️ 设计模式-专栏👈️ 目 录 外观模式(Facade Pattern)定义英文原文直译如何理解呢?字面理解代码实现中的理解生活案例:操作多功能料理机典型案例…...

2024拼多多 最新理论+实战干货,从入门到精通全链路多角度学习-7节课

基于最新规则理论结合实际的干货 课程内容: 01 2024年多多防比价新规则破局理论课与实操课.mp4 02 24年多多强付费第二节课基础内功.mp4 03 24年多多强付费第三节课直通车实操 .mp4 04 24年多多强付费第一节课市场定价格段,mp4 05 24年多多自然流第一节课市场…...

在Three.js中实现模型点击高亮:整合EffectComposer与OutlinePass的终极指南

效果【后期实现鼠标点击选中轮廓后给出一个弹窗显示相应的模型信息】 标签指示线参考我的上一篇文章 引言 Three.js不仅让WebGL的3D图形编程变得简单易懂,还通过其强大的扩展库支持丰富的后期处理效果,为3D场景增添无限魅力。本篇文章将引导您深入了…...

Webrtc支持HEVC之FFMPEG支持HEVC编解码(一)

一、前言 Webrtc使用的FFMPEG(webrtc\src\third_party\ffmpeg)和官方的不太一样,使用GN编译,各个平台使用了不一样的配置文件 以Windows为例,Chrome浏览器也类似 二、修改配置文件 windows:chromium\config\Chrome\win\x64 其他平台: chromium\config\Chrome\YOUR_SYS…...

高校实验室危险化学品及重大危险源安全管理系统

高校实验室危险化学品及重大危险源安全管理的重要性: 保障师生安全:通过严格管理,可以有效地降低这些风险,确保师生在实验室内的安全。 确保实验教学质量:良好的危化品管理能够确保实验材料的准确性和可靠性&#xff0…...

【Godot4自学手册】第四十一节背包系统(一)UI设置

各位同学,好久没有更新笔记了,今天开始,我准备自学背包系统。今天先学习下UI界面设置。 一、新建场景和结点 1.新建Node2D场景,命名为Inventory,保存到Scenes目录下,inventory.tscn。 2.新建TextureRect子…...

JS继承的方式

目录 原型链继承构造函数继承组合继承寄生组合继承ES6 Class 继承原型链继承 原理: 通过将子类的原型(prototype)设置为父类的一个实例,使得子类实例能够沿着原型链访问到父类的属性和方法。 function Parent() {this.parentProperty...

拓展虚拟世界边界,云手机可以做到吗

虚拟世界,AI,VR等词汇是21世纪最为流行的词汇,在科技背后,这些词汇的影响变得越来越大,已经走进了人们的世界,比如之前APPLE发布的vision pro,使人们能够更加身临其境的体验到原生os系统&#x…...

网络的功能和实现方法简介

网络的功能: 计算机网络是研究怎么样在两个端用户之间提供访问通路的。所以网络的功能是为网络上的任意两个端用户之间提供访问通路。 计算机通信的特点: 间歇性和突发性。即时而线路中没有信息流过,时而突来的大量数据需要迅速传输。为此计…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

测试markdown--肇兴

day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...