《PyTorch 实战宝典》重磅发布!

news2024/11/16 2:23:58

Pytorch 是目前常用的深度学习框架之一,比起 TF 的框架环境配置不兼容,和 Keras 由于高度封装造成的不灵活,PyTorch 无论是在学术圈还是工业界,都相当占优势。

不夸张地说,掌握了 PyTorch ,就相当于走上了深度学习、机器学习、大模型的快车道。

它凭借着对初学者的友好性、灵活性,发展迅猛,也深受学生党的喜爱。

但是目前市面上的Pytorch学习资料并不系统,且很多资源都非中文版,从业者的学习门槛比较高。

整体概览

图片

部分内容

下面是在 PyTorch 中创建张量和进行基本操作的详细介绍。

1. 张量的创建

从 Python 列表或 NumPy 数组创建张量:

import torch
import numpy as np

# 从列表创建张量
tensor_from_list = torch.tensor([1, 2, 3])

# 从 NumPy 数组创建张量
numpy_array = np.array([4, 5, 6])
tensor_from_numpy = torch.tensor(numpy_array)

使用特定值创建张量:

# 创建全零张量
zeros_tensor = torch.zeros((3, 4))

# 创建全一张量
ones_tensor = torch.ones((2, 2))

# 创建指定范围的张量
range_tensor = torch.arange(0, 10, 2)

# 创建均匀分布的张量
uniform_tensor = torch.rand((3, 3))

# 创建正态分布的张量
normal_tensor = torch.randn((2, 2))

使用特定形状的张量:

# 创建未初始化的张量
uninitialized_tensor = torch.empty((2, 2))

# 创建与现有张量相同形状的张量
like_tensor = torch.ones_like(zeros_tensor)

2. 张量的基本操作

索引和切片:

# 获取张量中的特定元素
element = tensor_from_list[1]

# 切片操作
sliced_tensor = tensor_from_list[1:3]

张量的形状操作:

# 获取张量的形状
shape = tensor_from_list.shape

# 改变张量的形状
reshaped_tensor = tensor_from_list.view(1, 3)

# 转置张量
transposed_tensor = tensor_from_list.t()

数学运算:

# 加法
sum_tensor = tensor_from_list + tensor_from_numpy

# 乘法
product_tensor = torch.matmul(zeros_tensor, ones_tensor)

# 广播操作
broadcasted_tensor = tensor_from_list * 2

这些功能使得 PyTorch 成为深度学习领域的一流选择,因为它提供了方便、灵活且高效的工具来处理张量和构建神经网络模型。

自动求导

PyTorch中的自动求导(Autograd)允许用户自动计算张量的梯度,而无需手动编写反向传播算法。

Autograd的核心是计算图(computational graph),它记录了计算张量的操作,并在需要时能够生成梯度。

1. 张量的requires_grad属性

在创建张量时,可以通过设置requires_grad属性为True来指示PyTorch跟踪对该张量的操作,从而构建计算图。

import torch

# 创建一个需要梯度的张量
x = torch.tensor([1.0, 2.0], requires_grad=True)

2. 张量操作和计算图

一旦设置了requires_grad=True,PyTorch将自动追踪对该张量的所有操作,构建一个计算图。这个计算图记录了张量之间的关系和操作。

y = x + 2
z = y * y * 3
out = z.mean()

上述例子中,yzout 都是通过对 x 进行操作得到的新张量,这些操作构成了计算图。

3. 计算梯度

一旦有了计算图,可以调用 backward() 方法计算梯度。梯度计算完成后,可以通过张量的 grad 属性获取梯度值。

out.backward()  # 计算梯度

# 获取梯度
print(x.grad)

4. 阻止梯度追踪

在某些情况下,可能需要阻止PyTorch对某些操作的梯度追踪,可以使用 torch.no_grad() 上下文管理器或者在张量上使用 .detach() 方法。

with torch.no_grad():
    # 不追踪梯度的操作
    y = x + 2

# 或者
z = y.detach()

5. 使用with torch.autograd.set_grad_enabled(False):控制梯度计算

在某些情况下,可能需要在一段代码中关闭梯度计算,可以使用上下文管理器 torch.autograd.set_grad_enabled

with torch.autograd.set_grad_enabled(False):
    # 在此处的操作不会被追踪,也不会计算梯度
    y = x + 2

6. 示例:使用自动求导进行优化

import torch.optim as optim

# 定义一个变量并设置需要梯度
x = torch.tensor([1.0, 2.0], requires_grad=True)

# 定义一个优化器(例如梯度下降)
optimizer = optim.SGD([x], lr=0.01)

# 在循环中执行优化步骤
for _ in range(100):
    y = x + 2
    loss = y[0] * y[1]  # 这里定义了一个简单的损失函数

    optimizer.zero_grad()  # 清零梯度
    loss.backward()  # 计算梯度
    optimizer.step()  # 更新参数

# 查看优化后的结果
print(x)

这个例子演示了如何使用自动求导来执行优化步骤,通过反向传播计算梯度并使用优化器更新参数。

总体而言,PyTorch中的自动求导提供了一个方便的工具,使得深度学习的模型训练变得更加简单和高效。

