Tensorflow - 检索字符串张量中的每个字符

Dhe*_*eri 8 python tensorflow

我正在尝试检索字符串张量中的字符以进行字符级别预测.基本事实是每个角色在字典中都有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函数).欢迎任何建议.谢谢

gar*_*des 7

你的问题是你试图迭代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)