Keras损失函数:如何舍入?

时间:2019-08-13 12:36:49

标签: keras loss-function

我正在尝试识别顺序中的转折点,在这些转折点之后,某些过程的行为会有所不同。我使用keras模型来做到这一点。输入是序列(总是相同的长度),输出应该在转折点之前为0,在转折点之后为1。

我希望损失函数取决于实际转折点与预测转折点之间的距离。

我尝试四舍五入(获得标签0或1),然后求和1的总数,以得出转折点的“索引”。这里假设模型只给出一个转折点,因为数据(综合生成)也只有一个转折点。尝试过的是:

def dist_loss(yTrue,yPred):
    turningPointTrue = K.sum(yTrue) 
    turningPointPred = K.sum(K.round(yPred))
    return K.abs(turningPointTrue-turningPointPred)

这不起作用,给出以下错误:

  

ValueError:操作具有None用于渐变。请确定   您所有的操作都定义了渐变(即   可区分的)。不带渐变的常见操作:K.argmax,K.round,   埃瓦尔。

我认为这意味着K.round(yPred)给出奇异值,而不是矢量/张量。有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

round操作没有定义的梯度,因此完全不能在损失函数中使用,因为对于神经网络的训练,必须计算损失相对于权重的梯度,并且这意味着网络的所有部分和损耗必须是可微的(或者必须有可微的近似)。

在您的情况下,您应该尝试找到可微分的近似值,但是不幸的是,我不知道是否有一个近似值。这种近似的一个例子是softmax函数,即max函数的近似。