在机器翻译数据集中,我已经在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
答案 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
是什么以及它来自哪里,否则我们无法为您提供更多帮助。