如何使用Keras框架加载本地数据集(X,y)

如何使用Keras框架加载本地数据集(X,y),keras,deep-learning,dataset,conv-neural-network,Keras,Deep Learning,Dataset,Conv Neural Network,我为trainingSet和testSet文件夹设计了一个本地数据集,每个数据集包含3个类,如下所示: -Training_Set --Class1 --img1.jpg --img2.jpg .. --Class2 --img101.jpg --img102.jpg .. --Class3 --img201.jpg --img202.jpg -Test_Set --Class1

我为trainingSet和testSet文件夹设计了一个本地数据集,每个数据集包含3个类,如下所示:

-Training_Set
   --Class1
     --img1.jpg
     --img2.jpg
     ..
   --Class2
     --img101.jpg
     --img102.jpg
     ..
   --Class3
     --img201.jpg
     --img202.jpg

-Test_Set
       --Class1
         --img10.jpg
         --img11.jpg
         ..
       --Class2
         --img150.jpg
         --img140.jpg
         ..
       --Class3
         --img210.jpg
         --img220.jpg
我想像加载Cifar数据集一样加载它:

(trainX, trainY), (testX, testY) = cifar10.load_data()
您可以使用加载数据集:

pip安装映像数据集加载程序
从图像\u数据集\u加载程序导入加载
(x_-train,y_-train),(x_-test,y_-test)=负载('/path/to/your/dataset',['Training_-Set','test_-Set')
此外,您还可以使用Keras的
ImageDataGenerator
flow\u from\u目录
。请参阅和。

您可以尝试此方法(尽管不确定为什么希望它与cifar完全相同):


我知道这个方法,但有两个问题,它使用批次和X,y混合。我想像加载Cifar数据集一样加载它:``(trainX,trainY),`(testX,testY)=cifar10.load_data()``@Adelov我在GitHub上发布了一个小实用函数,可以满足您的需要。用回购协议链接和示例更新了答案。有关更多详细信息,请参阅repo。我需要它,就像Cifar一样,因为我想应用我在github上找到的代码:该代码不适用于Python3,而对于Python2.7,我收到以下错误:ValueError:需要超过0个值才能解包“不适用于Python3”是什么意思?在哪一行得到ValueError?对于Python3,我在zip函数上得到了错误,对于te错误,我在这一行得到了它:input,output=zip(*combine),我为Python3添加了这个位(
combine=list(zip(input,output))
),这对您很有用。请看我的最新答案。
import cv2  # pip install opencv-python
import numpy as np
import os


class ImageLoader:
    """Load images in arrays without batches."""

    def __init__(self, train_dir, test_dir):
        """Create class."""
        self.train_dir = train_dir
        self.test_dir = test_dir

    def load_data(self):
        """Load the data."""
        features, labels = [], []

        for source in [self.train_dir, self.test_dir]:
            input, output = [], []
            for class_name in os.listdir(source):
                if os.path.isdir(class_name):
                    for img_name in os.listdir(class_name):
                        img = cv2.imread(os.path.join(self.train_dir, class_name, img_name))

                        # ...
                        # Modify your image array here.
                        # ...

                        input.append(img)
                        output.append(class_name)  # or other method to convert label

            # Shuffle labels.
            combine = list(zip(input, output))  # zip as list for Python 3
            np.random.shuffle(combine)
            input, output = zip(*combine)
            features.append(input)
            labels.append(output)

        return [[np.array(features[0], dtype=np.float32),
                 np.array(labels[0], dtype=np.float32)],
                [np.array(features[1], dtype=np.float32),
                 np.array(labels[1], dtype=np.float32)]]


cifar10 = ImageLoader('path-to-training', 'path-to-testing')
(trainX, trainY), (testX, testY) = cifar10.load_data()