Tensorflow Contrib Metrics始终返回0.0

时间:2017-04-25 10:57:26

标签: python machine-learning tensorflow

我第一次尝试使用contrib指标,并没有设法让它们发挥作用。

以下是我尝试使用的指标以及它们的实施方式:

y_pred_labels = y[:, 1]
y_true_labels = tf.cast(y_[:, 1], tf.int32)

with tf.name_scope('auc'):    
    auc_score, update_op_auc = tf.contrib.metrics.streaming_auc(
        predictions=y_pred_labels, 
        labels=y_true_labels
    )
    tf.summary.scalar('auc', auc_score)

with tf.name_scope('accuracy_contrib'):  
    accuracy_contrib, update_op_acc = tf.contrib.metrics.streaming_accuracy(
        predictions=y_pred_labels, 
        labels=y_true_labels
    )
    tf.summary.scalar('accuracy_contrib', accuracy_contrib)

with tf.name_scope('error_contrib'):
    error_contrib, update_op_error = tf.contrib.metrics.streaming_mean_absolute_error(
        predictions=y_pred_labels, 
        labels=y_[:, 1] ## Needs to use float32 and not int32
    )
    tf.summary.scalar('error_contrib', error_contrib)

此代码完美执行,在执行期间我获得以下内容:

########################################
Accuracy at step 1000: 0.633333 # This is computed by another displayed not displayed above
Accuracy Contrib at step 1000: (0.0, 0.0)
AUC Score at step 1000: (0.0, 0.0)
Error Contrib at step 1000: (0.0, 0.0)
########################################

以下是输入数据的格式:

y_pred_labels = [0.1, 0.5, 0.6, 0.8, 0.9, 0.1, ...] #Represent a binary probability
y_true_labels = [1, 0, 1, 1, 1, 0, 0, ...] # Represent the true class {0 or 1}
y_[:, 1]      = [1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, ...] # Same as y_true_labels formated as float32

我认为我已经在official documentation中理解在某些情况下它是正常的行为......但是,我无法获得我的指标值。

其次,我注意到有两个指标被调用: streaming_accuracy streaming_auc ,它的行为方式与“非流式“准确度或auc指标?如有必要,有没有办法让它“非流媒体”?

1 个答案:

答案 0 :(得分:4)

我刚才遇到了同样的问题。并发现:

在运行update_op等指标操作时,您需要运行sess.run(update_op_auc)之类的sess.run(auc_score)