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文件格式

  1. # -*- coding: utf-8 -*-
  2. '''
  3. Created on 2019/7/8/0008 9:29
  4.  
  5. @Author : Sheng1994
  6. '''
  7.  
  8. import os
  9. import numpy as np
  10. import random
  11. import pickle
  12.  
  13. def test_pair_generate(test_image_list, each_k=5):
  14.  
  15. test_paris_list = []
  16.  
  17. test_images_length = len(test_image_list)
  18.  
  19. for people_index, people_images in enumerate(test_image_list):
  20.  
  21. # 生成相同一对的脸
  22. for _ in range(each_k):
  23. same_paris = random.sample(people_images, 2)
  24. test_paris_list.append((same_paris[0], same_paris[1], 1))
  25.  
  26. # 生成不同的一对脸
  27. for _ in range(each_k):
  28. index_random = people_index
  29. while index_random == people_index:
  30. index_random = random.randint(0, test_images_length)
  31. diff_one = random.choice(test_image_list[people_index])
  32. diff_another = random.choice(test_image_list[index_random])
  33. test_paris_list.append((diff_one, diff_another, 0))
  34.  
  35. return test_paris_list
  36.  
  37. def save_to_pkl(path, v1, v2):
  38.  
  39. pkl_file = open(path, 'wb')
  40. pickle.dump((v1, v2), pkl_file, pickle.HIGHEST_PROTOCOL)
  41. pkl_file.close()
  42.  
  43. def build_dataset(source_folder):
  44. # 第一步:将数据的路径进行添加,对于训练集和验证集的数据其标签使用label+ 来表示,对于测试集的数据使用相同和不同人脸数据集进行表示
  45. label = 1
  46. train_dataset, valid_dataset, test_dataset = [], [], []
  47. counter = 0
  48.  
  49. test_pair_counter = 0
  50. train_counter = 0
  51.  
  52. for people_folder in os.listdir(source_folder):
  53. people_images = []
  54. people_folder_path = source_folder + os.sep + people_folder
  55. for vedio_folder in os.listdir(people_folder_path):
  56. vedio_folder_path = people_folder_path + os.sep + vedio_folder
  57. for vedio_file_name in os.listdir(vedio_folder_path):
  58. full_path = vedio_folder_path + os.sep + vedio_file_name
  59. people_images.append(full_path)
  60.  
  61. random.shuffle(people_images)
  62. if len(people_images) < 100:
  63. test_dataset.append(people_images)
  64. test_pair_counter += 1
  65.  
  66. else:
  67. valid_dataset.extend(zip(people_images[0:50], [label]*50))
  68. test_dataset.extend(zip(people_images[50:600], [label]*550))
  69. label += 1
  70. train_counter += 1
  71.  
  72. print(people_folder +': id--->' + str(counter))
  73.  
  74. counter += 1
  75. # 将train和test数据集的个数表示下来
  76. save_to_pkl('image/train_test_number.pkl', train_counter, test_pair_counter)
  77. # 第二步:对测试数据进行生成,产生各5组的相同人脸数据集和不同人脸数据集
  78. test_pairs_dataset = test_pair_generate(test_dataset, each_k=5)
  79.  
  80. random.shuffle(train_dataset)
  81. random.shuffle(valid_dataset)
  82. random.shuffle(test_pairs_dataset)
  83.  
  84. return train_dataset, valid_dataset, test_pairs_dataset
  85.  
  86. def save_to_csv(dataset, file_name):
  87. with open(file_name, "w") as f:
  88. for item in dataset:
  89. f.write(",".join(map(str, item)) + "\n")
  90.  
  91. def run():
  92.  
  93. random.seed(7)
  94.  
  95. train_dataset, valid_dataset, test_dataset = build_dataset('image\\result')
  96. # 第三步:数据清洗,并将数据集存储到train_dataset_path
  97. train_dataset_path = 'image\\train_dataset.csv'
  98. valid_dataset_path = 'image\\valid_dataset.csv'
  99. test_dataset_path = 'image\\test_dataset.csv'
  100. save_to_csv(train_dataset, train_dataset_path)
  101. save_to_csv(valid_dataset, valid_dataset_path)
  102. save_to_csv(test_dataset, test_dataset_path)
  103.  
  104. if __name__ == '__main__':
  105. run()

