在python中使用while循环的问题

时间:2013-07-12 16:11:33

标签: python variable-alias

我无法弄清楚为什么在以下程序中使用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]])

编辑:即使删除了最后一个返回语句

,我也得到了相同的结果

2 个答案:

答案 0 :(得分:4)

这种情况正在发生,因为你在while循环结束时有一个returnreturn停止执行该函数并返回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

注意返回的缩进