无论是训练机器学习或是深度学习,第一步当然是先划分数据集啦,今天小白整理了一些划分数据集的方法,希望大佬们多多指教啊,嘻嘻~

首先看一下数据集的样子,flower_data文件夹下有四个文件夹,每个文件夹表示一种花的类别

  

划分数据集的主要步骤:

1. 定义一个空字典,用来存放各个类别的训练集、测试集和验证集,字典的key是类别,value也是一个字典,存放该类别的训练集、测试集和验证集;

2.使用python获取所有的类别文件夹;

3.对每个类别划分训练集、测试集和验证集:(1)把该类别的所有有效图片放入一个列表中;(2)设置一个随机数对列表进行划分。

具体的代码实现如下所示

import glob
import os.path
import random
import numpy as np
# 图片数据文件夹
INPUT_DATA = './flower_data'
# 这个函数从数据文件夹中读取所有的图片列表并按训练、验证、测试数据分开
# testing_percentage和validation_percentage指定了测试数据集和验证数据集的大小
def create_image_lists(testing_percentage,validation_percentage):
# 得到的所有图片都存在result这个字典里,key为类别的名称,value值也是一个字典,存放的是该类别的
# 文件名、训练集、测试集和验证集
result = {}
# 获取当前目录下所有的子目录,这里x 是一个三元组(root,dirs,files),第一个元素表示INPUT_DATA当前目录,
# 第二个元素表示当前目录下的所有子目录,第三个元素表示当前目录下的所有的文件
sub_dirs = [x[0] for x in os.walk(INPUT_DATA)]
# sub_dirs = ['./flower_data','./flower_data\\daisy','./flower_data\\dandelion',
# './flower_data\\roses','./flower_data\\sunflowers','./flower_data\\tulips']
# 每个子目录表示一类花,现在对每类花划分训练集、测试集和验证集
# sub_dirs[0]表示当前文件夹本身的地址,不予考虑,只考虑他的子目录(各个类别的花)
for sub_dir in sub_dirs[1:]:
# 获取当前目录下所有的有效图片文件
extensions = ['jpg','jpeg']
# 把图片存放在file_list列表里
file_list = []
# os.path.basename(sub_dir)返回sub_sir最后的文件名
# 如os.path.basename('./flower_data/daisy')返回daisy
dir_name = os.path.basename(sub_dir)
for extension in extensions:
file_glob = os.path.join(INPUT_DATA,dir_name,'*.'+extension)
# glob.glob(file_glob)获取指定目录下的所有图片,存放在file_list中
file_list.extend(glob.glob(file_glob))
if not file_list: continue
# 通过目录名获取类别的名称,返回将字符串中所有大写字符转换为小写后生成的字符串
label_name = dir_name.lower()
# 初始化当前类别的训练数据集、测试数据集和验证数据集
training_images = []
testing_images = []
validation_images = []
for file_name in file_list:
base_name = os.path.basename(file_name)
# 随机将数据分到训练数据集、测试数据集和验证数据集
# 产生一个随机数,最大值为100
chance = np.random.randint(100)
if chance < validation_percentage:
validation_images.append(base_name)
elif chance < (testing_percentage+validation_percentage):
testing_images.append(base_name)
else:
training_images.append(base_name)
# 将当前类别是数据放入结果字典
result[label_name]={'dir':dir_name,
'training':training_images,
'testing':testing_images,
'validation':validation_images}
# 返回整理好的所有数据
return result
result = create_image_lists(10,30)
print(result)

运行结果:

可以看出字典result中有五个key,表示五个类别。

下图是各个类别的划分情况:

