将TensorFlow字符串转换为python字符串

时间:2017-02-09 19:07:18

标签: python tensorflow

我知道在TensorFlow中,tf.string张量基本上是一个字节串。我需要使用tf.train.string_input_producer()存储在队列中的文件名进行一些操作。

下面显示了一个小片段:

 key, value = reader.read(filename_queue)
 filename = value.eval(session=sess)
 print(filename)

但是,作为字节字符串,它提供如下输出:

b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00C\x00\x08\x06\x06\x07\x06\x05\x08\x07\x07\x07\t\t\x08'

我尝试使用

转换
filename = tf.decode_raw(filename, tf.uint8)
filename = ''.join(chr(i) for i in filename)

然而,Tensor对象不可迭代,因此失败。

我哪里错了?

TensorFlow中缺少的特性是tf.string是否可以轻松转换为Python字符串,还是有其他一些我不知道的功能?

更多信息

filename_queue的编写如下:

train_set = ['file1.jpg', 'file2.jpg'] # Truncated for illustration
filename_queue = tf.train.string_input_producer(train_set, num_epochs=10, seed=0, capacity=1000)                  

5 个答案:

答案 0 :(得分:1)

key, value = reader.read(filename_queue)

在这里,Reader只读取你给出的文件,所以value是文件的内容,而不是文件名,但你可以输出密钥,然后你得到文件名

答案 1 :(得分:0)

如果我正确理解了您的问题,可以尝试:

print(filename.decode())

答案 2 :(得分:0)

使用compat中的as_text函数(来自tensorflow.python.util)来转换tensorflow的字节字符串。即

文件名= compat.as_text(文件名)

答案 3 :(得分:0)

在tensorflow 2.0.0中,可以通过以下方式完成:

import tensorflow as tf

my_str = tf.constant('Hello World')
my_str_npy = my_str.numpy()

print(my_str_npy)
type(my_str_npy)

这会将字符串张量转换为'bytes'类的字符串

答案 4 :(得分:0)

在数据集中,您可以通过tf.numpy_function包装器来实现

def get_img(path):
    path = bytes.decode(path) # called when use dataset since dataset is generator
    img = skimage.io.MultiImage(path)[-1]
    print(img.shape, type(img))
    return path

def wrap_get_img(path):  # turn tf.Tensor to tf.EagerTensor through the wrapper
    return tf.numpy_function(get_img, [path], [tf.string]) # [<tf.Tensor 'EagerPyFunc:0'


dataset = tf.data.Dataset.list_files("../prostate-cancer-grade-assessment/train_images/*.tiff") \
            .repeat()  \
            .shuffle(buffer_size=len(files)) \
            .map(wrap_get_img )    

for x in dataset:
    print(x) # Eager Tensor which can get string
    break