深度学习之数据处理——如何将图片和标签打乱并划分为训练集和测试集
深度学习之数据处理——如何将图片和标签打乱并划分为训练集和测试集
记录我的第一篇CSDN博客
最近我在网上找到Office31数据集,这个数据集中包含了三个子数据集,分别为:Amazon、dslr、webcam,每个子数据集包含31个类。以下将从数据处理的目标、处理过程、处理结果三个方面来展开。
一、数据处理目标
根据所选择的子数据集(Amazon、dslr、webcam)导入数据集,并对图片进行one-hot编码,最后将数据集分为训练数据集和测试数据集。
数据格式:
train_image=[train_n, w, h, c]
train_label=[train_n, categories_n]
validate_image=[validate_n, w, h, c]
validate_label=[validate_n, categories_n]
二、处理过程
处理过程分为:导入数据集、one-hot编码、划分为训练集和测试集
导入数据集
先贴代码吧
import os
import glob
import cv2img_label = []
img_feature = []def get_datasets(args):i_categories = -1i_picture = -1img_path = os.path.join(args.data, args.datasets)# print(img_path)for name in glob.glob(img_path+'/images/*'):i_categories += 1# print(name)for jpg in glob.glob(name+'/*'):i_picture += 1# print(jpg)img = cv2.imread(jpg)img = cv2.resize(img, (300, 300))img_feature.append(img)img_label.append(i_categories)print("Total number of categories:" + str(i_categories + 1))print("Total number of pictures:" + str(i_picture + 1))# one-hot编码onehot_label = one_hot(img_label)# 将数据集划分为训练集和测试集train_set_label, validate_set_label, train_set_feature, validate_set_feature = _split_train_val(onehot_label,img_feature, 0.1)
首先是图片路径的导入,我将图片路径存储在一个总的参数申明的argparse中,我的图片的保存路径如下图所示,
其中images下级包含31个子文件夹,每个文件夹包含一个类的图片
- 最初的路径为Original——images/amazon/images
- 之后两个for循环,第一个获取images下所有子文件夹的名称,第二个获取每个子文件夹中图片的路径
- opencv获取图片数据,这里有一个十分重要的操作,就是cv2.resize,对于网上下载下来的数据集,其实我们都不会去看图片的大小是否一致,就是因为这一点,浪费了我很多时间,程序一直警告,后来通过resize将所有的图片的大小统一,这个图片大小也可以作为一个全局参数,方便修改程序
- 最后通过numpy.append连接每一个数据,得到label和feature两个数组
one-hot编码
这个还是十分简单的,一样,先贴代码
from sklearn.preprocessing import LabelBinarizerdef one_hot(label):encoder = LabelBinarizer()onehot_label = encoder.fit_transform(label)return onehot_label
就是运用sklearn中的LabelBinarizer实现的,label的数据形式[picture_n, 1], 最终返回的one-hot label数据形式为[picture_n, categories_n]
划分为训练集和测试集
这个对于pytorch、tensorflow中自带的数据集来说,十分的简单,就是调用一个API就可以搞定,但是对于自己的数据集,就需要更多的精力来弄。先贴代码
def _split_train_val(label, feature, val_fraction=0):n_train = int((1. - val_fraction) * len(label))n_val = len(label) - n_train# print(n_train, n_val)indices = np.arange(len(label))np.random.shuffle(indices)# print(np.shape(indices))# print(indices)train_label = []train_feature = []val_label = []val_feature = []for i in range(len(label)):if i < n_train:train_label.append(label[indices[i]])train_feature.append(feature[indices[i]])else:val_label.append(label[indices[i]])val_feature.append(feature[indices[i]])print("==> Split the dataset into train_set and validate_set")print("train_set: " + str(n_train), ",validate_set: " + str(n_val))return train_label, val_label, train_feature, val_feature
为了能够随机的选择训练集和测试集,首先通过numpy生成一个indices,从0-(picture_n-1),再通过shuffle函数打乱这个indices,这样就可以根据这个indices划分数据集了,indices的数值即为label和feature索引。
处理结果
最终的结果如下图所示
|
|
|
|
|
参考博客
python glob.glob使用
numpy.random.shuffle打乱顺序函数的实现
深度学习之数据处理——如何将图片和标签打乱并划分为训练集和测试集相关推荐
- [深度学习] RCNNs系列(1) Ubuntu下Faster RCNN配置及训练和测试自己的数据方法
最近用到Faster RCNN进行目标检测,前前后后两周把RCNN,SPPNet,Fast RCNN和Faster RCNN大体调查了一遍,准备写一个RCNNs系列,后面还要加上今年最新的Mask R ...
- 【图像分类】实现猫狗图片的训练集和测试集的分类:python + Asirra
数据集下载地址为 Dogs vs. Cats | Kaggle 下载下来的图片包是,包含有猫狗的图片,但是命名方式就是以猫狗来命名的,所以我们可以很快将他们分类出来,并把他们以90%作为训练集,剩下的 ...
- 深度学习的实用层面 —— 1.1 训练/开发/测试集
在配置训练.验证和测试数据集的过程中做出正确决策会在很大程度上帮助大家创建高效的神经网络. 在训练神经网络时,我们需要做出很多决策,例如神经网络分多少层,每层含有多少个隐藏单元,学习速率是多少,各层采 ...
- 1.6 开发集和测试集的大小-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 1.5 训练/开发/测试集划分 回到目录 1.7 什么时候该改变开发_测试集和指标 开发集和测试集的大小 (Size of Dev and Test Sets) 在上一个视频 ...
- 深度学习小技巧(二):如何保存和恢复scikit-learn训练的模型
深度学习小技巧(一):如何保存和恢复TensorFlow训练的模型 在许多情况下,在使用scikit学习库的同时,你需要将预测模型保存到文件中,然后在使用它们的时候还原它们,以便重复使用以前的工作.比 ...
- 1 图片channels_深度学习中各种图像库的图片读取方式
深度学习中各种图像库的图片读取方式总结 在数据预处理过程中,经常需要写python代码搭建深度学习模型,不同的深度学习框架会有不同的读取数据方式(eg:Caffe的python接口默认BGR格式,Te ...
- (转)深度学习中各种图像库的图片读取方式
https://blog.csdn.net/u013841196/article/details/81194310 深度学习中各种图像库的图片读取方式总结 在数据预处理过程中,经常需要写python代 ...
- 深度学习中各种图像库的图片读取方式
深度学习中各种图像库的图片读取方式总结 在数据预处理过程中,经常需要写python代码搭建深度学习模型,不同的深度学习框架会有不同的读取数据方式(eg:Caffe的python接口默认BGR格式,Te ...
- 【动手学深度学习】Softmax 回归 + 损失函数 + 图片分类数据集
学习资料: 09 Softmax 回归 + 损失函数 + 图片分类数据集[动手学深度学习v2]_哔哩哔哩_bilibili torchvision.transforms.ToTensor详解 | 使用 ...
最新文章
- C++/C union使用记一下锅
- DeepMind 最新论文解读:首次提出离散概率树中的因果推理算法
- 仅一台摄像机即可进行3D身体重建
- 老男孩博客获三大搜素引擎搜索自然排名第一位(百度谷歌搜狗)
- 简单看看PageHelper的配置
- 详解正则表达式匹配方法 match()
- VMware Workstation提示:另一个程序已锁定文件的一部分,进程无法访问,删除.lck文件夹和文件
- containerd镜像导入import和push命令 gzip压缩解压缩命令
- SpringCloud系列之服务消费Ribbon和Feign区别
- 开始你的api:NetApiStarter
- drbd(三):drbd的状态说明
- PHP数据库统计时间戳按天分组输出数据
- Google大牛分享的面试秘籍
- 函数强凸 strong convexity
- 庄帅:托管分销与物流集成战略雏形
- 转:使用Python写一个m3u8多线程下载器
- 【Vue3.0实战逐步深入系列】为问卷系统重新布局并添加登录及注销功能
- ISIS如何选举DIS的,DIS的具体作用,和OSPF的DR有什么相同和不同点。举例说明
- 丁小平:浅谈科学模型及突变论等问题
- mysql查看、修改端口、指定端口登录
热门文章
- 独家:海尔消金“重仓”医美,月放款量惊人
- Android源码目录结构分析
- minecraft刷怪笼java_Minecraft怪物经验top9!刷怪箱位列第4,杀玩家第2出乎意料
- vue 分割面板组件
- 7的整除特征 三位一截_整除的特征、三位截断法的原理
- citrix vdi 服务器性能要求,Citrix测试VDI的最佳hypervisor
- 【转载】怎么设置博客背景
- 文件编码与文件的读写与0x0D0A
- red hat Linux 配置Samba服务器(超详细:内含桥接模式)
- MySQL NDB Cluster部署方案与实践