用 Python 从零开始创建神经网络(十三):训练数据集(Training Dataset)

ops/2024/12/27 17:48:08/

训练数据集(Training Dataset)

  • 引言

引言

既然我们在讨论数据集和测试,就值得提到关于训练数据集的一些操作,这些操作称为预处理。然而,重要的是要记住,无论我们对训练数据进行什么预处理,这些处理也需要应用到验证数据、测试数据以及后续的预测数据上。

神经网络通常在值范围为 0 0 0 1 1 1 − 1 -1 1 1 1 1的数据上表现最佳,其中 − 1 -1 1 1 1 1范围更为优选。将数据中心化到 0 0 0可以帮助模型训练,因为这可以减弱权重在某个方向上的偏置。尽管在大多数情况下,模型在 0 0 0 1 1 1范围内的数据上也能正常工作,但有时我们需要将数据重新缩放到 − 1 -1 1 1 1 1的范围,以使训练更稳定或获得更好的结果。

谈到数据范围,数据值不一定严格局限于 − 1 -1 1 1 1 1之间——模型在稍微超出该范围或某些值远大于范围时也能表现良好。这种情况通常发生在我们用权重乘以数据并将结果与偏置求和后,结果会传递给一个激活函数。许多激活函数在上述范围内表现良好。例如,softmax会输出一个范围在 0 0 0 1 1 1之间的概率向量;sigmoid的输出范围也是 0 0 0 1 1 1,而tanh的输出范围则是 − 1 -1 1 1 1 1

另一个为何这种缩放理想的原因在于神经网络依赖大量的乘法运算。如果我们乘以大于 1 1 1或小于 − 1 -1 1的数字,结果的规模会比原始值更大。而在 − 1 -1 1 1 1 1的范围内,结果是一个分数,即更小的值。将训练数据中的大数值与权重相乘可能会导致浮点溢出或不稳定性,例如权重增长过快。使用较小的数值更容易控制训练过程。

数据预处理有许多相关术语,例如标准化、缩放、方差缩放、均值去除(如前所述)、非线性变换、针对异常值的缩放等,但这些超出了本书的范围。我们仅通过将所有数字除以其绝对值的最大值来将数据缩放到一个范围。例如,对于一个值范围在 0 0 0 255 255 255之间的图像,我们将整个数据集除以 255 255 255,使数据返回到 0 0 0 1 1 1的范围。我们也可以减去 127.5 127.5 127.5(得到范围从 − 127.5 -127.5 127.5 127.5 127.5 127.5),然后再除以 127.5 127.5 127.5,使数据返回到 − 1 -1 1 1 1 1的范围。

我们需要确保对所有数据集(训练集、验证集和测试集)使用相同的缩放方式(相同的缩放参数)。例如,可以找到训练数据的最大值,并用这个数值除以训练、验证和测试数据的所有值。一般来说,我们应准备一个选择的缩放器,并在每个数据集上使用它的实例。需要记住的是,一旦我们训练了模型并想用新的样本进行预测时,必须使用与训练、验证和测试数据相同的缩放器实例对这些新样本进行缩放。通常情况下,当处理数据(例如传感器数据)时,需要将缩放器对象与模型一起保存,并在预测时使用,否则结果可能会有所不同,因为如果数据未经缩放,模型可能无法有效识别这些数据。

通常,用基于训练数据准备的缩放器对包含比训练数据更大的数字的数据集进行缩放是可以接受的。如果结果的数值略微超出 − 1 -1 1 1 1 1的范围,通常不会对验证或测试产生负面影响,因为我们不会在这些数据上进行训练。此外,对于线性缩放,我们可以使用不同的数据集来找到最大值,但要注意,对于非线性缩放,可能会泄露其他数据集的信息到训练数据集中,在这种情况下,缩放器应仅基于训练数据准备。

在训练样本较少的情况下,我们可以使用数据增强(Data Augmentation)。一个简单理解数据增强的方法是以图像为例。假设我们的模型目标是检测腐烂的水果——例如苹果。我们会从不同角度拍摄苹果的照片,并预测它是否腐烂。虽然我们需要更多的照片,但假设无法获取更多样本。这种情况下,我们可以对已有的照片进行旋转、裁剪,并将这些处理后的图像也保存为有效数据。通过这种方式,我们为数据集增加了样本数量,这有助于模型的泛化能力。

