如何将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”
注释
答案 0 :(得分:1)
Autograph不会将 any python代码转换为张量流操作。 (目前?)着重于控制流-尤其是while_loop
,这确实很重要。
因此,要在签名中拆分字符串,您仍然需要调用旧的tf.string_split
。
实际上,由于您的函数不包含任何控制流操作,因此并不能真正受益于签名功能。