IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 关于pytorch的SVD分解结果和书里不一样的问题 -> 正文阅读

[人工智能]关于pytorch的SVD分解结果和书里不一样的问题

碎碎念

问题是这样的,今天在看鱼书(《深度学习进阶:自然语言处理》)。看到SVD分解:使用奇异值分解(singular value decomposition,SVD)对矩阵进行降维。

然后我手写了一下书里的代码,结果和书中的输出不一样。本来我想越过这个问题不管它,因为书里还用matplotlib画了散点图,我想我画一下看看和人家结果一不一样不就行了嘛。结果我画图也出bug了。在不能使用图的情况下我只好硬着头皮查资料看看我的SVD分解是不是出错了。

然后我去百度,百度到了什么SVD结果和书上不一样啊和PPT不一样啊怎么的,但是到底也没说为什么,所以我只好自己写一下子了。

SVD是什么

SVD就是把一个矩阵分解成U、S、V三个矩阵。其中U、V是两个列向量彼此正交的矩阵。S是除了对角线元素其他都为0的对角矩阵。

示意图大概长这样:
image.png

然后知乎上一个例子写的分解公式大概是这样:

[公式]

原答主是用图像举的例子,分解的项数越多图片越精细(可以参考拉格朗日余项啊之类的项数越多越精细)。

更详细的看知乎:奇异值的物理意义是什么? - 知乎 (zhihu.com)

回到代码

我是个数学废物,所以我也不知道结果不一样究竟是什么造成的,但是看完上边那个公式,据我猜测可能是计算保留的项数不一样。所以造成了我和书上的答案不一样。

那如何验证你的结果是否正确呢?
使用一句简单的u@torch.diag(s)@v即可。

  • @是pytorch里的张量乘法(区分*是按位乘)
  • 结果中的S矩阵是个对角矩阵,但是给出的是个向量,需要使用torch.diag()将其转化为对角矩阵

给一段代码自己试一下:

import torch

# 随机生成一个5*5的张量
tensor = torch.rand(5,5)
# 使用pytorch自带的svd进行分解
u,s,v = torch.linalg.svd(tensor)

# 输出源张量,分解后的三个张量,验证结果
print(f'tensor:\n{tensor}')
print(f'U:\n{u}\nS:\n{s}\nV\n{v}')
print(f'res:\n{u@torch.diag(s)@v}')

我的结果长这样,可以看到tensor和res的结果是一样的。

image.png

你的结果可能和你的矩阵还是不一样?

比如下图这种。
其实下图这种只是乍一看不一样而已。 实际上仔细看一下数字还是一样的,看一下数量级,比如tensor[0][0]这个位置,原来是0,最后计算结果是5.0037e-07,给0.00000050037和0差别很大吗……所以这点差异可以忽而略。还是可以认为结果矩阵是和原矩阵一样的。

image.png

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 11:47:53  更:2021-10-15 11:49:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:43:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码