Учебник по 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")
Я запускаю этот фрагмент кода, чтобы узнать, сколько классов было правильно классифицировано. Не может быть оптимальным, но пока подойдет.