Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于元素相乘的Lambda层在第一次模型更新后给出了nan。(凯拉斯)_Python_Keras_Model_Masking - Fatal编程技术网

Python 用于元素相乘的Lambda层在第一次模型更新后给出了nan。(凯拉斯)

Python 用于元素相乘的Lambda层在第一次模型更新后给出了nan。(凯拉斯),python,keras,model,masking,Python,Keras,Model,Masking,我的模型是用Keras编写的。它有多个输入,其中一个输入与倒数第二个密集层的输出相乘,然后再将logit输入softmax。通过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作为输

我的模型是用Keras编写的。它有多个输入,其中一个输入与倒数第二个密集层的输出相乘,然后再将logit输入softmax。通过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, 1, 1, 1, -100, 1, -100, 1, 1] # does not give nan
我也尝试过使用Keras提供的乘法层。但在第一次更新之后,这也会引发NaN。下面是一个相同的代码片段:

logits = Multiply()([dense_output, input_2]) # gives nan after first update
我基本上想通过这个与输入相乘的方法来屏蔽某些输出状态,但是如果层继续给出NaN作为输出,我就做不到

有什么办法解决这个问题吗?任何和所有的帮助将不胜感激

我不确定这是怎么回事,但我已经找到了解决办法。似乎在多层之前增加一个致密层就解决了这个问题。致密层是否可训练并不重要。代码如下:

logits = Multiply()([dense_output, input_2])
initializer = tf.keras.initializers.Identity()
masked_actions = Dense(num_actions, use_bias=False, 
                       trainable=False)(logits) #returns the same logits


模型更新现在按预期工作,没有抛出任何错误。

我不确定这是如何工作的,但我已经找到了解决方案。似乎在多层之前增加一个致密层就解决了这个问题。致密层是否可训练并不重要。代码如下:

logits = Multiply()([dense_output, input_2])
initializer = tf.keras.initializers.Identity()
masked_actions = Dense(num_actions, use_bias=False, 
                       trainable=False)(logits) #returns the same logits

模型更新现在可以按预期工作,而不会引发任何错误