Получить входные данные (имена файлов) от итераторов набора данных tenorflow - PullRequest
0 голосов
/ 18 февраля 2019

Я использую наборы данных tenorflow для обучения модели.Список имен файлов взят набором данных, чтобы прочитать их во время сеанса, и я хотел бы получить имя файла вместе с изображением.Более подробно, у меня есть что-то вроде этого:

filenames = tf.constant(["/var/data/image1.jpg", "/var/data/image2.jpg", ...])
labels = tf.constant([0, 37, ...])
dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))
dataset.shuffle()

def _parse_function(filename, label):
  image_string = tf.read_file(filename)
  image_decoded = tf.image.decode_jpeg(image_string)
  image_resized = tf.image.resize_images(image_decoded, [28, 28])
  return image_resized, label

dataset = dataset.map(_parse_function)
iterator = dataset.make_one_shot_iterator()
X, Y = iterator.get_next()

sess = tf.Session()
sess.run(iterator.initializer)
while True:
  sess.run(X) #Here I want the element from filenames being used for X

Я думал, что эта информация может быть включена в iterator, но я не смог ее найти.

1 Ответ

0 голосов
/ 18 февраля 2019

Вам просто нужно сохранить имя файла вместе с данными изображения в наборе данных:

filenames = tf.constant(["/var/data/image1.jpg", "/var/data/image2.jpg", ...])
labels = tf.constant([0, 37, ...])
dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))
dataset.shuffle()

def _parse_function(filename, label):
  image_string = tf.read_file(filename)
  image_decoded = tf.image.decode_jpeg(image_string)
  image_resized = tf.image.resize_images(image_decoded, [28, 28])
  return filename, image_resized, label

dataset = dataset.map(_parse_function)
iterator = dataset.make_one_shot_iterator()
F, X, Y = iterator.get_next()

sess = tf.Session()
sess.run(iterator.initializer)
while True:
  sess.run(F, X)
...