深度学习框架Pytorch介绍和示例

目录

 一. 简介

1.1动态计算图

1.2自动化功能

 二. 主要特性

 2.1 动态计算图

 2.2 自动求导

 2.3 强大的社区支持

 2.4 多平台支持

 三. 核心组件

 3.1 Tensor

 3.2 Autograd

 3.3 nn.Module

 3.4 Optim

 四. 数据处理

五. 神经网络定义与训练

5.1定义神经网络:

5.2训练过程

六. 高级功能

6.1分布式训练

6.2 TorchScript:

6.3 TorchServe

七. 生态系统

 八. 文档和资源

 九. 示例项目


 一. 简介

         PyTorch 是一个非常流行的深度学习框架,由 Facebook 的 AI 研究实验室(FAIR)开发。它以其灵活性、易用性和强大的社区支持而闻名。 

        前面介绍自己学习PyTorch的一些情况,有兴趣的可以参考:

        《我是如何一步步学习深度学习模型PyThorch》;

        为了响应伙伴的要求,这里对PyTorch框架再进行一些补充介绍。

        PyTorch 是一个基于 Python 的科学计算库,专门用于深度学习应用。PyTorch 是一个强大且灵活的深度学习框架,适用于各种深度学习任务。其动态计算图和自动求导功能使其在研究和开发中非常受欢迎。它结合了两个重要的特点:

1.1动态计算图

与静态图相比,动态图允许你在运行时构建和修改计算图,这使得调试和实验更加灵活。

1.2自动化功能

PyTorch 提供了自动求导功能,可以自动计算梯度,简化了模型训练过程。

 二. 主要特性

 2.1 动态计算图

PyTorch 使用动态计算图,这意味着计算图是在运行时构建的,而不是在编译时。这种设计使得调试和实验更加方便,特别是在处理复杂的模型和不规则的数据结构时。

 2.2 自动求导

        PyTorch 的 autograd 模块提供了自动求导功能。你可以定义前向传播计算,PyTorch 会自动计算反向传播所需的梯度。

import torchx = torch.tensor([1.0], requires_grad=True)
y = x * 2
y.backward()
print(x.grad)   输出: tensor([2.])

 2.3 强大的社区支持

        PyTorch 拥有庞大的社区,提供了丰富的文档、教程和示例代码。此外,许多研究机构和公司都在使用 PyTorch,因此有大量的开源项目和预训练模型可供使用。

 2.4 多平台支持

        PyTorch 支持多种操作系统(如 Windows、Linux 和 macOS)和硬件(如 CPU、GPU 和 TPU),并且可以在云平台上轻松部署。

 三. 核心组件

 3.1 Tensor

        Tensor 是 PyTorch 中的基本数据结构,类似于 NumPy 的数组,但可以在 GPU 上运行。

import torch#创建一个张量
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])#进行运算
c = a + b
print(c)   输出: tensor([5, 7, 9])

 3.2 Autograd

        autograd 模块用于自动求导,是训练神经网络的关键部分。

import torch# 创建一个张量并设置 requires_grad=True
x = torch.tensor([1.0], requires_grad=True)# 定义计算
y = x * 2# 计算梯度
y.backward()# 查看梯度
print(x.grad)  # 输出: tensor([2.])

 3.3 nn.Module

        nn.Module 是 PyTorch 中定义神经网络模型的基本类。你可以继承 nn.Module 并定义自己的模型。

import torch
import torch.nn as nnclass MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()self.linear = nn.Linear(10, 1)def forward(self, x):return self.linear(x)model = MyModel()
input = torch.randn(1, 10)
output = model(input)
print(output)

 3.4 Optim

        optim 模块提供了各种优化算法,如 SGD、Adam 等。

import torch.optim as optim# 定义损失函数
criterion = nn.MSELoss()# 定义优化器
optimizer = optim.SGD(model.parameters(), lr=0.01)# 前向传播
output = model(input)
loss = criterion(output, target)# 反向传播
optimizer.zero_grad()  # 清零梯度
loss.backward()
optimizer.step()  # 更新参数

 四. 数据处理

        PyTorch 提供了 torch.utils.data 模块,用于处理数据集和数据加载。

from torch.utils.data import Dataset, DataLoaderclass MyDataset(Dataset):def __init__(self, data, labels):self.data = dataself.labels = labelsdef __len__(self):return len(self.data)def __getitem__(self, index):return self.data[index], self.labels[index]dataset = MyDataset(data, labels)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)for batch in dataloader:inputs, targets = batch# 前向传播和反向传播

五. 神经网络定义与训练

5.1定义神经网络:

        在PyTorch中,可以通过继承torch.nn.Module类来定义神经网络。在类的构造函数中,可以定义网络的层结构和参数。在forward方法中,定义网络的前向传播过程。

5.2训练过程

        训练一个神经网络需要定义损失函数和优化器。损失函数用于衡量模型预测结果与实际结果之间的差距,优化器用于更新模型的参数以最小化损失函数。训练过程通常包括一个循环,每个循环中执行前向传播、计算损失、反向传播和参数更新。

