Little_by_Little_3 对数据进行测试集训练集验证集进行划分
时间:2020-04-17
本文章向大家介绍Little_by_Little_3 对数据进行测试集训练集验证集进行划分,主要包括Little_by_Little_3 对数据进行测试集训练集验证集进行划分使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Little_by_Little_3 对数据进行测试集训练集验证集进行划分
目的
将
划分成
训练集占8成,valid和test各占一成.
源代码
import os
import random
import shutil
def makedir(new_dir):#创建新文件,若没有就不创建
if not os.path.exists(new_dir):
os.makedirs(new_dir)
if __name__ == '__main__':
random.seed(1)
#1
dataset_dir = os.path.join("..", "..", "data", "RMB_data")
split_dir = os.path.join("..", "..", "data", "rmb_split")
train_dir = os.path.join(split_dir, "train")
valid_dir = os.path.join(split_dir, "valid")
test_dir = os.path.join(split_dir, "test")
train_pct = 0.8
valid_pct = 0.1
test_pct = 0.1#此条无用
#2
for root, dirs, files in os.walk(dataset_dir):#files无用
'''
def walk(top: T,
topdown: bool = True,
onerror: Optional[(Exception) -> None] = None,
followlinks: bool = False) -> Iterator[Tuple[T, List[T], List[T]]]
top -- 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。
root 所指的是当前正在遍历的这个文件夹的本身的地址
dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
topdown --可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。
onerror -- 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。
followlinks -- 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。
'''
#3
for sub_dir in dirs:
imgs = os.listdir(os.path.join(root, sub_dir))#所指的是当前正在遍历的这个文件夹的本身的地址+子目录的地址
imgs = list(filter(lambda x: x.endswith('.jpg'), imgs))#提取出文件中end为jpg的文件名且把他变成list
random.shuffle(imgs)#打乱图片
img_count = len(imgs)#图片个数
train_point = int(img_count * train_pct)#训练集数
valid_point = int(img_count * (train_pct + valid_pct))#训练集数+测试集数
#4
for i in range(img_count):
if i < train_point:
out_dir = os.path.join(train_dir, sub_dir)#
elif i < valid_point:#取够训练集就取验证集
out_dir = os.path.join(valid_dir, sub_dir)
else:
out_dir = os.path.join(test_dir, sub_dir)
makedir(out_dir)
target_path = os.path.join(out_dir, imgs[i])#拼接outdir和img名,目标文件的路径
src_path = os.path.join(dataset_dir, sub_dir, imgs[i])#抓取文件的路径
shutil.copy(src_path, target_path)#复制操作
print('Class:{}, train:{}, valid:{}, test:{}'.format(sub_dir, train_point, valid_point-train_point,
img_count-valid_point))
#1分析
dataset_dir = os.path.join("..", "..", "data", "RMB_data")
split_dir = os.path.join("..", "..", "data", "rmb_split")
train_dir = os.path.join(split_dir, "train")
valid_dir = os.path.join(split_dir, "valid")
test_dir = os.path.join(split_dir, "test")
train_pct = 0.8
valid_pct = 0.1
test_pct = 0.1#此条无用
dataset_dir = os.path.join("..", "..", "data", "RMB_data")
此条的作用是提取data所在的文件路径
数据路径图如上图所示,要往上两层才能导_06_rmb_classification(主文件夹)所以要加两个'..'.
train_pct = 0.8
划分训练集所占比例
#2 分析
for root, dirs, files in os.walk(dataset_dir):#files无用
在
- 里面进行循环接收root(RMB_data本文件的路径),dirs(1文件夹和2文件夹的文件夹名)
#3 分析
for sub_dir in dirs:
imgs = os.listdir(os.path.join(root, sub_dir))#所指的是当前正在遍历的这个文件夹的本身的地址+子目录的地址
imgs = list(filter(lambda x: x.endswith('.jpg'), imgs))#提取出文件中end为jpg的文件名且把他变成list
random.shuffle(imgs)#打乱图片
img_count = len(imgs)#图片个数
train_point = int(img_count * train_pct)#训练集数
valid_point = int(img_count * (train_pct + valid_pct))#训练集数+测试集数
-
对rmb_data里面的文件夹里面的文件进行循环
-
imgs = os.listdir(os.path.join(root, sub_dir))
提取出当前正在遍历的这个文件夹的本身的地址+子目录的地址,并把地址里面的文件变成list. -
imgs = list(filter(lambda x: x.endswith('.jpg'), imgs))
把地址里面以.jpg的文件的文件名提取出来.
#4 分析
#4
for i in range(img_count):
if i < train_point:
out_dir = os.path.join(train_dir, sub_dir)#
elif i < valid_point:#取够训练集就取验证集
out_dir = os.path.join(valid_dir, sub_dir)
else:
out_dir = os.path.join(test_dir, sub_dir)
makedir(out_dir)
target_path = os.path.join(out_dir, imgs[i])#拼接outdir和img名,目标文件的路径
src_path = os.path.join(dataset_dir, sub_dir, imgs[i])#抓取文件的路径
shutil.copy(src_path, target_path)#复制操作
print('Class:{}, train:{}, valid:{}, test:{}'.format(sub_dir, train_point, valid_point-train_point,
img_count-valid_point))
-
for i in range(img_count):
循环次数定位1或100文件里面的文件数 -
if i < train_point: out_dir = os.path.join(train_dir, sub_dir)# elif i < valid_point:#取够训练集就取验证集 out_dir = os.path.join(valid_dir, sub_dir) else: out_dir = os.path.join(test_dir, sub_dir)
控制训练集,测试集和验证集的数量.通过设置输出文件的路径来控制
-
src_path = os.path.join(dataset_dir, sub_dir, imgs[i])
设置抓取文件的路径 -
shutil.copy(src_path, target_path)
复制操作
原文地址:https://www.cnblogs.com/negu/p/12718466.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 介绍一下java的基本类型; 每种数据类型的位数(答错了,太菜了)
- 可读代码编写炸鸡十一 - 小黄鸭从你的心里游到脑子里
- 大数据技术之Hadoop(HDFS)第1章 HDFS概述
- Mongodb多键索引之数组
- 使用XtraBackup备份MySQL 8.0 Part 5 对全备份进行恢复
- LeetCode题目32:最长的有效括号
- C++ 万字长文第二篇---拿下字节面试
- mysqldump命令详解 Part 9 --hex-blob 参数的使用
- 使用XtraBackup备份MySQL 8.0 Part 2 XtraBackup权限及配置
- 使用XtraBackup备份MySQL 8.0 Part 6 对数据库进行增量备份
- ArrayList源码阅读笔记
- 3分钟短文 | Laravel表单验证没规则可用?你试试自定义,真香!
- 【C#】DataGridView 数据绑定的一些细节
- 3分钟短文 | Laravel 查询结果检查是不是空,5个方法你别用错!
- 使用XtraBackup备份MySQL 8.0 Part 7 对增量备份进行恢复