Skip to main content
 首页 » 编程设计

python之如何在 TensorFlow 中评估 CIFAR-10 期间获得类别概率

2024年09月07日29虾米哥

我尝试修改 code来自 Convolutional Neural Network TensorFlow Tutorial从每个测试图像中获取每个类的单一概率。

有什么替代 tf.nn.in_top_k我可以用吗?因为这个方法只返回一个 bool 张量。但我想保留个人值(value)观。

我使用的是 Tensorflow 1.4 和 Python 3.5,我认为第 62-82 行和第 121-129/142 行可能是要修改的行。有人给我提示吗?

第 62-82 行:

def eval_once(saver, summary_writer, top_k_op, summary_op): 
  """Run Eval once. 
  Args: 
    saver: Saver. 
    summary_writer: Summary writer. 
    top_k_op: Top K op. 
    summary_op: Summary op. 
  """ 
  with tf.Session() as sess: 
    ckpt = tf.train.get_checkpoint_state(FLAGS.checkpoint_dir) 
    if ckpt and ckpt.model_checkpoint_path: 
      # Restores from checkpoint 
      saver.restore(sess, ckpt.model_checkpoint_path) 
      # Assuming model_checkpoint_path looks something like: 
      #   /my-favorite-path/cifar10_train/model.ckpt-0, 
      # extract global_step from it. 
      global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1] 
    else: 
      print('No checkpoint file found') 
return 

第 121-129 + 142 行

    [....] 
    images, labels = cifar10.inputs(eval_data=eval_data) 
 
    # Build a Graph that computes the logits predictions from the 
    # inference model. 
    logits = cifar10.inference(images) 
 
    # Calculate predictions. 
    top_k_op = tf.nn.in_top_k(logits, labels, 1) 
    [....] 

请您参考如下方法:

您可以根据原始 logits 计算类别概率:

# The vector of probabilities per each example in a batch 
prediction = tf.nn.softmax(logits) 

作为奖励,以下是获得精确准确度的方法:

correct_pred = tf.equal(tf.argmax(logits, 1), tf.argmax(labels, 1)) 
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))