前言
深度学习语义分割在训练时需要将裁剪好的样本数据划分为训练集、验证集和测试集。如果手动划分会存在遗漏或者其他未知错误,为此,我想能不能写一个python程序实现样本数据集随机按照设定比例来划分呢?于是就有了后文...
一、训练集、验证集、测试集
1. 训练集是用于训练深度学习模型的数据集。它是模型学习和调整参数的主要来源。通常,训练集包含大量的标记数据,用于指导模型学习各种模式和特征。训练集越大、越多样化,模型的泛化能力越强。
2. 验证集是用于调整和优化模型超参数的数据集。在训练过程中,模型的参数根据训练集进行调整,而超参数(如学习率、网络结构等)则根据验证集进行调整。通过在验证集上评估模型的性能,可以选择最佳的超参数设置以提高模型的性能。验证集应与训练集有一定的差异,以确保超参数的选择是普遍适用的。
3. 测试集是用于评估最终模型性能的数据集。它是在模型训练和验证完成后,用于模型性能的最后确认。由于测试集在模型开发过程中没有使用过,它提供了一个对模型泛化能力的客观评估。测试集应该是与训练集和验证集相互独立的数据集,以确保评估结果的可靠性。
二、使用步骤
1.引入库
import os
import shutil
from sklearn.model_selection import train_test_split
2.设置输入输出路径
print('样本随机分组...')
labels_path = r'labels' #原始标签路径
images_path = r'images' #原始图像路径
yangben_path = r'yangben' #最后样本存放路径
3.处理过程
labels_ = [i for i in os.listdir(labels_path)]
train_labels_, val_test_labels_ = train_test_split(labels_,
test_size=0.2,
random_state=5)
val_labels_, test_labels_ = train_test_split(val_test_labels_,
test_size=0.5,
random_state=5)
print('训练集:', len(train_labels_))
print('验证集:', len(val_labels_))
print('测试集:', len(test_labels_))
print('正在划分数据集...')
train_images = yangben_path + '\\train_images'
train_labels = yangben_path + '\\train_labels'
val_images = yangben_path + '\\val_images'
val_labels = yangben_path + '\\val_labels'
test_images = yangben_path + '\\test_images'
test_labels = yangben_path + '\\test_labels'
# 创建输出文件夹
os.makedirs(train_images, exist_ok=True)
os.makedirs(train_labels, exist_ok=True)
os.makedirs(val_images, exist_ok=True)
os.makedirs(val_labels, exist_ok=True)
os.makedirs(test_images, exist_ok=True)
os.makedirs(test_labels, exist_ok=True)
for i in train_labels_:
shutil.copyfile(labels_path+'\\'+i, train_labels+'\\'+i)
shutil.copyfile(images_path+'\\'+i, train_images+'\\'+i)
for i in val_labels_:
shutil.copyfile(labels_path+'\\'+i, val_labels+'\\'+i)
shutil.copyfile(images_path+'\\'+i, val_images+'\\'+i)
for i in test_labels_:
shutil.copyfile(labels_path+'\\'+i, test_labels+'\\'+i)
shutil.copyfile(images_path+'\\'+i, test_images+'\\'+i)
print('DONE!')
总结
通过python实现了语义分割样本的随机划分,免去手动划分的繁琐工作,有需要可以拿去copy。