Python 如何从tf.data.dataset.zip((图像、标签))中获取两个tf.dataset

Python 如何从tf.data.dataset.zip((图像、标签))中获取两个tf.dataset,python,tensorflow,mnist,Python,Tensorflow,Mnist,我正在编写Python/tensorflow/mnist教程 由于使用tensorflow网站的原始代码已经有几周了,我收到一条警告,图像数据集很快就会被弃用,我应该使用以下数据集: 我使用以下方式加载我的代码: from tensorflow.models.official.mnist import dataset trainfile = dataset.train(data_dir) 返回: tf.data.Dataset.zip((images, labels)) 问题是,我无法找到

我正在编写Python/tensorflow/mnist教程

由于使用tensorflow网站的原始代码已经有几周了,我收到一条警告,图像数据集很快就会被弃用,我应该使用以下数据集:

我使用以下方式加载我的代码:

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.dataset

知道tf.dataset由int32和float32组成,我尝试:

  train_data = trainfile.map(lambda x,y : x.dtype == tf.float32)
但它返回一个空的数据集

我坚持这样做(但将开放MIMED)(两个完整的图像和标签批次),因为这就是教程的工作方式:

我看到了很多从数据集中获取元素的解决方案,但没有看到从以下代码中执行的zip操作返回的解决方案

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

提前感谢您的帮助。

与其分成两个数据集,一个用于图像,另一个用于标签,不如制作一个迭代器,返回图像和标签

之所以选择此选项,是因为即使在进行了一系列复杂的洗牌、重新排序、筛选等操作之后,也可以更轻松地确保每个示例与其标签相匹配,就像在非平凡的输入管道中一样。

我希望这有助于:

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]

您可以可视化图像并找到其关联的标签

ds = tf.data.Dataset.from_tensor_slices((x_train, y_train))

ds = ds.shuffle(buffer_size=10).batch(batch_size=batch_size)
iter = ds.make_one_shot_iterator()
next = iter.get_next()

def display(image, label):
# display image
   ...
   plt.imshow(image)
   ...

with tf.Session() as sess:
    try:
        while True:
             image, label = sess.run(next) 
             # image = numpy array (batch, image_size)
             # label = numpy array (batch, label)
        display(image[0], label[0]) #display first image in batch
    except:
        pass

谢谢你们。这很有帮助。我阅读了更多关于迭代器的内容,并以更好的方式理解了这两个代码。您可以解压它们。一种方法是