深度学习进行数据处理(划分测试集和训练集)

自己进行在深度学习时对数据的处理,希望可以帮助大家

文章目录

前言

一、观察数据格式

二、划分训练集和测试集

总结


前言

在进行图像分类时我们经常得到的数据集各种各样,接下来我教大家如划分测试集和训练集.

一、观察数据格式

我们一般获得的数据在一个文件夹里,文件夹里面又有各种类别的文件夹,每个文件里面有各自类别的图片.比如.

之后我们要想划分就需要知道你的数据集的图片格式是什么?这样才能更好的去认识数据集的情况方便以后操作.

import os
# 定义原始文件夹路径、目标文件夹路径和剩余文件夹路径
source_folder = 'path/to/source/folder'img_classes = set()#定义一个名字集合
# 遍历原始文件夹中的每个文件夹
for folder_name in os.listdir(source_folder):if not os.path.isdir(os.path.join(source_folder, folder_name)):continue# 获取当前文件夹中所有图片的路径images = []for file_name in os.listdir(os.path.join(source_folder, folder_name)):split_result = file_name.split('.')#使用'.'分隔图片名称extension = split_result[-1]img_classes.add(extension)#加入集合img_classes#返回图片格式

像这样的一个集合

如果你的图片的格式太多建议完全转化一下,尽量不要超过5个,当然全一样的最好,我们这样做是因为在大量数据的时候可能会发生几张图片格式不一致,为了后续操作提供便利.

二、划分训练集和测试集

假设我们现在的要求是将每个分类样本都抽取30张图片放入测试集文件夹,剩余的文件放入训练集的文件夹,并且保持源来的数据集文件夹不变,我们可以用下面代码进行操作.

import os
import random
from PIL import Image
import shutil# 定义原始文件夹路径、目标文件夹路径和剩余文件夹路径
source_folder = 'path/to/source/folder'#源文件夹
target_folder = 'path/to/target/folder'#测试集文件夹
remaining_folder = 'path/to/remaining/folder'#训练集文件夹# 遍历原始文件夹中的每个文件夹
for folder_name in os.listdir(source_folder):if not os.path.isdir(os.path.join(source_folder, folder_name)):continue# 创建目标文件夹路径和剩余文件夹路径target_subfolder = os.path.join(target_folder, folder_name)os.makedirs(target_subfolder, exist_ok=True)remaining_subfolder = os.path.join(remaining_folder, folder_name)os.makedirs(remaining_subfolder, exist_ok=True)# 获取当前文件夹中所有图片的路径images = []for file_name in os.listdir(os.path.join(source_folder, folder_name)):if file_name.endswith('.JPG') or file_name.endswith('.jpg') or file_name.endswith('.png') or file_name.endswith('.jpeg') :#这里就是你的图片格式images.append(os.path.join(source_folder, folder_name, file_name))# 随机选择30张图片selected_images = random.sample(images, k=30)# 将选中的图片复制到目标文件夹for image_path in selected_images:with Image.open(image_path) as img:file_name = os.path.basename(image_path)target_path = os.path.join(target_subfolder, file_name)shutil.copy(image_path, target_path)# 将剩余的图片移动到剩余文件夹remaining_images = list(set(images) - set(selected_images))for image_path in remaining_images:file_name = os.path.basename(image_path)remaining_path = os.path.join(remaining_subfolder, file_name)shutil.copy(image_path, remaining_path)

这样你就得到了训练集文件夹里面包括各种类别的文件夹并且每个文件夹里面有30张随机抽出的图片了,训练集文件夹则是你抽取后剩余的图片啦!

如果你不保证的话可以测试一下训练集的图片数加测试集的图片书是否等于总的图片数.

你可以这样测试.

import torchvision #这个包学深度学习应该有,没有的话你换一个读取数据也行
data_path1 = 'trainfolder'
train_data = torchvision.datasets.ImageFolder(root=data_path1)
data_path2 = 'resourcefolder'
full_data = torchvision.datasets.ImageFolder(root=data_path2)
data_path3 = 'testfolder'
test_data = torchvision.datasets.ImageFolder(root=data_path3)
print(len(train_data))
print(len(test_data))
print(len(full_data))

总结

