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

标签 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

现在我想创建一个在字母“This”之间有空格的字符串,即“T h i s”。我也需要在开始和结束时留出间距。 我该怎么做?

我试过像下面这样遍历字符

for i in xrange(b.dense_shape[1]): # b.dense_shape[1] has the length of string
        x=b.values[i]

但是循环需要一个整数而不是张量。

关于如何完成上述任务的任何想法?我找不到与此相关的任何文档(除了 tf.string_split 函数)。欢迎提出任何建议。谢谢

最佳答案

您的问题是您正在尝试迭代不可迭代的 Tensor。此任务有一些替代方案,例如将其转换为 numpy 数组 eval()或使用 tf.map_fn .

如果你想威胁 b 作为 numpy array 你只需要在 .values 之前添加调用 .eval() 并按如下方式迭代结果:

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)

第二种选择更合适,因为它利用了 TensorFlow 的图形。它基于使用“映射”张量的函数。这可以按如下方式完成(在 fn 中您可以定义迭代的行为):

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())

关于python - Tensorflow - 检索字符串张量中的每个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44770980/

相关文章:

Python - 操作列表以创建另一个列表

python - 在keras自定义层中进行广播的逐元素乘法

python - 未实现错误 : numpy() is only available when eager execution is enabled

python-3.x - 在 Python3 中使用 Keras 优化 CNN 的架构

python - 用numpy中的另一个小矩阵替换矩阵的子部分

python - 并行处理 - 池 - Python

python - Python 中的单词数统计

python - 在具有负斜率的曲线上插值数据点

Tensorflow Keras Conv2D 多个过滤器

python - 我如何获得 TOCO tf_convert 的卡住 Tensorflow 模型的 input_shape