【分享】Pytorch数据结构:Tensor(张量)及其维度和数据类型

在PyTorch中,Tensor(张量)是一个多维数组,可以用于存储和操作数据。它类似于Numpy数组,但具有GPU加速和自动求导等功能。

张量有不同的维度,可以是0维(标量)、1维(向量)、2维(矩阵)或更高维。例如,一个0维张量被称为标量,它有一个元素。一个1维张量被称为向量,它有一个轴和多个元素。一个2维张量被称为矩阵,它有两个轴(行和列)和多个元素。以此类推,一个更高维的张量有多个轴和多个元素。

每个张量都有一个数据类型,例如浮点型(float)、整型(int)、布尔型(bool)等。在PyTorch中,常用的数据类型有torch.float32,torch.float64,torch.int32,torch.int64等。

Tensor基础

Tensor(张量) 是PyTorch中用于表示多维数据的主要数据结构,类似于多维数组,可以存储和操作数字数据。

1.1、Tensor的维度(Dimensions)

Tensor的维度可以理解为Tensor包含的数据在不同方向上的层次或级别。在数学和计算机科学中,维度通常用来描述数据结构的复杂性或者数据在空间中的方向。对于Tensor来说,每一个维度都代表了数据的一个特定的方向或特性。

Tensor(张量)的维度(Dimensions)是指张量的轴数或阶数。可以类似用坐标轴来理解,可以类比的用坐标轴理解,即Tensor有多少个方向。比如1维,x轴只有一个方向;2维,x轴y轴,两个方向,x轴固定长度;3维,x轴y轴z轴,三个方向,x轴和y轴固定长度。

基本的tensor创建方法:

java 复制代码
import torch
x=torch.tensor(data)#利用data创建tensor,data可以是各总维度的列表,或一个常数

下面就让我们来举例说明

0维Tensor:也就是一个标量(Scalar),它没有维度,仅仅是一个单一的数值。例如,温度值、价格或者某个计数。

举例说明:torch.tensor(1)、 torch.tensor(2)

**1维Tensor:**也称作向量(Vector),它有一个维度,可以看作是一系列数值的集合。例如,一维数组 [1, 2, 3] 代表一系列数值或某个特性的不同测量值。当我们将一维张量称为向量时,那么 tensor([1,2,3])是一个3维向量,一个一维张量。

举例说明:torch.tensor([1,2,3,4,5])、torch.tensor([15,2,3,4,5,51])

**2维Tensor:**也称作矩阵(Matrix),它有两个维度,可以表示为行和列。例如,在表格数据中,行可能代表不同的样本,列代表不同的特征或观察值。注意,由于列代表了不同的特征,因此每一行的元素数必须相同,每一行是一个一维的。相当于多个一维构成一个二维。

举例说明:torch.tensor([ [1,2,5],[3,4,2] ]),暂且可以理解为这里有两行分别为[1,2,5]和[3,4,2],这是一个2×3的矩阵。

**3维Tensor:**可以想象为一个数据立方体,常用于表示时间序列数据、图像数据等。例如,在处理图像时,一个3维Tensor可能有三个维度:高度、宽度和颜色通道。相当于多个二维构成一个三维,每个二维的性状必须相同。

举例说明:torch.tensor([ [[1,2],[3,4]] , [[3,3][2,2]] ]),一个三维中,有两个二维,这是一个2×2×2的三维Tensor。

接下来是高维Tensor

随着维度的增加,Tensor可以表示更加复杂的数据结构。例如,在深度学习中,经常会处理4维Tensor来表示一批图像数据,其中维度分别代表样本数、高度、宽度和颜色通道。在自然语言处理(NLP)任务中,可能会使用3维或更高维度的Tensor来表示句子、单词和特征向量。

dim()和.size()方法

在PyTorch中,.dim()和.size()方法用于获取Tensor的维度信息,但它们提供了不同类型的信息:

dim()方法

.dim()方法返回Tensor的维度数,即Tensor有多少轴。(类似多少个坐标轴)

对于一个给定的Tensor,.dim()告诉你这个Tensor是几维的。

例如,如果你有一个2D Tensor(比如一个矩阵),.dim()将返回2;如果是一个3D Tensor(比如一个时间序列数据集),.dim()将返回3。

size()方法

.size()方法返回一个Tensor每个维度的大小(长度),以torch.Size类型表示,其实质是一个元组。 (类似告诉你 每一个坐标轴的长度,不过是按照z,y,x的方式给出的。z个矩形,y行,x列,更高维以此类推)

它提供了关于Tensor每个轴的具体大小的详细信息。如果你想知道一个Tensor的形状,比如有多少行和列,你会使用.size()。

.size()可以返回全部维度的大小,也可以通过指定维度的索引来返回特定维度的大小。例如,对于一个形状为(3, 4, 5)的3D Tensor,.size()将返回torch.Size([3, 4, 5]),而.size(1)将仅返回第二维(即4行)的大小,这和.size(-2)等价。

还有shape属性

.shape属性 和 直接调用.size()返回的是一样的。

最有torch.randn()

torch.randn()可以生成一个指定维度的随机数据的张量。

java 复制代码
import torch
tensor=torch.randn(3,3,4,5)
print(tensor.size())

输出:torch.Size([3, 3, 4, 5])

创建一个张量的方式非常简单,可以使用torch.tensor()函数,并传递数据和数据类型作为参数。以下是一个示例:

python 复制代码
import torch

# 创建一个标量张量
scalar_tensor = torch.tensor(3.14, dtype=torch.float32)
print(scalar_tensor)

# 创建一个向量张量
vector_tensor = torch.tensor([1, 2, 3, 4, 5], dtype=torch.int32)
print(vector_tensor)

# 创建一个矩阵张量
matrix_tensor = torch.tensor([[1, 2, 3], [4, 5, 6]], dtype=torch.float64)
print(matrix_tensor)

输出:

复制代码
tensor(3.1400)
tensor([1, 2, 3, 4, 5], dtype=torch.int32)
tensor([[1., 2., 3.],
        [4., 5., 6.]], dtype=torch.float64)

除了使用torch.tensor()函数创建张量,还可以使用其他函数如torch.zeros()、torch.ones()、torch.randn()等创建具有特定形状和数据类型的张量。

相关推荐
NAGNIP1 天前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab1 天前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab1 天前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP1 天前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年1 天前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼1 天前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS1 天前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区1 天前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈1 天前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang2 天前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx