Octave/Matlab中e^(-1*z)与exp(-1*z)的差异咨询
为什么Octave中
1./(1 + e^(-1*z))和1./(1 + exp(-1*z))结果不同? 嘿,作为Octave新手碰到这个问题太正常啦!我来帮你拆解这两行代码的核心区别:
e^(-1*z)的问题:
在Octave里,^是矩阵幂运算,而且默认情况下Octave并没有预定义e作为自然常数(除非你自己手动定义过e = exp(1))。所以这行代码会出现两种问题:- 如果没定义过
e,运行时直接会报变量未定义的错误; - 就算你提前定义了
e=exp(1),当z是向量或矩阵时,e^(-1*z)会因为矩阵维度不匹配报错——矩阵幂运算要求左右操作数是方阵,或者左边是标量、右边是方阵,向量根本没法进行这种运算,而且这也完全不是你想要的逐元素计算逻辑。
- 如果没定义过
exp(-1*z)的正确用法:exp()是Octave内置的逐元素自然指数函数,专门用来计算自然常数e的幂,完美支持标量、向量、矩阵的运算:
不管z是什么维度,exp(-1*z)都会对z里的每个元素单独计算e^(-z_i),这完全符合你想实现的sigmoid函数的逻辑。
举个实际例子验证:
假设z = [1, 2; 3, 4]:
- 用
exp(-z)会得到逐元素的结果:[0.3679, 0.1353; 0.0498, 0.0183] - 而如果定义了
e=exp(1),e^(-z)会直接报错,因为矩阵幂运算不支持这种维度的操作。
总结一下:要实现sigmoid函数,一定要用exp()函数,而不是e^——前者是逐元素的自然指数运算,后者是矩阵幂运算,两者的功能完全不同!
内容的提问来源于stack exchange,提问作者southernKid33
相关产品推荐
相关产品推荐

