9. 获得图片路径,构造出训练集和验证集,同时构造出相同人脸和不同人脸的测试集,将结果存储为.csv格式 1.random.shuffle(数据清洗) 2.random.sample(从数据集中随机选取2个数据) 3. random.choice(从数据集中抽取一个数据) 4.pickle.dump(将数据集写成.pkl数据)
1. random.shuffle(dataset) 对数据进行清洗操作
参数说明:dataset表示输入的数据
2.random.sample(dataset, 2) 从dataset数据集中选取2个数据
参数说明:dataset是数据, 2表示两个图片
3. random.choice(dataset) 从数据中随机抽取一个数据
参数说明: dataset 表示从数据中抽取一个数据
4. pickle.dump((v1,v2), f_path,pickle.HIGHEST_PROTOCOL) 将数据集写成.pkl 数据
参数说明: (v1, v2)表示数据集,f_path 打开的f文件, pickle.HIGHEST_PROTOCOL 保存的格式
代码说明:将图片的路径进行添加,取前50张构造出验证集,后550构造出训练集,对于小于100张的people_picture,用于构造出测试集,每一个人脸的数据集构造出的相同人脸和不同人脸的数目为各5对,最后将结果保存在csv文件中
第一步:使用os.listdir 获取图片的路径,将低于100张的添加到测试集,将600张的图片的其中50张添加到验证集,其中的550张添加到训练集, 这里每一个people都对应一个label
第二步: 使用test_pair_generate 用于生成相同人脸数据集和不相同人脸数据集的制作
第三步:使用random.shuffle 进行数据清洗,然后将路径保存为csv文件格式
# -*- coding: utf-8 -*-
'''
Created on 2019/7/8/0008 9:29 @Author : Sheng1994
''' import os
import numpy as np
import random
import pickle def test_pair_generate(test_image_list, each_k=5): test_paris_list = [] test_images_length = len(test_image_list) for people_index, people_images in enumerate(test_image_list): # 生成相同一对的脸
for _ in range(each_k):
same_paris = random.sample(people_images, 2)
test_paris_list.append((same_paris[0], same_paris[1], 1)) # 生成不同的一对脸
for _ in range(each_k):
index_random = people_index
while index_random == people_index:
index_random = random.randint(0, test_images_length)
diff_one = random.choice(test_image_list[people_index])
diff_another = random.choice(test_image_list[index_random])
test_paris_list.append((diff_one, diff_another, 0)) return test_paris_list def save_to_pkl(path, v1, v2): pkl_file = open(path, 'wb')
pickle.dump((v1, v2), pkl_file, pickle.HIGHEST_PROTOCOL)
pkl_file.close() def build_dataset(source_folder):
# 第一步:将数据的路径进行添加,对于训练集和验证集的数据其标签使用label+ 来表示,对于测试集的数据使用相同和不同人脸数据集进行表示
label = 1
train_dataset, valid_dataset, test_dataset = [], [], []
counter = 0 test_pair_counter = 0
train_counter = 0 for people_folder in os.listdir(source_folder):
people_images = []
people_folder_path = source_folder + os.sep + people_folder
for vedio_folder in os.listdir(people_folder_path):
vedio_folder_path = people_folder_path + os.sep + vedio_folder
for vedio_file_name in os.listdir(vedio_folder_path):
full_path = vedio_folder_path + os.sep + vedio_file_name
people_images.append(full_path) random.shuffle(people_images)
if len(people_images) < 100:
test_dataset.append(people_images)
test_pair_counter += 1 else:
valid_dataset.extend(zip(people_images[0:50], [label]*50))
test_dataset.extend(zip(people_images[50:600], [label]*550))
label += 1
train_counter += 1 print(people_folder +': id--->' + str(counter)) counter += 1
# 将train和test数据集的个数表示下来
save_to_pkl('image/train_test_number.pkl', train_counter, test_pair_counter)
# 第二步:对测试数据进行生成,产生各5组的相同人脸数据集和不同人脸数据集
test_pairs_dataset = test_pair_generate(test_dataset, each_k=5) random.shuffle(train_dataset)
random.shuffle(valid_dataset)
random.shuffle(test_pairs_dataset) return train_dataset, valid_dataset, test_pairs_dataset def save_to_csv(dataset, file_name):
with open(file_name, "w") as f:
for item in dataset:
f.write(",".join(map(str, item)) + "\n") def run(): random.seed(7) train_dataset, valid_dataset, test_dataset = build_dataset('image\\result')
# 第三步:数据清洗,并将数据集存储到train_dataset_path
train_dataset_path = 'image\\train_dataset.csv'
valid_dataset_path = 'image\\valid_dataset.csv'
test_dataset_path = 'image\\test_dataset.csv'
save_to_csv(train_dataset, train_dataset_path)
save_to_csv(valid_dataset, valid_dataset_path)
save_to_csv(test_dataset, test_dataset_path) if __name__ == '__main__':
run()
9. 获得图片路径,构造出训练集和验证集,同时构造出相同人脸和不同人脸的测试集,将结果存储为.csv格式 1.random.shuffle(数据清洗) 2.random.sample(从数据集中随机选取2个数据) 3. random.choice(从数据集中抽取一个数据) 4.pickle.dump(将数据集写成.pkl数据)的更多相关文章
- 使用KFold进行训练集和验证集的拆分,使用准确率和召回率来挑选合适的阈值(threshold) 1.KFold(进行交叉验证) 2.np.logical_and(两bool数组都是正即为正) 3.np.logical_not(bool数组为正即为反,为反即为正)
---恢复内容开始--- 1. k_fold = KFold(n_split, shuffle) 构造KFold的索引切割器 k_fold.split(indices) 对索引进行切割. 参数说明:n ...
- 机器学习入门06 - 训练集和测试集 (Training and Test Sets)
原文链接:https://developers.google.com/machine-learning/crash-course/training-and-test-sets 测试集是用于评估根据训练 ...
- [DeeplearningAI笔记]改善深层神经网络1.1_1.3深度学习使用层面_偏差/方差/欠拟合/过拟合/训练集/验证集/测试集
觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.1 训练/开发/测试集 对于一个数据集而言,可以将一个数据集分为三个部分,一部分作为训练集,一部分作为简单交叉验证集(dev)有时候也成为验 ...
- 训练集,验证集,测试集(以及为什么要使用验证集?)(Training Set, Validation Set, Test Set)
对于训练集,验证集,测试集的概念,很多人都搞不清楚.网上的文章也是鱼龙混杂,因此,现在来把这方面的知识梳理一遍.让我们先来看一下模型验证(评估)的几种方式. 在机器学习中,当我们把模型训练出来以后,该 ...
- Machine Learning笔记整理 ------ (二)训练集与测试集的划分
在实际应用中,一般会选择将数据集划分为训练集(training set).验证集(validation set)和测试集(testing set).其中,训练集用于训练模型,验证集用于调参.算法选择等 ...
- 深度学习原理与框架-Tensorflow卷积神经网络-cifar10图片分类(代码) 1.tf.nn.lrn(局部响应归一化操作) 2.random.sample(在列表中随机选值) 3.tf.one_hot(对标签进行one_hot编码)
1.tf.nn.lrn(pool_h1, 4, bias=1.0, alpha=0.001/9.0, beta=0.75) # 局部响应归一化,使用相同位置的前后的filter进行响应归一化操作 参数 ...
- 用python制作训练集和测试集的图片名列表文本
# -*- coding: utf-8 -*- from pathlib import Path #从pathlib中导入Path import os import fileinput import ...
- 随机切分csv训练集和测试集
使用numpy切分训练集和测试集 觉得有用的话,欢迎一起讨论相互学习~Follow Me 序言 在机器学习的任务中,时常需要将一个完整的数据集切分为训练集和测试集.此处我们使用numpy完成这个任务. ...
- 从MySQL随机选取数据
--从MySQL随机选取数据 -------------------------2014/06/23 从MySQL随机选取数据最简单的办法就是使用”ORDER BY RAND()”; 方案一: SEL ...
随机推荐
- mybatis查询返回的对象不为null,但是属性值为null
返回的对象不为null,但是属性值为null 代码如下: <resultMap id="BaseResultMap" type="com.trhui.ebook.d ...
- Clang调试deadcode思路
首先描述下我的环境:Ubuntu16.04 llvm4.0 clang4.0全部使用源码安装方式 Clang的根目录,位于llvm-src下边的tools目录下. 因为需要找到真正的开关,下边我描述下 ...
- nodejs在Mac下的卸载
卸载: 在 node 官网上下载的安装包,用安装包安装的node.应该可以用一下命令行卸载: 在终端输入以下命令: sudo rm -rf /usr/local/{bin/{node,npm},lib ...
- golang连接activemq,发送接收数据
介绍 使用golang连接activemq发送数据的话,需要使用一个叫做stomp的包,直接go get github.com/go-stomp/stomp即可 代码 生产者 package main ...
- .net Core的例子
阅读文章: 十二个 ASP.NET Core 例子
- keras训练大量数据的办法
最近在做一个鉴黄的项目,数据量比较大,有几百个G,一次性加入内存再去训练模青型是不现实的. 查阅资料发现keras中可以用两种方法解决,一是将数据转为tfrecord,但转换后数据大小会方法不好:另外 ...
- Java常用类库——观察者设计模式
观察者设计模式 现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到.实际上以上的购房者都属于观察者,他们都关注着房子的价格. 如果要想实现观察者模式,则必须依 ...
- IT项目开发流程
项目开发流程: 一.需求分析:相关系统分析员向用户初步了解需求,然后用相关的工具软件列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步 ...
- Python语法之垃圾回收机制
目录 一 引入 二.什么是垃圾回收机制? 三.为什么要用垃圾回收机制? 四.垃圾回收机制原理分析 4.1.什么是引用计数? 4.2.引用计数扩展阅读 一 引入 解释器在执行到定义变量的语法时,会申请内 ...
- k8s-wordpress
将数据库的密码写入wordpress的yaml配置文件不行,额外输入可以初始化数据成功,好奇怪 mysql 配置yamL cat mysql.yml --- apiVersion: apps/v1be ...