TensorFlow字符串:它们是什么以及如何使用它们

发布于 2021-01-29 15:23:23

当我用读取文件时,tf.read_file我得到了类型的信息tf.string。文档只说这是“可变长度字节数组。张量的每个元素都是一个字节数组。”
https://www.tensorflow.org/versions/r0.10/resources/dims_types.html)。我不知道该怎么解释。

这种类型我什么也做不了。在通常的python中,您可以通过像这样的索引来获取元素my_string[:4],但是当我运行以下代码时,会出现错误。

import tensorflow as tf
import numpy as np

x = tf.constant("This is string")
y = x[:4]


init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
result = sess.run(y)
print result

它说

  在assert_has_rank中的第621行,文件“ /usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_shape.py”
    引发ValueError(“形状%s必须具有排名%d”%(自我,排名))
ValueError:Shape()必须具有等级1

我也不能将我的字符串转换为tf.float32张量。它是.flo文件,并且具有魔术头“
PIEH”。此numpy代码成功将此类标头转换为数字(请参见此处的示例https://stackoverflow.com/a/28016469/4744283),但是我无法使用tensorflow做到这一点。我尝试过tf.string_to_number(string, out_type=tf.float32)但是它说

tensorflow.python.framework.errors.InvalidArgumentError:StringToNumberOp无法正确转换字符串:PIEH

那么,什么是字符串?它的形状是什么?我至少如何获得字符串的一部分?我想,如果我能得到其中的一部分,我可以跳过“ PIEH”部分。

UPD :我忘了说这tf.slice(string, [0], [4])同样不能解决同样的错误。

关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    与Python不同的是,出于切片等目的,字符串可以被视为字符列表,而TensorFlow的tf.string值是不可分割的值。例如,x下面是一个Tensor带有形状的,(2,)其每个元素都是可变长度的字符串。

    x = tf.constant(["This is a string", "This is another string"])
    

    但是,为了实现您想要的,TensorFlow提供了tf.decode_raw运算符。它使用tf.string张量作为输入,但可以将字符串解码为任何其他原始数据类型。例如,要将字符串解释为字符张量,可以执行以下操作:

    x = tf.constant("This is string")
    x = tf.decode_raw(x, tf.uint8)
    y = x[:4]
    sess = tf.InteractiveSession()
    print(y.eval())
    # prints [ 84 104 105 115]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看