深度学习 - PyTorch简介
基础知识
1. PyTorch简介
-
PyTorch的特点和优势:
- 动态计算图、易用性、强大的社区支持、与NumPy兼容。
-
安装和环境配置:
安装和验证PyTorch:pip install torch torchvision验证安装:
import torch print(torch.__version__)运行结果:
1.9.0 # 具体版本可能不同配置虚拟环境(推荐使用
venv或conda):# 创建虚拟环境 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
常见问题及解决方案
-
安装问题:无法安装PyTorch。
- 解决方案:确保你使用的Python版本兼容PyTorch,并且已更新
pip。尝试使用官方推荐的安装命令。
pip install torch torchvision - 解决方案:确保你使用的Python版本兼容PyTorch,并且已更新
-
CUDA不可用:无法检测到GPU。
- 解决方案:检查CUDA和cuDNN的安装。确保你的PyTorch版本与CUDA版本兼容。
import torch print(torch.cuda.is_available()) # 应该返回True运行结果:
True # 表示CUDA可用 False # 表示CUDA不可用 -
张量形状不匹配:操作中的张量形状不匹配。
- 解决方案:使用
.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]]) - 解决方案:使用
-
内存不足:在GPU上运行大模型时,内存不足。
- 解决方案:尝试减少批量大小,或者使用分布式训练。
batch_size = 16 # 尝试减少批量大小 -
梯度计算问题:梯度爆炸或消失。
- 解决方案:使用梯度裁剪技术,或者尝试不同的优化器。
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=2.0) -
模型过拟合:训练误差低,但验证误差高。
- 解决方案:增加正则化(如Dropout),或者使用数据增强技术。
model = torch.nn.Sequential(torch.nn.Linear(784, 256),torch.nn.ReLU(),torch.nn.Dropout(0.5),torch.nn.Linear(256, 10) ) -
训练速度慢:模型训练速度慢。
- 解决方案:确保使用了GPU,加大批量大小,或者使用混合精度训练。
scaler = torch.cuda.amp.GradScaler() -
数据加载缓慢:数据加载成为瓶颈。
- 解决方案:使用多线程数据加载器,并确保数据已预处理好。
train_loader = torch.utils.data.DataLoader(dataset, batch_size=32, shuffle=True, num_workers=4 ) -
张量转换问题:从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.]) - 解决方案:确保数据类型一致,并使用
-
模型保存与加载问题:模型保存后加载失败。
- 解决方案:使用
torch.save和torch.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将催生一大波创业机会啊,想离职” “但是现在是资本寒冬啊” “好想像你一样勇敢啊” 说起来这两年的大厂打工人确实比较难,受经济大环境影响࿰…...
[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…...
高校实验室危险化学品及重大危险源安全管理系统
高校实验室危险化学品及重大危险源安全管理的重要性: 保障师生安全:通过严格管理,可以有效地降低这些风险,确保师生在实验室内的安全。 确保实验教学质量:良好的危化品管理能够确保实验材料的准确性和可靠性࿰…...
【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…...
网络的功能和实现方法简介
网络的功能: 计算机网络是研究怎么样在两个端用户之间提供访问通路的。所以网络的功能是为网络上的任意两个端用户之间提供访问通路。 计算机通信的特点: 间歇性和突发性。即时而线路中没有信息流过,时而突来的大量数据需要迅速传输。为此计…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
