我对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)
我将如何从这些张量中提取信息,然后计算指标,最后将其作为张量放回去?
感谢您的帮助!