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
print(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
答案 0 :(得分:1)
您的S形实现看起来不错。
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))
P.S。 numpy支持broadcasting。您的功能可以简化为:
def sigmoid(z):
z = np.asarray(z)
return 1 / (1 + np.exp(-z))
如果需要的话,使用ravel函数来平整多维数组。
答案 1 :(得分:0)
哦,BODMAS规则。
q= 1/(1+np.exp(-30))
返回0.9999999999999065
小于1
在控制台中四舍五入为1