使用 export_saved_model 导出张量流图

Export tensorflow graph with export_saved_model

我正在尝试训练和部署简化的 Quick, Draw!来自 here on Google Cloud. I've managed to train model in GC, now stuck at deploying it, more precisely, at creating serving input functions.

的分类器

我正在按照 here 的说明进行操作,并且在尝试理解输入张量应该是什么类型时遇到了困难。

错误:

TypeError: Failed to convert object of type to Tensor. Contents: SparseTensor(indices=Tensor("ParseExample/ParseExample:0", shape=(?, 2), dtype=int64), values=Tensor("ParseExample/ParseExample:1", shape=(?,), dtype=float32), dense_shape=Tensor("ParseExample/ParseExample:2", shape=(2,), dtype=int64)). Consider casting elements to a supported type.

服务功能:

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

功能说明:

feature_spec = {
    "ink": tf.VarLenFeature(dtype=tf.float32),
    "shape": tf.FixedLenFeature([2], dtype=tf.int64)
}

输入层:

def _get_input_tensors(features, labels):
  shapes = features["shape"]
  lengths = tf.squeeze(
    tf.slice(shapes, begin=[0, 0], size=[params.batch_size, 1]))
  inks = tf.reshape(features["ink"], [params.batch_size, -1, 3])

  if labels is not None:
    labels = tf.squeeze(labels)
  return inks, lengths, labels

模型代码和训练数据被取用here

试试这个:

def serving_input_receiver_fn():
  ink = tf.placeholder(dtype=tf.float32, shape=[None, None, 3], name='ink')
  length = tf.placeholder(dtype=tf.int64, shape=[None, 1])
  features = {"ink": inks, "length": lengths}
  return tf.estimator.export.ServingInputReceiver(features, features)

一个示例负载是:

{"instances": [{"ink": [[0.1, 1.0, 2.0]], "length":[[1]]}]}

或作为 gcloud predict --json-instances 的输入:

{"ink": [[0.1, 1.0, 2.0]], "length":[[1]]}]

我没有查看实际代码;如果墨水通常会容纳很多浮点数,您可能需要考虑替代编码系统。