【Python/Pytorch - 网络模型】-- 高阶SVD算法

在这里插入图片描述

文章目录

文章目录

  • 00 写在前面
  • 01 基于Python版本的高阶SVD算代码
  • 02 HOSVD 的步骤

00 写在前面

高阶奇异值分解(Higher-Order SVD,HOSVD)是一种将传统的奇异值分解(SVD)扩展到高阶张量的方法。它能够将一个高阶张量分解成一个核心张量和一组正交矩阵,类似于将矩阵分解成奇异值矩阵和两个正交矩阵。HOSVD 在多维数据分析、压缩和降维等领域有广泛应用。

01 基于Python版本的高阶SVD算代码

import numpy as np
import tensorly as tl
from tensorly.decomposition import tucker# Create a random 3rd-order tensor
tensor = np.random.rand(3, 4, 5)# Perform HOSVD (Tucker decomposition)
core, factors = tucker(tensor, ranks=[3, 4, 5])print("Core tensor shape:", core.shape)
print("Factor matrices shapes:", [factor.shape for factor in factors])# Reconstruct the tensor
reconstructed_tensor = tl.tucker_to_tensor((core, factors))# Verify reconstruction accuracy
print("Original tensor shape:", tensor.shape)
print("Reconstructed tensor shape:", reconstructed_tensor.shape)
print("Reconstruction error:", np.linalg.norm(tensor - reconstructed_tensor))

高阶奇异值分解 (HOSVD) 介绍

基本概念

HOSVD 的基本思想是将一个 N 维张量 X \mathcal{X} X 分解为一个核心张量 S \mathcal{S} S 和一组因子矩阵 U ( 1 ) , U ( 2 ) , … , U ( N ) U^{(1)}, U^{(2)}, \ldots, U^{(N)} U(1),U(2),,U(N) 的乘积,这些因子矩阵是正交的。具体来说,对于一个三阶张量 X \mathcal{X} X,HOSVD 可以表示为:

X = S × 1 U ( 1 ) × 2 U ( 2 ) × 3 U ( 3 ) \mathcal{X} = \mathcal{S} \times_1 U^{(1)} \times_2 U^{(2)} \times_3 U^{(3)} X=S×1U(1)×2U(2)×3U(3)

其中:

  • X \mathcal{X} X 是原始张量。
  • S \mathcal{S} S 是核心张量。
  • U ( i ) U^{(i)} U(i) 是正交矩阵,表示第 i i i 维的因子矩阵。
  • × i \times_i ×i 表示在第 i i i 维上的张量-矩阵乘积。

02 HOSVD 的步骤

  1. 构造模式矩阵

    • 对于每一个模式(维度),将张量展平为矩阵,称为模式矩阵。例如,对于一个三阶张量 X \mathcal{X} X,我们可以得到三个模式矩阵 X ( 1 ) , X ( 2 ) , X ( 3 ) X_{(1)}, X_{(2)}, X_{(3)} X(1),X(2),X(3)
  2. 计算奇异值分解

    • 对每个模式矩阵进行奇异值分解(SVD),得到奇异值矩阵和左右奇异矩阵。对于模式矩阵 X ( i ) X_{(i)} X(i),可以得到 X ( i ) = U ( i ) Σ ( i ) ( V ( i ) ) T X_{(i)} = U^{(i)} \Sigma^{(i)} (V^{(i)})^T X(i)=U(i)Σ(i)(V(i))T
  3. 构造因子矩阵

    • 从每个模式矩阵的 SVD 结果中提取左奇异矩阵 U ( i ) U^{(i)} U(i) 作为对应维度的因子矩阵。
  4. 计算核心张量

    • 使用张量-矩阵乘积计算核心张量 S \mathcal{S} S,即 S = X × 1 ( U ( 1 ) ) T × 2 ( U ( 2 ) ) T × 3 ( U ( 3 ) ) T \mathcal{S} = \mathcal{X} \times_1 (U^{(1)})^T \times_2 (U^{(2)})^T \times_3 (U^{(3)})^T S=X×1(U(1))T×2(U(2))T×3(U(3))T

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/35085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI编译器】triton学习:矩阵乘优化

Matrix Multiplication 主要内容: 块级矩阵乘法 多维指针算术 重新编排程序以提升L2缓存命 自动性能调整 Motivations 矩阵乘法是当今高性能计算系统的一个关键组件,在大多数情况下被用于构建硬件。由于该操作特别复杂,因此通常由软件提…

mprpc框架的配置文件加载

目录 1.回顾测试 2.mprpc框架的配置文件加载 2.1 mprpcconfig.h 2.2 完善mprpcapplication.h 2.3 完善mprpcapplication.cc 2.4 mprpcconfig.cc 2.5 test.conf 2.6 测试运行 ​3.扩展问题 1.回顾测试 我们先把之前的项目代码工程编译好,然后进入bin里面&am…

GPOPS-II教程(2): 可复用火箭再入大气层最优轨迹规划问题

