gpt4 book ai didi

matlab: exp(X) 给出 inf 即使 exp(max(X)) 没有

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:52 27 4
gpt4 key购买 nike

[编辑:整个事情有一个非常简单的解决方案:矩阵使用单数据类型而不是默认的双数据类型]

我刚刚注意到 matlab 中的一个有点奇怪的(我认为)行为,想知道是什么导致了它。我有一个 10000x500 的矩阵 M,其值范围为

min(min(M)) = -226.9723 to 
max(max(M)) = 92.8173

exp(-227) =  2.6011e-99
exp(93) = 2.4512e+40

但如果我对整个矩阵进行 exp,则该矩阵具有 inf 值:

ii = isinf(exp(M));
sum(sum(ii))
ans =
2

Matlab 如何将值存储在矩阵中,以便对单个元素的操作可以得到与对矩阵本身执行相同操作时不同的结果?

expM = exp(M);
exp(M(1)) == expM(1) ; %can be false, which I find surprising

我知道无论如何我都必须更改算法,因为即使我可以避免 inf 值,高指数也会给出不准确的结果。它发生在人工神经网络计算的公式中,例如:

 sum(log(1+exp(ones(numcases,1)*b_h + data*w_vh)),2);

所以我的计划是将其分为两种情况,首先在指数较小的情况下我按照上面的方法进行计算,对于高值我进行近似

log(1+exp(ones(numcases,1)*b_h + data*w_vh)

ones(numcases,1)*b_h + data*w_vh

这听起来合理吗?我的推理当然是

log(1+exp(x)) ≈ log(exp(x)) ≈ x, for large x

顺便说一句:除了在 max(max(M)) 中执行两次 max 之外,是否有更好的方法来获取矩阵的最大元素?

最佳答案

好的,我发现了错误:我的矩阵是单一类型的,但是当我将值复制到一个新变量中时,该变量将是一个 double 型,当然具有不同的最大值。我在这里自己回答这个问题,所以问题不会悬而未决。感谢您的提示,我在尝试构建重现案例时找到了原因:)

关于matlab: exp(X) 给出 inf 即使 exp(max(X)) 没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3284039/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com