SVD矩阵分解

目录

一、SVD矩阵分解

二、图片压缩


一、SVD矩阵分解

上篇内容 LLM微调和Lora 介绍了矩阵分解,通过两个低秩矩阵就能还原大量的信息。其实矩阵不止能分解成两个,还可以分成三个。这里来介绍一个SVD的工具。

用代码来说明一下:

python 复制代码
import numpy as np
from scipy.linalg import svd

A= np.array([[1, 2],
             [1, 1],
             [0, 0]])

p, s, q = svd(A, full_matrices=False)

print('P=', p)
print('S=', s)
print('Q=', q)

输出:

左边的矩阵是P,右边的矩阵是Q。S则表示对角阵 ,代表特征大小,从左到右依次减小

案例中仅有两个特征值,可以用两个特征值来还原所有的信息(上面的A公式)。如果矩阵很大,有很多个特征值,只需选择前面几个特征值就可以还原大部分信息。比如下面这个矩阵,特征值个数为2,计算方法如下:

二、图片压缩

LLM微调和Lora 上篇文章中提到用 2%的参数还原出矩阵,那么我们可以想想是不是可以用更少的信息还原出图片的内容呢?也可以说如何压缩图片?比如微信的图片打开,如果点下载原图会更清晰,但是不下载原图也能看清楚。

在卷积神经网络(CNN)这篇文章中讲了图片可以处理成矩阵。如下:随便找一张图片,处理成矩阵A,并作svd分解:

python 复制代码
image = Image.open(os.path.join(os.getcwd(), '123.bmp')).convert('L')
A = np.array(image)
# 显示原图像
plt.imshow(A, cmap=plt.cm.gray, interpolation='nearest')
plt.show()
# 对图像矩阵A进行奇异值分解,得到 p, s, q
p, s, q = svd(A, full_matrices=False)
print("A 的维度:", A.shape)
print(len(s))

输出:

特征值有777个,但是我只选其中一部分来还原图片:

python 复制代码
# 取前k个特征,对图像进行还原
def get_image_feature(s, k):
	# 对于S,只保留前K个特征值
	s_temp = np.zeros(s.shape[0])
	s_temp[0:k] = s[0:k]
	s = s_temp * np.identity(s.shape[0])

	# 用新的s_temp,以及p,q重构A
	temp = np.dot(p, s)
	temp = np.dot(temp, q)
	plt.imshow(temp, cmap=plt.cm.gray, interpolation='nearest')
	plt.show()
	print(A - temp)
    
# 取前k个特征,对图像进行还原
get_image_feature(s, 5)
get_image_feature(s, 50)
get_image_feature(s, 200)
get_image_feature(s, 500)

输出:

大家对比看下,感觉50个特征值时图片已经很清晰了,200个特征值时和原图的差距就很小了。

(864 * 50 + 50 + 50 * 777) /(864 * 777)约等于12%,即用12%的信息就还原出图片内容了。

相关推荐
怪奇云呼军9 小时前
教育试听预约后没到课,闪电智能 Voice Agent 如何做分层回访?
人工智能·python·算法·云计算·音视频
ajassi20009 小时前
AI语音智能体开发日记(十八)智能体服务器xiaozhi-esp32-server源码部署指南
运维·服务器·人工智能·ai·ai编程
云淡风轻~窗明几净9 小时前
角谷猜想的进展之三 移动了群山/沸騰的群山 2026-10-10
人工智能·算法·dubbo·图论
AliCloudROS9 小时前
计算巢支持一键私有化部署Qwen3.8-27B
人工智能
汇智信科9 小时前
汇智兵棋:AI赋能的一体化智能兵棋推演平台
人工智能
Joecien9 小时前
AI 生成透明背景图实战:Qwen-Image-2.1-Pro API 实测(21 次实验 + 完整调用代码 + 避坑指南)
人工智能
龙亘川9 小时前
设备管理业务建模:从设备信息台账到维护计划执行闭环
大数据·人工智能·智慧城市·开源软件·数据可视化
Psycho_MrZhang9 小时前
多 Agent 研究系统的架构与实践
人工智能·架构
skywalk81639 小时前
在FreeBSD系统的linux仿真环境下安装和使用kiro 这个亚马逊的AI agent
linux·人工智能·freebsd·kiro
ForeverYang20159 小时前
一种无需训练缺陷数据生成算法--O2MAG
人工智能·深度学习·算法