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

liftword5个月前 (12-17)技术文章68

【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中的布尔类型(bool)(python专栏003)

Python中的布尔类型(bool)只有两个取值,分别是True和False。bool类型通常用于逻辑判断和条件控制语句中,例如while和if语句。在Python中,True和False都是内置的常...

深度剖析python中None乘以数字会异常的原因

在Python中,将整数与None相乘会引发Type Error(类型错误)- 让我们分析为什么?如果执行5 * None会引发TypeError(类型错误)。但是,下面的所有操作都可以正常执行:#...

Python教程:第11篇 变量赋值 python中变量赋值语句例子

在前几篇中,我们已经学习了如何在Python中表示字符串、数值、逻辑值等字面值数据。也学习了如何使用变量引用这些数据。本文开始学习如何操作这些数据。操作数据最常用的方式是使用运算符。运算符即对数据进行...

【全网最全】Python 基础(一):入门必备知识

目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级(你想学习哪方面内容?下方留言,博主会持续分享编程干货!多...

不需要一行 Python 代码,也可以自动获取数据

今天给大伙介绍一下 RPA,有时候你可能会使用代码去编写自动化相关的操作,不过对于一些在 GUI 上的的重复操作,实际上可以直接使用机器人流程自动化,监视使用者在软件 GUI 里面的工作,然后直接在这...