如何在 tensorflow 2.0 中更改用于训练和评估的图像数量?

Posted

技术标签:

【中文标题】如何在 tensorflow 2.0 中更改用于训练和评估的图像数量?【英文标题】:How to change the number of images to use for training and evaluating in tensorflow2.0? 【发布时间】:2019-09-17 13:35:32 【问题描述】:

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()

【问题讨论】:

您可以在 tensorflow 数据 api 管道中执行此操作,或者简单地连接 numpy 数组,然后按您需要的任何比例拆分它们 【参考方案1】:

1。 TensorFlow 数据集

由于TF2.0,建议使用tf.data API 和tf.kerastf.data.Dataset 作为上述内容的一部分,您可以通过 map 调用轻松对数据进行各种操作,例如图像增强(例如旋转/移位)(您可以找到其他可能性 in the documentation)。

Tensorflow Datasets 是 Tensorflow 生态系统的一部分,可让您更轻松地下载数据(存在各种现成的数据集,包括 Fashion MNIST,see here 以获取可用选项)并将其放入 tf.data.Dataset已经形成了。

使用这个sn-p:

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 张图片,从 test 中下载 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 可能更方便,因此您可以自行选择。

【讨论】:

这里有一些代码可以做到这一点:(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data() train_images = train_images.reshape((60000, 28, 28, 1) ) test_images = test_images.reshape((10000, 28, 28, 1))

以上是关于如何在 tensorflow 2.0 中更改用于训练和评估的图像数量?的主要内容,如果未能解决你的问题,请参考以下文章

翻译: Keras 标准化:TensorFlow 2.0 中高级 API 指南

如何在 Tensorflow-2.0 中绘制 tf.keras 模型?

标准化 Keras:TensorFlow 2.0 高级 API 指南

如何在 tensorflow 2.0 w/keras 中保存/恢复大型模型?

如何在 tfds.load() 之后在 TensorFlow 2.0 中应用数据增强

如何在 Tensorflow 2.0 + Keras 中进行并行 GPU 推理?