如何创建像MNIST数据集一样的图像数据集



我有10000张手写数字的BMP图像。如果我想把数据输入神经网络我需要做什么?对于MNIST数据集,我只需要写

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

我在python中使用Keras库。如何创建这样的数据集?

您可以编写一个函数来加载所有图像并将它们堆栈到numpy数组中,如果所有图像都适合RAM,或者使用Keras ImageDataGenerator (https://keras.io/preprocessing/image/),其中包含一个函数flow_from_directory。您可以在这里找到一个示例https://gist.github.com/fchollet/0830affa1f7f19fd47b06d4cf89ed44d。

您应该编写自己的函数来加载所有图像,或者这样做:

imagePaths = sorted(list(paths.list_images(args["testset"])))
# loop over the input images
for imagePath in imagePaths:
    # load the image, pre-process it, and store it in the data list
    image = cv2.imread(imagePath)
    image = cv2.resize(image, (IMAGE_DIMS[1], IMAGE_DIMS[0]))
    image = img_to_array(image)
    data.append(image)
    # extract the class label from the image path and update the
    # labels list

data = np.array(data, dtype="float") / 255.0

我可能迟到了,但是我把我的答案贴出来是为了帮助那些访问这个问题寻找答案的人。在这个答案中,我将解释数据集类型,如何生成这样的数据集,以及如何加载这些文件。

的文件格式是什么

这些数据集是已经vectorizedNumpy format中的数据集。查看这里(Keras数据集文档)的参考。这些数据集以.npz文件格式存储。查看这里(MNIST数字分类数据集)。以下是从文档中复制的代码块供参考。

tf.keras.datasets.mnist.load_data(path="mnist.npz")

一旦你生成了一个。npz文件,你就可以像使用mist默认数据集一样使用它。

如何生成.npz文件

下面是如何从文件夹

中的所有图像生成这样的数据集
#generate and save file
from PIL import Image
import os
import numpy as np
path_to_files = "./images/"    
vectorized_images = []
for _, file in enumerate(os.listdir(path_to_files)):
    image = Image.open(path_to_files + file)
    image_array = np.array(image)
    vectorized_images.append(image_array)        
# save as DataX or any other name. But the same element name is to be used while loading it back. 
np.savez("./mnistlikedataset.npz",DataX=vectorized_images) 

如果你想使用保存多个元素,你可以这样做,并对代码进行适当的其他更改。

np.savez("./mnistlikedataset.npz",DataX=vectorized_images_x,DataY=vectorized_images_Y)

如何加载数据文件

#load and use file
import numpy as np
path = "./mnistlikedataset.npz"
with np.load(path) as data:
    #load DataX as train_data
    train_data = data['DataX']
    print(train_data)

与保存多个元素类似,如果你想从一个文件中加载多个元素,你可以通过其他适当的更改来做类似的事情

with np.load(path) as data:
    train_data = data['DataX']
    print(train_data)
    test_data = data['DataY']
    print(test_data)

numpy可以将数组保存为二进制文件numpy保存

import numpy as np
def save_data():
  [images, labels] = read_data()
  outshape = len(images[0])
  npimages = np.empty((0, outshape), dtype=np.int32)
  nplabels = np.empty((0,), dtype=np.int32)
  for i in range(len(labels)):
      label = labels[i]
      npimages = np.append(npimages, [images[i]], axis=0)
      nplabels = np.append(nplabels, y)
  np.save('images', npimages)
  np.save('labels', nplabels)

def read_data():
  return [np.load('images.npy'), np.load('labels.npy')]

相关内容

  • 没有找到相关文章

最新更新