Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要帮助!最大递归错误,但我可以';不要缩短代码_Python_Function - Fatal编程技术网

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

我遇到了错误:使用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_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