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"存储在"类"并将其与实际标签进行比较。
答案 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)
我正在运行这段代码,以找出已正确分类的类数。可能不是最佳,但现在会做。