使用export_saved_model导出张量流图

时间:2018-11-13 16:13:35

标签: python tensorflow tensorflow-serving google-cloud-ml

我正在尝试训练和部署简化的Quick,Draw!来自Google Cloud here的分类器。我已经设法在GC中训练模型,现在更确切地说是在creating serving input functions处停留在部署模型。

我正在遵循here的指示,并且在尝试理解输入张量应为哪种类型时遇到困难。

错误:

  

TypeError:无法将类型的对象转换为Tensor。内容:SparseTensor(indices = Tensor(“ ParseExample / ParseExample:0”,shape =(?, 2),dtype = int64),values = Tensor(“ ParseExample / ParseExample:1”,shape =(?,),dtype = float32),density_shape = Tensor(“ ParseExample / ParseExample:2”,shape =(2,),dtype = int64))。考虑将元素强制转换为受支持的类型。

服务功能:

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

1 个答案:

答案 0 :(得分:1)

尝试一下:

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]]}]

我没有研究实际的代码;如果墨水通常会容纳很多浮标,则可能需要考虑使用其他编码系统。