TensorLy项目中的张量基础教程
什么是张量?
在TensorLy项目中,张量(Tensor)本质上就是一个多维数组。它是向量和矩阵的高维推广,可以表示更复杂的数据结构。在机器学习、深度学习和科学计算等领域,张量扮演着非常重要的角色。
创建张量
让我们通过一个具体例子来理解如何创建张量。假设我们有一个三维张量$\tilde X$,它由两个正面切片组成:
第一个切片$X_1$: $$ \begin{bmatrix} 0 & 2 & 4 & 6 \ 8 & 10 & 12 & 14 \ 16 & 18 & 20 & 22 \ \end{bmatrix} $$
第二个切片$X_2$: $$ \begin{bmatrix} 1 & 3 & 5 & 7 \ 9 & 11 & 13 & 15 \ 17 & 19 & 21 & 23 \ \end{bmatrix} $$
在Python中,我们可以使用TensorLy和NumPy来创建这个张量:
import numpy as np
import tensorly as tl
# 创建一个3×4×2的张量
X = tl.tensor(np.arange(24).reshape((3, 4, 2))
查看张量的切片非常简单,只需固定最后一个轴即可:
X[..., 0] # 第一个切片
X[..., 1] # 第二个切片
张量展开(Unfolding)
张量展开(也称为矩阵化)是将张量重新排列为矩阵的操作。这是张量分解和运算中的基础操作。
展开的定义
对于一个大小为$(I_0, I_1, \cdots, I_N)$的张量,其n-模展开后的大小为$(I_n, I_0 \times I_1 \times \cdots \times I_{n-1} \times I_{n+1} \cdots \times I_N)$。
TensorLy采用了一种特殊的展开方式以提高性能:
给定张量$\tilde X \in \mathbb{R}^{I_0, I_1 \times I_2 \times \cdots \times I_N}$,其n-模展开矩阵$\mathbf{X}{[n]} \in \mathbb{R}^{I_n, I_M}$,其中$M = \prod{\substack{k=0,\k \neq n}}^N I_k$。
重要注意事项
-
索引从0开始:与传统数学表示不同,TensorLy中展开模式从0开始计数,这与Python的索引约定一致。因此
unfold(tensor, 0)表示沿第一个维度展开。 -
展开示例:
- 0-模展开(传统称为1-模展开): $$ \begin{bmatrix} 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 \ 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 \ 16 & 17 & 18 & 19 & 20 & 21 & 22 & 23 \ \end{bmatrix} $$
- 1-模展开: $$ \begin{bmatrix} 0 & 1 & 8 & 9 & 16 & 17 \ 2 & 3 & 10 & 11 & 18 & 19 \ 4 & 5 & 12 & 13 & 20 & 21 \ 6 & 7 & 14 & 15 & 22 & 23 \ \end{bmatrix} $$
- 2-模展开: $$ \begin{bmatrix} 0 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 \ 1 & 3 & 5 & 7 & 9 & 11 & 13 & 15 & 17 & 19 & 21 & 23 \ \end{bmatrix} $$
代码实现
from tensorly import unfold
# 0-模展开
unfold(X, 0)
# 1-模展开
unfold(X, 1)
# 2-模展开
unfold(X, 2)
张量折叠(Folding)
折叠是展开的逆操作,将展开后的矩阵恢复为原始张量。
from tensorly import fold
# 先展开
unfolding = unfold(X, 1)
# 再折叠回去
fold(unfolding, 1, X.shape)
实际应用意义
理解张量的展开和折叠操作对于掌握以下高级概念至关重要:
- 张量分解:如CP分解、Tucker分解等都需要先进行张量展开
- 张量运算:许多张量运算可以转化为矩阵运算来提高效率
- 数据预处理:在深度学习中,经常需要调整数据维度
总结
本文介绍了TensorLy中的张量基础知识,包括:
- 张量的基本概念和创建方法
- 张量展开的原理和实现
- 张量折叠的操作
- 这些操作在实际应用中的重要性
掌握这些基础知识将为后续学习更复杂的张量操作和分解技术打下坚实基础。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



