Keras Custom Lambda Layer Tensor Manipulation Error

时间:2017-07-22 03:41:33

标签: python lambda tensorflow deep-learning keras

我试图在抽出最终输出之前创建一个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

但是,如果我将binary_mask中的当前代码替换为任何示例Lambda图层实现,则它可以正常工作,例如return x。我在这做错了什么?

我相当确定我的mask实际上是一个有效的张量流量张量。

1 个答案:

答案 0 :(得分:0)

我担心我不太明白将inputs转换为0和1的向量的目的,但这种操作显然不可区分。这就是为什么没有返回渐变的原因(即渐变是None)。

也许你可以试试"更柔软的"此功能的版本。例如,sigmoid(a - b)可以是1 if a > b else 0的更软版本。

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