У меня есть данные в файле записи тензорного потока (data.record), и я, кажется, могу прочитать эти данные.Я хочу сделать что-то простое: просто отобразить (в кодировке png) изображение для данного примера.Но я не могу получить изображение в виде массива и просто показать его.Я имею в виду, данные там, как трудно это просто вытащить и показать?Я предполагаю, что упускаю что-то действительно очевидное.
height = 700 # Image height
width = 500 # Image width
file_path = r'/home/train.record'
with tf.Session() as sess:
feature = {'image/encoded': tf.FixedLenFeature([], tf.string),
'image/object/class/label': tf.FixedLenFeature([], tf.int64)}
filename_queue = tf.train.string_input_producer([data_path], num_epochs=1)
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)
parsed_example = tf.parse_single_example(serialized_example, features=feature)
image_raw = parsed_example['image/encoded']
image = tf.decode_raw(image_raw, tf.uint8)
image = tf.cast(image, tf.float32)
image = tf.reshape(image, (height, width))
Это, кажется, извлекло изображение из train.record
, с правильными размерами, но оно имеет тип tensorflow.python.framework.ops.Tensor
, и когда я пытаюсь построитьэто что-то вроде:
cv2.imshow("image", image)
Я просто получаю сообщение об ошибке: TypeError: Expected cv::UMat for argument 'mat'
.
Я пытался использовать eval
, как рекомендовано по ссылке ниже:
array = image.eval(session = sess)
Но это не сработало.Программа просто зависает в этой точке (например, если я поставлю ее после последней строки выше).
В более общем смысле кажется, что я что-то упускаю, потому что даже когда я пытаюсь получить метку класса:
label = parsed_example['label']
Я получаю то же самое: не значение, а объекттипа tensorflow.python.framework.ops.Tensor
.Я буквально вижу значение, когда я набираю имя в своей записной книжке ipython, но я не уверен, как получить доступ к как int (или как-то еще).
Обратите внимание, я попробовал это, у него есть некоторые методы, которые, кажется, напрямую преобразуют в массив numpy, но они не работают: https://github.com/yinguobing/tfrecord_utility/blob/master/view_record.py
Я только что получил ошибку there is no numpy method for a tensor object
.
Примечание. Я использую tenorflow 1.13, Python 3.7, работающий в Ubuntu 18. Я получаю одинаковые результаты, независимо от того, запускаю ли я из Spyder или из командной строки.
Смежные вопросы
- Как напечатать значение объекта Tensor в TensorFlow?
- https://github.com/aymericdamien/TensorFlow-Examples/issues/40