python中while循环的问题
我无法理解为什么在下面的程序中会出现while循环 始终在1次迭代后停止。基本上,权重以前是如何形成的 等于一次迭代后的权重,与输入无关。基本上我想要 跟踪连续两次跑步的重量列表,以及它们是否相等 我想退出。如果使用具有固定大量迭代次数的for循环,我会看到 连续的权重列表在第一次迭代中并不相等,但while循环始终 一点以后就辞职。任何帮助都将不胜感激python中while循环的问题,python,variable-alias,Python,Variable Alias,我无法理解为什么在下面的程序中会出现while循环 始终在1次迭代后停止。基本上,权重以前是如何形成的 等于一次迭代后的权重,与输入无关。基本上我想要 跟踪连续两次跑步的重量列表,以及它们是否相等 我想退出。如果使用具有固定大量迭代次数的for循环,我会看到 连续的权重列表在第一次迭代中并不相等,但while循环始终 一点以后就辞职。任何帮助都将不胜感激 import random def test(inputs, targets): inputDim = len(inputs[0])
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]])
编辑:即使删除最后一条return语句,我也会得到相同的结果
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
注意返回上的缩进
应该是
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循环的末尾有一个
返回<代码>返回
停止函数的执行并返回权重
我认为你需要取消它:
while (weightsPrevious != weights):
iterCount += 1
print("iteration", iterCount)
...
return weights # now this is going to be executed when
# the while loop is finished.
这是因为在while循环的末尾有一个
返回<代码>返回
停止函数的执行并返回权重
我认为你需要取消它:
while (weightsPrevious != weights):
iterCount += 1
print("iteration", iterCount)
...
return weights # now this is going to be executed when
# the while loop is finished.
这正是我的测试文件中所包含的内容,不知道为什么它会以这种方式复制粘贴。但它似乎仍然不起作用。我只是尝试完全删除return语句,但程序在一次之后仍然停止iteration@BM一个原因可能是这一行:
weightsPrevious=weights.copy()
,因此,weightsPrevious
在第一次迭代后变得等于weights
,将在第二次迭代之前退出。是的,似乎是这样。我在Python可视化工具中运行了代码,看起来虽然创建了不同的列表,但列表中的条目指向相同的值。我尝试使用列表(权重)来代替,但这也做了同样的事情。似乎我需要找到一种新的复制方式。感谢您的回复和支持comments@BM我昨天详细解释了这件事,你可能会发现它很有用:这就是我的测试文件中的内容,不知道为什么它会以这种方式复制粘贴。但它似乎仍然不起作用。我只是尝试完全删除return语句,但程序在一次之后仍然停止iteration@BM一个原因可能是这一行:weightsPrevious=weights.copy()
,因此,weightsPrevious
在第一次迭代后变得等于weights
,将在第二次迭代之前退出。是的,似乎是这样。我在Python可视化工具中运行了代码,看起来虽然创建了不同的列表,但列表中的条目指向相同的值。我尝试使用列表(权重)来代替,但这也做了同样的事情。似乎我需要找到一种新的复制方式。感谢您的回复和支持comments@BM我昨天详细解释了这件事,你可能会发现它很有用:我在python中以这种方式缩进了它,但仍然得到了相同的结果。我删除了那一行,并再次将缩进与while语句对齐,只是为了确保这一点,但我仍然得到了相同的结果。我只是尝试完全删除return语句,程序在一次迭代后仍然停止。我在python中以这种方式缩进了它,我仍然得到了相同的结果。我删除了那一行,并再次将缩进与while语句对齐,只是为了确保,但我仍然得到相同的结果。我只是尝试完全删除return语句,程序在一次迭代后仍然停止