我实现了一个自定义RETURNN层(HMM分解),它在培训期间按预期工作,但在搜索模式中使用时抛出一个断言错误。该层的输出与softmax层的输出相同。
下面是所使用的配置:变压器+ HMM分解
使用RETURNN的最新版本对此进行了测试。
失败的确切行是(代码链接):
assert fixed_seq_len is not None这是全错误日志 (太大了,不能粘贴在这里)
这是培训初始化
有谁知道这个错误可能是什么吗?
谢谢!
发布于 2018-12-01 15:41:01
这实际上是RETURNN中的一个bug。我创建了一个拉请求这里来修复这个问题,并将其合并到现在。
问题不在于您的自定义层,而在于您的RecLayer中的一个层,它实际上是完全独立的,即这个层:
'encoder_int': {'activation': None,
'class': 'linear',
'from': ['base:encoder'],
'n_out': 1000,
'with_bias': False}它只是依赖于一个基本层("base:encoder"),而不是其他。因此它(正确地)从循环循环中优化这一层,因为它是独立的。
但是,它会看到您正在访问循环中的这个层,而且随着时间的推移,这是一个循环,它假设这个循环是在"base:encoder"的这个时间维度上。然后,它尝试在rec层的seq中展开"base:encoder" (TensorArray.unroll),但是它失败了,因为此时它不知道rec层的seq。
现在,我的修正做了一些更高级的检查,检查这个假设是否正确,即循环确实在同一时间维度上。不过,检查有点脆弱,而且不确定这在所有情况下是否正确。但是,我创建了一个测试用例,它复制了您的问题,现在已经修复了。
https://stackoverflow.com/questions/53569363
复制相似问题