Tensorflow教程+如何从生成器对象中提取类和概率

时间:2018-06-14 09:40:51

标签: python tensorflow deep-learning mnist

MNIST tensorflow tutorial中的代码创建了一个类和概率的字典,它返回一个EstimatorSpec对象,

predictions = {
    "classes": tf.argmax(input=logits, axis=1),
    "probabilities": tf.nn.softmax(logits, name="softmax_tensor")
}
if mode == tf.estimator.ModeKeys.PREDICT:
  return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions)

输出采用以下形式:

....
{'class_ids': 1, 'logits': array([-32976400., -30171870.], dtype=float32)}
{'class_ids': 1, 'logits': array([-32958380., -30386898.], dtype=float32)}
{'class_ids': 1, 'logits': array([-32940332., -30601930.], dtype=float32)}
{'class_ids': 1, 'logits': array([-32922300., -30816956.], dtype=float32)}
....

问题:如何在循环中访问和检索这些class_id值? 我试图通过将这些预测的类ID与其原始值等同来计算正确分类的类的数量。我怎样才能做到这一点?

这就是我的尝试。

 ##pred_results contains the EstimatorSpec object
  for i in range(0,len(FileList)):
    x=FileList[i].split('\\')[5]        # This gives me the actual class ID
    print(x+"\nProbability:")
    print(next(pred_results))
    if(int(x)==int(pred_results["classes"])): #POINT OF ERROR
        c+=1                                            ######
    print("\n")
  print(c)  
                ###

这个想法是为了得到预测的" 1"存储在"类"并将其与实际标签进行比较。

1 个答案:

答案 0 :(得分:0)

我将EstimatorSpec对象转换为字符串,然后对其执行拆分以获取整数class_id

struct unityAuthenticationRequest: Codable {
    var username : String
    var password : String
}

enum test  {
    case volume
    case num2
    case num3

    var codableParam: Encodable? {
        switch self {
        case .volume:
            return unityAuthenticationRequest(username: "uname", password: "pwrods")
        default:
            return nil
        }
    }
}

func saveObject<T:Encodable>(_ object: T) {
    let data = try? JSONEncoder().encode(object)
}

func dx<T: Codable>(fx: T) {
    let datax = try? JSONEncoder().encode(fx)
}

let r = test.volume
saveObject(r.codableParam)

我正在运行这段代码,以找出已正确分类的类数。可能不是最佳,但现在会做。