前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于OCR模型的训练数据划分教程

基于OCR模型的训练数据划分教程

原创
作者头像
IT蜗壳-Tango
发布于 2024-08-04 14:46:44
发布于 2024-08-04 14:46:44
26403
代码可运行
举报
文章被收录于专栏:机器学习机器学习
运行总次数:3
代码可运行

在训练OCR(光学字符识别)模型时,数据集的划分是至关重要的步骤。合理的划分能确保模型的泛化能力,即在未见过的数据上仍能表现良好。本文将详细介绍如何划分训练集、验证集和测试集,确保模型的性能和可靠性。

1. 数据集准备

在开始数据集划分之前,首先需要准备好原始数据集。OCR任务的数据集通常由带有文字的图像及其对应的标签(文本)组成。一个典型的数据集可能包含成千上万张图像,涵盖各种字体、语言和文本布局。

1.1 数据收集
  • 多样性:确保数据集涵盖不同的字体、大小、语言、背景和噪声情况。
  • 标注质量:每张图像都应有精确的文本标签,错误或不完整的标签会影响模型的训练效果。

2. 数据集划分

数据集通常划分为三个部分:训练集(Training Set)、验证集(Validation Set)和测试集(Test Set)。

2.1 训练集

训练集用于训练模型,是数据集中最大的一部分。一般来说,训练集占整个数据集的60%到80%。训练集中的样本应尽可能全面,涵盖所有可能的场景和变体,以便模型能够学习到足够的信息。

2.2 验证集

验证集用于调优模型超参数以及选择最佳模型。通常占数据集的10%到20%。验证集应与训练集保持一致性,但又不能完全相同,以避免过拟合。通过在验证集上的表现,我们可以调整模型的结构和参数,确保模型的泛化能力。

2.3 测试集

测试集用于评估最终模型的性能,通常占数据集的10%到20%。测试集应在训练过程中完全隔离,不能用于任何模型调整。只有在训练和验证完成后,才能使用测试集进行评估,以提供一个真实的性能衡量标准。

3. 数据集划分策略

3.1 随机划分

最简单的方法是随机划分数据集。假设有10000张图像,可以随机抽取6000-8000张作为训练集,1000-2000张作为验证集,1000-2000张作为测试集。

代码语言:python
代码运行次数:3
运行
AI代码解释
复制
from sklearn.model_selection import train_test_split

# 假设 images 是图像列表,labels 是对应的标签列表
train_images, test_images, train_labels, test_labels = train_test_split(images, labels, test_size=0.2, random_state=42)
train_images, val_images, train_labels, val_labels = train_test_split(train_images, train_labels, test_size=0.25, random_state=42)
# 最终划分比例为:训练集 60%,验证集 20%,测试集 20%
3.2 分层抽样

对于不平衡数据集,分层抽样可以确保每个类别在训练集、验证集和测试集中都有相同比例的样本。这对于OCR模型特别重要,因为不同字符、字体和语言的分布可能非常不均匀。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from sklearn.model_selection import StratifiedShuffleSplit

# 分层抽样划分
sss = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
for train_index, test_index in sss.split(images, labels):
    train_images, test_images = images[train_index], images[test_index]
    train_labels, test_labels = labels[train_index], labels[test_index]

sss = StratifiedShuffleSplit(n_splits=1, test_size=0.25, random_state=42)
for train_index, val_index in sss.split(train_images, train_labels):
    train_images, val_images = train_images[train_index], train_images[val_index]
    train_labels, val_labels = train_labels[train_index], train_labels[val_index]
# 最终划分比例为:训练集 60%,验证集 20%,测试集 20%
3.3 时间序列划分

如果数据集具有时间相关性(例如OCR任务中的连续扫描页),应根据时间顺序进行划分,确保训练集、验证集和测试集都涵盖不同时期的数据,避免模型只在特定时间段的数据上表现良好。

4. 数据增强

在数据集划分后,可以对训练集进行数据增强,以增加数据的多样性。常用的增强方法包括旋转、缩放、翻转、添加噪声等。这些操作可以帮助模型更好地泛化,减少过拟合。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rotation_range=10,
    width_shift_range=0.1,
    height_shift_range=0.1,
    shear_range=0.1,
    zoom_range=0.1,
    horizontal_flip=True,
    fill_mode='nearest')

# 训练集增强示例
datagen.fit(train_images)

5. 实践案例

假设我们有一个包含10000张图像的OCR数据集,标签包括英文、数字和一些特殊字符。我们可以使用上述方法将数据集划分为:

  • 训练集:6000张
  • 验证集:2000张
  • 测试集:2000张

通过分层抽样确保每个字符类别在三个子集中都有相同比例的样本。然后对训练集进行数据增强,增加数据的多样性。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 数据集划分
from sklearn.model_selection import train_test_split

