深度学习 - PyTorch简介

ops/2024/10/17 20:19:08/

基础知识

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


http://www.ppmy.cn/ops/48069.html

相关文章

UE4 RPC进行网络同步

说明 基于UE本身提供的RPC同步机制 RPC远程过程调用允许客户端或服务器通过网络连接相互发送消息: 使用时需要注意: 1、必须从 Actor 上调用 2、Actor 必须被复制,注意勾选BP中Replicates,或使变量bReplicates true 3、注意如…

VL27 不重叠序列检测

这里最大的问题是: always (*) 和 always (posedge clk or negedge rst_n)的区别 always (*) 在当前时钟内会变化 always (posedge clk or negedge rst_n)由时钟驱动,所以会在下一个时钟才发生变化 代码 module sequence_detect(input clk,input rst_…

【2024算力大会分会 | SPIE独立出版 | 往届均已完成EI检索】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)

【2024算力大会分会 | SPIE出版】 2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024) 2024 International conference on Cloud Computing, Performance Computing and Deep Learning *CCPCDL往届均已完成EI检索,最快会后4个半月完成! 一、…

武汉凯迪正大—绝缘强度的测试设备 工频高压耐压交流试验仪 工频耐压试验机

武汉凯迪正大电气有限公司生产KDJS-8A全自动工频耐压试验系统(10kVA全自动操作台),是根据国家行业试验标准而设计的试验设备,其安全可靠、功能强、使用方便、维护简单。主要用于对各种电器产品、电气元件、绝缘材料等进行规定电压…

【设计模式】结构型设计模式之 组合模式

介绍 这里的组合模式,与之前的设计模式中的"组合关系"完全是两码事,这里的组合模式主要用来处理结构为树形的数据。 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树状结构来表示…

C# —— 类型转换

类型转换就是不同变量数据类型之间进行互相转换 隐式转换 : 默认是C#中安全的进行数据转换的方式 一般不会造成数据丢失 相同数据类型之间的隐式转换 有符号 long -> int ->short ->sbyte long l 1; int i 2; short s 3; sbyte sb 4; // 大范围可以装小范围的 l…

如何愉快地实施数仓模型,对比下厨做饭

一般我们建设数仓,有一个链路: 比如这样的 数据从原始层到DWD、DWS层、然后ADS层。 嘿,未来的大数据专家们!当我们开始实施数据模型时,不妨参考《大数据之路》这本宝藏书。 让我们一起简化流程,注重细节…

HBuilder中能否使用机器学习

HBuilder中能否使用机器学习? HBuilder是一款由腾讯公司开发的前端开发工具,主要用于快速构建和管理HTML5应用。HBuilder本身是一个专注于Web开发的集成开发环境(IDE),它提供了代码编辑、预览、调试等功能,并且集成了Espresso等移动应用测试框架。HBuilder的核心功能是针…