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(太大而无法粘贴到此处)
有人知道错误可能是什么吗?
谢谢!
这实际上是 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。
我的修复现在做一些更高级的检查这个假设是否正确,即循环是否真的在同一时间维度上。虽然检查有点脆弱,但不确定它是否在所有情况下都能正常工作。但是,我创建了一个重现您的问题的测试用例,现在已修复。
我实现了自定义 RETURNN 层 (HMM Factorization),它在训练期间按预期工作,但在搜索模式下使用时会抛出断言错误。该层的输出与 softmax 层的输出相同。
这是使用的配置:transformer + HMM Factorization
这是使用最新版本的 RETURNN 测试的。
失败的确切行是 (code link):
assert fixed_seq_len is not None
这是 full error log(太大而无法粘贴到此处)
有人知道错误可能是什么吗?
谢谢!
这实际上是 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。
我的修复现在做一些更高级的检查这个假设是否正确,即循环是否真的在同一时间维度上。虽然检查有点脆弱,但不确定它是否在所有情况下都能正常工作。但是,我创建了一个重现您的问题的测试用例,现在已修复。