我正在尝试检索字符串张量中的字符以进行字符级别预测.基本事实是每个角色在字典中都有id的词.我有一个对应于字符串长度的张量.
现在,我必须得到字符串张量中的每个字符.在检查相关帖子之后,可以如下简单检索.示例字符串是"This"
a= tf.constant("This",shape=[1])
b=tf.string_split(a,delimiter="").values #Sparse tensor has the values array which stores characters
Run Code Online (Sandbox Code Playgroud)
现在我想在字母"This"即"T his"之间创建一个带空格的字符串.我也需要在开始和结束时间距.我该怎么做呢?
我试图迭代下面的字符
for i in xrange(b.dense_shape[1]): # b.dense_shape[1] has the length of string
x=b.values[i]
Run Code Online (Sandbox Code Playgroud)
但循环需要整数而不是张量.
关于如何完成上述任务的任何想法?我找不到任何与此相关的文档(除了tf.string_split函数).欢迎任何建议.谢谢
你的问题是你试图迭代Tensor,这是不可迭代的.此任务有一些替代方法,例如numpy使用eval()将其转换为数组或使用tf.map_fn.
如果您想要威胁,b因为numpy array您只需要在.eval()之前添加调用.values并迭代结果,如下所示:
with tf.Session() as sess:
a = tf.constant("This", shape=[1])
b = tf.string_split(a, delimiter="").values.eval()
for i in b:
print(i)
Run Code Online (Sandbox Code Playgroud)
第二种选择更合适,因为它利用了TensorFlow的图表.它基于使用"映射"Tensor的函数.这可以通过以下方式完成(fn您可以在其中定义迭代的de行为):
with tf.Session() as sess:
a = tf.constant("This", shape=[1])
b = tf.string_split(a, delimiter="").values
fn = lambda i: i
print(tf.map_fn(fn, b).eval())
Run Code Online (Sandbox Code Playgroud)