【问题标题】:Creating a dataset like the MNIST format, with different classes?创建具有不同类的 MNIST 格式的数据集?
【发布时间】:2021-05-18 20:53:15
【问题描述】:

我希望使用自己的数据集构建分类模型。但我无法格式化要使用的数据集。它们当前位于子文件夹中,每个名称都是类。我想像 MNIST 数据集的格式一样创建我的数据集,但我无法这样做。例如,对于 MNIST,我们可以拆分数据集:

(train_images, train_labels), (
test_images,
test_labels) = tf.keras.datasets.mnist.load_data()

然后,例如,我可以展平数据:

train_images = train_images.reshape((train_images.shape[0], -1))
test_images = test_images.reshape((test_images.shape[0], -1))

如何将tf.keras.datasets.mnist.load_data() 替换为我自己的数据集,但格式与 MNIST 数据集相同?我也在做多类分类。

编辑:添加注释:

需要明确的是,我的主要任务是用我自己的数据集替换 MNIST 数据集:例如,我的子目录是这样的:

main_directory/
...class_a/
......a_image_1.jpg
......a_image_2.jpg
...class_b/
......b_image_1.jpg
......b_image_2.jpg
...class_c/
......c_image_1.jpg
......c_image_2.jpg
...class_d/
......d_image_1.jpg
......d_image_2.jpg

我尝试按照link 将我的数据集制作成 tf.keras 可以用来加载数据集的格式,类似于加载 MNIST 数据集的方式。我已经尝试生成一个 tf.data.Dataset。

    data_dir = "/datas"
data_dir = pathlib.Path(data_dir)
image_count = len(list(data_dir.glob('*/*.jpg')))
print(image_count)

cats = list(data_dir.glob('cats/*'))
PIL.Image.open(str(cats[0]))

batch_size = 32
img_height = 150
img_width = 150
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="training",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

val_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="validation",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

但我仍然无法将其转换为正确的格式,以修复上述代码。我看到的是关于转换为 numpy 数组,但我不知道该怎么做。

【问题讨论】:

  • 您尝试过什么,您的尝试出了什么问题?例如,来自 tensorflow 的 here are the docs 关于加载图像目录
  • 是的,所以我关注了这个链接:keras.io/api/preprocessing/image,尝试创建一个数据集,但后来我无法加载数据集并使用 .load_data() 函数。抱歉,但我对生成和生成数据集仍然很陌生。我猜 .load_data() 是他们已经制作的数据集。
  • MNIST 格式到底是什么?
  • 如果您 edit 您的问题包含 minimal reproducible example 显示您实际尝试的代码以及您遇到的具体问题,这将有所帮助,以便我们可以提供具体帮助
  • 当然,我已经添加了一些进一步的细节......

标签: python tensorflow keras tensorflow-datasets tf.keras


【解决方案1】:

一些软件包具有帮助功能,使用户可以轻松访问数据。正如您在 load_data() 函数的文档中看到的那样,它返回一个 Numpy 数组的元组:

(X_train, y_train), (X_test, y_test)

您可以通过将特征 (X) 和目标 (y) 排列为 numpy 数组来获得相同的结构,并将它们传递给 train_test_split() scikit-learn 函数。

【讨论】:

  • 如何处理图像,你能给我举个例子吗...谢谢。
  • 您在创建 train_ds 和 val_ds 时是否尝试过使用参数 label_mode='categorical'? trainds = tf.keras.preprocessing.image_dataset_from_directory(data_dir, label_mode='categorical', validation_split=0.2, subset="training", seed=123, image_size=(img_height, img_width), batch_size=batch_size)
  • 此视频详细解释了如何设置数据集以使用 Keras 训练 TensorFlow 模型
  • 抱歉是哪个视频?
  • 抱歉,忘记附上链接:youtube.com/watch?v=qFJeN9V1ZsI
猜你喜欢
  • 1970-01-01
  • 2019-09-07
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 2020-01-11
相关资源
最近更新 更多