[英]Lambda Layer for element-wise multiplication gives NaNs after the first model update. (Keras)
我的模型是用 Keras 編寫的。 它有多個輸入,其中之一是在 logits 輸入 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, 1, 1, 1, -100, 1, -100, 1, 1] # does not give nan
我也嘗試過使用 Keras 提供的Multiply Layer 。 但這在第一次更新后也會拋出 NaN 。 這是相同的片段:
logits = Multiply()([dense_output, input_2]) # gives nan after first update
我基本上想通過與輸入相乘的方式來屏蔽某些輸出狀態,但如果層不斷提供 NaN 作為輸出,則無法做到。
有沒有辦法解決這個問題? 任何和所有幫助將不勝感激!
我不確定這是如何工作的,但我已經找到了解決方案。 看來在Multiply層前面加一個Dense層就解決了。 Dense 層是否可訓練並不重要。 這是代碼:
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
模型更新現在按預期工作,不會拋出任何 NaN ValueErrors。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.