Как тасовать по блокам с помощью tf.Dataset - PullRequest
0 голосов
/ 24 мая 2019

У меня есть несколько записей TFRecord, содержащих тысячи примеров в каждой, каждая метка уникальна и автоинкремментируется из предыдущей (1, 2, 3, 4, 5 и т. Д.).Моя цель состоит в том, чтобы объединить их все вместе, перемешать определенным образом примеры, а затем пробовать и обучать.Я нашел обходной путь, но в итоге кажется, что он не работает должным образом (не тасует, как я хочу).

Вот ситуация: скажем, у меня есть в общей сложности 100 примеров, процесс тасования долженчередуйте блоки некоторого размера (например, размера 4) и, наконец, тренируйтесь с партиями большего размера (например, 16, которые).Идеальным случаем было бы перетасовать таким образом, чтобы эти блоки были не очень далеко друг от друга, но ни один из них не был соседом (при отборе проб для обучения).По этой причине я всегда выбираю относительно небольшой размер буфера тасования (этот буфер может быть источником моей проблемы?).

Я нашел способ добиться этого, но, очевидно, при работе с большим и большим количеством данных числоколичество «закрытых» блоков (по меткам) увеличивается, даже получая очень высокие пики очень близких блоков (а затем и закрывающих меток).

Вот как я реализовал этот обходной путь:

# Loading all the TFRecords and concatenating them...

dataset = dataset.batch(label_frames_tolerance)
dataset = dataset.shuffle(batch_shuffling_buffer_size)
dataset = dataset.apply(tf.data.experimental.unbatch())
dataset = dataset.repeat(num_epochs)
dataset = dataset.batch(batch_size)

# Train...

Следуя приведенному выше примеру, который я описал, вы можете себе представить:

label_frames_tolerance = 4
batch_shuffling_buffer_size = 10
num_epochs = 10
batch_size = 16

Один из возможных результатов только для 1 эпохи будет выглядеть примерно так:

[29 30 31 32 37 38 39 40 17 18 19 20 33 34 35 36  1  2  3  4 25 26 27]
[28 61 62 63 64 13 14 15 16 21 22 23 24 73 74 75 76 53 54 55 56 77 78]
[ 79  80  49  50  51  52   5   6   7   8  65  66  67  68  81  82  83  84
  97  98  99 100  45]
[46 47 48 89 90 91 92  9 10 11 12 57 58 59 60 85 86 87 88 69 70 71 72]
[93 94 95 96 41 42 43 44]

(Последняя «сломанная» партияне влияет на тренировку из-за большого количества данных)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...