Как насчет добавления двух разных экспортных подписей, каждая с разной головой? Тогда вы можете развернуть на двух разных конечных точках? Выберите URL для вызова в зависимости от того, хотите ли вы полный или частичный.
Напишите две обслуживающие функции ввода, по одной для каждого случая. В первом случае установите флаг равным нулю, а во втором случае установите флаг равным единице. Причиной использования ones_like и zeros_like является то, что у вас есть партия нулей и единиц:
def case1_serving_input_fn():
feature_placeholders = ...
features = ...
features['myflag'] = tf.zeros_like(features['other'])
return tf.estimator.export.ServingInputReceiver(features, feature_placeholders)
def case2_serving_input_fn():
feature_placeholders = ...
features = ...
features['myflag'] = tf.ones_like(features['other'])
return tf.estimator.export.ServingInputReceiver(features, feature_placeholders)
В вашей функции train_and_evaluate есть два экспортера:
def train_and_evaluate(output_dir, nsteps):
...
exporter1 = tf.estimator.LatestExporter('case1', case1_serving_input_fn)
exporter2 = tf.estimator.LatestExporter('case2', case2_serving_input_fn)
eval_spec=tf.estimator.EvalSpec(
input_fn = make_input_fn(eval_df, 1),
exporters = [exporter1, exporter2] )
tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)