> ## Content Index
> Fetch the complete content index at: https://yinguobing.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# 如何彻底随机化大型TensorFlow数据集
- URL: https://yinguobing.com/blog/shuffle-the-tensorflow-dataset-throughly/
- Published: 2021-02-07T09:03:03.000Z
- Updated: 2022-05-29T05:13:07.000Z
- Description: 使用大型数据集训练模型面临一个不可忽略的问题。
- Author: 尹国冰
- Tags: TensorFlow

随着你对神经网络了解的深入，遇到大型数据集是迟早的事情。例如用于人脸识别模型训练的微软百万人脸数据集，可供训练的图像超过500万张。

使用大型数据集训练模型面临一个不可忽略的问题：如何有效地随机化数据。

以这个包含20个元素的数据集为例。通常我们会使用TensorFlow data API的shuffle操作。该操作可以在模型训练时在线打乱数据。然而shuffle操作受限于缓存大小。当缓存太小无法覆盖庞大的数据集时，shuffle操作仅能实现局部化的乱序操作。

这种情况下，我们需要采用离线乱序操作。将训练样本乱序存储在TensorFlow Record文件中。这里提供一个参考思路。

假设这是你的数据集，其中的样本按照某种规则顺序排列。乱序操作的第一步是切片，将数据集大致均匀的切分为随机份数。切片之后，再随机从每个区块中读取一个样本并存储，在读取每个区块时再次利用 `shuffle` 实现局部乱序操作。这样直到全部区块读取完毕。生成新的乱序文件。

实际操作中，要注意三点：

1\. 推荐使用TensorFlow的shard操作来实现分片。

2\. 要彻底地随机化数据，可能需要多轮操作。

3\. 如果你遇到困难，这里有开源代码供你参考。你可以在评论区找到链接，或者发送“数据随机化”到微信公众号获取。

[如何彻底随机化TensorFlow大型数据集\_哔哩哔哩\_bilibili当庞大的数据集超出了随机化的缓存容量，该如何彻底地随机化数据集？![](http://i1.hdslb.com/bfs/archive/be493b593513585a4c9b6cbcb4f89571e9c6d58f.jpg@57w_57h_1c.png)真诚友善硬核的流浪AI![](http://i1.hdslb.com/bfs/archive/be493b593513585a4c9b6cbcb4f89571e9c6d58f.jpg)](https://www.bilibili.com/video/BV1wV411i7qy/?ref=yinguobing.com)