张量流签名如何使用tf.placeholder作为函数参数?

时间:2018-09-16 13:31:31

标签: tensorflow

如何将tf.placeholder作为参数传递给由autograph转换的python函数?

from tensorflow.contrib import autograph

@autograph.convert()
def foo(s):
    sep = ' '
    res = s.split(sep)
    return sep.join(res)

x = tf.placeholder(tf.string, shape=[])
y = foo(x)

当我尝试使用tf.saved_model.simple_save导出图形时,出现以下错误:

  

tensorflow.contrib.autograph.pyct.transformer.AutographParseError:   AttributeError:Tensor(“ Placeholder:0”,shape =(),dtype = string)没有   属性拆分违规来源:s.split

print(autograph.to_code(foo))显示以下内容。我希望我可以编写一个将参数s处理为字符串而不是Tensor的python函数。

def tf__foo(s):
  try:
    with tf.name_scope('foo'):
      sep = ' '
      res = ag__.converted_call(s.split, True, False, {}, sep)
      return ag__.converted_call(sep.join, True, False, {}, res)
  except:
    ag__.rewrite_graph_construction_error(ag_source_map__)
  

回溯(最近通话最近):         文件“ /var/folders/jc/0jvly0mn6sb5rk92tst0rgnr0000gn/T/tmp5pj2fv2o.py”,   第7行,在tf__foo中           res = ag __。converted_call(s.split,True,False,{},sep)       AttributeError:“ Tensor”对象没有属性“ split”

注释

  • 导出图表以进行服务预测。因此,无需将数据提供给占位符。
  • Eager execution未启用 因为它与 tf.placeholder
  • 在tensorflow 1.10,python 3.5

1 个答案:

答案 0 :(得分:1)

Autograph不会将 any python代码转换为张量流操作。 (目前?)着重于控制流-尤其是while_loop,这确实很重要。

因此,要在签名中拆分字符串,您仍然需要调用旧的tf.string_split

实际上,由于您的函数不包含任何控制流操作,因此并不能真正受益于签名功能。