BUI新系列博文将聚焦AI相关领域,如果你想了解高通蓝牙,可以查看之前的系列或关注大博主声波和无线电波着眼于今天
1.如果模型对输入数据有要求,它将传入用于转换数据的转换,包括标签的目标转换(所有方法都可以在 transforms 包中找到),这些转换将在数据加载器中用于调用 getitem 函数。 此外,还会传入一些其他设置参数,但会保存在本地以备后用。 此函数的主要目的是对数据进行整理,数据和标签相互对应形成列表,方便获取,也方便len函数对数字进行计数。
2.例如,数据和标签存储在不同的文件夹中,我们可以使用它们的路径进行组队并将它们放入列表中。 getItem,根据路径提取内容; 例如,如果标签只存储在一个文件中,我们需要读取里面的内容,并将其映射到相应的数据文件。 也就是说,数据文件名和标签文件名是不一样的,我们需要依靠第三个索引表来查找对应关系,还需要读出来匹配它们。
3.一般情况下,训练数据被组织成训练样本,供getitem快速提取和加快训练时间。
4.获取数据集总数:获取可用样本数。
5.getItem 获取指定的索引样本:根据索引找到对应的样本,如果有变换,需要先将数据或标签转换为指定的数据格式。 例如,将大小调整为相同大小的**; 或对数据进行归一化; 或转换为张量格式。 标签可以转换为数据格式、坐标格式、一次性热编码等。 这些转换旨在满足模型输入要求或提供模型性能。
除了上面提到的基本功能外,一些衍生框架还会添加很多调优功能,比如如果训练样本不够,就添加更多的增强数据; 将数据或标签放入RAM中,以提供训练数据; 如果数据和标签没有对,请丢弃它们; 这些类型中只有少数被用作样本数据等,以及这些个性化的调整功能。
数据加载器的作用是管理数据的加载,并为模型所需的数据格式提供输入。 为了加快训练速度,DataLoader 将多个数据样本打包成一个批处理(相当于将数据和标签合并到相应的大张量中),并将多个数据样本一次性发送到模型中进行训练。 (这里的打包是将多个张量堆叠在一起,通过使用迭代器逐个获取它们来完成它们。 但是,如果样本的张量不一致,例如,对象检测的标签有多个输出,则会发生直接堆叠错误。 因此,DataLoader 提供了 collate fn 函数来自定义打包函数,但要注意满足模型输入要求的堆叠张量,并且每次都能在 DataLoader 的迭代器中返回所需的样本数据和标签)。
包的数量不宜设置得太小,否则模型难以收敛。 但是,它不应该太大,每个包的数量取决于内存容量,如果太大,它可能无法在训练中保持内存。 (温馨提示:GPU的2次幂可以发挥更好的性能,所以最好设置为相等的数字,但大多数数据集都不能被这些数字整除,所以经常会有剩余的数据不足以组成一批,所以可以选择不使用剩余的数据)。
此外,如果数据按类别排序,直接序列也会影响模型的收敛速度,因此 DataLoader 会提供对数据进行加扰的功能。 除了这些基本功能之外,还有其他方法可以加速训练,比如把数据放到页面存储中,加快读取速度,在多个进程中运行数据加载器等,只要有足够的资源,都可以直接配置数据加载器。
附件(见大同)上传自定义数据集和数据加载器使用场景例程,必要时可以参考。 以上就是这篇博文的全部内容,如果您有任何问题,请在博文下方留言,我会尽快解答(o o)。 感谢您的浏览,我们下次再见。
简单是长期努力的结果,而不是起点-不是我常见问题 1:keras 可以使用这种方法吗?
A1:不,Keras 是基于 TensorFlow 框架的。
常见问题 2:标签格式有哪些?
A2:请参阅之前的博文 - BIU了解ai:object detection训练数据的标签格式。
FAQ 3:我可以获取数据加载器的数据并显示吗?
A3:可以,但是如果有变换,会转换成对应的张量,那么数据就不能直接显示,需要反转换。
FAQ 4:train 和 val 是否应该使用相同的数据加载器?
A4:不能说完全一样,因为 train 和 val 的任务不同,val 不需要考虑模型性能等问题,所以在转换数据时,不需要考虑数据增强。
常见问题 5:是否可以使用不同格式的图像数据?
A5: 是的,但您需要转换,只需将其更改为 RBG 格式即可。
登录大同,**附上技术文档,了解更多关于 PyTorch 架构相关的 CV 训练数据输入。