Учебник по Tensorflow + Как извлечь классы и вероятность из объекта генератора

Код в учебнике по тензорному потоку MNIST создает словарь классов и вероятностей и возвращает объект 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 в цикле? Я пытаюсь подсчитать количество правильно классифицированных классов, приравнивая эти предсказанные идентификаторы классов к их первоначальному значению. Как мне этого добиться?

Это то, что я пытался.

 ##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 ответ

Я преобразовал объект EstimatorSpec в строку, а затем выполнил разбиение на ней, чтобы получить целое число class_id

for i in range(0,len(FileList)):
    x=FileList[i].split('\\')[5]        
    print(FileList[i]+"\nProbability:")
    y=str(next(pred_results)).split(',')[0].split(":")[1].strip()
    print(y)
    if(int(x)==int(y)):#####
        c+=1                                            ######
    print("\n")

Я запускаю этот фрагмент кода, чтобы узнать, сколько классов было правильно классифицировано. Не может быть оптимальным, но пока подойдет.

Другие вопросы по тегам