我正在使用torch7生成XOR门数据集。但是,当我打印数据集时,我看到数据是错误的,但我找不到错误。代码似乎没有任何问题。但我是新手,因此可能会发生错误。
所以,这是我的代码
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 again
end
print("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
当我从输入[i]和输出中读取时打印原稿。
我在插入数据集后读取数据集。
您还可以看到我打印时第一组值不同。它应该是1 0 1.但它是1 0 0。
我在代码中找不到错误。有人可以帮忙吗?如果问题不明确,请告诉我。
答案 0 :(得分:1)
问题在于:dataset[i] = {input[i], output}
您没有保存计算结果,而是保存对随后计算'xor'函数而更改的值的引用。
当然,当您读取结果时,您总是得到相同的数字 - 最后写的结果到output[1]
要修复它,要么更改output
变量以存储实际临时值(不是表),或者至少在保存到数据集[i]时从输出表中读取实际值,不要只保存到表的链接,你赢了'以这种方式获得深层复制。