【问题标题】:Lua table insert get same elementLua表插入获得相同的元素
【发布时间】:2014-07-12 05:12:04
【问题描述】:

这是我的代码:

 30   for t = 1,testData:size() do
 33       -- get new sample
 34       local input = testData.data[t]
 35       if opt.type == 'double' then input = input:double()
 36       elseif opt.type == 'cuda' then input = input:cuda() end
 37       local target = testData.labels[t]
 38       -- test sample
 39       local pred = model:forward(input)
 40       test_result[t]=pred
 41       
 42       local err = criterion:forward(pred,target)
 43       te_error = te_error+err 
 44    end
 45    print(test_result[1])
 46    print(test_result[2])

我得到了相同的元素,所以我的表只存储了最后一个元素,为什么?

【问题讨论】:

  • model:forward 返回的是什么?它是否返回静态表?我假设您是说您在test_result 中为 all 条目获得相同的值,而不仅仅是这两个是相同的(因为在不知道数据的情况下,这两个肯定有可能合法地成为和我想的一样)。
  • HI pred 是一个浮点向量,它每次都会改变,但是当我将它们插入表格时,表格包含所有重复项
  • 你是如何测试你每次得到不同的向量的?您最终的向量值是第一个向量吗?一些随机向量?最后一个向量?
  • 我确实打印了每一步的“pred”,表格最后有许多最后的“pred”
  • 不应该testData.data[t]testData[t].data

标签: lua lua-table


【解决方案1】:

我打赌model:forward(input) 将返回一个全局表。所以所有的 testResult 都会指向同一个全局表。您可以在收到pred 后通过打印来检查这一点:如果是全局表,它将始终具有相同的“值”(指针)。验证model:forward 是否返回该函数的本地表。

【讨论】:

  • 每次 pred 都不一样,但保存/加载后都一样
  • @Coderzelf 你的意思是pred的内容不同还是pred的“指针”不同。您能否更新您的问题以显示从model:forwardcriterion:forward 返回后的 pred 的样子?
猜你喜欢
  • 2017-01-10
  • 2014-01-23
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多