Python Keras自定义Lambda层张量操作错误

Python Keras自定义Lambda层张量操作错误,python,lambda,tensorflow,deep-learning,keras,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)

我试图创建一个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) 
我的优化器出现了一个非常奇怪的错误。似乎我的渐变是

但是,如果我用任何示例
Lambda
层实现替换
binary\u mask
中的当前代码,它工作正常,例如
返回x
。我做错了什么


我很确定我的
掩码
实际上是一个有效的张量流张量。

恐怕我不太明白将
输入
转换为0和1的向量的目的,但这个操作显然是不可微的。这就是为什么不返回渐变(即渐变为
None

也许你可以试试这个功能的“软”版本。例如,
sigmoid(a-b)
可以是
1的软版本,如果a>b否则为0

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

我有点明白你在说什么。但我的目标输出是0和1的向量。为什么这仍然是一个问题?为了使反向传播有效,每一层的输出应该是可微的w.r.t.它的输入。一般来说,如果你有一个“想法”,需要在某些层上进行不可微的运算,你可以尝试用一个“软版本”来代替它进行梯度计算。