定制丢失功能Keras

时间:2018-12-22 10:49:50

标签: python tensorflow keras

我对Keras和Tensorflow(作为后端)非常陌生。我想为图像点回归卷积神经网络创建自定义损失函数。

我的想法是,对于每个点,我都希望有均方误差,并且要为偏差增加一个惩罚。

因此公式如下所示: MSE(y_predicted,y_true)+ W(distance(p1,p2,p3)-trueDistance)

W =体重,所以错误的罚球距离是多少(将通过反复试验来调整) distance =返回点1和2之间的欧几里得距离除以1和3。 trueDistance是现实世界中已知的值。

我知道从点1到2的距离必须是1到3的距离的一半。所以trueDistance为1/2。

我将如何在Keras中实现这一目标?

现在我的方法是:

def squaredErrorAndDeviation(y_true, y_pred):
    loss = keras.losses.mean_squared_error(y_true, y_pred)
    loss = loss + deviation(y_true, y_pred)
    return loss

def deviation(y_true, y_pred):
    a = tf.Print(y_true, [y_true], message="This is a: ")
    print(a)
    print(tf.gather(y_true,1))
    print(y_pred[0])

问题和我的问题是:

这些打印语句返回:

    Tensor("loss/dense_1_loss/Print:0", shape=(?, ?), dtype=float32)
    Tensor("loss/dense_1_loss/GatherV2:0", shape=(?,), dtype=float32)
    Tensor("loss/dense_1_loss/strided_slice:0", shape=(14,), dtype=float32)

我将如何从这些张量中提取信息,然后计算指标,最后将其作为张量放回去?

感谢您的帮助!

0 个答案:

没有答案