Мне нужно обучить классификатор, который должен основываться на трех вещах: особенностях самого объекта, некотором виде контекстного изображения, представляющего его состояние относительно других объектов, и последовательности изображений, представляющих еще больший контекст, но несколько глобально . Количество объектов зависит от изображения.
Что касается нейронной сети:
- первый вход имеет форму (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
. Но я не могу найти никаких примеров, отвечающих на мой вопрос.