首页 > 其他分享 >深度学习 - PyTorch简介

深度学习 - PyTorch简介

时间:2024-06-05 19:29:17浏览次数:25  
标签:tensor 简介 torch 张量 PyTorch 深度 print GPU 解决方案

基础知识

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

标签:tensor,简介,torch,张量,PyTorch,深度,print,GPU,解决方案
From: https://blog.csdn.net/weixin_47552266/article/details/139453335

相关文章

  • 深度学习高频手撕代码
    nmsdefcal_iou(bbox1,bbox2):#x1,y1,x2,y2#min_x-max_xinter_x=min(bbox1[2],bbox2[2])-max(bbox1[0],bbox2[0])#min_y-max_yinter_y=min(bbox1[3],bbox2[3])-max(bbox1[1],bbox2[1])ifinter_x<=0orinter_y<=0:......
  • Redis 常用的数据结构简介与实例测试【Redis 系列二】
    〇、都有哪些数据结构?Redis提供了较为丰富的数据类型,常见的有五种:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。随着Redis版本的更新,后面又支持了四种数据类型:BitMap(2.2版新增)、HyperLogLog(2.8版新增)、GEO(3.2版新增)、Stream(5.0版新增)。本文将对以上数据类型,通......
  • Python深度学习实践:自动编码器在数据降维中的应用
    Python深度学习实践:自动编码器在数据降维中的应用1.背景介绍在现代数据科学和机器学习领域中,高维数据处理是一个常见的挑战。许多真实世界的数据集包含大量的特征,这些特征往往存在高度的冗余和噪声。高维数据不仅增加了计算复杂性,还容易导致维数灾难(curseofdimensio......
  • Docker部署深度学习模型
    Docker部署深度学习模型基础概念DockerDocker是一个打包、分发和运行应用程序的平台,允许将你的应用程序和应用程序所依赖的整个环境打包在一起。比如我有一个目标检测的项目,我想分享给朋友,那么他首先需要在自己的电脑上配置好显卡驱动、CUDA、CuDNN,在拿到我的项目后,还需要安......
  • LibDEEP:深度学习库
    介绍LibDEEP是一个用C语言开发的深度学习库,专注于人工智能技术的发展。该库旨在提供一种高效、灵活的工具,用于构建和训练神经网络。LibDEEP支持多种类型的神经网络,包括前馈神经网络(FNN)、卷积神经网络(CNN)和递归神经网络(RNN)。其设计目标是通过简洁的代码和高效的计算,提供强大的......
  • 【长亭雷池WAF】介绍及“动态防护”功能深度体验
    一、介绍什么是雷池雷池(SafeLine)是长亭科技耗时近10年倾情打造的WAF,核心检测能力由智能语义分析算法驱动。Slogan:不让黑客越雷池半步。什么是WAFWAF是WebApplicationFirewall的缩写,也被称为Web应用防火墙。区别于传统防火墙,WAF工作在应用层,对基于HTTP/HTTPS......
  • (PDF)图解深度学习 (山下隆义)关机按技术分享电子版
    书:pan.baidu.com/s/1k0aEyPyTpEtwu-5HBOW0SA提取码:axib笔记内容:深度学习基础: 介绍深度学习的基本概念和背景,包括神经网络的基础知识。神经网络的工作原理: 图解了神经网络的基本结构和工作原理,包括神经元、激活函数等。深度学习的历史: 探讨了深度学习的发展历程,介绍了一些......
  • 深度解读ChatGPT基本原理
    一.引言1.ChatGPT的背景和应用场景在人工智能领域,自然语言处理(NLP)一直是一个核心研究方向,其目的是让计算机能够理解、解析和生成人类语言。随着深度学习技术的发展,NLP领域取得了显著进步,特别是生成式预训练变换器(GenerativePre-trainedTransformer,简称GPT)模型的出现,极大地......
  • 麻醉医生的深度学习之旅 P4:Pytorch实现猴痘病识别
    ......
  • 实现秒传与限速!深度解析万亿GB网盘系统架构
    1.系统需求与挑战1.1DBox核心功能在设计一个面向万亿GB的网盘系统时,我们需要首先明确系统的核心功能需求。DBox作为一个高并发、高可靠的网盘系统,核心功能需求主要包括以下几点:海量存储:支持存储海量数据,满足用户上传和下载需求。秒传功能:快速上传相同文件,避免重复存储......