簡體   English   中英

Keras自定義Lambda層張量操縱錯誤

[英]Keras Custom Lambda Layer Tensor Manipulation Error

我正在嘗試創建一個lambda層,該層將在輸出最終輸出之前執行一些確定性的遮罩(我不是在談論Keras遮罩層)。 這是我到目前為止的內容:

def binary_mask(x):
    # Mask is half the size of x. 
    # 1 if pred1 > pred2 element-wise, 0 otherwise.

    pred1, pred2 = tf.split(x, 2, 1)
    mask = tf.greater(pred1, pred2)
    mask = tf.to_float(mask)
    return mask

def mask_output_shape(input_shape):
    return (input_shape[0], units)

這就是我使用功能性API創建圖層的方式:

outputs = Lambda(binary_mask, output_shape=mask_output_shape)(inputs) 

我收到來自優化器的非常奇怪的錯誤。 看來我的漸變是None

但是,如果我用任何示例Lambda層實現替換了binary_mask當前代碼,則可以正常工作,例如return x 我在這里做錯了什么?

我相當確定我的mask實際上是一個有效的張量流張量。

恐怕我不太了解將inputs轉換為0和1的向量的目的,但是此操作顯然不可區分。 這就是為什么沒有返回梯度(即,梯度為None )的原因。

也許您可以為此功能嘗試“更軟”的版本。 例如, 1 if a > b else 0 ,則sigmoid(a - b)可以是1的較軟版本。

outputs = Lambda(lambda x: K.sigmoid(x[0] - x[1]))([pred1, pred2]) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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