如何解决在第一次模型更新后,用于元素明智乘法的Lambda层将提供NaN Keras
我的模型是用Keras编写的。它具有多个输入,在将logit馈入softmax之前,其中之一要与倒数第二个Dense层的输出相乘。通过Lambda层执行此元素明智的乘法。
def mul(x,mask):
output = x*mask
return output
logits = Lambda(lambda x: mul(x,input_2))(dense_output) # gives nan after first update
首次更新模型后,Lambda层开始提供NaN作为输出。
如果我在计算图中定义的常数向量与密集层的输出相乘,则不会发生这种情况。
logits = dense_output * [1,1,-100,1] # does not give nan
我也尝试过使用Keras提供的乘法层。但这也会在第一次更新后抛出NaN。这是相同的代码段:
logits = Multiply()([dense_output,input_2]) # gives nan after first update
我基本上想通过与输入的乘法来掩盖某些输出状态,但是如果该层继续提供NaN作为输出,则无法做到这一点。
有什么办法解决这个问题?任何帮助都将不胜感激!
解决方法
我不确定这是如何工作的,但是我找到了解决方案。似乎在Multiply层的前面添加了Dense层可以解决此问题。密集层是否可训练都无关紧要。这是代码:
__COMPAT_LAYER
模型更新现在可以按预期运行,而不会引发任何NaN ValueErrors。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。