深度学习 - 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…...
网络的功能和实现方法简介
网络的功能: 计算机网络是研究怎么样在两个端用户之间提供访问通路的。所以网络的功能是为网络上的任意两个端用户之间提供访问通路。 计算机通信的特点: 间歇性和突发性。即时而线路中没有信息流过,时而突来的大量数据需要迅速传输。为此计…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...