9. 获得图片路径,构造出训练集和验证集,同时构造出相同人脸和不同人脸的测试集,将结果存储为.csv格式 1.random.shuffle(数据清洗) 2.random.sample(从数据集中随机选取2个数据) 3. random.choice(从数据集中抽取一个数据) 4.pickle.dump(将数据集写成.pkl数据)的更多相关文章

  1. 使用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 ...

  2. 机器学习入门06 - 训练集和测试集 (Training and Test Sets)

    原文链接:https://developers.google.com/machine-learning/crash-course/training-and-test-sets 测试集是用于评估根据训练 ...

  3. [DeeplearningAI笔记]改善深层神经网络1.1_1.3深度学习使用层面_偏差/方差/欠拟合/过拟合/训练集/验证集/测试集

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.1 训练/开发/测试集 对于一个数据集而言,可以将一个数据集分为三个部分,一部分作为训练集,一部分作为简单交叉验证集(dev)有时候也成为验 ...

  4. 训练集,验证集,测试集(以及为什么要使用验证集?)(Training Set, Validation Set, Test Set)

    对于训练集,验证集,测试集的概念,很多人都搞不清楚.网上的文章也是鱼龙混杂,因此,现在来把这方面的知识梳理一遍.让我们先来看一下模型验证(评估)的几种方式. 在机器学习中,当我们把模型训练出来以后,该 ...

  5. Machine Learning笔记整理 ------ (二)训练集与测试集的划分

    在实际应用中,一般会选择将数据集划分为训练集(training set).验证集(validation set)和测试集(testing set).其中,训练集用于训练模型,验证集用于调参.算法选择等 ...

  6. 深度学习原理与框架-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进行响应归一化操作 参数 ...

  7. 用python制作训练集和测试集的图片名列表文本

    # -*- coding: utf-8 -*- from pathlib import Path #从pathlib中导入Path import os import fileinput import ...

  8. 随机切分csv训练集和测试集

    使用numpy切分训练集和测试集 觉得有用的话,欢迎一起讨论相互学习~Follow Me 序言 在机器学习的任务中,时常需要将一个完整的数据集切分为训练集和测试集.此处我们使用numpy完成这个任务. ...

  9. 从MySQL随机选取数据

    --从MySQL随机选取数据 -------------------------2014/06/23 从MySQL随机选取数据最简单的办法就是使用”ORDER BY RAND()”; 方案一: SEL ...

随机推荐

  1. ASP.NET Core WebAPI帮助页--Swagger简单使用1.0

    1.什么是Swagger? Swagger是一个规范且完整的框架,提供描述.生产.消费和可视化RESTful API,它是为了解决Web API生成有用文档和帮助页的问题.   2.为啥选用swagg ...

  2. opencart nginx静态化设置

    在niginx设置里添加下面代码,(lnmp的可能是 网址.conf文件添加) # SEO URL Settings # Nginx configuration of OC htaccess loca ...

  3. Linux学习篇之OpenKM的安装(汉化)

    OpenKM是一个开放源代码的电子文档管理系统,它的特点是可用于大型公司或是中小企业, 适应性比较强. 并且在知识管理方面的加工,提供了更加灵活和成本较低的替代应用,下面讲一下搭建方法. 一.以下都是 ...

  4. pamamiko的安装

    pamiko的安装 Paramiko的安装依赖第三方的crypto,ecdsa,及python开发包的python-devel的支持,源码包安装如下 安装 安装paramiko有两个先决条件,pyth ...

  5. zencart简单设置分类链接不同css样式

    includes/templates/模板/sideboxes/tpl_categories.php $content .= '<a class="'.$new_style.'&quo ...

  6. 使用GDI+加载32位的位图或者PNG图片(具有透明通道)

    #include <windows.h> #include <gdiplus.h> HBITMAP LoadBitmapFromResource(DWORD ResourceI ...

  7. node + mongoDB

    在MongoDB安装这篇博客中已经创建了一个bella_blog的数据库,该数据已经包含了user集合. 下面就可以在node sever端用MongoDB了. Mongoose库简而言之就是在nod ...

  8. 深入理解java不可变对象(转)

    深入理解Java中的不可变对象 不可变对象想必大部分朋友都不陌生,大家在平时写代码的过程中100%会使用到不可变对象,比如最常见的String对象.包装器对象等,那么到底为何Java语言要这么设计,真 ...

  9. Django-ORM和MySQL事务及三大范式介绍

    Django中操作操作数据库这里需要改一个数据: 模型层:就是与跟数据库打交道 ORM查询: 一.单表操作必知必会13条: orm默认都是惰性查询: 1.all() 查询所有 2.filter() 筛 ...

  10. fiddler-重定向AutoResponder(三)

    关于Fiddler的AutoResponder重定向功能,主要是时进行会话的拦截,然后替换原始资源的功能. 它与手动修该reponse是一样的,只是更加方便了,可以创建相应的rules,适合批处理的重 ...