AI开发学习之——PyTorch框架

news2025/2/3 23:53:49

PyTorch 简介

PyTorch (Python torch)是由 Facebook AI 研究团队开发的开源机器学习库,广泛应用于深度学习研究和生产。它以动态计算图和易用性著称,支持 GPU 加速计算,并提供丰富的工具和模块。

PyTorch的主要特点

  1. 动态计算图:PyTorch 使用动态计算图(Autograd),允许在运行时修改图结构,便于调试和实验。
  2. GPU 加速:支持 CUDA,能够利用 GPU 进行高效计算。
  3. 模块化设计:提供 torch.nn 等模块,便于构建和训练神经网络。
  4. 丰富的生态系统:包括 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 开始反向传播,计算 zx 的梯度。
  • 由于 z 是一个标量(单个值),PyTorch 会自动计算 zx 的梯度。

4. 梯度计算

PyTorch 通过链式法则计算梯度。具体步骤如下:

(1)计算 zy 的梯度

  • z = y.mean() 可以写成:
    在这里插入图片描述

  • 因此,zy 的梯度为:
    在这里插入图片描述

(2)计算 yx 的梯度

  • y = x * 2 可以写成:
    yi​=2xi​
  • 因此,yx 的梯度为:
    在这里插入图片描述

(3)计算 zx 的梯度
根据链式法则:
在这里插入图片描述

将结果代入:
在这里插入图片描述


5. 查看梯度
print(x.grad)  # 输出: tensor([0.6667, 0.6667, 0.6667])
  • x.grad 存储了 zx 的梯度,结果为:
    在这里插入图片描述

总结

这段代码的运算过程如下:

  1. 创建需要梯度的张量 x
  2. 定义函数 y = x * 2z = y.mean()
  3. 通过 z.backward() 计算 zx 的梯度。
  4. 根据链式法则,梯度计算结果为 [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')

torchtorchvisiontorchaudio

torchtorchvisiontorchaudio 是 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 的完整生态系统,适用于各种深度学习任务。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2291504.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP HCM insufficient authorization, no.skipped personnel 总结归纳

导读 权限:HCM模块中有普通权限和结构化权限。普通权限就是PFCG的权限,结构化权限就是按照部门ID授权,颗粒度更细,对分工明细化的单位尤其重要,今天遇到的问题就是结构化权限的问题。 作者:vivi,来源&…

机器学习算法在网络安全中的实践

机器学习算法在网络安全中的实践 本文将深入探讨机器学习算法在网络安全领域的应用实践,包括基本概念、常见算法及其应用案例,从而帮助程序员更好地理解和应用这一领域的技术。"> 序言 网络安全一直是信息技术领域的重要议题,随着互联…

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…

问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,对于较大的结构体或者热点函数,重复的赋值带来冗余的性能开销。现代编译器对此类冗余初始化代码具有一定的优化能力,因此,打开相关的编译选项的优…

【网络】传输层协议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数组方法。 涉及的功能需求有:渲染、添加、删除、修改、统计总分,求平均分等。 需求效果如下&#xff1a…

无人机飞手光伏吊运、电力巡检、农林植保技术详解

无人机飞手在光伏吊运、电力巡检、农林植保等领域的技术应用,体现了无人机技术的广泛性和实用性。以下是对这三个领域技术的详细解析: 一、无人机飞手光伏吊运技术 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 变量可以使用不同的语法来获取、修改和删除字符串的内容。图片中列…

使用Pygame制作“走迷宫”游戏

1. 前言 迷宫游戏是最经典的 2D 游戏类型之一:在一个由墙壁和通道构成的地图里,玩家需要绕过障碍、寻找通路,最终抵达出口。它不但简单易实现,又兼具可玩性,还能在此基础上添加怪物、道具、机关等元素。本篇文章将展示…

8.攻防世界Web_php_wrong_nginx_config

进入题目页面如下 尝试弱口令密码登录 一直显示网站建设中,尝试无果,查看源码也没有什么特别漏洞存在 用Kali中的dirsearch扫描根目录试试 命令: dirsearch -u http://61.147.171.105:53736/ -e* 登录文件便是刚才登录的界面打开robots.txt…

基于Langchain-Chatchat + ChatGLM 本地部署知识库

一、相关环境 参考链接: Github:https://github.com/chatchat-space/Langchain-Chatchat Langchain-chatchat版本:v0.3.1 安装环境:Ubuntu:22.04,CUDA:12.1 二、搭建过程 2.1 环境配置 2.1.1 创建chatchat虚拟环…