【AI 和机器学习】PyTorch BASIC 基础知识(节1):张量 Tensor

liftword2周前 (12-17)技术文章8

【AI 和机器学习】PyTorch BASIC 基础知识:节1

—— 张量 Tensor

前言

—— 哪个更适合初学者?

想要学习并掌握 AI,最直接的办法就是自己动手进行实操。有一些流行的来源可供练习 AI 技能,例如:

  • Kaggle:一个托管各种数据集和机器学习竞赛的平台。
  • UCI 机器学习存储库:用于机器学习研究的数据集集合。
  • TensorFlow 教程:TensorFlow 团队提供的教程和示例。
  • PyTorch 教程:PyTorch 团队提供的教程和示例。

其中PyTorch和TensorFlow的AI教程资源非常丰富。但对于初学者来说,哪个更合适,可能还得取决于您的特定目标(研究与生产)以及您的偏好等:

  • PyTorch 因其简单、易读和易于调试而通常被认为更适合初学者。PyTorch 的动态特性使新手可以学习概念而不会被复杂的语法所困扰。
  • TensorFlow 随着 TensorFlow 2.x 和 Keras 的推出变得更加适合初学者,但它仍可能对初学者构成挑战。

本文先选择PyTorch来和大家一起学习,学习它的一些基础内容。其中所有素材均取自其教程。对于每一节内容,我们都将先给出摘要,然后把译文稍作整理后附在后面,供参考。

目录

【续前文】

本节摘要

什么是张量?

  • 定义:张量是类似于数组和矩阵的专用数据结构,在 PyTorch 中用于模型输入、输出和参数。
  • 比较:它们类似于 NumPy 的 ndarrays,但可以在 GPU 上运行,从而实现高效的计算。
  • 内存共享:张量和 NumPy 数组可以共享内存,从而最大限度地减少数据复制。

初始化张量

可以通过多种方式初始化张量:

  1. 来自数据:
  1. 来自 NumPy 数组:
  1. 来自另一个 Tensor:
  1. 使用随机或常量值:

张量属性

  • 张量具有描述以下属性:Shape形状:张量的维度。Datatype数据类型:存储的数据类型。Device设备:张量的存储位置(CPU 或 GPU)。

张量操作

  • 超过 100 种运算:包括算术、线性代数等。
  • GPU 使用:可以使用 '.to()' 将张量移动到 GPU,从而提高计算速度。
  • 索引和切片:类似于 NumPy,支持轻松进行数据操作。
  • 连接张量:使用 'torch.cat()' 沿指定维度连接张量。

算术运算

  • 矩阵乘法:
  • 元素级乘法:

单元素张量

  • 使用 '.item()' 转换为 Python 数值:

就地操作

  • 直接修改张量的操作(例如,'tensor.add_(5)')可以节省内存,但会使导数计算复杂化。

使用 NumPy 桥接

  • 共享内存:张量中的更改会反映在 NumPy 数组中,反之亦然。

张量是 PyTorch 中的强大工具,可提供灵活性、效率以及与 NumPy 的无缝集成来进行数值计算。

本节正文

张量是一种专门的数据结构,与数组和矩阵非常相似。在 PyTorch 中,我们使用张量对模型的输入和输出以及模型的参数进行编码。

张量类似于 NumPy 的 ndarrays,不同之处在于张量可以在 GPU 或其他硬件加速器上运行。事实上,张量和 NumPy 数组通常可以共享相同的底层内存,无需复制数据(请参阅使用 NumPy 桥接)。张量还针对自动微分进行了优化(我们稍后将在 Autograd 自动微分部分看到更多相关信息)。如果您熟悉 ndarrays,那么您将熟悉 Tensor API。如果没有,请继续关注!

初始化张量

可以通过多种方式初始化张量。请看以下示例:

直接来自数据

可以直接从数据创建张量。数据类型是自动推断的。

来自 NumPy 数组

可以从 NumPy 数组创建张量(反之亦然 - 请参阅 Bridge with NumPy)。

来自另一个张量:

新张量保留参数张量的属性(形状、数据类型),除非显式覆盖。

输出:

使用随机值或常量值:

shape 是张量维度的元组。在下面的函数中,它确定输出张量的维数。

输出:

张量属性

张量属性描述其形状、数据类型和存储它们的设备。

输出:

张量操作

有100 多种张量运算,包括算术、线性代数、矩阵操作(转置、索引、切片)、采样等。

这些操作中的每一个都可以在 GPU 上运行(通常比在 CPU 上更高的速度)。如果您使用的是 Colab,请在 Runtime > Change runtime type > GPU 中分配 GPU。

默认情况下,张量是在 CPU 上创建的。我们需要使用 .to 方法将张量显式移动到 GPU(在检查 GPU 可用性之后)。请记住,跨设备复制大型张量在时间和内存方面可能很昂贵!

尝试列表中的一些操作。如果您熟悉 NumPy API,您会发现 Tensor API 使用起来轻而易举

标准的类似 numpy 的索引和切片:

输出:

联接张量

您可以使用 torch.cat 沿给定维度连接一系列张量。另请参阅 torch.stack,这是另一个与 torch.cat 略有不同的张量连接运算符。

输出:

算术运算

输出:

单元素张量

如果你有一个单元素张量,例如通过将张量的所有值聚合为一个值,你可以使用 item() 将其转换为 Python 数值:

输出:

就地操作

将结果存储到操作数中的操作称为就地操作。它们由 _ 后缀表示。例如:x.copy_(y)、x.t_() 将更改 x。

输出:

注意

就地操作可以节省一些内存,但在计算导数时可能会出现问题,因为会立即丢失历史记录。因此,不鼓励使用它们。

使用 NumPy 桥接

CPU 和 NumPy 数组上的张量可以共享其底层内存位置,更改一个张量将更改另一个张量。

从 Tensor 到 NumPy 数组

输出:

张量的变化反映在 NumPy 数组中。

输出:

从 NumPy 数组到 Tensor

NumPy 数组中的更改反映在张量中。

输出:


【未完待续】

农历甲辰十月廿四

2024.11.24

【部分图片来源网络,侵删】

相关文章

python变量和常量 python变量与常量

变量:变-----------改变,变化量-----------衡量,估量,是一种状态声明变量name = "HyRer"变量定义规则变量名只能是 字母、数字或下划线的任意组合变量名的...

Python中如何使用断言-assert,它起到什么样的作用

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理本文章来自腾讯云 作者:somenzz私信小编回复01可领取学习资料以及学习视频今天...

玩转Python—Python程序设计基础 python程序设计怎么学

前面的章节,小编已给大家介绍了Python的背景以及Windows系统与Linux系统安装Python程序的方法,今天小编给大家介绍Python程序设计基础。包含以下几个内容:1.数据类型2.标识符3...

Python正则表达式,这一篇就够了 python 正则表达

大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的函数去支持正则,今天我们就来学习 Python中关于 正则表达式的函数。作者:猪哥66;来源:segmentf...

python的基本语法 Python的基本语法包括哪些部分

【1】python关键字下面的列表显示了在 Python 中的保留字。这些保留字不能用作常数或变数,或任何其他标识符名称。【2】python缩进语法任何一种编程语言都有各自的语法和编程规范,Pytho...

解析Python中的上下文管理器 python上下对齐

在传统编程语言中,Java经常用全局static final来处理静态变量和常量,Python中也有用于处理上下文管理器的工具,它就是with。我们在一些Python文件操作中,经常看到with的使用...