2017-04-06 6 views
6

Bir model için bir AUC ölçümü uygulamaya çalışıyorum, böylece bir doğrulama setim model.fit() çalışması sırasında çalıştırdıktan sonra AUC ölçümü yapıyorum. Doğrulama veri kümesinin değerlendirmesini desteklemek için keeler için bir AUC metriğinin tanımlanması

Ben bu kadar metrik tanımlayın:

Bu anlıyorum bilmiyor musun aşağıdaki hatası
def auc(y_true, y_pred): 
    keras.backend.get_session().run(tf.global_variables_initializer()) 
    keras.backend.get_session().run(tf.initialize_all_variables()) 
    keras.backend.get_session().run(tf.initialize_local_variables()) 

    #return K.variable(value=tf.contrib.metrics.streaming_auc(
    # y_pred, y_true)[0], dtype='float32') 
    return tf.contrib.metrics.streaming_auc(y_pred, y_true)[0] 

. çevrimiçi okuma itibaren

tensorflow.python.framework.errors_impl.FailedPreconditionError: 
Attempting to use uninitialized value auc/true_positives... 

, sorunun 2 kat, çıkarsama yerel değişkenleri başlatamadı olmak tensorflow ile tensorflow/keras bulunan böcek ve kısmen ve sorunun olduğu görülmektedir. Bu 2 konu göz önüne alındığında, neden bu hatayı aldığımı veya nasıl üstesinden geleceğimi anlamıyorum. Baska öneri?

Tembel olmadığımı göstermek için, yalnızca iyi çalışan 2 başka metrik yazdım. Eğer auc tensörünü

def auc(y_true, y_pred): 
    auc = tf.metrics.auc(y_true, y_pred)[1] 
    K.get_session().run(tf.local_variables_initializer()) 
    return auc 

Bu sıfırlara TP, FP, TN, FN başlatır dönmeden önce

# PFA, prob false alert for binary classifier 
def binary_PFA(y_true, y_pred, threshold=K.variable(value=0.5)): 
    y_pred = K.cast(y_pred >= threshold, 'float32') 
    # N = total number of negative labels 
    N = K.sum(1 - y_true) 
    # FP = total number of false alerts, alerts from the negative class labels 
    FP = K.sum(y_pred - y_pred * y_true)  
    return FP/N 

# P_TA prob true alerts for binary classifier 
def binary_PTA(y_true, y_pred, threshold=K.variable(value=0.5)): 
    y_pred = K.cast(y_pred >= threshold, 'float32') 
    # P = total number of positive labels 
    P = K.sum(y_true) 
    # TP = total number of correct alerts, alerts from the positive class labels 
    TP = K.sum(y_pred * y_true)  
    return TP/P 

cevap

0

Sen() tf.initialize_local_variables çalıştırmanız gerekir. Bu, TP, FP, TN, FN değişkenlerinin her çalışmadan sonra sıfırlara inaktif hale getirilmesi gerektiğinden, hesaplamanın sadece ilk kez doğru auc skorunu vereceğini unutmayın.

İlgili konular