StanfordNLP 的 TreeLSTM与具有 > 30K 实例的数据集一起使用时,会导致 LuaJit 出现“内存不足”错误。我正在使用LuaJit Data Structures解决这个问题。为了从 lua 的堆中获取数据集,需要将树放置在 LDS.Vector 中。
由于 LDS.Vector 保存 cdata,第一步是将 Tree 类型变成 cdata 对象:
local ffi = require('ffi')
ffi.cdef([[
typedef struct CTree {
struct CTree* parent;
int num_children;
struct CTree* children [25];
int idx;
int gold_label;
int leaf_idx;
} CTree;
]])
还需要在 read_data.lua 中进行一些小的更改来处理新的 cdata CTree 类型。到目前为止,使用 LDS 似乎是解决内存限制的合理方法。但是,CTree 需要一个名为“composer”的字段。
Composer 属于 nn.gModule 类型。要继续此解决方案,将涉及创建 nn.gModule 的 typedef 作为 cdata,包括为其成员创建 typedef。在继续之前,这似乎是正确的方向吗?有没有人有这个问题的经验?