如何彻底随机化大型TensorFlow数据集
使用大型数据集训练模型面临一个不可忽略的问题。
随着你对神经网络了解的深入,遇到大型数据集是迟早的事情。例如用于人脸识别模型训练的微软百万人脸数据集,可供训练的图像超过500万张。
使用大型数据集训练模型面临一个不可忽略的问题:如何有效地随机化数据。
以这个包含20个元素的数据集为例。通常我们会使用TensorFlow data API的shuffle操作。该操作可以在模型训练时在线打乱数据。然而shuffle操作受限于缓存大小。当缓存太小无法覆盖庞大的数据集时,shuffle操作仅能实现局部化的乱序操作。
这种情况下,我们需要采用离线乱序操作。将训练样本乱序存储在TensorFlow Record文件中。这里提供一个参考思路。
假设这是你的数据集,其中的样本按照某种规则顺序排列。乱序操作的第一步是切片,将数据集大致均匀的切分为随机份数。切片之后,再随机从每个区块中读取一个样本并存储,在读取每个区块时再次利用 shuffle
实现局部乱序操作。这样直到全部区块读取完毕。生成新的乱序文件。
实际操作中,要注意三点:
1. 推荐使用TensorFlow的shard操作来实现分片。
2. 要彻底地随机化数据,可能需要多轮操作。
3. 如果你遇到困难,这里有开源代码供你参考。你可以在评论区找到链接,或者发送“数据随机化”到微信公众号获取。
Comments ()