# 随机划分数据集
train_images, test_images, train_labels, test_labels = train_test_split(images, labels, test_size=0.2, random_state=42)
train_images, val_images, train_labels, val_labels = train_test_split(train_images, train_labels, test_size=0.25, random_state=42)

# 数据增强
from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rotation_range=10,
    width_shift_range=0.1,
    height_shift_range=0.1,
    shear_range=0.1,
    zoom_range=0.1,
    horizontal_flip=True,
    fill_mode='nearest')

datagen.fit(train_images)

# 训练模型示例
model.fit(datagen.flow(train_images, train_labels, batch_size=32), epochs=50, validation_data=(val_images, val_labels))

6. 结论

合理的数据集划分和数据增强是确保OCR模型性能的关键步骤。通过划分训练集、验证集和测试集,并结合数据增强技术,可以提高模型的泛化能力,确保其在不同场景下的可靠性。希望本教程能够帮助您在实际项目中更好地进行数据集划分和模型训练。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
机器学习中的交叉验证
总第100篇 本篇讲讲机器学习中的交叉验证问题,并利用sklearn实现。 前言 在说交叉验证以前,我们先想一下我们在搭建模型时的关于数据切分的常规做法[直接利用train_test_split把所有的数据集分成两部分:train_data和test_data,先在train_data上进行训练,然后再在test_data上进行测试评估模型效果的好坏]。 因为我们训练模型时,不是直接把数丢进去就好了,而是需要对模型的不断进行调整(比如参数),使模型在测试集上的表现足够好,但是即使模型在测试集上效果好,不
张俊红
2018/04/11
2K0
机器学习中的交叉验证
深度学习中超大规模数据集的处理
在机器学习项目中,如果使用的是比较小的数据集,数据集的处理上可以非常简单:加载每个单独的图像,对其进行预处理,然后输送给神经网络。但是,对于大规模数据集(例如ImageNet),我们需要创建一次只访问一部分数据集的数据生成器(比如mini batch),然后将小批量数据传递给网络。其实,这种方法在我们之前的示例中也有所涉及,在使用数据增强技术提升模型泛化能力一文中,我就介绍了通过数据增强技术批量扩充数据集,虽然那里并没有使用到超大规模的数据集。Keras提供的方法允许使用磁盘上的原始文件路径作为训练输入,而不必将整个数据集存储在内存中。
云水木石
2019/07/02
1.5K0
深度学习中超大规模数据集的处理
机器学习|模型选择之划分数据集及Sklearn实现
直接将数据集D划分为两个互斥的集合:训练集S和测试集T(D = S∪T,S∩T = ∅),在S上训练模型,用T来评估其测试误差。
用户1621951
2019/10/18
2.5K0
微调YOLOv11:实用指南 【详细过程与代码】
本指南旨在引导您为自身任务微调YOLOv11。我将分享我个人认为有效的步骤,附带详细代码、真实案例及实用建议。内容包括:
小白学视觉
2025/01/07
1.2K0
微调YOLOv11:实用指南 【详细过程与代码】
英文文本关系抽取(fine-tune Huggingface XLNet)
本文主要是基于英文文本关系抽取比赛,讲解如何fine-tune Huggingface的预训练模型,同时可以看作是关系抽取的一个简单案例
mathor
2020/08/31
1.5K0
智能环保卫士:AI 图像识别助力垃圾分类与环保教育
不用多讲,想必大部分也都知道深度学习是人工智能的一个重要分支,它通过构建多层神经网络来模拟人脑的信息处理方式。在图像识别领域,深度学习模型(如卷积神经网络,CNN)能够自动从大量图像数据中学习特征,从而实现对图像的分类和识别。尤其是近年来,深度学习在图像识别任务中取得了显著的成果,其准确率和效率都得到了极大的提升。
三掌柜
2025/04/18
1230
使用自己的数据集训练MobileNet、ResNet实现图像分类(TensorFlow)| CSDN博文精选
之前写了一篇博客《使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型(TensorFlow)》https://panjinquan.blog.csdn.net/article/details/81560537,本博客就是此博客的框架基础上,完成对MobileNet的图像分类模型的训练,其相关项目的代码也会统一更新到一个Github中,强烈建议先看这篇博客《使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型(TensorFlow)》后,再来看这篇博客。
AI科技大本营
2019/12/23
7K0
在Python和R中使用交叉验证方法提高模型性能
模型表现差异很大的可能原因是什么?换句话说,为什么在别人评估我们的模型时会失去稳定性?
拓端
2021/01/28
1.7K0
在Python和R中使用交叉验证方法提高模型性能
MNIST手写数据集
MNIST是一个非常经典的手写数字数据集,由美国国家标准与技术研究所(NIST)在20世纪80年代整理和标注。这个数据集包含了一系列0到9的手写数字图像,用于机器学习中的图像分类任务。MNIST数据集被广泛应用于训练和验证机器学习模型的性能。
大盘鸡拌面
2023/10/22
8940
使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型(TensorFlow)「建议收藏」
【尊重原创,转载请注明出处】https://blog.csdn.net/guyuealian/article/details/81560537
全栈程序员站长
2022/09/21
1.2K0
使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型(TensorFlow)「建议收藏」
python︱sklearn一些小技巧的记录(训练集划分/pipelline/交叉验证等)
版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/77917881
悟乙己
2019/05/26
1.4K0
深入探索:【人工智能】、【机器学习】与【深度学习】的全景视觉之旅
人工智能(Artificial Intelligence, AI)是计算机科学的一个分支,旨在开发能够模拟或增强人类智能的系统。AI的研究范围广泛,涵盖了从基础算法到复杂系统的开发。
小李很执着
2024/08/14
1410
Python 深度学习第二版(GPT 重译)(三)
您现在对 Keras 有了一些经验——您熟悉 Sequential 模型、Dense 层以及用于训练、评估和推断的内置 API——compile()、fit()、evaluate() 和 predict()。您甚至在第三章中学习了如何从 Layer 类继承以创建自定义层,以及如何使用 TensorFlow 的 GradientTape 实现逐步训练循环。
ApacheCN_飞龙
2024/03/21
4270
Python 深度学习第二版(GPT 重译)(三)
B.机器学习实战系列[一]:工业蒸汽量预测(最新版本下篇)含特征优化模型融合等
K折交叉验证: KFold 将所有的样例划分为 k 个组,称为折叠 (fold) (如果 k = n, 这等价于 Leave One Out(留一) 策略),都具有相同的大小(如果可能)。预测函数学习时使用 k - 1 个折叠中的数据,最后一个剩下的折叠会用于测试。
汀丶人工智能
2023/03/28
1.6K0
B.机器学习实战系列[一]:工业蒸汽量预测(最新版本下篇)含特征优化模型融合等
深度揭秘,教你驾驭 AI 大模型的无限可能
随着人工智能技术的飞速发展,AI 大模型在诸多领域展现出了强大的能力。然而,要充分发挥其潜力,正确的使用方法至关重要。
羑悻的小杀马特.
2025/03/30
1810
手把手学机器学习算法中数据预处理(附代码)
当你想了解机器学习,最好的方式就是用真实的数据入手做实验。网络上有很多优秀的开源资料。这里我们选择了加利福尼亚的房价数据集(数据的获得后面会给出),它的统计图如下所示,横纵坐标分别代表经纬度,图上有很多圈圈,而圈圈的大小代表着人口数,颜色图则表示房均价,那么一堆数据到手了,但是我们到底要做什么呢?
智能算法
2020/09/08
1K0
手把手搭建一个【卷积神经网络】
本文介绍卷积神经网络的入门案例,通过搭建和训练一个模型,来对10种常见的物体进行识别分类;使用到CIFAR10数据集,它包含10 类,即:“飞机”,“汽车”,“鸟”,“猫”,“鹿”, “狗”,“青蛙”,“马”,“船”,“卡车” ;共 60000 张彩色图片;通过搭建和训练卷积神经网络模型,对图像进行分类,能识别出图像是“汽车”,或“鸟”,还是其它。
一颗小树x
2021/05/12
1.5K0
手把手搭建一个【卷积神经网络】
机器学习数据集的获取和测试集的构建方法
上一篇机器学习入门系列(2)--如何构建一个完整的机器学习项目(一)介绍了开始一个机器学习项目需要明确的问题,比如当前任务属于有监督还是无监督学习问题,然后性能指标需要选择什么,常用的分类和回归损失函数有哪些,以及实际开发中需要明确系统的输入输出接口问题。
kbsc13
2019/08/16
2.6K0
1维卷积神经网络_卷积神经网络 一维信号处理
  维卷积神经网络,可以用来做一维的数据分析,以家用电器的识别分类作为背景。使用excel画出的简单的图形如下,横坐标为用电器开启后的秒数,纵坐标为某一秒的有功功率,由上至下分别为空调(Air Conditioner),冰箱(Refrigerator),烤炉(Stove): !
全栈程序员站长
2022/09/30
2.1K0
1维卷积神经网络_卷积神经网络 一维信号处理
使用贝叶斯优化进行深度神经网络超参数优化
为了方便起见本文将使用 Tensorflow 中包含的 Fashion MNIST[1] 数据集。该数据集在训练集中包含 60,000 张灰度图像,在测试集中包含 10,000 张图像。每张图片代表属于 10 个类别之一的单品(“T 恤/上衣”、“裤子”、“套头衫”等)。因此这是一个多类分类问题。
deephub
2022/11/11
1.3K0
使用贝叶斯优化进行深度神经网络超参数优化
推荐阅读
相关推荐
机器学习中的交叉验证
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验