如何在不增加数据的情况下使各个批次中的数据高度相关?

时间:2019-05-03 23:20:32

标签: tensorflow neural-network deep-learning

假设您要训练存储在TFRecords中的数据,并且想要通过移动/旋转图像等来扩充数据。单个图像的扩充数量大于批处理大小。您如何组织培训?

第一种方法:

For each data in TFRecords:
    Loop over all augmentations in batch_size increments:
        Training step with the batch_size datapoints. 

由于batch_size小于单个批次具有相同图像和相同标签的统一批次的扩增数量,因此效果不佳。

第二种方法:

加载整个数据库,扩充每个数据点,随机整理所有内容,并使用这些预先扩充的数据进行训练。

这将不起作用,因为存储扩充的数据将使数据库扩大。有了数据库,例如10 ^ 6图像和10 ^ 3扩充,您最终会得到10 ^ 9条目的扩充图像数据库,而您想要处理的方式更多。

第三种方法:

Repeat number of augmentations times:
    Loop over the data in TFRecords in batch_size increments:
        Augment each of the batch_size item using a random augmentation
        Training step with the batch_size datapoints, each datapoint is
            now based on different data and random augmentation. 

对我来说,这听起来更合理,因为没有批内关联,也不需要扩大数据库的大小,但是我担心每个时期都需要多次读取整个数据库。例如,如果您有10 ^ 3个扩充,则每个训练纪元将读取整个数据库10 ^ 3次。

您能提出一种可以避免上述所有问题的培训方法吗?

0 个答案:

没有答案