在torch7上意外的行为

时间:2016-02-01 17:11:04

标签: lua machine-learning neural-network torch luajit

我正在使用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。

我在代码中找不到错误。有人可以帮忙吗?如果问题不明确,请告诉我。

1 个答案:

答案 0 :(得分:1)

问题在于:dataset[i] = {input[i], output}
您没有保存计算结果,而是保存对随后计算'xor'函数而更改的值的引用。
当然,当您读取结果时,您总是得到相同的数字 - 最后写的结果到output[1]
要修复它,要么更改output变量以存储实际临时值(不是表),或者至少在保存到数据集[i]时从输出表中读取实际值,不要只保存到表的链接,你赢了'以这种方式获得深层复制。