我有一个自定义损失,将所有欧几里德距离加到(Nx3)坐标矩阵中,在numpy中有一个实现,在keras中有一个实现,即使我使用完全相同的对应函数,它们也给出了不同的值。 numpy版本是应该计算的;谁能找出我的损失函数出了什么问题。
更新:经过进一步的实验,错误似乎是keras函数中的y_true-y_pred不是计算元素明智的减法,而是其他原因,我不确定为什么
编辑:已解决,这里的问题似乎与RNG有关,当我调用K.eval时,random_uniform似乎正在重置。
import keras.backend as K
import numpy as np
def euclidLoss(y_true, y_pred):
#ypred, ytrue are Nx3 cartesian coords
loss = K.sum(K.sqrt(K.sum(K.square(y_true - y_pred), axis = -1)))
return loss
#test
y_pred = K.random_uniform(shape=(1, 4, 3), minval = 0, maxval = 10)
y_true= K.random_uniform(shape=(1, 4, 3), minval = 0,maxval = 10)
np_true = K.eval(y_true)
np_pred = K.eval(y_pred)
kappa = (np_pred - np_true)
kappa_squared= np.square(kappa)
kappa_summed = np.sum(kappa_squared, axis = -1)
kappa_rooted = np.sqrt(kappa_summed)
print(np_true)
print(np_pred)
print(np.sum(kappa_rooted))
print(K.eval(euclidLoss(y_true, y_pred)))