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

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

我刚刚注意到Matlab中的一个(我认为)异常行为,想知道是什么导致了它。我有一个10000x500矩阵m,其值范围为

min(min(M)) = -226.9723 to

max(max(M)) = 92.8173

exp(-227) = 2.6011e-99

exp(93) = 2.4512e+40

但是如果我将整个矩阵展开,这个矩阵有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))?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值