假设您要训练存储在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次。
您能提出一种可以避免上述所有问题的培训方法吗?