Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从Numpy中的SVD分解得到负S值?

从Numpy中的SVD分解得到负S值?
EN

Stack Overflow用户
提问于 2019-03-12 14:37:22
回答 1查看 909关注 0票数 4

我想使用ZCA来白化CIFAR10数据集。输入的X_train是形状(40000、32、32、3),其中40000是图像的数量,32x32x3是每个图像的大小。为此,我使用了来自这个答案的代码:

代码语言:javascript
运行
AI代码解释
复制
X_flat = np.reshape(X_train, (-1, 32*32*3))
# compute the covariance of the image data
cov = np.cov(X_flat, rowvar=True)   # cov is (N, N)
# singular value decomposition
U,S,V = np.linalg.svd(cov)     # U is (N, N), S is (N,)
# build the ZCA matrix
epsilon = 1e-5
zca_matrix = np.dot(U, np.dot(np.diag(1.0/np.sqrt(S + epsilon)), U.T))
# transform the image data       zca_matrix is (N,N)
zca = np.dot(zca_matrix, X_flat)    # zca is (N, 3072)

但是,在运行时,我遇到了以下警告:

代码语言:javascript
运行
AI代码解释
复制
D:\toolkits.win\anaconda3-5.2.0\envs\dlwin36\lib\site- packages\ipykernel_launcher.py:8: RuntimeWarning: invalid value encountered in sqrt

所以当我得到SVD输出后,我试着:

代码语言:javascript
运行
AI代码解释
复制
print(np.min(S)) # prints -1.7798217

这是意外的,因为S只能具有正值。此外,ZCA美白结果不正确,其中包含nan值。

我尝试通过第二次重复运行相同的代码来再现这个结果,这次我没有遇到任何警告或任何负面的S值,但是我得到了:

代码语言:javascript
运行
AI代码解释
复制
print(np.min(S)) # prints nan

知道为什么会发生这种事吗?

更新:重新启动内核以释放cpu和RAM资源,并再次尝试运行此代码。同样,在向np.sqrt()提供负值时也会收到同样的警告。不确定这是否有帮助,但我还附加了cpu和ram利用率数字:

活动监测数字

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-12 22:08:05

这里有几个想法。我没有你的数据集,所以我不能完全确定这些数据会解决你的问题,但我有足够的信心把它作为回答而不是评论。

第一。到3072年,您的X_train是40'000,其中每一行都是数据向量,每一列都是变量或特性。您需要的协方差矩阵是3072乘3072:将rowvar=False传递给np.cov

我不太清楚为什么40000×40000协方差矩阵的SVD会发散。假设您有足够的RAM来存储12 GB的协方差矩阵,那么我可以想到的一件事是数值溢出,因为您可能没有像ZCA (和其他任何白化技术)所期望的那样删除数据的平均值?

所以第二。删除平均值:X_zeromean = X_flat - np.mean(X_flat, 0)

如果您这样做,那么最后一步必须修改一点(以使维度对齐)。下面是使用统一随机数据的快速检查:

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
X_flat = np.random.rand(40000, 32*32*3)
X_zeromean = X_flat - np.mean(X_flat, 0)
cov = np.cov(X_zeromean, rowvar=False)
U,S,V = np.linalg.svd(cov)
epsilon = 1e-5
zca_matrix = np.dot(U, np.dot(np.diag(1.0/np.sqrt(S + epsilon)), U.T))
zca = np.dot(zca_matrix, X_zeromean.T) # <-- transpose needed here

作为一个正常检查,np.cov(zca)现在非常接近标识矩阵,如所需(zca将翻转维度作为输入)。

