2017-07-12 23 views
0

concordance index(c-index)と同等の損失関数を使用してニューラルネットワークを最適化することを試しています。私が使用したい損失関数は、(リンクにおけるラテックス式)であり、Y「は予測とyのベクトルであるテンソルフロー損失関数でマルチインデックス合計を計算する

{i=0}^N ∑{j=i}^N \sigma ( (y_i - y_j)(y'_i - y'_j))

は、サイズNのバッチのラベル​​のベクトルであり、\シグマでありますシグモイド関数私はTensorFlowでこれを実装できるようにしたいと思いますが、2つのインデックスの合計を表現する方法を見つけることはできません。

私はTensorFlowとKerasプリミティブで表現することができますが、成功しなかった別の形式に方程式を再配置しようとしました。私はKerasを使用しているので、KerasまたはTensorFlow実装はどちらも使用可能です。

ザPythonコードである

from itertools import permutations, combinations 
a = np.arange(4) 
a = a*100 

def loss_ci(y_true, y_pred): 
summ = 0. 
total=0 
for i in range(len(y_true)): 
    for j in range(i+1,len(y_true)): 
     summ += 1/(1+np.exp(-(y_true[i]-y_true[j]) * (y_pred[i]-y_pred[j]))) 
     total+=1 
return (summ)/total 

print("y_true\t\ty_pred\t\tc-index\tloss") 
for c in permutations(a,3): 
for d in combinations(a,3): 
    print(c, d, "\t{:.4f}".format(ci(c, d)), "\t{:.4f}".format(loss_ci(c, d))) 

答えて

0

損失は以下のコードに示すように、テンソルの流れを用いて計算することができる。

from itertools import permutations, combinations 
a = np.arange(4) 
a = a*100 

def loss_ci(y_true, y_pred): 
summ = 0. 
total=0 
for i in range(len(y_true)): 
    for j in range(i+1,len(y_true)): 
     summ += 1/(1+np.exp(-(y_true[i]-y_true[j]) * (y_pred[i]-y_pred[j]))) 


return (summ) 

def tf_loss_ci(y_true, y_pred): 
    Y = tf.constant(y_true) 
    _Y = tf.constant(y_pred) 
    S = tf.sigmoid(tf.multiply((Y[tf.newaxis,:]-Y[:,tf.newaxis]),(_Y[tf.newaxis,:]-_Y[:,tf.newaxis]))) 
    S = tf.reduce_sum(tf.matrix_set_diag(S,tf.zeros_like(Y)))/2 
    sess = tf.InteractiveSession() 
    tf.global_variables_initializer().run() 
    return S.eval() 

print("y_true\t\ty_pred\t\ttensorloss\tloss") 
for c in permutations(a,3): 
    for d in combinations(a,3): 
    print(c, d, "\t{:.4f}".format(tf_loss_ci(np.asarray(c, np.float32), np.array(d, np.float32))), "\t{:.4f}".format(loss_ci(c, d))) 
+0

おかげで、これはシグモイドのfuctionを実装していません。私は損失関数のnumpyバージョンを含めるように質問を編集しました。 (合計で除算する必要はありませんが、損失がC指数とどのように等しくなるかを示しています) –

+0

私の間違い..変更を加えました –

+0

それはうまくいきました、ありがとう –

関連する問題