Python 如何从tf.data.dataset.zip((图像、标签))中获取两个tf.dataset
我正在编写Python/tensorflow/mnist教程 由于使用tensorflow网站的原始代码已经有几周了,我收到一条警告,图像数据集很快就会被弃用,我应该使用以下数据集: 我使用以下方式加载我的代码: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)) 问题是,我无法找到
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
谢谢你们。这很有帮助。我阅读了更多关于迭代器的内容,并以更好的方式理解了这两个代码。您可以解压它们。一种方法是