【问题标题】:Sigmoid going out of boundSigmoid 超出范围
【发布时间】:2026-02-04 01:45:01
【问题描述】:
def sigmoid(z):
# complete the code
z = np.asarray(z)
if z.ndim == 0:
    return(1/(1+np.exp(-z)))
else:
    d = np.array([])
    for item in z:
        d= np.append(d,1/(1+np.exp(-item)))
    return d

打印(sigmoid([(1,3), (4,30)]))

为什么返回[ 0.73105858 0.95257413 0.98201379 1. ] 因为函数从 0 绑定到 1 例如[q= 1/1+np.exp(-30)][1] 返回 1.0000000000000935

为什么会发生这种情况以及如何纠正它? 例如image of a weird looking output

【问题讨论】:

标签: python numpy machine-learning floating-point logistic-regression


【解决方案1】:

您的 sigmoid 实现看起来不错。

print(1 / 1 + np.exp(-30)) 返回1.0000000000000935 的原因是operator precedence

# Your example
1 / 1 + np.exp(-30)

# How it will be computed
(1 / 1) + np.exp(-30)

# What you actually wanted
1 / (1 + np.exp(-30))

附: numpy 支持broadcasting。您的功能可以简化为:

def sigmoid(z):
    z = np.asarray(z)
    return 1 / (1 + np.exp(-z))

如果你想要的话,使用ravel 函数来展平多维数组。

【讨论】:

  • 但是 sigmoid 函数返回一个大于 1 的值,即 [ 0.73105858 0.95257413 0.98201379 1. ] 这个数组的最后输出是 1.something
  • 它是四舍五入的。实际值小于1。sigmoid(np.array([20,3]))[0] < 1.0 ===> True
【解决方案2】:

哦 BODMAS 规则。

q= 1/(1+np.exp(-30))

返回0.9999999999999065

小于1

在控制台中四舍五入为 1

【讨论】:

  • 但是sigmoid函数返回一个大于1的值,即[ 0.73105858 0.95257413 0.98201379 1. ]数组的最后输出是1.something
最近更新 更多