函数'fwd_prop_enc'中的错误:试图调用全局“转发”(nil值)

时间:2018-10-11 19:12:36

标签: lua torch

在机器翻译数据集中,我已经在Lua中成功地对模型进行了预训练和训练。现在,我要预测模型了。

但是我在函数encoder_clones:forward(encoder_input)中的Lua文件中收到错误 错误:尝试调用全局“转发”(nil值)

这是特定功能:

function fwd_prop_enc(source, source_l, batch_l, train)
local rnn_state_enc = reset_state(init_fwd_enc, batch_l, 0)
--print(rnn_state_enc)
local context = context_proto[{{1, batch_l}, {1, source_l}}]
for t = 1, source_l do
if train then
  encoder_clones[t]:training()
else
  encoder_clones[t]:evaluate()
end
local encoder_input = {source[t], unpack(rnn_state_enc[t-1])}
local out = encoder_clones:forward(encoder_input)
print("yes")
rnn_state_enc[t] = out
context[{{},t}]:copy(out[#out]) -- copy final layer for t'th timestep    (for entire batch)
 end
  return rnn_state_enc, context
end

这是在主函数中的调用方式

local rnn_state_enc, context = fwd_prop_enc(source, source_l, 1, false) -- train=false

1 个答案:

答案 0 :(得分:0)

该错误表示函数encoder_clones.forward实际上不存在。

我不知道您使用的框架是什么,但是quick search透露encoder_clones可能是数组。在查看您的代码时,我注意到您对encoder_clones的引用位于for循环for t = 1, source_l do中。如果将encoder_clones:forward更改为encoder_clones[t]:forward会发生什么?这可能会解决您的问题。

如果这不能解决您的问题,能否告诉我们您使用的是什么框架?是OpenNMT吗?除非我们知道encoder_clones是什么以及它来自哪里,否则我们无法为您提供更多帮助。