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