如何彻底随机化TensorFlow大型数据集_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
%E5%BD%93%E5%BA%9E%E5%A4%A7%E7%9A%84%E6%95%B0%E6%8D%AE%E9%9B%86%E8%B6%85%E5%87%BA%E4%BA%86%E9%9A%8F%E6%9C%BA%E5%8C%96%E7%9A%84%E7%BC%93%E5%AD%98%E5%AE%B9%E9%87%8F%EF%BC%8C%E8%AF%A5%E5%A6%82%E4%BD%95%E5%BD%BB%E5%BA%95%E5%9C%B0%E9%9A%8F%E6%9C%BA%E5%8C%96%E6%95%B0%E6%8D%AE%E9%9B%86%EF%BC%9F

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

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

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

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

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

实际操作中,要注意三点:

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

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

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

感谢观看,我是国冰,下期再见~