一般来说,数据增强只有在生成的增强样本与现实中可能出现的变化相似时才有用。例如,如果我们在构建检测路标的模型时,通常不会使用旋转增强,因为现实中路标通常不会被旋转(大多数情况下)。但如果你在开发自动驾驶汽车时,这种情况就值得考虑。比如,一个停车标志的螺栓松动并倒转了,但这并不意味着车辆可以忽视停车要求,因此模型需要考虑这些异常情况。

我们需要多少样本来训练模型呢?这个问题没有唯一答案——某些模型可能只需要每个类别少量的样本,而其他模型可能需要数百万甚至数十亿的样本。通常,每个类别几千个样本是必要的,而每个类别数万样本是比较理想的起点。具体需求取决于数据的复杂性和模型的规模。例如,如果模型需要预测包含简单两类的传感器数据,例如图像中是否有暗区域,那么每个类别几百个样本可能就足够了。而如果需要训练包含多特征和多类别的数据,则建议以数万样本为起点。如果你尝试训练一个聊天机器人以理解书面语言的复杂性,通常至少需要数百万样本。


本章的章节代码、更多资源和勘误表:https://nnfs.io/ch13


http://www.ppmy.cn/ops/139606.html

相关文章

ubuntu 安装微信,记录

1.下载 Weixin for Linux (Test Version) 2.命令行 duyichengduyicheng-computer:~/Downloads$ sudo dpkg -i WeChatLinux_x86_64.deb 3.等等 4.扫一扫 5.测试一下。 完成。

【Linux】命令行参数环境变量

命令行参数 main 函数⼀共有三个参数&#xff0c;在命令行部分先关注前两个参数&#xff1a; 1、argc‌&#xff1a;表示命令行参数的个数 2、argv&#xff1a;表示命令行参数的清单 根据下⾯的代码观察这两个参数具体的效果&#xff1a; #include <stdio.h>int main…

centos 常见问题处理

免密登录配置 # 在当前机器下 执行命令 生成 私钥和公钥 ~/.ssh 目录下 ssh-keygen -t rsa # 执行如下命令 把公钥 放到 对应机器上的 ~/.ssh/authorized_keys ssh-copy-id 172.17.68.220 # 如此 两台机器两两配置 centos ssh连接慢 vim /etc/ssh/sshd_config # UseD…

车载VR可视化解决方案

车载VR可视化解决方案是通过融合跟踪用户头部运动的特殊预测算法与惯性测量数据而开发的。该系统将大范围虚拟现实跟踪技术与IMU传感器相结合&#xff0c;为VR和AR应用打造了一套全面的运动跟踪与渲染流程&#xff0c;极大地方便了虚拟现实头显制造商定制可视化流程。 该车载VR…

Leetcode 每日一题 49.字母异位词分组

目录 问题描述 示例 示例 1 示例 2 示例 3 约束条件 解决方案 思路 算法步骤 过题图片 代码实现 复杂度分析 题目链接 结论 问题描述 给定一个字符串数组&#xff0c;需要将其中的字母异位词分组。字母异位词是指通过重新排列源单词的所有字母得到的新单词。要求…

【技巧】Mac上如何显示键盘和鼠标操作

在制作视频教程时&#xff0c;将键盘和鼠标的操作在屏幕上显示出来&#xff0c;会帮助观众更容易地理解。 推荐Mac上两款开源的小软件。 1. KeyCastr 这款工具从2009年至今一直在更新中。 https://github.com/keycastr/keycastr 安装的话&#xff0c;可以从Github上下载最…

MATLAB在生态环境数据处理与分析中的应用

专题一 MATLAB编程入门 要点&#xff1a;介绍、案例演示、软件界面、语法基础、基本运算等 专题二&#xff08;试听&#xff09; MATLAB编程入门 要点&#xff1a;脚本编写、函数调用、循环控制、代码调试、文件读写等 专题三 MATLAB可视化与绘图 要点&#xff1a;交互式…

【Android】从事件分发开始:原理解析如何解决滑动冲突

【Android】从事件分发开始&#xff1a;原理解析如何解决滑动冲突 文章目录 【Android】从事件分发开始&#xff1a;原理解析如何解决滑动冲突Activity层级结构浅析Activity的setContentView源码浅析AppCompatActivity的setContentView源码 触控三分显纷争&#xff0c;滑动冲突…