我正在使用at&t人脸数据集,主目录包含40个子目录,每个子目录包含特定人物的不同图像。我创建了一个列表,包含子目录的名称。我想使用这些数据来训练神经网络,所以我想将数据拆分为80%的训练数据和20%的测试数据。以下是我目前所做的:
在这一步之后我应该怎么做?
回答:
你想将数据拆分为训练集和测试集。为此,你可以选择以下两种方法之一:
-
手动或使用脚本将训练和测试数据分离到不同的文件夹中,并使用数据生成器加载它们进行训练。
-
加载所有数据并在内存中将它们拆分为训练和测试数据。
让我们讨论第二种选项。
主目录包含40个子目录
假设你的主目录是Train//
,并且有40
个子文件夹,分别命名为1-40
。此外,我假设类别标签就是文件夹名称。
# 导入import cv2import numpy as npimport osfrom sklearn.model_selection import train_test_split# 用于重现性的种子SEED = 44000# 用于存储数据的列表data = []label = []# 数据放置的文件夹BASE_FOLDER = 'Train//'folders = os.listdir(BASE_FOLDER)# 加载数据到列表中for folder in folders: for file in os.listdir(BASE_FOLDER + folder + '//'): img = cv2.imread(BASE_FOLDER + folder + '//' + file) # 如果需要,可以进行任何预处理,如调整大小、锐化等 data = data.append(img) label = label.append(folder)# 现在使用train_test_split将数据拆分为训练和测试train_data, test_data, train_label, test_label = train_test_split(data, label, test_size=0.2, random_state=SEED)