RETURNN 自定义层搜索模式断言错误

RETURNN Custom Layer Search Mode Assertion Error

我实现了自定义 RETURNN 层 (HMM Factorization),它在训练期间按预期工作,但在搜索模式下使用时会抛出断言错误。该层的输出与 softmax 层的输出相同。

这是使用的配置:transformer + HMM Factorization

这是使用最新版本的 RETURNN 测试的。

失败的确切行是 (code link):

assert fixed_seq_len is not None

这是 full error log(太大而无法粘贴到此处)

这是training initialisation

有人知道错误可能是什么吗?

谢谢!

这实际上是 RETURNN 中的错误。我创建了一个 pull request here 应该可以解决这个问题,并在现在合并它。

问题不在于您的自定义层,而在于您的 RecLayer 中的一个层,它实际上是完全独立的,即这个层:

'encoder_int': {'activation': None,
                'class': 'linear',
                'from': ['base:encoder'],
                'n_out': 1000,
                'with_bias': False}

它只依赖于一个基础层("base:encoder"),没有别的。所以它(正确地)从循环循环中优化了这一层,因为它是独立的。

但是,然后它看到您正在循环内访问这一层,并且由于这是一个随时间变化的循环,因此它假定此循环超过了 "base:encoder" 的时间维度。然后它尝试在给定 rec 层的 seq len 的情况下展开 "base:encoder" (TensorArray.unroll),但随后它失败了,因为此时它不知道 rec 层的 seq len。

我的修复现在做一些更高级的检查这个假设是否正确,即循环是否真的在同一时间维度上。虽然检查有点脆弱,但不确定它是否在所有情况下都能正常工作。但是,我创建了一个重现您的问题的测试用例,现在已修复。