为什么此函数在For循环外执行并在迭代步骤完成后停止?
def train():
w1 = np.random.randn() #random number from normal distribution
w2 = np.random.randn() #random number from normal distribution
b = np.random.randn() #random number from normal distribution
iterations = 100000 #number of iterations
learning_rate = 0.02 #learning rate
for i in range(iterations):
randpoint = data[np.random.randint(len(data))]
pred = activation(randpoint[0] * w1 + randpoint[1] * w2 + b)
cost = (pred - randpoint[2])**2
dcost_dpoint = 2 * (pred - randpoint[2]) * (der_activation(randpoint[0] * w1 + randpoint[1] * w2 + b))
w1 = w1 - learning_rate * dcost_dpoint * randpoint[0]
w2 = w2 - learning_rate * dcost_dpoint * randpoint[1]
b = b - learning_rate * dcost_dpoint
return w1, w2, b
w1, w2, b = train()
答案 0 :(得分:1)
我只是不理解函数外部的调用“ w1,w2,b = train()”。
这将导致执行train()
函数。没有函数调用,函数内部的任何代码都将无法执行任何操作。
请注意,train()
返回多个值。从技术上讲,它将返回具有三个值的元组。您可以将返回值分配给变量
r = train()
随后,您可以引用元组中的元素:
print(r[0])
print(r[1])
print(r[2])
通常我们要为每个元素命名:
w1 = r[0]
w2 = r[1]
b = r[2]
Python通过直接从函数的返回值进行赋值来为此提供一种简化方式:
w1, w2, b = train()
但是当再次调用该函数时,我不知道如何重新启动迭代步骤
为澄清此评论,此函数仅在您发布的整个代码中称为一次,并且在此行上出现。前一个def train():
定义功能,以便以后可以随时使用。
答案 1 :(得分:1)
指令w1, w2, b = train()
说:调用函数train ()
,该函数应返回值的三元组,并将该三元组中的第一个值分配给w1
,将第二个值分配给{{1 }},第三个是w2
。
函数就是这样工作的:首先定义一个函数,然后在需要时调用它,可能(通常)多次。