怎么把Fashion MNIST转换成Dataset class?

时间:2019-03-03 21:04:59

标签: python tensorflow

我正在学习Tensorflow,并想将next_batch用于Fashion-MNIST数据集。但是我遇到了麻烦,因为Fashion-MNIST的数据集的格式与MNIST数据的格式不同。

对于常规MNIST,我们可以使用以下代码导入数据:

import tensorflow as tf

from tensorflow.examples.tutorials.mnist import input_data as ip
mnist = ip.read_data_sets("MNIST_data/", one_hot=True)

但是Tensorflow教程(URL:https://www.tensorflow.org/tutorials/keras/basic_classification)像这样导入Fashion-MNIST:

fashion_mnist = keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) =  fashion_mnist.load_data()

我想通过以下特定代码行使用Fashion-MNIST:

 batch_xs, batch_ys = fashion_mnist.train.next_batch(100)

但是当我使用Tensorflow教程的数据导入方法尝试该操作时,出现此错误:

 AttributeError: module 'tensorflow._api.v1.keras.datasets.fashion_mnist' has no attribute 'train'

我如何才能转换Fashion-MNIST或以其他方式导入它以使用此特定代码行?

2 个答案:

答案 0 :(得分:4)

是的,问题在于Keras内置数据集不是使用IntPtr data0, data1, data2定义的,但是如果您仍然想使用Dataset类(具有很多优点),则有几种方法(我知道)继续。

  1. 您可以创建自己的'Method's type signature is not PInvoke compatible类实例,就像在this tutorial中所做的那样
  2. 如果您使用的TensorFlow版本> = 1.12.0,则可以安装新的tensorflow-datasets库,该库还具有Fashion MNIST,并且已经以Dataset API的形式加载

我希望这会有所帮助!

编辑:只是注意到它不能完全回答您的问题。您将无法使用正在讨论的特定代码行,因为函数Dataset是在tf.Data.Datasets模块中为mnist特别是here定义的。但是您可以使用next_batch,它会遍历数据集并提供相同的功能。

答案 1 :(得分:2)

是的,时尚mnist没有next_batch或您可以使用生成器进行批处理迭代的东西:

fashion_mnist = keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) =  fashion_mnist.load_data()

batchs=(train_images[i*100:(i+1)*100],train_labels[i*100:(i+1)*100] for i in range(int(len(train_labels)/100)))

batch_xs, batch_ys=batchs.__next__()

但是您不需要在keras中将数据拆分为批次。 fit()方法具有一个batch_size参数