Как получить два tf.dataset из tf.data.Dataset.zip ((изображения, метки)) - PullRequest
0 голосов
/ 21 октября 2018

Я работаю над учебником по Python / tenorflow / mnist.

Уже несколько недель, как я использую код orignal с веб-сайта tenorflow, я получаю предупреждение о том, что набор данных изображения скоро будет объявлен устаревшим, и я должен его использовать.следующий: https://github.com/tensorflow/models/blob/master/official/mnist/dataset.py

Я загружаю его своим кодом, используя:

from tensorflow.models.official.mnist import dataset
trainfile = dataset.train(data_dir)

, который возвращает:

tf.data.Dataset.zip((images, labels))

Проблема в том, что я не могу найтиМожно разделить их, например, следующим образом:

  trainfile = dataset.train(data_dir)
  train_data= trainfile.images
  train_label= trainfile.label

Но это явно не работает, потому что изображения и метка атрибута не существуют.trainfile является набором данных tf.dat.

Зная, что набор tf.dataset состоит из int32 и float32, я попытался:

  train_data = trainfile.map(lambda x,y : x.dtype == tf.float32)

Но он возвращает и пустой набор данных.

Iнастаивать (но будет открыто) делать это таким образом (две полные партии изображения и метки), потому что так работает учебник:

https://www.tensorflow.org/tutorials/estimators/cnn

Я видел многорешение для получения элементов из наборов данных, но не нужно возвращаться к zip-операциям, которые выполняются в следующем коде

tf.data.Dataset.zip((images, labels))

Заранее благодарим за помощь.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Надеюсь, это поможет:

inputs = tf.placeholder(tf.float32, shape=(None, 784), name='inputs')
outputs = tf.placeholder(tf.float32, shape=(None,), name='outputs')

#Prepare a tensorflow dataset
ds = tf.data.Dataset.from_tensor_slices((x_train, y_train))

ds = ds.shuffle(buffer_size=10, reshuffle_each_iteration=True).batch(batch_size=batch_size, drop_remainder=True).repeat()
iter = ds.make_one_shot_iterator()
next = iter.get_next()

inputs = next[0]
outputs = next[1]
0 голосов
/ 23 октября 2018

Вместо разделения на два набора данных, один для изображений и другой для меток, лучше создать один итератор, который возвращает и изображение, и метку.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...