Вот пример того, что я пытаюсь сделать. Вот как может выглядеть мой набор данных
2 | 34, 64, 2243, 55678, 323, 778, 4454, 23, 4433, 3445, 455, 32
23 | 343 ,56, 2, 5, 675, 34, 232, 677, 7, 54, 436, 77, 85, 33
592 | 343, 54, 4, 6
23 | 34
123 | 2, 4, 54, 38, 6643, 67, 3
...
Каждое из этих чисел - это индексы (не фактические входные данные модели / целевые данные), которые указывают на фактические данные, которые будут введены в модель. Фактические данные модели находятся в отдельном наборе данных, организованном по индексам (то же самое число, которое использовалось в первом наборе данных), поэтому это выглядело бы примерно так
1 | data1
2 | data2
3 | data3
Для первого набора с левой стороны находятся индексы для целей, то есть 2, 23, 592, 23, 123. Справа находятся индексы для потенциальных входов, и для каждой цели 4 входа выбираются случайным образом. Для целей, у которых количество входов меньше 4, входы повторяются.
Итак, если взять первый пример обучения в первом наборе, вход модели будет выглядеть следующим образом
target = torch.tensor([data2])
input = torch.mean( torch.tensor([data34]), torch.tensor([data2243]), torch.tensor([data23]), torch.tensor([data32]) )
Оба набора слишком велики, чтобы их можно было хранить в памяти одновременно, и я не На диске достаточно места для сохранения целей при каждой перестановке входных данных.
Я думаю, что лучшая стратегия состоит в том, чтобы заранее настроить количество пакетов X, используя многопоточность для настройки будущих пакетов, чтобы конвейер данных не становился шеей bottle в обучении, но Мне интересно, как это сделать go.
Редактировать:
Я думаю, что мое описание немного туманное, поэтому я сделал аналогию с типом конвейера данных, который я пытаюсь разрабатывать.
Аналогией могут быть некоторые типы тренингов по встраиванию слов, где количество входных слов меньше, чем у контекстного окна. Таким образом, для конкретного целевого слова входные слова должны выбираться случайным образом в контекстном окне этого целевого слова.
Например, возьмем это предложение:
There once was a very fast dog who could out run any other animal in the city.
Скажем, целевое слово было собака, и что размер окна контекста был 6, но размер ввода был 2 Таким образом, у нас есть выбор «а», «очень», «быстро», «кто», «мог», «из», из которых нам нужно выбрать два входа случайным образом. Таким образом, примером обучающего примера было бы слово embedding для «собака» в качестве цели, и слово embeddings «fast» и «out» для входных данных.
Таким образом, в тренингах по встраиванию слов будет использоваться много разных входных данных для множества разных целей. Но с помощью тренингов по встраиванию слов все вложения слов могут быть сохранены в оперативной памяти, так как словарь состоит из 6 цифр. В моем случае, входные данные не могут находиться в оперативной памяти.
Так что идея, которую я хочу сделать, - это обучение word2ve c, но большинство встраиваний слов должно оставаться на диске. в любом конкретном случае.