Keras:处理定制pearson相关度量的批大小维度

2024-06-02 09:25:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为皮尔逊相关性创建一个自定义度量as defined here

我不确定如何将它精确地应用于y_pred和{}的批处理

我所做的:

def pearson_correlation_f(y_true, y_pred):

    y_true,_ = tf.split(y_true[:,1:],2,axis=1)
    y_pred, _ = tf.split(y_pred[:,1:], 2, axis=1)

    fsp = y_pred - K.mean(y_pred,axis=-1,keepdims=True)
    fst = y_true - K.mean(y_true,axis=-1, keepdims=True)

    corr = K.mean((K.sum((fsp)*(fst),axis=-1))) / K.mean((
      K.sqrt(K.sum(K.square(y_pred - 
      K.mean(y_pred,axis=-1,keepdims=True)),axis=-1) * 
      K.sum(K.square(y_true - K.mean(y_true,axis=-1,keepdims=True)),axis=-1))))

return corr

我有必要使用keepdims并手动处理批处理维度,然后对其进行平均值处理吗?或者Keras会自动这么做吗?在


Tags: true度量tfasmeansplitsumfst
1条回答
网友
1楼 · 发布于 2024-06-02 09:25:14

当使用不带轴的K.mean时,Keras会自动计算整个批的平均值。在

而且后端已经有了标准偏差函数,所以使用它们可能更干净(也许更快)。在

如果您的真实数据的形状是(BatchSize,1),我会说keep_dims是不必要的。否则我不确定,最好测试一下结果。在

(我不明白您为什么要使用split,但似乎也没有必要)。在

所以,我想试试这样的方法:

fsp = y_pred - K.mean(y_pred) #being K.mean a scalar here, it will be automatically subtracted from all elements in y_pred
fst = y_true - K.mean(y_true)

devP = K.std(y_pred)
devT = K.std(y_true)

return K.mean(fsp*fst)/(devP*devT)

如果每个功能的损失都是相关的,而不是将它们放在同一组中:

^{pr2}$

将这十个特性的结果相加或取其平均值是相同的,是另一个的10倍(这与keras模型不太相关,只影响学习率,但许多优化器很快就找到了解决办法)。在

相关问题 更多 >