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%的信息就还原出图片内容了。

相关推荐
深蓝AI2 小时前
10 万星投给了记忆:claude-mem 把编码 Agent 的断片压进 SQLite,值不值得装
人工智能·程序员
limuyang26 小时前
我在 2核2G 云主机上跑 OpenViking:一次关于云主机、模型选型与长期成本的真实复盘
人工智能·开源·ai编程
Shulex7 小时前
跨境电商 AI Agent 核心架构解析:从只读问答到自主执行的工程落地
人工智能·架构·智能客服·跨境电商
Java后端的Ai之路7 小时前
CAS并发控制-从CPU指令到企业级乐观锁
vue.js·人工智能·python·cas·乐观锁
情 九7 小时前
MCP 实战 06:把 HTTP 接口接成工具,让 AI 帮你查数据
人工智能·网络协议·http·mcp
码农小旋风8 小时前
Ray分布式计算引擎介绍
人工智能·架构
火山引擎和TA的超级拍档们8 小时前
产品情报局 08 | AI 内容助手:全网热点驱动,一站式打通内容生产全链路
人工智能
Binovate缤江数智8 小时前
水泵远程开关之后,还需要管什么?数智开关在无人值守泵站中的监测、保护与能耗分析
人工智能·物联网
素男8 小时前
两个月不是六十天
人工智能·agent·self-becoming·ai长期记忆·ai自我介绍