本节介绍了如何对我们得到的数据文件进行操作,将其分成测试集和训练集两个部分,以便我们后续对数据得操作,之后我会出一期数据增强的操作,我们先将原始数据集划分,而后做数据增强的原因是数据增强后在划分可能会对测试集的污染这样你在训练的时候看起来不错,但在投入实际时却效果不好的原因,马上就会更新,期待各位小伙伴的关注.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/344139.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【椒盐玉兔】GPTs Store 商店的TOP100 自定义GPT使用报告

详细的图文报告有100张图,因为太长就放网盘链接 链接:百度网盘 请输入提取码 提取码:ub2n 解压密码:heehel 更多作品:长期更新国内外,中英文AI人工智能作品 整理获取 通过算法,筛选出了目前访…

水汽稳定度修正函数\Psi_q对潜热通量影响--模式验证工作

我之前提出了一个水汽通量廓线关系,这项工作偏理论,如果对下面说的背景不了解的话可以看下 https://agupubs.onlinelibrary.wiley.com/share/YNSG74MV8B8BAAUMCHN3?target10.1029/2022JD036708 那会没把提出的水汽稳定度修正函数加到CAS-ESM,当时对CAS-…

Unity游戏开发面试知识点全解读

Unity游戏开发面试知识点全解读 在数字化世界中,Unity游戏开发不仅是一种艺术形式和商业活动,而且已成为推动整个数字娱乐产业创新和进步的重要力量。Unity以其易用性、高效性和灵活性,赢得了全球开发者的青睐,从独立开发者到大型…

伐木工 - 华为OD统一考试

OD统一考试 题解: Java / Python / C++ 题目描述 一根X米长的树木,伐木工切割成不同长度的木材后进行交易,交易价格为每根木头长度的乘积。规定切割后的每根木头长度都为正整数,也可以不切割,直接拿整根树木进行交易。请问伐木工如何尽量少的切割,才能使收益最大化? 输…

mysql8.0 1055报错问题 [安装包]安装修改

mysql1055报错问题 this is incompatible with sql_modeonly_full_group_by 刚从5.7 升级到8.0 再运行之前的代码就给我搞事情 例如 select a , b from table group by b 之前没问题 8.0默认有个only_full_group_by 这个是强效验证的 网上看了看资料 发现我的sql_Mode里面 没…

EOCR电机保护器485通讯协议概念

Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给IDA(In…

无法解析的外部符号 “public: virtual void * __cdecl MyTcpsocket::qt_metaca

问题:严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2001 无法解析的外部符号 "public: virtual void * __cdecl MyTcpsocket::qt_metacast(char const *)" (?qt_metacastMyTcpsocketUEAAPEAXPEBDZ) SmartTool D:\…

使用 CMake 和 Ninja 构建 C/C++ 项目的教程

使用 CMake 和 Ninja 构建 C/C 项目的教程 CMake 是一个跨平台的开源构建工具,它简化了项目的构建过程。而 Ninja 是一个快速、轻量级的构建系统,与 CMake 配合使用可以提高项目的构建效率。本教程将向你介绍如何使用 CMake 和 Ninja 来构建你的 C/C 项…

matlab/simulink风电光伏储能虚拟同步机VSG下垂控制虚拟惯量控制,光伏变压减载控制一次调频二次调频研究,储能下垂控制SOC

非无穷大系统! 第一个介绍风光储VSG算例研究。 其中风机采用虚拟惯性控制,下垂控制,网侧采用VSG虚拟同步机控制。储能下垂控制。 上述结果为整个系统的仿真波形,包括频率,pmsg永磁风机出力,储能出力&…

无重复字符的最长字串

题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解…

揭露欧拉骗局4.“Σ1/n²=π²/6”里的猫腻

自然数平方倒数求和Σ1/n是一个并不复杂的问题,但它困扰了欧洲大陆整整90年,在欧系数学里它被称为“巴塞尔级数”。 解决巴塞尔级数让欧拉一战成名,然而欧拉采用的方法对数学这门学问是严重的侮辱。数学是工具学科,数学的宗旨是化…

聚焦老年生活与健康,“老有所依·情暖夕阳”元岗街社区微型养老博览会顺利开展

尊老敬老是中华民族的传统美德, 爱老助老是全社会的共同责任。 家有一老,如有一宝, 长者的生活情况是一个家庭的头等大事, 做好长者服务是街道和社区的重要工作。 2024年1月6日,由元岗街道党工委、元岗街道办事处、…