关于张量的基本概念及其运算

声明:本文参考下面的博文张量介绍整理而成。

(一)张量及其相关的定义

1、张量定义

张量是一个多维数组。更正式地说,一个 N 阶张量是 N 个向量空间元素的张量积,每个向量空间都有自己的坐标系。
张量的阶数(the order of a tensor)也称为维数(dimensions)、模态(modes)、或方式(ways)。
一阶张量是一个矢量,二阶张量是一个矩阵,三阶或更高阶的张量叫做高阶张量。
在这里插入图片描述

2、 纤维(Fibers)定义

纤维(Fibers) 是矩阵的行和列的高阶类似物。(纤维是指从张量中抽取的向量)
例如,矩阵 A 的列为mode-1纤维,行为mode-2纤维;

三阶张量有 列(column) 、行(row) 、管(tube) 纤维。
5在这里插入图片描述

3、 切片(Slices)定义

切片 (Slices) 是一个张量的二维切片,通过固定除两个维度之外的索引来定义。(切片是指从张量中抽取的矩阵)

例如,三阶张量 X的 水平面(horizontal) 、 侧面(lateral) 和 正面(frontal) 的切片。
在这里插入图片描述

(一)张量运算

1、矩阵化:将张量转化为矩阵(Matricization: Transforming a Tensor into a Matrix)

矩阵化(Matricization),也就是所谓的“展开”(unfolding)或“压扁”(flattening),是将一个 n 维数组中的元素重新排列成一个矩阵的过程。
在这里插入图片描述

在这里插入图片描述
其中, X ( 1 ) X_{(1)} X(1), X ( 2 ) X_{(2)} X(2) X ( 3 ) X_{(3)} X(3)分别是 X 1 X_{1} X1 X 2 X_{2} X2按列合并,按行合并,按管合并。
按列合并之后的维度行保持不变,合并新维度:行 × \times ×列管;(不变的维度变成新矩阵的行)
按行合并之后的维度列保持不变,合并新维度:列 × \times ×行管;
按管合并之后的维度管保持不变,合并新维度:管 × \times ×行列;

2、张量乘积:n模乘(Tensor Multiplication : The n-Mode Product)

张量可以相乘,尽管显然它的符号和符号要比矩阵复杂得多。对于张量乘法的完整处理参见:Bader, MATLAB Tensor Classes forFast Algorithm Prototyping,2006.
这里我们只考虑张量n模乘(n-mode product),即用一个张量乘以一个n维矩阵(或向量)。

2.1 n模矩阵积(n-mode matrix product)

(1)定义

(2)例题中的 × 1 \times_{1} ×1的意思是, Y 1 = U X 1 \textrm{Y}_{1}=\textrm{U}\textrm{X}_{1} Y1=UX1, Y 2 = U X 2 \textrm{Y}_{2}=\textrm{U}\textrm{X}_{2} Y2=UX2
列是 × 1 \times_{1} ×1,行是 × 2 \times_{2} ×2,管是 × 3 \times_{3} ×3
在这里插入图片描述

(2)基本运算法则

在这里插入图片描述

2.2 n模向量积(The n-mode vector product)

注:(2)例题中的 × 2 \times_{2} ×2的意思是, Y 1 = X 1 v \textrm{Y}_{1}=\textrm{X}_{1}\textrm{v} Y1=X1v, Y 2 = X 2 v \textrm{Y}_{2}=\textrm{X}_{2}\textrm{v} Y2=X2v
列是 × 1 \times_{1} ×1,行是 × 2 \times_{2} ×2,管是 × 3 \times_{3} ×3
在这里插入图片描述

3、Khatri-Raoproduct乘积

在这里插入图片描述

### PyTorch 张量概述 PyTorch中的张量(Tensor)是多维数组的一种实现形式,可以看作是一个n维矩阵张量不仅支持多种数值类型的存储,还能够高效地执行各种数学运算和自动求导功能[^1]。 ### 创建张量的方式 创建张量有多种途径: - 使用`torch.tensor()`函数可以直接由Python列表或其他序列类型的数据构建一个新的张量对象; - `torch.zeros()`, `torch.ones()`, 和 `torch.empty()`分别用来生成全零、全一或未初始化的指定形状的新张量; - 利用随机数分布如均匀分布(`torch.rand`)或者正态分布(`torch.randn`)来快速填充新建立的张量实例; ```python import torch # 通过具体值创建张量 data_tensor = torch.tensor([[1., -1.], [1., -1.]]) print(data_tensor) # 创建特定形状的全0/全1张量 zero_tensor = torch.zeros((2, 3)) one_tensor = torch.ones((2, 3)) # 构建一个空张量(不推荐) empty_tensor = torch.empty((2, 3)) # 随机初始化张量 random_uniform_tensor = torch.rand((2, 3)) # 均匀分布 random_normal_tensor = torch.randn((2, 3)) # 正态分布 ``` ### 执行基本运算 对于两个相同维度大小的张量A与B而言,加法(A+B),减法(A-B),乘法(A*B)(逐元素相乘),除法(A/B)均被良好定义并可直接调用相应操作符完成计算。此外还有诸如点积(dot product)`torch.dot(a,b)`、矩阵乘法(matrix multiplication)`torch.mm(mat_a, mat_b)`等高级线性代数运算可供选用。 ### 形状变换 调整张量形态主要依赖于`.view()`, `.reshape()`, 或者更灵活的`.transpose(dim0,dim1)`方法来进行转置操作。这些API允许改变现有张量的空间布局而不影响其内部数据排列顺序。 ```python original_tensor = torch.arange(12).view(3,4) transposed_tensor = original_tensor.transpose(0,1) reshaped_tensor = original_tensor.reshape(-1,) ``` ### 图像预处理技术 针对计算机视觉领域内的应用需求,PyTorch提供了丰富的工具集用于图像加载、裁剪、缩放、翻转乃至色彩空间转换等一系列常见任务。特别是借助 torchvision.transforms 模块下的类接口,开发者能轻松定制复杂的图片预处理流水线[^2]. #### 实现图像标准化流程如下所示: ```python from torchvision import transforms from PIL import Image transform_pipeline = transforms.Compose([ transforms.Resize((256, 256)), # 将输入图像统一调整到固定尺寸 transforms.RandomCrop(224), # 对中心区域进行随机裁剪 transforms.ToTensor(), # 把PIL.Image读取的结果转化为tensor格式 transforms.Normalize(mean=[0.485, 0.456, 0.406], std =[0.229, 0.224, 0.225]) # 应用ImageNet上的统计参数做归一化处理 ]) img_path = 'example.jpg' input_image = Image.open(img_path) preprocessed_img = transform_pipeline(input_image) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值