Размещаем это здесь на случай, если это кому-нибудь поможет.Возможно отменить функциюification_output () в head.py (который используется dnn.py) для фильтрации результатов top-k.Вы можете вставить этот фрагмент в свой файл main.py / train.py, и всякий раз, когда вы сохраняете модель DNNClassifier, эта модель всегда будет выводить самое большее num_top_k_results при выполнении вывода / обслуживания.Подавляющее большинство метода скопировано из исходной функцииification_output ().(Обратите внимание, что это может или не может работать с 1.13 / 2.0, поскольку он не был протестирован на тех.)
from tensorflow.python.estimator.canned import head as head_lib
num_top_k_results = 5
def override_classification_output(scores, n_classes, label_vocabulary=None):
batch_size = array_ops.shape(scores)[0]
if label_vocabulary:
export_class_list = label_vocabulary
else:
export_class_list = string_ops.as_string(math_ops.range(n_classes))
# Get the top_k results
top_k_scores, top_k_indices = tf.nn.top_k(scores, num_top_k_results)
# Using the top_k_indices, get the associated class names (from the vocabulary)
top_k_classes = tf.gather(tf.convert_to_tensor(value=export_class_list), tf.squeeze(top_k_indices))
export_output_classes = array_ops.tile(
input=array_ops.expand_dims(input=top_k_classes, axis=0),
multiples=[batch_size, 1])
return export_output.ClassificationOutput(
scores=top_k_scores,
# `ClassificationOutput` requires string classes.
classes=export_output_classes)
# Override the original method with our custom one.
head_lib._classification_output = override_classification_output