语义分割样本随机划分

文章目录

  • 前言
  • 一、训练集、验证集、测试集
  • 二、使用步骤
    • 1.引入库
    • 2.设置输入输出路径
    • 3.处理过程
  • 总结


前言

深度学习语义分割在训练时需要将裁剪好的样本数据划分为训练集、验证集和测试集。如果手动划分会存在遗漏或者其他未知错误,为此,我想能不能写一个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。

你可能感兴趣的:(python,人工智能,python)