Python 需要帮助!最大递归错误,但我可以';不要缩短代码
我遇到了错误:使用Sigmoid执行以下代码调用Python对象时,超过了最大递归深度:Python 需要帮助!最大递归错误,但我可以';不要缩短代码,python,function,Python,Function,我遇到了错误:使用Sigmoid执行以下代码调用Python对象时,超过了最大递归深度: import numpy import random data = [[3, 1.5, 1], [2, 1, 0], [4, 1.5, 1], [3, 1, 0], [3.5, 0.5, 1], [2, 0.5, 0], [5.5, 1, 1], [1, 1, 0]] mystery_flo
import numpy
import random
data = [[3, 1.5, 1],
[2, 1, 0],
[4, 1.5, 1],
[3, 1, 0],
[3.5, 0.5, 1],
[2, 0.5, 0],
[5.5, 1, 1],
[1, 1, 0]]
mystery_flower = [4.5, 1]
w1 = np.random.randn()
w2 = np.random.randn()
b = np.random.randn()
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def dsigmoid(x):
return sigmoid(x) * (1 - dsigmoid(x))
for i in range(100):
point = random.choice(data)
# The weights m1, m2, w1, w2 are going to be represented by z
z = point[0] * w1 + point[1] * w2 + b
pred = sigmoid(z)
target = point[2]
cost = (pred - target)**2
if i == 10:
print(cost)
dcost = 2 * (pred - target)
dpred = dsigmoid(z)
dz_dw1 = point[0]
dz_dw2 = point[1]
dz_db = 1
dcost_w1 = dcost * dpred * dz_dw1
dcost_w2 = dcost * dpred * dz_dw2
dcost_b = dcost * dpred
我需要能够定义sigmoid的导数,同时仍然允许使用dsigomoid,因为我需要在我的导数语句中使用它,如dpred=dsigomoid(z)。有什么建议吗?您的导数定义没有停止递归调用的基本条件(注释中@Miket25也提到过),看起来也有点尴尬: Per,导数闭式w。Rt<代码>x是: 您可以将
dsigomoid
更改为:
def dsigmoid(x):
enegx = np.exp(-x)
return enegx / (1 + enegx) ** 2
您是否尝试过在任何地方重新定义sigmoid函数? 因此: 虽然您的方法对我来说很有效,但您使用的是Python3还是Python2?
希望我能帮忙 正如其他人在定义函数dsigomoid时所提到的,您让它再次调用自己。这意味着每次调用它时,只要代码还在运行,它就会一直调用自己。在
return sigmoid(x)*(1-dsigomoid(x))
中,如果希望从1中减去dsigomoid(第一个参数),请使用return sigmoid(x)*(1-x)
函数没有基本条件,每次都使用相同的参数x
调用自己。这将导致无限递归,这是导致您的错误的原因。谢谢大家的帮助!将dsigomoid定义为def dsigomoid(x):enegx=np.exp(-x)return enegx/(1+enegx)**2工作得很好!请阅读。您的解决方案没有解决OP问题,即超出递归限制。您提供的代码不是有效的Python代码。
def dsigmoid:
return np.exp(-x)/(1+np.ex(-x)**2) #this is the simplified version of the derivative I believe