定义:
在PyTorch中,张量(tensor)是一种类似于多维数组的数据结构,它是PyTorch的核心数据类型。和numpy的计算方式不同。
张量可以具有不同的维度,例如标量(0维张量,类似于一个数字)、向量(1维张量,类似于一维数组)、矩阵(2维张量,类似于二维数组)以及更高维度的数组。
张量的维度,矩阵的维度主要看第一个数,也就是看行,几行代表几维
tensor([[[ 0.3159, 0.5916, -0.1877, ..., -0.1326, 0.7385, -0.2968], [-0.0795, 0.2788, -0.2303, ..., 0.0711, 1.0474, -0.0848], [ 0.1396, 0.7664, 0.2179, ..., 0.2025, -0.1237, -0.6554], ..., [-0.0077, 0.3957, -0.1279, ..., 0.0642, 0.3796, 0.0124], [-0.0241, 0.0807, -0.0496, ..., -0.2232, 0.7174, -0.1816], [ 0.0248, 0.4351, -0.9713, ..., -0.0470, 1.4571, -1.3380]]], grad_fn=<NativeLayerNormBackward0>) torch.Size([1, 8, 768])
二维
import torch # 定义二维张量的维度 rows = 4 columns = 5 # 创建一个具有随机值的二维张量 tensor_2d = torch.rand(rows, columns) # 打印张量 print(tensor_2d)
三维
batch_size:张量中包含的独立数据样本的数量
sequence_length:行
feature_size:列
import torch
# 创建一个随机的三维张量 [batch_size, sequence_length, feature_size]
batch_size = 2
sequence_length = 3
feature_size = 4
tensor_3d = torch.rand(batch_size, sequence_length, feature_size)
print(tensor_3d)
# 结果
tensor([[[0.7250, 0.3018, 0.5198, 0.8118],
[0.1717, 0.9978, 0.6322, 0.4474],
[0.3699, 0.4043, 0.0564, 0.1576]],
[[0.0479, 0.0701, 0.6801, 0.6542],
[0.1884, 0.3435, 0.2742, 0.0225],
[0.3364, 0.5487, 0.3518, 0.8888]]])
import torch
# 创建一个随机的三维张量 [batch_size, sequence_length, feature_size]
batch_size = 1
sequence_length = 3
feature_size = 4
tensor_3d = torch.rand(batch_size, sequence_length, feature_size)
print(tensor_3d)
# 结果
tensor([[[0.2796, 0.3359, 0.0360, 0.1286],
[0.3787, 0.2236, 0.1142, 0.0386],
[0.2392, 0.2876, 0.2323, 0.2826]]])
降维
# 从三维降至二维 [batch_size, feature_size],这里我们沿着 sequence_length 维度取最大值 tensor_2d, _ = torch.max(tensor_3d, dim=1) print(tensor_2d) # 结果 tensor([[0.3787, 0.3359, 0.2323, 0.2826]])
# 从二维降至一维 # 这里我们通过 .squeeze() 方法降维,但只适用于 batch_size 为 1 的情况 tensor_1d = tensor_2d.squeeze() print(tensor_1d) # 结果 tensor([0.3787, 0.3359, 0.2323, 0.2826])
张量和矩阵的区别
计算方式不同