在第一次模型更新后,用于元素明智乘法的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。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...