如何更改在TensorFlow2.0中用于训练和评估的图像数量?

时间:2019-04-28 21:23:25

标签: tensorflow tensorflow-datasets mnist loaddata tensorflow2.0

Fashion-MNIST数据集自动返回60,000张图像进行训练,并返回10,000张图像进行评估。如何更改这些数字?

这是我的colab源代码,相关部分是:

fashion_mnist = keras.datasets.fashion_mnist

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

1 个答案:

答案 0 :(得分:3)

1。 Tensorflow数据集

TF2.0起,建议将tf.data API与tf.keras一起使用。 tf.data.Dataset作为前述的一部分,使您可以通过map调用轻松地对数据进行各种操作,例如图像增强(例如旋转/移位)(您可以找到其他可能性in the documentation)。 / p>

Tensorflow Datasets是Tensorflow生态系统的一部分,使您可以更轻松地下载数据(存在各种现成的数据集,包括Fashion MNIST see here为可用选项)并获取它格式为tf.data.Dataset

使用此代码段:

import tensorflow_datasets as tfds

train, test = tfds.load("fashion_mnist", as_supervised=True)

将下载数据并自动将其拆分为testtrain(与Keras等效,除了数据类型)。

您可以创建自己的数据集构建器,尽管通常只需调用tfds.load就可以进行标准操作。

自定义拆分

现在,如果要进行其他拆分(而不是默认的60000训练和10000测试),则可以使用tfds.Split对象进行定义。默认情况下,每个提供的数据集(因此包括您的Fashion MNIST)都提供默认的tfds.Split.TRAINtfds.Split.TEST(有些还提供tfds.Split.VALID)。

这些默认拆分可以通过各种方式进一步细分为子部分:

TESTTRAIN中的一个拆分为N个部分。下面的代码将仅从TRAIN下载30.000张图片,从测试中下载5.000张图片:

import tensorflow_datasets as tfds

train_half_1, train_half_2 = tfds.Split.TRAIN.subsplit(2)
test1, test2, test3, test4 = tfds.Split.TEST.subsplit(4)

train_first_half = tfds.load("fashion-mnist", split=train_half_1)
test_second_quarter = tfds.load("fashion-mnist", split=test2)

以类似的方式,您可以获取每个拆分的N%:

first_10_percent = tfds.Split.TRAIN.subsplit(tfds.percent[:10])

或者您甚至可以合并拆分以获取更多这样的数据(您可以根据需要进一步拆分这些数据:

train_and_test = tfds.Split.TRAIN + tfds.Split.TEST

2。凯拉斯

Keras以numpy格式加载数据,尽管不建议这样做,并且不允许人们用简单的map执行许多操作,但您可以使用standard Python's slicing notation拆分数据:

import tensorflow as tf

fashion_mnist = tf.keras.datasets.fashion_mnist

(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()

# First 10.000 elements from train
X_train_subset = X_train[:10000]

# Elements from 1000 to 5000 from test labels
y_test_subset = y_test[1000:5000]

# Elements from 8500 to the end of test data
X_test_subset = X_test[8500:]

另一方面,对于某些应用程序(尤其是更多非标准的应用程序),使用numpy数组而不是tf.data.Dataset可能更方便,所以选择就是您自己。