torch7 的意外行为
Unexpected behavior at torch7
我正在使用 torch7 生成异或门数据集。但是当我打印数据集时,我发现数据是错误的,但我找不到错误。代码似乎没有任何问题。但我是 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 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。
我在我的代码中找不到错误。谁能帮忙?如果问题不清楚,请告诉我。
问题在这里:dataset[i] = {input[i], output}
您不是在保存计算结果,而是在保存对 'xor' 函数的后续计算更改的值的引用。
自然地,当您读取结果时,您总是得到相同的数字 -最后结果写入 output[1]
要修复它,要么更改 output
变量以存储实际的临时值(而不是 table),或者至少在保存到数据集 [i] 时从输出 table 读取实际值,不要只是将 link 保存到 table,这样你就不会得到深度复制。
我正在使用 torch7 生成异或门数据集。但是当我打印数据集时,我发现数据是错误的,但我找不到错误。代码似乎没有任何问题。但我是 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 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。
我在我的代码中找不到错误。谁能帮忙?如果问题不清楚,请告诉我。
问题在这里:dataset[i] = {input[i], output}
您不是在保存计算结果,而是在保存对 'xor' 函数的后续计算更改的值的引用。
自然地,当您读取结果时,您总是得到相同的数字 -最后结果写入 output[1]
要修复它,要么更改 output
变量以存储实际的临时值(而不是 table),或者至少在保存到数据集 [i] 时从输出 table 读取实际值,不要只是将 link 保存到 table,这样你就不会得到深度复制。