优化sigmoid
原代码
def sigmoid(x):
result = 1 / (1 + np.exp(-x))
return result
问题:当-x值过大,会导致溢出错误
改进后代码
def improved_sigmoid(x):
# 创建一个与输入x相同大小的空数组来存储结果
result = np.zeros_like(x)
# 找到输入x中所有大于0的元素
positive_mask = x >= 0
# 对大于0的元素,使用常规计算
# 这里 exp(-x) 不会下溢
result[positive_mask] = 1 / (1 + np.exp(-x[positive_mask]))
# 对小于0的元素,使用优化过的公式
# 避免 exp(-x) 上溢
# sigmoid(x) = e^x / (1 + e^x)
negative_mask = x < 0
exp_x = np.exp(x[negative_mask])
result[negative_mask] = exp_x / (1 + exp_x)
return result
证明:
1/(1+e^(-x))
=1/(1+1/e^x)
=1/(e^x + 1 /e^x)
=ex/(ex +1)

浙公网安备 33010602011771号