深度学习 - 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…...
网络的功能和实现方法简介
网络的功能: 计算机网络是研究怎么样在两个端用户之间提供访问通路的。所以网络的功能是为网络上的任意两个端用户之间提供访问通路。 计算机通信的特点: 间歇性和突发性。即时而线路中没有信息流过,时而突来的大量数据需要迅速传输。为此计…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
