Как делиться данными или вычислениями между обучающими выборками - PullRequest
1 голос
/ 29 мая 2020

Мне нужно обучить классификатор, который должен основываться на трех вещах: особенностях самого объекта, некотором виде контекстного изображения, представляющего его состояние относительно других объектов, и последовательности изображений, представляющих еще больший контекст, но несколько глобально . Количество объектов зависит от изображения.

Что касается нейронной сети:
- первый вход имеет форму (batch_size, n), где n - количество характеристик объекта (n ~ 15);
- второй вход имеет примерно форму (batch_size, image_size, image_size, n), где image_size - размер изображения (image_size ~ 15);
- форма третьего входа, как вы могли догадаться, равна (batch_size, seq_len, image_size, image_size, n), где seq_len - длина последовательности (seq_len ~ 10).

Когда количество обучающих выборок относительно невелико, это возможно. Но когда количество примеров превышает 100к, это уже занимает 12 ГБ памяти. И это уже слишком, потому что мне нужно кормить еще больше. Будет еще хуже, когда мне нужно будет обучить что-то подобное, но теперь для каждой пары объектов на изображении.

Но дело в том, что большая часть данных не меняется между выборками. Если какое-то изображение содержит 15 объектов, то только первый и второй входы будут разными для этих 15 объектов, а самый большой (третий) останется прежним. Вычисления, необходимые для всех входных данных, одинаковы.

Несмотря на мою конкретную проблему c, возникает общий вопрос, могу ли я подавать третий вход столько раз, сколько необходимо, и выполнять одни и те же вычисления для разных образцы?

PS: 1) Я был бы очень признателен за лучшую формулировку вопроса: я не знаю, есть ли что-то там и есть ли у этого чего-то имя; 2) Я знаю о существовании tf.data. Но я не могу найти никаких примеров, отвечающих на мой вопрос.

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