六. 高级功能

6.1分布式训练

        PyTorch支持分布式训练,可以在多个GPU或机器上并行训练模型,提高训练速度。

        PyTorch 支持多 GPU 和多节点分布式训练,可以通过 torch.distributed 模块实现。

import torch.distributed as distdist.init_process_group(backend='nccl', init_method='env://')
rank = dist.get_rank()
world_size = dist.get_world_size()# 定义模型
model = MyModel()
model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[rank])# 训练循环
for epoch in range(num_epochs):for batch in dataloader:inputs, targets = batchoutput = model(inputs)loss = criterion(output, targets)optimizer.zero_grad()loss.backward()optimizer.step()

6.2 TorchScript:

        TorchScript是PyTorch的一个子集,可以将PyTorch模型转换为可部署的格式,以便在生产环境中使用。

6.3 TorchServe

        TorchServe是PyTorch中将模型部署到生产环境的首选解决方案。它提供了模型管理、推理服务和监控等功能。

七. 生态系统

PyTorch 拥有丰富的生态系统,包括但不限于:

        1、Transformers:用于自然语言处理任务的模型库。

        2、Detectron2:用于计算机视觉任务的模型库。

        3、Ignite:用于训练循环的高级库。

        4、Lightning:用于简化训练流程的库。

 八. 文档和资源

        1、官方文档:https://pytorch.org/docs/stable/index.html

        2、教程:https://pytorch.org/tutorials/

        3、GitHub 仓库:https://github.com/pytorch/pytorch

 九. 示例项目

        PyTorch 社区提供了大量的示例项目,涵盖了各种应用场景,如图像分类、目标检测、自然语言处理等。

        以下是一个简单的PyTorch示例代码,用于演示如何定义、训练和评估一个神经网络:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset# 创建一些随机数据作为示例
inputs = torch.randn(100, 10)  # 100个样本,每个样本10个特征
labels = torch.randint(0, 2, (100,))  # 100个样本的标签,0或1# 创建数据集和数据加载器
dataset = TensorDataset(inputs, labels)
dataloader = DataLoader(dataset, batch_size=10, shuffle=True)# 定义一个简单的神经网络
class SimpleNN(nn.Module):def __init__(self):super(SimpleNN, self).__init__()self.fc1 = nn.Linear(10, 50)  # 输入层到隐藏层self.fc2 = nn.Linear(50, 2)   # 隐藏层到输出层def forward(self, x):x = torch.relu(self.fc1(x))  # 激活函数x = self.fc2(x)return x# 实例化模型、定义损失函数和优化器
model = SimpleNN()
criterion = nn.CrossEntropyLoss()  # 交叉熵损失
optimizer = optim.SGD(model.parameters(), lr=0.01)  # 随机梯度下降# 训练模型
num_epochs = 10
for epoch in range(num_epochs):model.train()  # 设置模型为训练模式running_loss = 0.0for inputs, labels in dataloader:optimizer.zero_grad()  # 清空梯度outputs = model(inputs)  # 前向传播loss = criterion(outputs, labels)  # 计算损失loss.backward()  # 反向传播optimizer.step()  # 更新参数running_loss += loss.item()print(f"Epoch {epoch+1}, Loss: {running_loss/len(dataloader)}")# 评估模型(这里简单使用训练数据作为示例)
model.eval()  # 设置模型为评估模式
correct = 0
total = 0
with torch.no_grad():  # 禁用梯度计算for inputs, labels in dataloader:outputs = model(inputs)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()
print(f"Accuracy: {100 * correct / total}%")


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


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

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

相关文章

鼠标点击(二)与接口函数集合的的实现

(1) (2) (3)

基于Spring Boot+Vue的多媒体素材管理系统的设计与实现

一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端: 技术:框架Vue.js;UI库:ElementUI; 开发工具&…

《FreeRTOS列表和列表项篇》

FreeRTOS列表和列表项 1. 什么是列表和列表项?1.1 列表list1.2 列表项list item 2. 列表和列表项的初始化2.1 列表的初始化2.2 列表项的初始化 3. 列表项的插入4. 列表项末尾插入5. 列表项的删除6. 列表的遍历 列表和列表项是FreeRTOS的一个数据结构,是F…

使用 MTT GPU 搭建个人 RAG 推理服务

什么是 LLM RAG?​ LLM RAG(Retrieval-Augmented Generation with Large Language Models)是一种结合大语言模型(LLM)和信息检索(IR)技术的生成方法,专门用于增强语言模型的上下文感知和准确性…

Vue3 -- 环境变量的配置【项目集成3】

环境: 在项目开发过程中,至少会经历开发环境、测试环境和生产环境(即正式环境)三个阶段。 开发环境 .env.development测试环境 .env.test生产环境 .env.production 不同阶段请求的状态(如接口地址等)不一样,开发项目的时候要经常配置代理跨…

