Tensorflow Serving 示例是否预期有 10% 的错误率?

Is Tensorflow Serving example expected to have 10% error rate?

我遵循了文档 Building an optimized serving binary then Testing the development environment,然后我得到了

Inference error rate: 10.4%

全新安装的 TensorFlow Serving 发布版本是否会在提供的示例模型上产生 10% 的错误率?

我的环境:

AWS EC2
OS: Amazon Linux AMI release 2018.03
Instance Type: r5.large

重现步骤:

# download tensorflow serving code
git clone https://github.com/tensorflow/serving
cd serving
# build optimized serving binary
docker build --pull -t $USER/tensorflow-serving-devel   -f tensorflow_serving/tools/docker/Dockerfile.devel .
# run & open shell for generated docker image
docker run -it -p 8600:8600 ec2-user/tensorflow-serving-devel:latest
# train the mnist model
python tensorflow_serving/example/mnist_saved_model.py /tmp/mnist_model
# serve the model
tensorflow_model_server --port=8500 --model_name=mnist --model_base_path=/tmp/mnist_model/ &
# test the client
python tensorflow_serving/example/mnist_client.py --num_tests=1000 --server=localhost:8500

Is Tensorflow Serving an example expected to have a 10% error rate?

是的,这个特定的例子预计有 10% 的错误率,因为这个模型在训练和测试数据上的准确性几乎相同(大约 90%),即,这是一个非常基本的神经网络,如图所示here

如果您想要良好的预测精度,您可能必须使用 resnet_client.py 或者您实际上可以添加更多层并调整超参数以获得更高的预测精度或更低的推理错误率。

给出了如何使用resent模型服务的教程here。这应该会给你一个更小的推理错误率。

作为 tensorflow_serving 示例一部分的示例 mnist_saved_model.py 更侧重于创建模型的速度,以及一个关于如何保存模型然后是准确性的简单示例。

https://www.tensorflow.org/tfx/serving/serving_advanced中表明,当上述代码经过100次迭代训练时,错误率为13.1%,经过2000次迭代训练时,错误率为9.5%。

如果未指定 --training_iteration,则默认值为 1000,因此您的 10.4 错误率与这些结果一致。

你会发现这个 mnist 模型提供了更好的准确性(并且需要更长的时间来训练):https://github.com/tensorflow/models/tree/master/official/mnist

此模型将对 mnist_client.py 示例稍作改动。

试试这个:

训练 mnist 模型

git clone https://github.com/tensorflow/models
export PYTHONPATH="$PYTHONPATH:$PWD/models"
pushd models/official/mnist/
python mnist.py --export_dir /tmp/mnist_model

为模特服务

tensorflow_model_server --port=8500 --model_name=mnist --model_base_path=/tmp/mnist_model/ &

切回原目录

popd

对 mnist_client.py 进行以下更改以使用新模型

diff --git a/tensorflow_serving/example/mnist_client.py b/tensorflow_serving/example/mnist_client.py
index 592969d..85ef0bf 100644
--- a/tensorflow_serving/example/mnist_client.py
+++ b/tensorflow_serving/example/mnist_client.py
@@ -112,8 +112,8 @@ def _create_rpc_callback(label, result_counter):
       sys.stdout.write('.')
       sys.stdout.flush()
       response = numpy.array(
-          result_future.result().outputs['scores'].float_val)
-      prediction = numpy.argmax(response)
+          result_future.result().outputs['classes'].int64_val)
+      prediction = response[0]
       if label != prediction:
         result_counter.inc_error()
     result_counter.inc_done()
@@ -143,9 +143,9 @@ def do_inference(hostport, work_dir, concurrency, num_tests):
   for _ in range(num_tests):
     request = predict_pb2.PredictRequest()
     request.model_spec.name = 'mnist'
-    request.model_spec.signature_name = 'predict_images'
+    request.model_spec.signature_name = 'classify'
     image, label = test_data_set.next_batch(1)
-    request.inputs['images'].CopyFrom(
+    request.inputs['image'].CopyFrom(
         tf.contrib.util.make_tensor_proto(image[0], shape=[1, image[0].size]))
     result_counter.throttle()
     result_future = stub.Predict.future(request, 5.0)  # 5 seconds

测试客户端

python tensorflow_serving/example/mnist_client.py --num_tests=1000 --server=localhost:8500

Inference error rate: 0.8%