У меня есть файл TFRecords, который содержит изображения с их метками, именем, размером и т. Д. Моя цель - извлечь метку и изображение в виде массива.
Для загрузки файла я делаю следующее:
def extract_fn(data_record):
features = {
# Extract features using the keys set during creation
"image/class/label": tf.FixedLenFeature([], tf.int64),
"image/encoded": tf.VarLenFeature(tf.string),
}
sample = tf.parse_single_example(data_record, features)
#sample = tf.cast(sample["image/encoded"], tf.float32)
return sample
filename = "path\train-00-of-10"
dataset = tf.data.TFRecordDataset(filename)
dataset = dataset.map(extract_fn)
iterator = dataset.make_one_shot_iterator()
next_element = iterator.get_next()
with tf.Session() as sess:
while True:
data_record = sess.run(next_element)
print(data_record)
Изображение сохраняется в виде строки.Как я могу преобразовать изображение в float32
?Я пытался sample = tf.cast(sample["image/encoded"], tf.float32)
, который не работает.Я хочу, чтобы data_record
был списком, содержащим изображение в виде numpy-массива и метку в виде np.int32
числа.Как я могу это сделать?
Прямо сейчас data_record
выглядит так:
{'image/encoded': SparseTensorValue(indices=array([[0]]), values=array([b'\xff\xd8\ ... 8G\xff\xd9'], dtype=object), dense_shape=array([1])), 'image/class/label': 394}
Я понятия не имею, как я могу с этим работать.Буду признателен за любую помощь
РЕДАКТИРОВАТЬ
Если я печатаю sample
и sample['image/encoded']
в extract_fn()
, я получаю следующее:
print(sample) =
{'image/encoded': <tensorflow.python.framework.sparse_tensor.SparseTensor object at 0x7fe41ec15978>, 'image/class/label': <tf.Tensor 'ParseSingleExample/ParseSingleExample:3' shape=() dtype=int64>}
print(sample['image/encoded'] =
SparseTensor(indices=Tensor("ParseSingleExample/ParseSingleExample:0", shape=(?, 1), dtype=int64), values=Tensor("ParseSingleExample/ParseSingleExample:1", shape=(?,), dtype=string), dense_shape=Tensor("ParseSingleExample/ParseSingleExample:2", shape=(1,), dtype=int64))
Кажется, что изображение является разреженным тензором и tf.image.decode_image
выдает ошибку.Как правильно извлечь изображение как тензор tf.float32
?