кажется, что я столкнулся с проблемой в TF 1.11.
Я создаю действительно базовую оценочную программу, используя Estimator API:
import tensorflow as tf
import numpy as np
train_input_fn = tf.estimator.inputs.numpy_input_fn(
x={"x": np.zeros([100], np.float64)},
y=np.ones([100], np.float64),
num_epochs=None,
shuffle=True)
train_spec = tf.estimator.TrainSpec(
input_fn=train_input_fn,
max_steps=2)
def serving_input_receiver_fn():
serialized_tf_example = tf.placeholder(dtype=tf.float64,
shape=[None, ],
name='input_tensors')
receiver_tensors = {'x': serialized_tf_example}
return tf.estimator.export.ServingInputReceiver(
receiver_tensors, receiver_tensors)
exporter = tf.estimator.LatestExporter(
name="latest",
serving_input_receiver_fn=serving_input_receiver_fn,
exports_to_keep=5)
eval_spec = tf.estimator.EvalSpec(
input_fn=train_input_fn,
steps=1,
throttle_secs=30,
start_delay_secs=0,
exporters=exporter)
feature_x = tf.feature_column.numeric_column("x", shape=[1])
feature_columns = [feature_x]
model = tf.estimator.DNNClassifier(feature_columns=feature_columns,
hidden_units=[2],
activation_fn=tf.nn.relu,
n_classes=2,
model_dir="./aa/")
training_results, export_dirs = tf.estimator.train_and_evaluate(
model,
train_spec,
eval_spec)
Здесь я просто хочу, чтобы моя функция обслуживания имела видвведите тензор с именем x, который я бы вручную передал функции обслуживания.Однако когда я запускаю train_and_evaluate:
INFO:tensorflow:'serving_default' : Classification input must be a single string Tensor; got {'x': <tf.Tensor 'input_tensors:0' shape=(?,) dtype=float64>}
INFO:tensorflow:'classification' : Classification input must be a single string Tensor; got {'x': <tf.Tensor 'input_tensors:0' shape=(?,) dtype=float64>}
INFO:tensorflow:'regression' : Regression input must be a single string Tensor; got {'x': <tf.Tensor 'input_tensors:0' shape=(?,) dtype=float64>}
WARNING:tensorflow:Export includes no default signature!
Кто-нибудь знает, почему это происходит?AFAIK Я должен иметь возможность подключить пользовательскую функцию ввода для обслуживания, особенно в том, что в моем коде ничего не используется «тензоры пения строк», которые, как я полагаю, используются для обслуживания через TFRecords
Спасибо!