神经网络层

在 PyTorch 中,nn.Module 是构建神经网络模型的基础类。nn.Module 提供了一个模块化和灵活的方式来组织复杂的神经网络结构。通过继承 nn.Module 类,可以创建自定义的神经网络层、模型或整个神经网络。

1. 创建一个简单的神经网络层

import torch
import torch.nn as nn

class SimpleLayer(nn.Module):
    def __init__(self, input_size, output_size):
        super(SimpleLayer, self).__init__()
        self.linear = nn.Linear(input_size, output_size)
        self.relu = nn.ReLU()

    def forward(self, x):
        x = self.linear(x)
        x = self.relu(x)
        return x

上面的例子中,SimpleLayer 继承自 nn.Module,并定义了一个包含线性层(nn.Linear)和激活函数 ReLU 的简单神经网络层。forward 方法定义了前向传播的计算过程。

2. 构建更复杂的模型

可以通过将多个神经网络层组合在一起构建更复杂的模型。下面是一个简单的多层感知机 (MLP) 的例子:

class MLP(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(MLP, self).__init__()
        self.layer1 = SimpleLayer(input_size, hidden_size)
        self.layer2 = SimpleLayer(hidden_size, output_size)

    def forward(self, x):
        x = self.layer1(x)
        x = self.layer2(x)
        return x

3. 模块的嵌套和子模块

nn.Module 支持嵌套和包含其他 nn.Module 实例,这有助于构建更复杂的神经网络。子模块会自动跟踪其参数和梯度。

class ComplexModel(nn.Module):
    def __init__(self):
        super(ComplexModel, self).__init__()
        self.layer1 = SimpleLayer(10, 20)
        self.layer2 = MLP(20, 30, 5)

    def forward(self, x):
        x = self.layer1(x)
        x = self.layer2(x)
        return x

4. 访问模块的参数

通过 named_parameters()parameters() 方法可以访问模块中的所有参数。

model = ComplexModel()
for name, param in model.named_parameters():
    print(f"{name}: {param.size()}")

5. 模型的保存和加载

可以使用 torch.save 保存模型的状态字典,并使用 torch.load 加载模型。

# 保存模型
torch.save(model.state_dict(), 'model.pth')

# 加载模型
loaded_model = ComplexModel()
loaded_model.load_state_dict(torch.load('model.pth'))

获取方式

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

成立了 PyTorch 算法技术交流群,相关资料、技术交流&答疑,均可加我们的交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:机器学习社区,后台回复:PyTorch 实战宝典
方式②、添加微信号:mlc2040,备注:来自CSDN + PyTorch 实战宝典

通俗易懂讲解大模型系列

  • 《大模型面试宝典》(2024版) 正式发布!
  • 《大模型实战宝典》(2024版) 正式发布!

精彩项目

CV八大项目

包括图像分类、图像分割、目标检测、目标跟踪、GAN生成、Diffusion生成、图像描述和图像检索八大任务。

图片

NLP

包括RNN、LSTM、Transformer、BERT和GPT模型详解与应用,应用的任务有文本分类、机器翻译、命名体识别、QA问答和文章生成五大任务。

图片

LLM部分

包括4个LLM部署与代码分析和一个LLM行业应用——GPT Academic(GPT 学术优化),LLM包括国内开源的四大主流模型,Qwen、ChatGLM、Baichuan和Yi。

图片

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

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

相关文章

Cloudpods 强大的多云管理平台部署

简介 Cloudpods 是一款简单、可靠的企业IaaS资源管理软件。帮助未云化企业全面云化IDC物理资源,提升企业IT管理效率。 Cloudpods 帮助客户在一个地方管理所有云计算资源。统一管理异构IT基础设施资源,极大简化多云架构复杂度和难度,帮助企业…

[ue5]建模场景学习笔记(5)——必修内容可交互的地形,交互沙(2)

1需求分析: 继续制作可交互沙子内容,前面我们已经让角色在指定区域留下痕迹,那么能否让区域移动起来,这样才能逐步满足角色走到哪里都能产生交互痕迹,满足更大的地图。 2.操作实现: 1.首先建立角色能产生…

12、SpringBoot 源码分析 - 自动配置深度分析五

SpringBoot 源码分析 - 自动配置深度分析五 refresh和自动配置大致流程OnClassCondition的createOutcomesResolver创建结果解析器StandardOutcomesResolver的resolveOutcomes解析结果StandardOutcomesResolver的getOutcomeClassNameFilter的MISSING判断是否没有 ThreadedOutcom…

【YOLOv5/v7改进系列】改进池化层为SPP、SPPF、SPPCSPC

一、导言 池化层(Pooling Layer)是卷积神经网络(Convolutional Neural Networks, CNNs)中的一个重要组成部分,主要用于减少输入数据的空间尺寸(例如,图像的宽度和高度),…

3D打印随形透气钢:技术革新引领模具制造新潮流

在模具制造领域,透气钢一直扮演着重要角色,它能够有效解决模具困气问题,提高注塑成型的效率和质量。然而,传统的透气钢制造方法受限于工艺和材料,难以满足复杂模具的需求。随着3D打印技术的飞速发展,3D打印…

kettle从入门到精通 第六十四课 ETL之kettle kettle中执行SQL脚本步骤,使用需当心

想真正学习或者提升自己的ETL领域知识的朋友欢迎进群,一起学习,共同进步。文章底部关注我,公众号后台加我微信入群,备注kettle。 1、群里有不定时会有同学反馈执行SQL脚本步骤使用有问题,那么咱们今天一起来学习下该步…

【数据分析基础】实验一 Python运算符、内置函数、序列基本用法

一、实验目的 熟练运用Python运算符。熟练运用Python内置函数。掌握Python的基本输入输出方法。了解lambda表达式作为函数参数的用法。掌握列表、元组、字典、集合的概念和基本用法。了解Python函数式编程模式。 二、实验内容: 1. 在命令模式测试如下命令&#x…

AI-知识库搭建(一)腾讯云向量数据库使用

一、AI知识库 将已知的问答知识,问题和答案转变成向量存储在向量数据库,在查找答案时,输入问题,将问题向量化,匹配向量库的问题,将向量相似度最高的问题筛选出来,将答案提交。 二、腾讯云向量数…

【C++题解】1261. 韩信点兵

问题:1261. 韩信点兵 类型: 题目描述: 韩信有一对士兵,他想知道有多少人,他就让士兵报数,如果按照 1 到 5 报数,最末一个士兵报的数为 1 。 按照 1 到 6 报数,最末一个士兵报的数为…

Oracle EBS AP发票创建会计科目错误:子分类帐日记帐分录未按输入币种进行平衡

系统版本 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 问题症状: 提交“创建会计科目”请求提示错误信息如下: 中文报错: 该子分类帐日记帐分录未按输入币种进行平衡。请检查日记帐分录行中输入的金额。 英文报错:The subledger journal entry does not balance i…

【Stable Diffusion】(基础篇二)—— Stable Diffusion图形界面介绍和基本使用流程

本系列笔记主要参考B站nenly同学的视频教程,传送门:B站第一套系统的AI绘画课!零基础学会Stable Diffusion,这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 在上一篇博客中,我们成功…

数字科技如何助力博物馆设计,强化文物故事表现力?

国际博物馆日是每年为了推广博物馆和文化遗产,而设立的一个特殊的日子,让我们可以深入探讨博物馆如何更好地呈现和保护我们的文化遗产,随着近年来的数字科技发展,其在博物馆领域的应用越来越广泛,它为博物馆提供了新的…

把qml程序制作成安装包(Windows)

先检查一下有没有安装Qt Installer FrameWork 需要用到Qt自带的打包工具: Qt Installer FrameWork,虽然有点拉胯,但是也能用用。一般放在Qt目录下的Tools文件夹下,如果没有看到,就去在线下载器去下载一下。 步骤1 随…

如何在没有密码的情况下解锁iPhone

通常,您可以使用密码、FaceID 或 Touch ID 轻松解锁 iPhone。但是,有时您可能会忘记密码、iPhone 已停用或您的二手手机已锁定。在这种情况下,您必须绕过 iPhone 密码才能访问您的设备。在本文中,我们将向您介绍 5 种经过测试的方…

搜索之道:信息素养与终身学习的新引擎

📑前言 在这个信息如同潮水般涌来的时代,我们每天都在与海量的数据和信息打交道。无论是学习、工作还是生活,我们都渴望能够迅速、准确地找到我们所需的信息。然而,面对如此繁杂的信息海洋,如何高效、精准地搜索到我们…

【python】tkinter GUI编程经典用法,Label标签组件应用实战详解

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Mac怎么读取内存卡 Mac如何格式化内存卡

在今天的数字化时代,内存卡已经成为了我们生活中不可或缺的一部分。对于Mac电脑用户而言,正确地读取和管理内存卡中的数据至关重要。下面我们来看看Mac怎么读取内存卡,Mac如何格式化内存卡的相关内容。 一、Mac怎么读取内存卡 苹果电脑在读…

用例与用例之间的三种关系:泛化、包含、扩展

UML用例图(Use Case Diagrame),是UML图的一种,主要用来描述角色及角色与用例之间的连接关系。 1.泛化 当多个用例共有一种类似的结构和行为时。能够将他们的共性抽象成为父用例,其它的用例作为泛化关系的子用例。箭头指向父用例…

尝试使用blazor(二)Blazor WebAssembly(WASM)与Server之间有什么区别?

要使用Blazor,你得先选择一种模式,因为它有两种模式。Blazor网络框架允许将Razor组件以不同的方式托管。它们可以在ASP.NET Core(Blazor Server)中在服务器端运行,也可以在基于WebAssembly的.NET运行时在浏览器中在客户…

BL104网关钡铼技术多协议设备互操作简单一键接入

在工业环境中,设备之间的通信和互操作性是实现智能化生产的关键。为了满足这一需求,钡铼技术推出了PLC物联网关BL104,一款专为工业环境设计的多协议设备,简化了设备互操作的复杂性,实现了一键接入的便捷性。 PLC物联网…