1 Tensorly实现张量分解
1.1 tensorly的安装
TensorLy 是一个 Python 库,旨在使张量学习变得简单易用。它允许轻松执行张量分解、张量学习和张量代数。其后端系统允许使用 NumPy、PyTorch、JAX、MXNet、TensorFlow 或 CuPy 无缝执行计算,并在 CPU 或 GPU 上大规模运行方法。
conda install -c tensorly tensorly # 安装tensorly库
1.2 tensorly的常用的使用方法:
import tensorly as tl
import tensorly.decomposition as td
import tensorly.random
tl.set_backend('pytorch') # Or 'mxnet', 'numpy', 'tensorflow', 'cupy' or 'jax'
# 设置后端可以更改后端以使用不同的框架执行计算。默认情况下,后端是 NumPy,但您也可以
# 使用 PyTorch、TensorFlow、MXNet、JAX 或 CuPy(需要先安装它们)执行计算。例如,将
# 后端设置为 PyTorch 后,所有计算都由 PyTorch 完成,并且可以在 GPU 上创建张量:
tensor = tl.tensor(np.random.randint(1, 10, size=(4, 4, 4))), device='cuda:0')
type(tensor) # torch.Tensor
mode1_m = tl.unfold(tensor, mode=1) # 模1, 2, 3矩阵化
tensor = tl.fold(mode1_m, mode=1, shape=tensor.shape) # 将模1矩阵mode1_m折叠回张量
[weight, factor_matrix] = tl.decomposition.parafac(tensor, 2) # 将张量分解
# 其中weight为秩一张量相加的权重因子,factor_matrix
for i in range(len(factor)):
print("factor matrix-{} : \n{}".format(i+1, factor_matrix[0])) # 输出因子矩阵
# 由CP分解得到的权重和因子矩阵恢复张量
recovery_tensor = tl.cp_to_tensor([weight, factor_matrix])[0]
[weight, factor_matrix], errors = tl.decomposition.parafac(tensor, 10, n_iter_max=100, return_errors=True)
# n_iter_max表示最大迭代次数;return_errors表示是否要返回归一化误差;
tensor = tl.cp_to_tensor([weight, factor_matrix])
print(tensor[0])
for i in range(len(errors)):
print("iteration {} : 错误率 : {}%".format(i+1, errors[i]*100))