Python实现随机划分图片数据集的示例代码
作者:风吹落叶花飘荡 发布时间:2021-08-01 16:35:32
标签:数据集,划分
一、前言
前几天需要划分数据集,就写了一个小demo去完成这个任务。
随机划分图片数据集
任务描述:我的所有图片保存在同一个文件夹里,需要随机将图片与标注文件划分为训练集和测试集。
处理过程:读取文件列表,将列表打乱,截取列表一部分
二、实现代码如下
import os
import random
import shutil
def get_imlist(path):
return [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.jpg')]
def getData(src_path):
dest_dir = src_path+'val' #划分出来的验证集
if not os.path.isdir(dest_dir):
os.mkdir(dest_dir)
img_list = get_imlist(src_path)
random.shuffle(img_list)
le = int(len(img_list) * 0.8) # 这个可以修改划分比例
for f in img_list[le:]:
shutil.move(f, dest_dir)
'''
函数功能:
划分数据集
'''
def SplitImg(filePath):
getData(filePath)
'''
函数功能:
根据划分的数据集进行移动标注文件
'''
def MoveAn(filePathAn,filePathImg):
Imgs=os.listdir(filePathImg)
if not os.path.isdir(filePathAn+'val'):
os.mkdir(filePathAn+'val')
for file in os.listdir(filePathAn):
#print(filePathAn,filePathImg)
#print(os.path.join(filePathAn,file),os.path.join(filePathAn+'val',file))
if file[:-4]+'.jpg' in Imgs:
shutil.move(os.path.join(filePathAn,file),os.path.join(filePathAn+'val',file))
if __name__=='__main__':
filePath='./宠物/宠物'# 换成你的数据集
#拆分的数据集
SplitImg(filePath)
filePathAn='./宠物/宠物An'# 换成你的标注文件地址
# 根据数据集进行移动标注文件
MoveAn(filePathAn,filePath+'val')
三、方法补充
除了以上的方法,小编还为大家整理了其他划分数据集的方法,希望对大家有所帮助
方法一:使用random.sample将数据集随机划分为训练集与验证集并另存在文件夹中,设置随机种子
import os
import random
import shutil
def moveFile(input1,input2,save1,save2):
pathDir = os.listdir(input1) # 取图片的原始路径
random.seed(1)
filenumber = len(pathDir) # 原文件个数
rate = 0.1 # 抽取的验证集的比例,占总数据的多少
picknumber = int(filenumber * rate) # 按照rate比例从文件夹中取一定数量图片
sample = random.sample(pathDir, picknumber) # 随机选取需要数量的样本图片
print(sample)
list_len=len(sample)
print(list_len)
list=[]
for i in range(len(sample)):
list.append(sample[i].split('.')[0])
print(list)
for flie_name in list:
path_img=os.path.join(input1,flie_name+'.jpg')
shutil.move(path_img,save1)
path_lab=os.path.join(input2,flie_name+'.txt')
shutil.move(path_lab,save2)
if __name__ == '__main__':
input_path1='./train1200/images/train'
input_path2= './train1200/labels/train'
save_img='./train1200/images/val'
save_lab='./train1200/labels/val'
if not os.path.exists(save_lab):
os.makedirs(save_lab)
if not os.path.exists(save_img):
os.makedirs(save_img)
moveFile(input_path1,input_path2,save_img,save_lab)
方法二:通过train test_splt函数实现随机划分数据
Python中,随机划分数据集可以通过train test_splt函数实现。该函数可以将数据集随机分成训练集和测试集,用于机器学习中的数据训练和测试。
函数的基本用法如下:
from sklearn.model_selection import train_test_split
#X是所有的样本特征,y是目标变量,test_size是测试集占总样本数的比例
# random_state是随机数发生器的种子,保证每次划分结果一致
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0,3, random_state=42)
其中,X是所有的样本特征,是目标变量,test_size是测试集占总样本数的比例。random_state用于设置随机数发生器的种子,以保i每次划分结果一致。函数会返回4个数组: X_train、X_test、y_train,y_test,分别代表训练集的特征、测试集的特征、训练集的目标变量和测试集的目标变量
方法三:将一个数据集按比例随机分割成训练集、验证集、测试集
import random
def split(fname, train_ratio, var_ratio):
lines = fname.readlines()
n_total = len(lines) # 获取数据集的总长度
train_offset = int(n_total * train_ratio)
val_offset = int(n_total * (train_ratio + var_ratio))
random.shuffle(fname.read()) # 按行打乱顺序
train_data = open('train.txt.bio', 'wb')
val_data = open('val.txt.bio', 'wb')
test_data = open('test.txt.bio', 'wb')
for i, line in enumerate(lines):
if i < train_offset:
train_data.write(line)
elif i < val_offset:
val_data.write(line)
else:
test_data.write(line)
train_data.close()
val_data.close()
test_data.close()
if __name__ == "__main__":
fname = open('en/en_total.txt.bio', "rb")
split(fname, train_ratio = 0.6, var_ratio = 0.2)
fname.close()
来源:https://blog.csdn.net/qq_51116518/article/details/126002379
0
投稿
猜你喜欢
- 说到关于请求方法的分支,让我们来看一下可以用什么好的方法来实现它。 考虑这个 URLconf/view 设计:# urls.pyfrom d
- 数据模型==对象模型Python官方文档说法是“Python数据模型”,大多数Python书籍作者说法是“Python对象模型”,它们是一个
- 引言本集开始,将会深入Document接口。打开或创建一个文档都会产生一个Document对象,它代表文档本身,所以绝大部分文档的操作都会依
- Python内置函数1. classmethod、staticmethod、property 。上述三个内置函数在文章(Python进阶——
- 背景Python 作为一门成熟的编程语言,拥有无数优秀的第三方包以方便开发者能够快速地构建应用。一般来说,如果你开发了一个 Python 软
- 在使用SQL Server 的过程,中由于经常需要从多个不同地点将数据集中起来或向多个地点复制数据,所以数据的导出,导入是极为常见的操作.我
- 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。列表的数据项可以是不同的类型,可以是字符串,可以是数字类型,甚至
- Web开发中,我们经常会遇到分页显示和排序数据记录集的情况,这在服务器端使用服务器端的代码和数据库技术是件很轻松的事情,比如:ASP、PHP
- 文件上传是所有UI自动化测试都要面对的一个头疼问题,今天博主在这里给大家分享下自己处理文件上传的经验,希望能够帮助到广大被文件上传坑住的se
- 前言我们有时候会编写Python脚本来辅助我们执行一些重复的操作。但是这些脚本在实际使用中会有一些不方便:我们通常需要进入终端或者IDE中来
- 背景:不久前,设计实现了京东api的功能,发现如果换了其它快递再重新设计,岂不是会浪费太多的时间,所以选个第三方提供的快递API是最为合理的
- 随着ajax再网站建设中的的大范围流行,XmlHttp也自然被人们所熟悉。本文介绍了asp任何检测服务器端是否支持xmlhttp组件的方法,
- 关于混淆矩阵的概念,可参考此篇博文混淆矩阵1.混淆矩阵混淆矩阵是机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真
- MSDN:包含正在 SQL Server 实例上运行的进程的相关信息。这些进程可以是客户端进程或系统进程。 视图中主要的字段: 1. Spi
- 本文实例讲述了Python通过TensorFLow进行线性模型训练原理与实现方法。分享给大家供大家参考,具体如下:1、相关概念例如要从一个线
- 本篇博客参考Keqi Zhang的文章“A Progressive Morphological Filter for Removing No
- 前言CUDA(Compute Unified Device Architecture)是NVIDIA推出的异构计算平台,PyTorch中有专
- 功能描述:1)使用tkinter设计程序界面;2)调用Windows API函数实现录音机和音乐播放器。参考代码:运行界面:总结以上所述是小
- 本文介绍了ORACLE客户端连服务器的注意事项:1. 通过SQL*NET协议,ORACLE客户端连服务器时一般需要配置sqlnet.ora和
- 对于相册来说,大图的浏览非常重要,因为对浏览者来说最重要的就是大图看得爽不爽,因为做项目的需要,我比较了许多相册的大图浏览方式,现在一一评说