Tensorflow导出自定义Estimator(定义serving_input_fn和PredictOutput)

时间:2018-04-09 10:00:17

标签: python tensorflow machine-learning tensorflow-serving tensorflow-estimator

  

我为MNIST分类创建了自定义tf.Estimator   (一些卷积,辍学,批量标准化)我想   使用export_savedmodel保存它(比如预测)。   一切都有效,除了保存部分。

     

从我收集的网络和文档中我必须指明   serving_input_fntf.estimator.PredictOutput,但我是   我无法理解所有这些(文件和文件)   示例看起来也很稀疏。

     

关于问题的信息:

     
      
  1. 我收到错误:ValueError: labels must not be None.

  2.   
  3. 输入图层形状:input_layer = tf.reshape(features['x'], [-1, 28, 28, 1])

  4.   
  5. serving_input_fn我正在使用:

    def serving_input_receiver_fn():
        serialized_tf_example = tf.placeholder(
            dtype=tf.string, shape=[None], name='input_tensors')
        receiver_tensors = {'predictor_inputs': serialized_tf_example}
        feature_spec = {'x': tf.FixedLenFeature([28, 28, 1], tf.float32)}
        features = tf.parse_example(serialized_tf_example, feature_spec)
        return tf.estimator.export.ServingInputReceiver(features, 
                                                receiver_tensors) 

  6.   
  7. 预测输出功能:

    export_outputs = {
        'predict_output':
         tf.estimator.export.PredictOutput({
            'pred_output_classes': self.predictions,
            'prob': tf.nn.softmax(self.logits),
            }),
        } return tf.estimator.EstimatorSpec(
        mode=tf.estimator.ModeKeys.PREDICT,
        predictions={
            'class': self.predictions,
            'probabilities': tf.nn.softmax(self.logits),
        },
        export_outputs=export_outputs) 

  8.   
  9. 保存模型(经过培训和评估后):

    classifier.export_savedmodel(
        './custom_model', serving_input_receiver_fn=serving_input_receiver_fn) 

  10.         

    出口所需的正确代码将受到高度赞赏(我' m   厌倦了这个图书馆的不直观的设计,所以如果你过去了   斗争请救救我:()。关于原因的一些解释   这个不直观的事情必须去那里也很棒。

         

    如果您需要一些其他信息,我会提供这些信息。

链接到堆栈跟踪:

https://gist.github.com/vyzyv/885e7e63520332e5ee42f4bc332a877f

问题解决方案

可以为其他人提供有用的信息:不计算tf.Estimator中的预测模式损失(@AlexandrePassos解决方案,请参阅注释)。

0 个答案:

没有答案