在函数 'fwd_prop_enc' 中出现错误 : 尝试调用全局变量'sforward' (空值)

我在机器翻译数据集中使用 Lua 成功地预训练和训练了我的模型。现在,我开始预测我的模型。

但是我在一个 Lua 文件中的函数 encoder_clones:forward(encoder_input) 中遇到了错误。 错误:尝试调用全局变量'forward'(空值)

以下是具体的函数:

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
点赞
用户8076767
用户8076767

那个错误意味着函数 encoder_clones.forward 实际上并不存在。

我不知道你在使用哪个框架,但是 快速搜索 显示 encoder_clones 可能是一个数组。看到你的代码后,我注意到你对 encoder_clones 的引用在一个循环 for t = 1, source_l do 中。如果你将 encoder_clones:forward 改为 encoder_clones[t]:forward,这可能会解决你的问题。

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

2018-10-19 13:16:42