我无法弄清楚为什么在以下程序中使用while循环 总是在1次迭代后停止。基本上,权重是如何变成的 无论输入如何,均等于一次迭代后的权重。基本上我想要 跟踪两个连续运行的权重列表以及它们是否相等 我想退出如果我使用具有固定大量迭代的for循环,我明白了 连续的权重列表在第一次迭代中不相等,而while循环总是如此 退出一个。任何帮助将不胜感激。
import random
def test(inputs, targets):
inputDim = len(inputs[0])
outputDim = len(targets[0])
if (len(inputs) == len(targets)):
dataSize = len(inputs)
else:
return
weights = [];
for i in range(inputDim + 1):
weights.append([]);
for j in range(outputDim):
weights[i].append(2*random.random() - 1);
weightsPrevious = 0
iterCount = 0
while (weightsPrevious != weights):
iterCount += 1
print("iteration", iterCount)
weightsPrevious = weights.copy()
for k in range(dataSize):
for j in range(outputDim):
weights[0][j] += 0.25*(targets[k][j] - 1)*(-1)
for i in range(inputDim):
weights[i + 1][j] += 0.25*(targets[k][j] - 1)*inputs[k][i]
return weights
test([[0,0],[0,1],[1,0],[1,1]],[[0],[1],[1],[1]])
编辑:即使删除了最后一个返回语句
,我也得到了相同的结果答案 0 :(得分:4)
这种情况正在发生,因为你在while循环结束时有一个return
。 return
停止执行该函数并返回weights
。
我认为你需要取消它:
while (weightsPrevious != weights):
iterCount += 1
print("iteration", iterCount)
...
return weights # now this is going to be executed when
# the while loop is finished.
答案 1 :(得分:0)
while (weightsPrevious != weights):
iterCount += 1
print("iteration", iterCount)
weightsPrevious = weights.copy()
for k in range(dataSize):
for j in range(outputDim):
weights[0][j] += 0.25*(targets[k][j] - 1)*(-1)
for i in range(inputDim):
weights[i + 1][j] += 0.25*(targets[k][j] - 1)*inputs[k][i]
return weights
应该是
while (weightsPrevious != weights):
iterCount += 1
print("iteration", iterCount)
weightsPrevious = weights.copy()
for k in range(dataSize):
for j in range(outputDim):
weights[0][j] += 0.25*(targets[k][j] - 1)*(-1)
for i in range(inputDim):
weights[i + 1][j] += 0.25*(targets[k][j] - 1)*inputs[k][i]
return weights
注意返回的缩进