对数据集进行训练集和测试集的分割的两种思路
前言
一般来讲,测试集可以检验,用训练集训练的模型效果是否过拟合。我们得到的数据一般很少分好了训练集和测试集。这时候就需要我们手动分割训练集和测试集。
方法1:直接切分数据
要用到shutil包来复制数据。思路就是遍历目录下的所有文件,得到所有类别的存放路径。遍历每个类别,然后获得每个类别的所有图片的名称列表,并将其随机排列。然后创建存放对应数据集的文件夹,并遍历图片名称列表,按照比例(8:1:1)将名字分配给不同的集。最后拼接路径,根据路径复制图片到对应位置。代码如下:
import os
import random
import math
import shutil
def data_split(old_path):
new_path = 'data'
if os.path.exists('data') == 0:
os.makedirs(new_path)
for root_dir, sub_dirs, file in os.walk(old_path): # 遍历os.walk()返回的每一个三元组,内容分别放在三个变量中
for sub_dir in sub_dirs:
file_names = os.listdir(os.path.join(root_dir, sub_dir)) # 遍历每个次级目录
file_names = list(filter(lambda x: x.endswith('.jpg')