2017-07-07 60 views
-1

我想将图像数据集分为两部分,即训练和测试集。我想将训练和测试之间的数据分成80/20。我需要从所有类别的图像中提取80%,并且还需要从所有类别的图像中提取剩余的20%图像。如何混洗图像以用于培训和测试

这是目前我如何将数据拆分为两个,但它不能正常工作。

image_filenames = glob.glob("./imagenet-dogs/n02*/*.jpg") 

image_filenames[0:2] 

training_dataset = defaultdict(list) 
testing_dataset = defaultdict(list) 

image_filename_with_breed = map(lambda filename: (filename.split("/")[2], filename), image_filenames) 

for dog_breed, breed_images in groupby(image_filename_with_breed, lambda x: x[0]): 
    """ 
    Append training/testing image datasets to respective dictionaries 
    """ 
    # Enumerate each breed's image and send ~20% of the images to a testing set 
    for i, breed_image in enumerate(breed_images): 
     if i % 5 == 0: 
      testing_dataset[dog_breed].append(breed_image[1]) 
     else: 
      training_dataset[dog_breed].append(breed_image[1]) 

我在做什么错误,以及如何确保图像是从所有类中获取的最佳方法是什么?

会洗牌的图像,然后采取80%,将其附加到培训,然后采取其余的20%,并将其附加到测试工作?如果是这样,那么最好的方法是什么?

+2

不要重新发明轮子。 scikit-learn是Python中ML实用程序的实际库。例如,它内置了'train_test_split_'。 –

回答