(作为一个侧面,这是一种非常昂贵和数值不稳定的方法来白化数据数组:您不需要计算协方差,然后采取SVD-您正在做两倍的工作。您可以获取数据矩阵本身的瘦SVD (带有np.linalg.svd标志的full_matrices=False ),并从那里直接计算白化矩阵,而无需为协方差矩阵评估昂贵的外部积。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55131665

复制
相关文章
在Node.js中读写文件
本文翻译自Reading and Writing Files in Node.js
ccf19881030
2020/10/29
5.3K0
JS动态添加/删除css文件
Jensen_97
2023/07/20
7590
在Node.js中处理Zip文件
Zip 文件是常用的压缩文件格式。在本文中,我将演示如何用 adm-zip npm 模块[1]创建和提取 zip 文件。
疯狂的技术宅
2020/08/10
5.2K0
js中find的用法_js中find函数
首先简单的介绍一下ES6是什么,可能很多人还是第一次听说,我们都知道H5是html的新一代的标准,同样,ES6是javascript的新一代标准,全称是ECMAScript 6.0,简称ES6,其实不是什么神秘的东西。15年6月发布的。
全栈程序员站长
2022/11/04
11.8K0
js中的函数
console.log(fn instanceof Object) // 是Object类型的实例
李才哥
2020/08/17
6.6K0
js中的函数
js中的函数
console.log(fn instanceof Object) // 是Object类型的实例
李才哥
2020/03/28
5.4K0
js中的函数
JS中工厂函数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> //工厂函数是专门创建对象的函数 function createPersion(myname,myage) { let obj=new Object(); obj.name=myname; obj.age=myage; obj.say=functi
贵哥的编程之路
2020/10/28
1.5K0
js中的匿名函数_js匿名函数怎么定义
定义:匿名函数顾名思义指的是没有名字的函数,在实际开发中使用的频率非常高!也是学好JS的重点。
全栈程序员站长
2022/11/10
10.4K0
js函数中使用el表达式传入多个参数时的问题
需求是需要使用js函数执行给某个div标签赋值,但是当传入id和title时就不能进入js中,尝试很久才明白title属于字符串,需要使用引号,但是不确定怎么加,多番调试终于通过了,如下: οnclick="delete1({news.id},{news.title}’);return true;"
geekfly
2022/05/06
2K0
用函数式编程在 JS 中开发游戏
一段时间以来,函数式编程范式比较火热,并且在互联网上有很多关于它的精彩书籍和文章,但是要找到相关程序的真实示例并不容易。因此,我决定尝试使用 Javascript(当今最流行的编程语言)并遵循其概念创建一款游戏。在本文中,我将分享一些经验,并告诉你是否值得。
疯狂的技术宅
2020/03/13
2.2K0
在Node.js中如何逐行读取文件
本文翻译自How to read a file line by line in Node.js
ccf19881030
2020/10/29
13.8K0
js 复制粘贴文章时添加版权信息
<script>        function setClipboardText(event){         event.preventDefault();         var node = document.createElement('div');               node.appendChild(window.getSelection().getRangeAt(0).cloneContents());                var htmlData = '<div>'  
Savalone
2020/02/11
1.3K0
JS中递归函数 18
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <bo
贵哥的编程之路
2020/10/28
2.1K0
html js 数组添加,js数组添加数据
我们在学习python的过程中,会对列表、字符串添加数据。在Javascript中,我们也会对数组添加数据。在不同的位置添加数据有着不同的方法。本文介绍js数组添加数据的三种方法:1、结尾添加push()方法;2、头部添加unshift() 方法;3、向/从数组指定位置添加/删除项目,然后返回被删除的项目splice() 方法。
全栈程序员站长
2022/07/01
26.5K0
JS中的运动函数
分享一个JS封装的运动函数,里面分为弹性运动和缓冲运动两个方法,通过调用startMove()函数来实现动画效果。
越陌度阡
2020/11/26
2.4K0
JS中的高阶函数
在js的内置对象中同样存在着一些高阶函数,像数组的map,filter,reduce方法等,它们接受一个函数作为参数,并应用这个函数到列表的每一个元素
小丞同学
2021/08/16
1.4K0
JS中添加元素的方法
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152078.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/25
9.8K0
JS中添加元素的方法
在Koa.js中实现文件上传的接口
文件上传是一个基本的功能,每个系统几乎都会有,比如上传图片、上传Excel等。那么在Node Koa应用中如何实现一个支持文件上传的接口呢?本文从环境准备开始、最后分别用 Postman 和一个HTML页面来测试。
张张
2019/12/27
4.9K0
在Node.js中逐行读取文件【纯技术】
在计算机科学中,文件是一种资源,用于在计算机的存储设备中离散地记录数据。Node.js不会以任何方式覆盖它,并且可以与文件系统中被视为文件的任何文件一起使用。
Jean
2019/09/24
7.9K0
vue文件中引入js_vue中require引入js
由于一些演示,需要对编码名称等可快速进行修改,需要页面方便配置。由于build后的vue项目基本已经看不出原样,因此需要创建一个文件,并在打包的时候不会进行编译。
全栈程序员站长
2022/11/08
12.2K0

相似问题

在cygwin/mingw上编译windows

12

glog不使用MinGW在Windows上编译

16

用OpenCV在Windows上编译MinGW

22

用QJson在Windows上编译MinGW

14

帮助使用GTK+在Windows上编译MinGW

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档