AI开发学习之——PyTorch框架
PyTorch 简介
PyTorch (Python torch)是由 Facebook AI 研究团队开发的开源机器学习库,广泛应用于深度学习研究和生产。它以动态计算图和易用性著称,支持 GPU 加速计算,并提供丰富的工具和模块。
PyTorch的主要特点
- 动态计算图:PyTorch 使用动态计算图(Autograd),允许在运行时修改图结构,便于调试和实验。
- GPU 加速:支持 CUDA,能够利用 GPU 进行高效计算。
- 模块化设计:提供
torch.nn等模块,便于构建和训练神经网络。 - 丰富的生态系统:包括 TorchVision、TorchText 和 TorchAudio 等,支持多种任务。、
PyTorch的安装
通过以下命令安装 PyTorch:
pip install torch torchvision
如果国内的速度慢,可以使用-i 参数使用国内的仓库源。
pip3 install torch -i https://pypi.tuna.tsinghua.edu.cn/simple
除了清华的源之外,也可以使用科大或是北外的数据源。
-
https://mirrors.bfsu.edu.cn/pypi/web/simple
-
https://mirrors.ustc.edu.cn/pypi/web/simple
使用示例
1. 张量操作
import torch# 创建张量
x = torch.tensor([1.0, 2.0, 3.0])
y = torch.tensor([4.0, 5.0, 6.0])# 加法
z = x + y
print(z) # 输出: tensor([5., 7., 9.])
这里的输出为什么不是 tensor([5.0, 7.0, 9.0])呢?
在Python的浮点数表示中,.0后缀通常用于明确表示一个数是浮点数(float),而不是整数(int)。然而,在大多数情况下,Python和许多库(包括PyTorch,这里提到的tensor是由PyTorch生成的)在打印浮点数时,如果小数点后没有额外的数字,它们可能会省略.0后缀以简化输出。
当使用科学计算库如NumPy或PyTorch时,它们通常有统一的输出格式,尤其是在处理数组或tensor时。在你的例子中,tensor([5., 7., 9.])和tensor([5.0, 7.0, 9.0])在数值上是完全相同的,只是表示形式略有不同。PyTorch选择省略小数点后没有数字的.0后缀,以使输出更简洁。
这种输出格式的选择主要是出于可读性和简洁性的考虑,并不影响tensor中存储的实际数值。在数值计算中,5.和5.0都被视为浮点数,并且在计算中没有任何区别。
2. 自动求导
import torch# 创建需要梯度的张量
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)# 定义函数
y = x * 2
z = y.mean()# 反向传播
z.backward()# 查看梯度
print(x.grad) # 输出: tensor([0.6667, 0.6667, 0.6667])
这里的结果是怎么来的呢?
这段代码演示了 PyTorch 中的**自动微分(Autograd)**机制,通过计算梯度来实现反向传播。我们来逐步分析代码的运算过程。
1. 创建需要梯度的张量
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
x是一个包含[1.0, 2.0, 3.0]的 1 阶张量(向量)。requires_grad=True表示 PyTorch 需要跟踪对x的所有操作,以便后续计算梯度。
2. 定义函数
y = x * 2
z = y.mean()
y = x * 2:对x逐元素乘以 2,得到y = [2.0, 4.0, 6.0]。z = y.mean():计算y的均值,即:

3. 反向传播
z.backward()
z.backward()表示从z开始反向传播,计算z对x的梯度。- 由于
z是一个标量(单个值),PyTorch 会自动计算z对x的梯度。
4. 梯度计算
PyTorch 通过链式法则计算梯度。具体步骤如下:
(1)计算 z 对 y 的梯度
-
z = y.mean()可以写成:

-
因此,
z对y的梯度为:

(2)计算 y 对 x 的梯度
y = x * 2可以写成:
yi=2xi- 因此,
y对x的梯度为:

(3)计算 z 对 x 的梯度
根据链式法则:

将结果代入:

5. 查看梯度
print(x.grad) # 输出: tensor([0.6667, 0.6667, 0.6667])
x.grad存储了z对x的梯度,结果为:

