2017-09-08 6 views
0

사용자 정의 피어슨 상관 관계 통계에 대한 처리 배치 크기 차원 무엇 내가 그랬어 : 나를 keepdims를 사용하여 수동으로 배치 차원을 처리하고 그 위에 평균을 적용하려면Keras : 나는 정의 내가 <code>y_pred</code>의 배치에 적용하는 방법을 정확히 모르겠어요 피어슨 상관 <a href="https://en.wikipedia.org/wiki/Pearson_correlation_coefficient" rel="nofollow noreferrer">as defined here</a></p> <p>에 대한 메트릭 및 <code>y_true</code></p> <p>를 만들

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 

가 필요합니까? 또는 Keras가 어떻게 든 자동으로이 작업을 수행합니까?

+0

'y_training' var의 모양은 무엇입니까? –

+0

죄송합니다 ... [batchsize x 10] – user3142067

+0

샘플 당 10 개의 기능이 있습니까? –

답변

2

축없이 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) 
:

#original shapes: (batch, 10) 

fsp = y_pred - K.mean(y_pred,axis=0) #you take the mean over the batch, keeping the features separate. 
fst = y_true - K.mean(y_true,axis=0) 
    #mean shape: (1,10) 
    #fst shape keeps (batch,10) 

devP = K.std(y_pred,axis=0) 
devt = K.std(y_true,axis=0) 
    #dev shape: (1,10) 

return K.sum(K.mean(fsp*fst,axis=0)/(devP*devT)) 
    #mean shape: (1,10), making all tensors in the expression be (1,10). 
    #sum is only necessary because we need a single loss value 

10 가지 기능의 결과를 합산하거나 그 평균을 취하는 것은 동일합니다. 다른 10 배입니다 (케라 모델과 관련이 없으므로 학습 속도에만 영향을 미치지 만 많은 옵티마이 저는 신속하게 이 주위에 eir 방법).