使用python划分数据集的更多相关文章

  1. Pytorch划分数据集的方法

    之前用过sklearn提供的划分数据集的函数,觉得超级方便.但是在使用TensorFlow和Pytorch的时候一直找不到类似的功能,之前搜索的关键字都是"pytorch split dat ...

  2. 【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 决策书算法是一种逼近离散数值的分类算法,思路比較简单,并且准确率较高.国际权威的学术组织,数据挖掘国际 ...

  3. 使用Sklearn-train_test_split 划分数据集

    使用sklearn.model_selection.train_test_split可以在数据集上随机划分出一定比例的训练集和测试集 1.使用形式为: from sklearn.model_selec ...

  4. sklearn 划分数据集。

    1.sklearn.model_selection.train_test_split随机划分训练集和测试集 函数原型: X_train,X_test, y_train, y_test =cross_v ...

  5. KNN手写实践:Python基于数据集整体计算以及排序

    1. 距离计算,不要通过遍历每个样本来计算和指定样本距离,而是通过对于指定样本进行广播(复制)成为一个shape和全局一致后,再进行整体计算,这里的广播 / 复制采用的是tile函数来实现的: 2. ...

  6. Python处理数据集-2

    原数据集的数据格式: 每行为:(test_User, test_Item) negativeItem1 negativeItem2 negativeItem3 …… negativeItem99 即每 ...

  7. Python处理数据集-1

    原数据集的数据格式: 每行为:(test_User, test_Item) negativeItem1 negativeItem2 negativeItem3 …… negativeItem99 即每 ...

  8. python 鸢尾花数据集报表展示

    import seaborn as snsimport pandas as pdimport matplotlib.pyplot as pltsns.set_style('white',{'font. ...

  9. pandas DataFrame 数据处理常用操作

    Xgboost调参: https://wuhuhu800.github.io/2018/02/28/XGboost_param_share/ https://blog.csdn.net/hx2017/ ...

随机推荐

  1. web项目开发 之 前端规范 --- HTML编码规范

    此文严格按照W3C规范和部分实际项目可读性,浏览器加载,性能等众多属性权衡,做出平时前端编码规范文 档.供广大web工作者参考并实施,对维护和项目扩展升级都能省时省力. 转载请注明出处,JS前端实用开 ...

  2. idea把项目提交到svn服务器步骤

    1.设置忽略文件.文件夹 2.找到以下选项 3.选择要上传项目的svn服务器地方和svn管理目录 4.填完相关提交信息,点击share就ok啦

  3. 并不对劲的[USACO07NOV,洛谷p2886]Cow Relays

    题意就是给一张无向有边权的图.起点.终点,求起点到终点经过n条边的最短路.n<=10^6,点的编号<=10^3,边数<=10^2. 这个边数让人不由自主地想到了floyd,然后发现f ...

  4. Ordeby then by

    先按orderby排序,再按thenby排序 return PartialView("_ClickRangeOnCategory", articles.OrderByDescend ...

  5. spoj 839 OPTM - Optimal Marks&&bzoj 2400【最小割】

    因为是异或运算,所以考虑对每一位操作.对于所有已知mark的点,mark的当前位为1则连接(s,i,inf),否则连(i,t,inf),然后其他的边按照原图连(u,v,1),(v,u,1),跑最大流求 ...

  6. bzoj 3930: [CQOI2015]选数【递推】

    妙啊 这个题一上来就想的是莫比乌斯反演: \[ f(d)=\sum_{k=1}^{\left \lceil \frac{r}{d} \right \rceil}\mu(k)(\left \lceil ...

  7. Redis操作命令大全

    一.key pattern 查询相应的key (1)redis允许模糊查询key 有3个通配符  *.?.[] (2)randomkey:返回随机key (3)type key:返回key存储的类型 ...

  8. 我的ubuntu连vi都没有??那在命令行怎么编辑文件??

    今天弄了个docker下的ubuntu官方镜像,想在镜像里做一点实验,免得把自己的环境写得乱七八糟. 把代码文件mount进去之后,开始编译,但是镜像太干净了,什么工具都没有,于是先装cmake ap ...

  9. Taro 小程序 自定义导航栏

    在小程序中,有的页面需求可能需要我们做一个自定义的导航栏, 今天就来踩一踩坑 首先需要在app.js 中给全局的导航栏隐藏, // app.js window: { navigationStyle: ...

  10. html 解决空格显示问题

    前端开发者都知道,在html中手动输入多个空格或者是回车,在页面解析的时候都被解析成一个空白显示,但有时候的需求要求显示多个空格,这个问题怎么解决呢?根绝我个人的经验,目前找到了以下集中解决办法: 1 ...