Лучший способ обработать конвейер данных, где обучающие входы выбираются случайным образом и извлекаются из 2-го набора данных с помощью torch.utils.data - PullRequest
1 голос
/ 18 февраля 2020

Вот пример того, что я пытаюсь сделать. Вот как может выглядеть мой набор данных

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, но большинство встраиваний слов должно оставаться на диске. в любом конкретном случае.

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