Подтвердить что ты не робот

Преобразование строки TensorFlow в строку python

Мне известно, что в 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)                  
4b9b3361

Ответ 1

key, value = reader.read(filename_queue)

В этом Reader просто читает файл, который вы даете, поэтому значение - это содержимое файла, а не имя файла, но вы можете вывести ключ, после чего вы получите имя файла

Ответ 2

Если я правильно понимаю вашу проблему, вы можете попробовать:

print(filename.decode())

Ответ 3

Используйте функцию as_text в compat (из tenorflow.python.util), чтобы преобразовать строку байтов tenorflow. Т.е.

имя файла = compat.as_text (имя файла)

Ответ 4

В tenorflow 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'