我已经实现了一个自定义的RETURNN层(HMM Factorization),该层在训练期间可以按预期工作,但是在搜索模式下使用时会引发断言错误。该层的输出与softmax层的输出相同。
以下是使用的配置:transformer + HMM Factorization
这已使用最新版本的RETURNN进行了测试。
失败的确切行是(code link):
assert fixed_seq_len is not None
这里是full error log(太大了,无法粘贴到此处)
有人知道该错误可能是什么吗?
谢谢!
答案 0 :(得分:0)
这实际上是RETURNN中的错误。我创建了一个拉取请求AWS SES,该请求应该可以解决,并现在将其合并。
问题不在于您的自定义图层,而是RecLayer内部的一个图层,该图层实际上是完全独立的,即:
'encoder_int': {'activation': None,
'class': 'linear',
'from': ['base:encoder'],
'n_out': 1000,
'with_bias': False}
这仅取决于一个基本层("base:encoder"
),仅此而已。因此,由于它是独立的,因此它(正确地)优化了循环循环之外的这一层。
但是,然后它会看到您正在循环中访问此层,并且由于这是一个时间上的循环,因此假定该循环超出了"base:encoder"
的时间范围。然后,它在给定rec层的序列长度的情况下尝试展开"base:encoder"
(TensorArray.unroll
),但随后失败,因为此时它不知道rec层的序列长度。
我的修复程序现在进行了一些更高级的检查,以确定此假设是否正确,即循环确实在同一时间范围内。该检查虽然有点脆弱,但不确定在所有情况下是否都能正常工作。但是,我创建了一个重现您的问题的测试用例,现在已解决。