AI 大模型应用:AI开发的捷径工作流模式

一、引言 大部分人使用 AI,大概都跟我一样,停留在初级阶段。 平时,就是向 AI 提问(又称聊天),偶尔也用一些现成的服务:生成图片、生成代码、翻译文章等等。 但是,时间久了&#x…

研究生被安排许多文献阅读,如何快速的阅读众多英文文献?

在科研的道路上,筛选文献就像是大海捞针,找对了方法,就能快速锁定那些有价值的信息。尤其是在实验方向尚未确定时,如何从海量文献中筛选出“金子”,就显得尤为重要。 关键的第一步:精准筛选 当你面对一堆…

信创迎来冲刺三年,国产项目管理软件跑出数智化“加速度”

信创发展是国家当前重要的战略布局,对国家发展具有长远的战略意义。国资委信创79号文件规定,2027年前按顺序完成“28N”的党政与八大重点行业100%信创替代,通过信创产业发展,国家能够提高自主创新能力,加速推进国产化转…

LSTM(长短期记忆网络)详解

1️⃣ LSTM介绍 标准的RNN存在梯度消失和梯度爆炸问题,无法捕捉长期依赖关系。那么如何理解这个长期依赖关系呢? 例如,有一个语言模型基于先前的词来预测下一个词,我们有一句话 “the clouds are in the sky”,基于&…

基于Java仓库管理系统

一、作品包含 源码数据库全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、LayUI 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA 数据库:MySQL8.0 数据库管…

数量关系2_余数平方等差、整除和完工

目录 一、余数、平方数与等差数列1.等差数列2.平方数3.余数问题二、整除问题和合作完工问题1.利用倍数特性解决不定方程2.利用整除特性解决纯整除问题3.合作完工一、余数、平方数与等差数列 1.等差数列 ※等比数列不常考,或者考的时候比较复杂,可放弃。 补充1:常用的等差数…

cache中命中率和缺失率

这张图解释了缓存的三个关键指标:命中率、缺失率和缺失损失,并分析了它们在缓存访问中的重要性。 具体说明 命中(Hit): 命中表示要访问的信息在缓存中已经存在,不需要从更慢的主存中读取。命中率&#xff…

Jmeter查看结果树之查看响应的13种详解方法

软件测试资料领取:[内部资源] 想拿年薪40W的软件测试人员,这份资料必须领取~ 软件测试面试刷题工具:软件测试面试刷题【800道面试题答案免费刷】 Jmeter查看结果树查看响应有哪几种方法,可通过左侧面板底部的下拉框选择: 01 Te…

<Project-23 Navigator Portal> Python flask web 网站导航应用 可编辑界面:添加图片、URL、描述、位置移动

目的: 浏览器的地址簿太厚,如下图: 开始,想给每个 Web 应用加 icon 来提高辨识度,发现很麻烦:create image, resize, 还要挑来挑去,重复性地添加代码。再看着这些密密麻麻的含有重复与有规则的…

文心一言 VS 讯飞星火 VS chatgpt (391)-- 算法导论25.1 5题

五、说明如何将单源最短路径问题表示为矩阵和向量的乘积,并解释该乘积的计算过程如何对应 Bellman-Ford 算法?(请参阅24.1节。)。如果要写代码,请用go语言。 文心一言: 在解决单源最短路径问题时,我们可以将问题表示…

如何使用cx_Freeze打包编译python文件

1. 安装 cx_Freeze 首先,确保你已经安装了 cx_Freeze。你可以通过 pip 安装它: pip install cx_Freeze2.创建setup.py from cx_Freeze import setup, Executable import os# 确定包的文件和依赖 build_exe_options {"packages": ["os…

深度学习之其他常见的生成式模型

1.1 什么是自回归模型:pixelRNN与pixelCNN? ​ 自回归模型通过对图像数据的概率分布 p d a t a ( x ) p_{data}(x) pdata​(x)进行显式建模,并利用极大似然估计优化模型。具体如下: p d a t a ( x ) ∏ i 1 n p ( x i ∣ x 1 …

短期电力负荷(论文复现)

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

DBeaver如何设置自动刷新数据库表的数据,彻底解放双手!

前言 大家好,我是小徐啊。 DBeaver是一款常用的数据库连接工具,它的优点是免费使用,而且支持的数据库类型超级多,甚至可以直接安装数据库对应的驱动jar包来连接数据库。 比如达梦数据库,之前版本是可以通过jar包方式…

黄仁勋:AI革命将创百万亿美元价值!近屿智能带你入局AIGC

11月13日,NVIDIA在日本成功举办了2024年AI峰会。一场关于人工智能驱动的新工业革命的讨论热烈展开。英伟达创始人兼CEO黄仁勋与软银主席兼CEO孙正义共同探讨了当前技术革命的独特之处及其深远影响。 黄仁勋在会上表示,AI革命将创造的价值不是以万亿美元计…