While循环不符合预期

时间:2019-01-27 18:33:40

标签: python-3.x

我在下面的代码中,在函数neural_net_trainer(p, a)中,当p的值等于a的值时,while循环旨在结束/退出。但是,循环不断地无限运行。

我尝试了for循环,而不是while循环,而是将其循环了30次(每次都运行“ update”功能),最终“ p”等于“ a”。但是我需要使用while循环,因为我不知道循环将运行多少次。每当“ p”等于“ a”时。

# 'p' represent prediction. 'a' represent actual output of Neural network.
#-- improving Neural Network prediction (using derivative of cost function) --
def slope(p, a):
    return 2 * (p - a)

# --- Create the Update rule function (to correct prediction) --- 
def update(p, a): 
    p = p - 0.1 * slope(p, a)
    return p

# -- Train network - minimising the cost function until prediction is equal to actual output
# - In while loop, if 'p' is not equal to 'a', then 'update' function will increment/decrement 'p' accordingly, until 'p' == 'a'. While-loop should then exit.  
def neural_net_trainer(p, a):
    print('prediction = ' + str('{:.2f}'.format(p)) + '. Actual Output = ' + str('{:.2f}'.format(a)))
    while p != a:
        p = update(p, a)
        print('prediction = ' + str('{:.2f}'.format(p)))
    else:
        print('Prediction = ' + str('{:.2f}'.format(p)) + ', and actual output = ' + str('{:.2f}'.format(a)) + '. Our Neural Network is trained on this dataset.')

# - Testing 'neural_net_trainer' function
a = 4
p = 3
neural_net_trainer(p, a)

基本上,该代码模拟了一个非常简单的神经网络的功能,该功能接收两个值-p(预测输出)和a(实际输出)。在代码中,slope函数是用于校正预测(使其等于实际输出)所需的公式。 update函数执行更新/更正。 neural_net_trainer函数使用while循环运行update函数足够的时间,直到p(预测)等于a(实际输出)为止。此时应退出while循环。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

这里的问题是您要检查 exact 是否相等,并且p - a永远不会达到精确的0。 尝试使用较弱的条件来保护while循环,例如:

THRESHOLD = 1e-5

while abs(p - a) > THRESHOLD:

答案 1 :(得分:2)

p尚未达到4.0,仅达到了3.999999999999999 ...,当您使用{:.2f}对其进行格式化时,它会四舍五入为4.00。由于p != aTrue仍为4.0 != 3.999999999999999

这比python问题更多的是算法问题,但是也许round()会在基于p接近a而不是固定数量的迭代的情况下派上用场。