使用torch7生成XOR门数据集时出现意外行为

我在使用torch7生成XOR门数据集时遇到了问题。当我打印数据集时,发现数据有误,但找不出错误所在。代码看起来没有任何问题。但我对torch还不熟练,所以可能会犯错。

所以,这里是我的代码

input = torch.Tensor (4,2) input:random(0,1)output = torch.Tensor(1)dataset={};function dataset:size() return 4 end for i=1,dataset:size() do   if input[i][1]==input[i][2] then    output[1] = 0  else    output[1] = 1  end  print("original")  print(input[i][1].." "..input[i][2].." "..output[1]) -- the values that are going to dataset  dataset[i] = {input[i], output}  print("dataset")  print(dataset[i][1][1].." "..dataset[i][1][2].." "..dataset[i][2][1])  -- for double checking i read from dataset againendprint("Why dataset is different now?")for i=1,4 do    print(dataset[i][1][1].." "..dataset[i][1][2].." "..dataset[i][2][1]) -- So, why this is different?    end

如你所见,我打印了插入到dataset列表中的值,并再次从dataset中读取以进行双重检查。

最后,我在完全插入后再次从dataset中检查。数据集不知为何发生了变化。我运行了几次,每次结果都不同。像是卡在1或0上。

所以,这里是我的输出

original    1 0 1   dataset 1 0 1   original    0 0 0   dataset 0 0 0   original    1 1 0   dataset 1 1 0   original    0 0 0   dataset 0 0 0   Why dataset is different now?   1 0 0   0 0 0   1 1 0   0 0 0   

如你所见,格式是这样的

input input output

当我从input[i]output中读取时,我打印了原始值。

当我从dataset中读取插入后的值时,我打印了数据集的值。

你也可以看到,当我打印第一组值时,它们是不同的。它应该是1 0 1,但却是1 0 0。

我找不到代码中的错误。有人能帮我吗?如果问题不清楚,请告诉我。


回答:

问题出在这里:dataset[i] = {input[i], output}
你没有保存计算结果,你保存的是对值的引用,而这个值在后续的’xor’函数计算中会被改变。
自然,当你读取结果时,你总是得到同一个数字 – 最后写入output[1]的结果
要解决这个问题,可以将output变量改为存储实际的临时值(而不是表),或者至少在保存到dataset[i]时从output表中读取实际值,不要只是保存到表的链接,这样你不会得到深拷贝。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注