как разбить наборы данных на тренировочные и тестовые данные с помощью sklearn - PullRequest
0 голосов
/ 11 марта 2019

Я использую набор данных at & t Face, основной каталог содержит 40 подкаталогов, каждый подкаталог содержит разные изображения конкретного человека.Я создал список, который содержит имена подкаталогов.Я хочу использовать данные для обучения нейронной сети, поэтому я хочу разделить данные на 80% обучения и 20% тестирования.Вот что я сделал до сих пор:

import os
import cv2
path = r"C:\Users\Desktop\att_faces"
directory = []
directory = [x[1] for x in os.walk(path)]
non_empty_dirs = [x for x in directory if x]


directory = [item for subitem in non_empty_dirs for item in subitem]

Как мне поступить после этого шага?

1 Ответ

0 голосов
/ 12 марта 2019

Вы хотите разделить ваши данные для обучения и тестирования наборов. Для этого вы можете либо

  1. Вручную или с помощью сценария отдельно обучайте и тестируйте папки и загружайте их для обучения с помощью генератора данных.

  2. Загрузка целых данных и разделение их для обучения и проверки в памяти.

Давайте обсудим второй вариант.

основной каталог содержит 40 подкаталогов

Предположим, что ваш главный каталог - Train//, и есть 40 подпапок, а именно 1-40. Кроме того, я предполагаю, что метка класса - это имя папки.

# imports

import cv2
import numpy as np
import os

from sklearn.model_selection import train_test_split

# seed for reproducibility
SEED = 44000


# lists to store data
data = []
label = []

# folder where data is placed
BASE_FOLDER = 'Train//'

folders = os.listdir(BASE_FOLDER)

# loading data to lists
for folder in folders:
    for file in os.listdir(BASE_FOLDER + folder + '//'):
        img = cv2.imread(BASE_FOLDER + folder + '//' + file)
        # do any pre-processing if needed like resize, sharpen etc.
        data = data.append(img)
        label = label.append(folder)

# now split the data in to train and test with the help of train_test_split

train_data, test_data, train_label, test_label = train_test_split(data, label, test_size=0.2, random_state=SEED)
...