我试着识别出序列中的转折点,在这些点之后,某些过程表现出不同的行为。我用角膜模型来做这件事。输入是序列(总是相同的长度),输出应该是拐点之前的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.eval。
我认为这意味着K.round(yPred)给出了一个奇异值,而不是向量/张量。有人知道如何解决这个问题吗?
发布于 2019-08-13 05:03:55
round
运算没有定义的梯度,因此它不能在损失函数中使用,因为为了训练神经网络,必须计算相对于权值的损失梯度,这意味着网络和损失的所有部分都必须是可微的(或者必须有可微的近似)。
在你的例子中,你应该试图找到一个圆的近似值,这是可微的,但不幸的是,我不知道是否有。这种近似的一个例子是softmax函数作为极大函数的近似。
https://stackoverflow.com/questions/57477872
复制