我在下面的代码中,在函数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循环。
任何帮助将不胜感激。
答案 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 != a
,True
仍为4.0 != 3.999999999999999
。
这比python问题更多的是算法问题,但是也许round()会在基于p接近a而不是固定数量的迭代的情况下派上用场。