总结
这段代码的运算过程如下:
- 创建需要梯度的张量
x。 - 定义函数
y = x * 2和z = y.mean()。 - 通过
z.backward()计算z对x的梯度。 - 根据链式法则,梯度计算结果为
[0.6667, 0.6667, 0.6667]。
PyTorch 的自动微分机制使得梯度计算变得非常简单,尤其是在深度学习模型中,这种机制可以自动计算损失函数对模型参数的梯度,从而支持梯度下降等优化算法。
3. 简单神经网络
import torch
import torch.nn as nn
import torch.optim as optim# 定义网络
class SimpleNet(nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc = nn.Linear(1, 1)def forward(self, x):return self.fc(x)# 创建网络、损失函数和优化器
model = SimpleNet()
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)# 训练数据
x = torch.tensor([[1.0], [2.0], [3.0], [4.0]])
y = torch.tensor([[2.0], [4.0], [6.0], [8.0]])# 训练过程
for epoch in range(100):optimizer.zero_grad()outputs = model(x)loss = criterion(outputs, y)loss.backward()optimizer.step()if (epoch+1) % 10 == 0:print(f'Epoch [{epoch+1}/100], Loss: {loss.item():.4f}')
4. 使用 GPU
import torch# 检查 GPU 是否可用
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')# 创建张量并移动到 GPU
x = torch.tensor([1.0, 2.0, 3.0]).to(device)
y = torch.tensor([4.0, 5.0, 6.0]).to(device)# 在 GPU 上执行加法
z = x + y
print(z) # 输出: tensor([5., 7., 9.], device='cuda:0')
torch、torchvision 和 torchaudio
torch、torchvision 和 torchaudio 是 PyTorch 生态系统中的三个核心库,分别用于通用深度学习、计算机视觉和音频处理任务。以下是它们的详细介绍和作用:
1. torch
torch 是 PyTorch 的核心库,提供了深度学习的基础功能,包括张量操作、自动求导、神经网络模块等。
主要功能:
- 张量操作:支持高效的张量计算(如加法、乘法、矩阵运算等)。
- 自动求导:通过
Autograd模块实现自动微分,便于梯度计算和优化。 - 神经网络模块:提供
torch.nn模块,包含各种层(如全连接层、卷积层)和损失函数。 - 优化器:提供
torch.optim模块,包含 SGD、Adam 等优化算法。 - GPU 加速:支持 CUDA,可以利用 GPU 进行高性能计算。
使用场景:
- 构建和训练深度学习模型。
- 实现自定义的数学运算和算法。
- 进行张量计算和数值模拟。
示例:
import torch# 创建张量
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)# 定义计算
y = x * 2
z = y.mean()# 自动求导
z.backward()# 查看梯度
print(x.grad) # 输出: tensor([0.6667, 0.6667, 0.6667])
2. torchvision
torchvision 是 PyTorch 的计算机视觉库,提供了常用的数据集、模型架构和图像处理工具。
主要功能:
- 数据集:提供常用的计算机视觉数据集(如 MNIST、CIFAR-10、ImageNet)。
- 模型架构:包含预训练的经典模型(如 ResNet、VGG、AlexNet)。
- 图像处理工具:提供数据增强和转换工具(如裁剪、旋转、归一化)。
- 实用工具:包括可视化工具和评估指标。
使用场景:
- 图像分类、目标检测、分割等计算机视觉任务。
- 加载和处理图像数据。
- 使用预训练模型进行迁移学习。
示例:
import torchvision
import torchvision.transforms as transforms
from torchvision.models import resnet18# 数据预处理
transform = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])# 加载数据集
dataset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)# 加载预训练模型
model = resnet18(pretrained=True)
3. torchaudio
torchaudio 是 PyTorch 的音频处理库,提供了音频数据的加载、处理和转换工具。
主要功能:
- 音频加载和保存:支持多种音频格式(如 WAV、MP3)。
- 音频处理:提供音频信号处理工具(如重采样、频谱图生成)。
- 数据集:包含常用的音频数据集(如 LibriSpeech、VoxCeleb)。
- 特征提取:支持提取 MFCC、Mel 频谱等音频特征。
使用场景:
- 语音识别、语音合成、音频分类等任务。
- 音频数据的预处理和特征提取。
- 加载和处理音频数据集。
示例:
import torchaudio
import torchaudio.transforms as T# 加载音频文件
waveform, sample_rate = torchaudio.load('example.wav')# 重采样
resampler = T.Resample(orig_freq=sample_rate, new_freq=16000)
resampled_waveform = resampler(waveform)# 提取 Mel 频谱
mel_spectrogram = T.MelSpectrogram(sample_rate=16000)(resampled_waveform)
三者的关系
torch是核心库,提供基础功能(如张量计算、自动求导、神经网络模块)。torchvision是基于torch的扩展库,专注于计算机视觉任务。torchaudio是基于torch的扩展库,专注于音频处理任务。
三者可以结合使用,例如:
- 使用
torchvision处理图像数据,用torch构建和训练模型。 - 使用
torchaudio处理音频数据,用torch构建语音识别模型。
安装
可以通过以下命令安装这三个库:
pip install torch torchvision torchaudio
总结
torch:核心库,提供深度学习的基础功能。torchvision:计算机视觉库,提供数据集、模型和图像处理工具。torchaudio:音频处理库,提供音频加载、处理和特征提取工具。
三者共同构成了 PyTorch 的完整生态系统,适用于各种深度学习任务。
相关文章:
AI开发学习之——PyTorch框架
PyTorch 简介 PyTorch (Python torch)是由 Facebook AI 研究团队开发的开源机器学习库,广泛应用于深度学习研究和生产。它以动态计算图和易用性著称,支持 GPU 加速计算,并提供丰富的工具和模块。 PyTorch的主要特点 …...
SAP HCM insufficient authorization, no.skipped personnel 总结归纳
导读 权限:HCM模块中有普通权限和结构化权限。普通权限就是PFCG的权限,结构化权限就是按照部门ID授权,颗粒度更细,对分工明细化的单位尤其重要,今天遇到的问题就是结构化权限的问题。 作者:vivi,来源&…...
机器学习算法在网络安全中的实践
机器学习算法在网络安全中的实践 本文将深入探讨机器学习算法在网络安全领域的应用实践,包括基本概念、常见算法及其应用案例,从而帮助程序员更好地理解和应用这一领域的技术。"> 序言 网络安全一直是信息技术领域的重要议题,随着互联…...
DeepSeek V3 vs R1:大模型技术路径的“瑞士军刀“与“手术刀“进化
DeepSeek V3 vs R1:——大模型技术路径的"瑞士军刀"与"手术刀"进化 大模型分水岭:从通用智能到垂直突破 2023年,GPT-4 Turbo的发布标志着通用大模型进入性能瓶颈期。当模型参数量突破万亿级门槛后,研究者们开…...
STM32CUBEIDE编译的hex使用flymcu下载后不能运行
测试后确认,不论是1.10版本还是1.16版本,编译生成的hex下载后不能运行,需要更改boot 设置才能开始运行,flymcu下载后已经告知一切正常,跳转到8000 0000处开始运行,实际没有反应,而使用mdk编译生…...
图像噪声处理技术:让图像更清晰的艺术
在这个数字化时代,图像作为信息传递的重要载体,其质量直接影响着我们的视觉体验和信息解读。然而,在图像采集、传输或处理过程中,难免会遇到各种噪声干扰,如高斯噪声、椒盐噪声等,这些噪声会降低图像的清晰…...
java-抽象类注意点
ChinesePerson 类 public class ChinesePerson extends Person{public ChinesePerson(){}public ChinesePerson(String name, int age){super(name, age);}Overridepublic void greet() {System.out.println("你好,我的名字叫" this.getName());} }Engl…...
【c++】类与对象详解
目录 面向过程思想和面向对象思想类的定义引入类的关键字类定义的两种方式类的访问限定符类的作用域类大小的计算封装 this指针类的6个默认成员函数构造函数初步理解构造函数深入理解构造函数初始化列表单参数构造函数引发的隐式类型转换 析构函数拷贝构造函数赋值运算符重载运…...
MySQL的GROUP BY与COUNT()函数的使用问题
在MySQL中,GROUP BY和 COUNT()函数是数据聚合查询中非常重要的工具。正确使用它们可以有效地统计和分析数据。然而,不当的使用可能会导致查询结果不准确或性能低下。本文将详细讨论 GROUP BY和 COUNT()函数的使用方法及常见问题,并提供相应的…...
问deepseek,如何看待ai降低学习成本而导致软件开发岗位需求降低,和工资下降。 软件从业人员何去何从?
它给我的回答是这样的: 思考逻辑 嗯,用户问的是AI如何降低学习成本,进而导致软件开发岗位需求减少和工资下降,以及软件从业人员该怎么办。这个问题挺复杂的,我得先理清楚各个部分。首先,AI确实在改变很多行…...
Jason配置环境变量
jason官网 https://jason-lang.github.io/ https://github.com/jason-lang/jason/releases 步骤 安装 Java 21 或更高版本 安装 Visual Studio Code 根据操作系统,请按照以下具体步骤操作 视窗 下载 Jason 的最新版本,选择“jason-bin-3.3.0.zip”…...
word2vec 实战应用介绍
Word2Vec 是一种由 Google 在 2013 年推出的重要词嵌入模型,通过将单词映射为低维向量,实现了对自然语言处理任务的高效支持。其核心思想是利用深度学习技术,通过训练大量文本数据,将单词表示为稠密的向量形式,从而捕捉单词之间的语义和语法关系。以下是关于 Word2Vec 实战…...
AI技术在SEO关键词优化中的应用策略与前景展望
内容概要 在数字营销的快速发展中,AI技术逐渐成为SEO领域的核心驱动力。其通过强大的数据分析和处理能力,不仅改变了我们优化关键词的方式,也提升了搜索引擎优化的效率和效果。在传统SEO中,关键词的选择与组合常依赖人工经验和直…...
c/c++高级编程
1.避免变量冗余初始化 结构体初始化为0,等价于对该内存进行一次memset,对于较大的结构体或者热点函数,重复的赋值带来冗余的性能开销。现代编译器对此类冗余初始化代码具有一定的优化能力,因此,打开相关的编译选项的优…...
玩转Docker | 使用Docker部署MySQL数据库
玩转Docker | 使用Docker部署MySQL数据库 玩转Docker | 使用Docker部署MySQL数据库一、Docker简介(一)Docker是什么(二)Docker的优势二、准备工作(一)安装Docker(二)了解MySQL数据库三、使用Docker部署MySQL数据库(一)拉取MySQL镜像(二)运行MySQL容器(三)验证MyS…...
【网络】传输层协议TCP(重点)
文章目录 1. TCP协议段格式2. 详解TCP2.1 4位首部长度2.2 32位序号与32位确认序号(确认应答机制)2.3 超时重传机制2.4 连接管理机制(3次握手、4次挥手 3个标志位)2.5 16位窗口大小(流量控制)2.6 滑动窗口2.7 3个标志位 16位紧急…...
HarmonyOS:ArkWeb进程
ArkWeb是多进程模型,分为应用进程、Web渲染进程、Web GPU进程、Web孵化进程和Foundation进程。 说明 Web内核没有明确的内存大小申请约束,理论上可以无限大,直到被资源管理释放。 ArkWeb进程模型图 应用进程中Web相关线程(应用唯一) 应用进程为主进程。包含网络线程、Vi…...
说说Redis的内存淘汰策略?
大家好,我是锋哥。今天分享关于【说说Redis的内存淘汰策略?】面试题。希望对大家有帮助; 说说Redis的内存淘汰策略? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 提供了多种内存淘汰策略,用于在内存达到限制时决定如何…...
DeepSeek为什么超越了OpenAI?从“存在主义之问”看AI的觉醒
悉尼大学学者Teodor Mitew向DeepSeek提出的问题,在推特上掀起了一场关于AI与人类意识的大讨论。当被问及"你最想问人类什么问题"时,DeepSeek的回答直指人类存在的本质:"如果意识是进化的偶然,宇宙没有内在的意义&a…...
unity学习26:用Input接口去监测: 鼠标,键盘,虚拟轴,虚拟按键
目录 1 用Input接口去监测:鼠标,键盘,虚拟轴,虚拟按键 2 鼠标 MouseButton 事件 2.1 鼠标的基本操作 2.2 测试代码 2.3 测试情况 3 键盘Key事件 3.1 键盘的枚举方式 3.2 测试代码同上 3.3 测试代码同上 3.4 测试结果 4…...
成绩案例demo
本案例较为简单,用到的知识有 v-model、v-if、v-else、指令修饰符.prevent .number .trim等、computed计算属性、toFixed方法、reduce数组方法。 涉及的功能需求有:渲染、添加、删除、修改、统计总分,求平均分等。 需求效果如下:…...
无人机飞手光伏吊运、电力巡检、农林植保技术详解
无人机飞手在光伏吊运、电力巡检、农林植保等领域的技术应用,体现了无人机技术的广泛性和实用性。以下是对这三个领域技术的详细解析: 一、无人机飞手光伏吊运技术 1. 技术背景 光伏发电站作为可再生能源的重要组成部分,其建设和维护对效率…...
编程AI深度实战:给vim装上AI
系列文章: 编程AI深度实战:私有模型deep seek r1,必会ollama-CSDN博客 编程AI深度实战:自己的AI,必会LangChain-CSDN博客 编程AI深度实战:给vim装上AI-CSDN博客 编程AI深度实战:火的编程AI&…...
Shell篇-字符串处理
目录 1.变量引用 2.获取字符串长度 3.字符串截取 4.删除子字符串 5.字符串替换 总结: Bash(Shell 脚本)中的字符串处理语法。以下是对其的介绍和总结:Bash 变量可以使用不同的语法来获取、修改和删除字符串的内容。图片中列…...
Ubuntu16.04编译安装Cartographer 1.0版本
说明 官方文档 由于Ubuntu16.04已经是很老的系统,如果直接按照Cartographer官方安装文档安装会出现代码编译失败的问题,本文给出了解决这些问题的办法。正常情况下执行本文给出的安装方法即可成功安装。 依赖安装 # 这里和官方一致 # Install the req…...
使用Pygame制作“走迷宫”游戏
1. 前言 迷宫游戏是最经典的 2D 游戏类型之一:在一个由墙壁和通道构成的地图里,玩家需要绕过障碍、寻找通路,最终抵达出口。它不但简单易实现,又兼具可玩性,还能在此基础上添加怪物、道具、机关等元素。本篇文章将展示…...
C++并发编程指南04
文章目录 共享数据的问题3.1.1 条件竞争双链表的例子条件竞争示例恶性条件竞争的特点 3.1.2 避免恶性条件竞争1. 使用互斥量保护共享数据结构2. 无锁编程3. 软件事务内存(STM) 总结互斥量与共享数据保护3.2.1 互斥量使用互斥量保护共享数据示例代码&…...
算法8--归并
目录 原理经典例题[912. 排序数组](https://leetcode.cn/problems/sort-an-array/description/)[LCR 170. 交易逆序对的总数](https://leetcode.cn/problems/shu-zu-zhong-de-ni-xu-dui-lcof/description/)计算右侧小于当前元素的个数[493. 翻转对](https://leetcode.cn/proble…...
8.攻防世界Web_php_wrong_nginx_config
进入题目页面如下 尝试弱口令密码登录 一直显示网站建设中,尝试无果,查看源码也没有什么特别漏洞存在 用Kali中的dirsearch扫描根目录试试 命令: dirsearch -u http://61.147.171.105:53736/ -e* 登录文件便是刚才登录的界面打开robots.txt…...
Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具(专业版)
前言:日常生活中,我们常常会跟WPS Office打交道。作表格,写报告,写PPT......可以说,我们的生活已经离不开WPS Office了。与此同时,我们在这个过程中也会遇到各种各样的技术阻碍,例如部分软件的PDF转Word需要收取额外费用等。那么,可不可以自己开发一个小工具来实现PDF转…...
