我为MNIST分类创建了自定义
tf.Estimator
(一些卷积,辍学,批量标准化)我想 使用export_savedmodel
保存它(比如预测)。 一切都有效,除了保存部分。从我收集的网络和文档中我必须指明
serving_input_fn
和tf.estimator.PredictOutput
,但我是 我无法理解所有这些(文件和文件) 示例看起来也很稀疏。关于问题的信息:
我收到错误:
ValueError: labels must not be None.
输入图层形状:
input_layer = tf.reshape(features['x'], [-1, 28, 28, 1])
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)
预测输出功能:
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)
- 醇>
保存模型(经过培训和评估后):
classifier.export_savedmodel( './custom_model', serving_input_receiver_fn=serving_input_receiver_fn)
出口所需的正确代码将受到高度赞赏(我' m 厌倦了这个图书馆的不直观的设计,所以如果你过去了 斗争请救救我:()。关于原因的一些解释 这个不直观的事情必须去那里也很棒。
如果您需要一些其他信息,我会提供这些信息。
链接到堆栈跟踪:
https://gist.github.com/vyzyv/885e7e63520332e5ee42f4bc332a877f
问题解决方案:
可以为其他人提供有用的信息:不计算tf.Estimator中的预测模式损失(@AlexandrePassos解决方案,请参阅注释)。