我正在使用Pearson Correlation作为我的损失函数训练深度神经网络。要计算预测和标签(每批)之间的皮尔森相关性(p
),我有两种方法:
p
并将它们相加,然后将其除以批量大小以获得平均值p
。p
:将所有预测展平为x
,标记为y
,并计算p = pearson_loss(x,y)
。 例如,输入:
X = [[1,2],[3,4]]
和Y = [[-1,-2],[-3,-4]]
。
p1 = pearson_loss([1,2],[-1,-2])
,然后计算第二行p2 = pearson_loss([3,4],[-3,-4])
,并获得平均p = (p1+p2)/2.
p = pearson_loss([1,2,3,4], [-1,-2,-3,-4])
这两种方法有很大区别吗?
PS: 在Tensorflow中,我使用Keras定义了皮尔逊损失(使用方法2):
def pearson_loss(x, y):
mx = K.mean(x)
my = K.mean(y)
xm, ym = x-mx, y-my
r_num = K.sum(tf.multiply(xm,ym))
r_den = K.sqrt(tf.multiply(K.sum(K.square(xm)), K.sum(K.square(ym))))
r = r_num / r_den
# ensure r is in range
r = K.maximum(K.minimum(r, 1.0), -1.0)
return -r