
怎么自定义一个数据集?自定义数据集面临哪些问题? 原创
“ 在目前的神经网络应用中,数据集是对大部分企业需要面临的主要问题。”
数据集作为神经网络模型中的一个必要环节,其重要性不言而喻;虽然网络上有很多开源的数据集,但对很多场景来说需要自定义数据集才能满足自身的需求。
从目前的大模型发展来看,大部分企业选择在开源模型的基础之上做训练和微调是比较好的选择;而这时,神经网络结构就不是主要的技术难点,反而是数据成为了很多企业的痛点,成为亟待解决的问题。
因此,怎么自定义一个数据集就成为很多人面临的问题;自定义是一个复杂的问题,中间涉及到很多环节;当然除了那些数据处理的第三方公司之外,在业务场景中技术人员一般获得的是经过前期初步处理的数据。
这时需要做的就是把经过初步处理的数据给统一化,结构化。
自定义图像数据集
自定义数据集是一个复杂且繁琐的过程,包括前期的数据收集与整理;以及把整理之后的数据转换成神经网络所需要的格式;而这也是数据集比较麻烦的一个地方。
自定义一个数据集需要哪些步骤? 自定义数据集大概需要经过以下几个步骤:
- 确定任务目标
- 收集数据
- 数据清洗
- 数据标注
- 数据预处理
- 划分数据集
1. 明确任务目标
在创建数据集之前,首先需要明确任务的目标和需求:
- 是分类任务、回归任务、目标检测任务还是图像分割任务?
- 需要哪些输入特征和目标变量?
- 数据的形式是什么(如图片、文本、表格数据)?
2. 收集数据
根据任务目标,收集相关的数据。数据来源可以包括:
- 公开数据集:如 Kaggle、UCI Machine Learning Repository、Google Dataset Search 等。
- 内部数据:如公司数据库、日志文件等。
- 网络爬虫:从网页中抓取数据(需注意合法性和道德问题)。
- API:通过第三方 API 获取数据(如 Twitter API、Google Maps API 等)。
3. 数据清洗
数据清洗是确保数据质量的关键步骤,主要包括:
- 处理缺失值:删除或填充缺失值。
- 处理异常值:删除或修正异常值。
- 去除重复数据:删除重复的记录。
- 格式标准化:统一日期、时间、单位等格式。
- 文本数据清洗:去除特殊字符、停用词、HTML 标签等。
4. 数据标注
如果任务需要监督学习,需要对数据进行标注:
- 手动标注:通过人工标注数据。
- 自动标注:使用规则或预训练模型进行自动标注。
- 众包标注:通过众包平台(如 Amazon Mechanical Turk)进行标注。
根据目录标注的蚂蚁图片:
5. 数据预处理
对数据进行预处理,以适应模型的输入要求:
- 特征工程:从原始数据中提取有用的特征。
- 归一化/标准化:将数据缩放到相同的范围。
- 数据增强:对数据进行变换(如旋转、翻转、添加噪声等),以增加数据多样性。
6. 划分数据集
将数据集划分为训练集、验证集和测试集:
- 训练集:用于训练模型。
- 验证集:用于调整超参数和评估模型性能。
- 测试集:用于最终评估模型的泛化能力。
而在大部分情况下,在企业应用中确认任务目标之后,很少有人真的会按照以上步骤处理数据;特别是第二步和第四步。
一般情况下在,技术人员拿到的数据是经过初步处理的;比如说标注之后的数据;而这时我们可能需要根据具体情况对数据再进行一次清洗和进一步的处理。
举个具体的例子来说,假如你需要整理一个图片数据集;这时你拿到的图片数据可能是根据目录标注好的或者使用专门的标注文档标注之后的数据。
但这时的数据可能面临着图片大小不一,格式不同(png,jpg),通道也不同(RGB是三通道,还有灰度的单通道);甚至可能其中夹杂着一些其它图片,比如在狗狗的图片目录中夹杂着部分猫的图片。
在正常情况下的数据处理中,我们应该主要关注第一,三,五,六步;而这也是数据处理过程中必不可少的环节;其中比较复杂的主要是三和五步,
# 使用PIL的Image把图片处理成统一大小;当然,这只是最简单的变换方式,可能会导致图片变形
def resize_image(img, target_size):
return img.resize(target_size, Image.Resampling.LANCZOS)
本文转载自公众号AI探索时代 作者:DFires