问题描述 考虑一类可复用火箭再入大气层最优轨迹规划问题,其动力学方程为 { r ˙ v sin ⁡ γ , θ ˙ v cos ⁡ γ sin ⁡ ψ r cos ⁡ ϕ , ϕ ˙ v cos ⁡ γ cos ⁡ ψ r , v ˙ − F d m − F g sin ⁡ γ , γ ˙ F l cos ⁡ σ m v − ( F g v − v r …

高考填报志愿(选专业),为什么要尊重孩子的选择 ?

没有哪一位父母不希望自己的孩子能够考到理想的大学,甚至光宗耀祖,然而一些比较专制的家长,往往在孩子填报志愿的时候表现出很强的控制欲,希望将自己的意愿强加于孩子身上,并没有考虑到他们的兴趣是什么。其实&#xf…

【IM 服务】新用户为什么刚注册就能收到通知?为什么能接收注册前的通知?

功能说明: 默认新注册的用户可以接收到注册前 7 天内的广播消息。您可以从控制台免费基础功能页面关闭该服务。 开通方式: 访问开发者后台 免费基础功能 1页面,确认应用名称与环境(开发 /生产 )正确无误后&#xff0c…

springboot+vue+mybatis门窗管理系统+PPT+论文+讲解+售后

如今社会上各行各业,都在用属于自己专用的软件来进行工作,互联网发展到这个时候,人们已经发现离不开了互联网。互联网的发展,离不开一些新的技术,而新技术的产生往往是为了解决现有问题而产生的。针对于仓库信息管理方…

Java-day01--基础知识

1、计算机基础知识: 计算机主要是由硬件和软件组成,软件指的是特定顺序的计算机指令,硬件主要可以看成是系统软件和应用软件等。 目前java主流分成三种:javase(标准版)、javame(小型版&#x…

优化了自制的浏览器主页的全屏功能

第一次修改 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>全屏功能</title><style>…

数据分析必备:一步步教你如何用matplotlib做数据可视化(12)

1、Matplotlib 3D线框图 线框图采用值网格并将其投影到指定的三维表面上&#xff0c;并且可以使得到的三维形式非常容易可视化。plot_wireframe()函数用于此目的 import matplotlib.pyplot as plt import numpy as np import math import seaborn as sns plt.rcParams[font.s…

数据结构-----【链表:基础】

链表基础 1、链表的理论基础 1&#xff09;基础&#xff1a; 链表&#xff1a;通过指针串联在一起的线性结构&#xff0c;每个节点由两部分组成&#xff0c;一个是数据域&#xff0c;一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;&#xff0c;最后一个指针…

在flask中加载mnist模型,并预测图片

一、在tensorflow中新建及保存模型 启动Jupyter Notebook 新建Notebook 生成 mnist_model.h5 模型的代码 import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import…

机器人控制系列教程之运动规划(2)

简介 在笛卡尔坐标空间中轨迹规划时&#xff0c;首先用位置矢量和旋转矩阵表示所有相应的机器人节点&#xff0c;其次在所有路径段插值计算相对的位置矢量和旋转矩阵&#xff0c;依次得出笛卡尔坐标空间中的轨迹序列通过求解运动学逆问题得到相应关节位置参数。 优点&#xf…

评测|贪吃小猫疯狂长肉,让它停不下嘴的希喂、鲜朗、帕特真实调研

我发现很多铲屎官存在一个误区&#xff0c;认为“进口即是高贵”&#xff0c;过度信赖进口产品。一见到进口宠物粮就冲动购买&#xff0c;甚至对国产品牌持贬低态度&#xff0c;贴上“质量不佳”、“不符合标准”等标签。 为了更深入地了解这一现象&#xff0c;我深入研究了主食…

【Unity小技巧】记一个RenderTexture无法正确输出Camera视图下的Depth渲染的问题

问题 这个问题出现在使用URP管线时&#xff0c;我试图用Shader实现血条的制作&#xff0c;并用RenderTexture将视图渲染到RawImage上。 但是渲染结果出现了问题&#xff1a; 可以看到液体边缘的渲染出现了错误&#xff0c;原因不明 在StackFlow上查找后找到了类似的问题&…

Spring Cloud - 开发环境搭建

1、JDK环境安装 1、下载jdk17&#xff1a;下载地址&#xff0c;在下图中红色框部分进行下载 2、双击安装&#xff0c;基本都是下一步直到完成。 3、设置系统环境变量&#xff1a;参考 4、设置JAVA_HOME环境变量 5、在PATH中添加%JAVA_HOME%/bin 6、在命令行中执行&#xff1a;j…

第三十篇——等价性:如何从等价信息里找答案?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 知道了等价性的逻辑&#xff0c;通过等价性去衡量事物&#xff0c;像是给…

Linux配置网卡详细教程

这个网卡配置然后头痛了两天&#xff0c;看了很多篇关于这方面的文章&#xff0c;但是都没让我成功&#xff0c;可惜工亏不负有心人&#xff0c;然后终于学会了下面此方法 实现完成的效果&#xff1a; 永久修改网卡IP vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPEEther…

node带参数命令

不带参数命令示例&#xff1a; node /www/wwwroot/server 带参数命令示例&#xff1a; node /www/wwwroot/server arg1 arg2 arg3 在启动页进行参数处理&#xff1a; // 获取启动参数(除去前2个默认参数&#xff0c;示例&#xff1a;node /www/wwwroot/server arg1 arg2 …

西门子840dsl机床仿真软件配置opcua说明

需要的安装包如下&#xff0c;可在百度网盘中下载 主软件包&#xff1a;sinutrain-v4.7-ed4&#xff08;也可在官网中下载最新版本&#xff09; 用户文件&#xff1a;UserDataBase 授权sinutrain&#xff1a;Sim_EKB_Install_2021_06_22 链接&#xff1a;https://pan.baidu.c…

小阿轩yx-用户管理与高级SQL语句

小阿轩yx-用户管理与高级SQL语句 MySQL 进阶查询 运维工作中可以提供不小的帮助&#xff0c;运维身兼数职&#xff0c;可能会有不少数据库的相关工作 常用查询介绍 对查询的结果集进行处理 按关键字排序 使用 SELECT 语句可以将需要的数据从 MySQL 数据库中查询出来 对结…