簡體   English   中英

用於逐元素乘法的 Lambda 層在第一次模型更新后給出 NaN。 (凱拉斯)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM