TensorFlow字符串:它们是什么以及如何使用它们
numpy
python
tensorflow
6
0

当我用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

它说

  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_shape.py", line 621, in assert_has_rank
    raise ValueError("Shape %s must have rank %d" % (self, rank))
ValueError: Shape () must have rank 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 could not correctly convert string: PIEH

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

UPD :我忘了说tf.slice(string, [0], [4])也无法正常工作。

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

与Python不同的是,出于切片等目的,字符串可以被视为字符列表,而TensorFlow的tf.string是不可分割的值。例如,下面的x是形状(2,)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]
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号