为了账号安全,请及时绑定邮箱和手机立即绑定

使用 export_saved_model 导出张量流图

使用 export_saved_model 导出张量流图

慕尼黑的夜晚无繁华 2021-08-17 09:52:25
我正在尝试训练和部署简化的 Quick, Draw!从分类在这里对谷歌的云。我已经设法在 GC 中训练模型,现在坚持部署它,更准确地说,是创建服务输入函数。我正在按照这里的说明进行操作,并且在尝试理解输入张量应该是什么类型时遇到了困难。错误:类型错误:无法将类型的对象转换为张量。内容: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))。考虑将元素转换为支持的类型。服务功能: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模型代码和训练数据取自这里。
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

试试这个:


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

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


查看完整回答
反对 回复 2021-08-17
  • 1 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信