Я тренирую простой CNN, основанный на Custom Estimator с TF Records.Я пытаюсь экспортировать лучшую модель с точки зрения потери проверки на этапе train_and_evaluate
.
В соответствии с документацией tf.estimator.BestExporter
, я должен передать функцию, которая возвращает ServingInputReceiver
, но после этого фаза train_and_evaluate
падает с NotFoundError: model/m01/eval; No such file or directory
.
Похоже, что BestExporter не позволяет сохранять результаты оценки, как это было бы без экспортера.Я пробовал с другими ServingInputReceiver
, но продолжаю получать ту же ошибку.
Как определено здесь :
feature_spec = {
'shape': tf.VarLenFeature(tf.int64),
'image_raw': tf.FixedLenFeature((), tf.string),
'label_raw': tf.FixedLenFeature((43), tf.int64)
}
def serving_input_receiver_fn():
serialized_tf_example = tf.placeholder(dtype=tf.string,
shape=[120, 120, 3],
name='input_example_tensor')
receiver_tensors = {'image': serialized_tf_example}
features = tf.parse_example(serialized_tf_example, feature_spec)
return tf.estimator.export.ServingInputReceiver(features, receiver_tensors)
и здесь
def serving_input_receiver_fn():
feature_spec = {
'image': tf.FixedLenFeature((), tf.string)
}
return tf.estimator.export.build_parsing_serving_input_receiver_fn(feature_spec)
Вот мой экспортер и процедура обучения:
exporter = tf.estimator.BestExporter(
name="best_exporter",
serving_input_receiver_fn=serving_input_receiver_fn,
exports_to_keep=5)
train_spec = tf.estimator.TrainSpec(
input_fn=lambda: imgs_input_fn(train_path, True, epochs, batch_size))
eval_spec = tf.estimator.EvalSpec(
input_fn=lambda: imgs_input_fn(eval_path, perform_shuffle=False, batch_size=1),
exporters=exporter)
tf.estimator.train_and_evaluate(ben_classifier, train_spec, eval_spec)
Это суть с выводом.Как правильно определить ServingInputReceiver
для BestExporter
?