Передача напрямую мини-партии с помощью функции Theano
Я реализую нейронную сеть, используя theano для идентификации рукописных цифр (проблема mnist). Входные данные представляют собой изображения с разрешением 28х28 пикселей в оттенках серого. Я использую градиентный спуск для обучения сети. В моем коде у меня есть функция, которая обновляет параметры (веса и смещения) с использованием стохастического градиентного спуска. Функция примерно такая,
train_mb = theano.function(
[i,eta], cost, updates=updates,
givens={
self.x:
training_x[i*mini_batch_size: (i+1)*mini_batch_size],
self.y:
training_y[i*mini_batch_size: (i+1)*mini_batch_size]
})
где стоимость - функция стоимости, эта скорость обучения, а обновления определяются как
updates = [(param, param - eta*grad) for param, grad in zip(self.params, grads)]
где param - это весовые коэффициенты, а grad - градиент функции стоимости.
Я хотел бы сделать некоторое увеличение данных. Для этого я хотел бы взять каждое изображение и выполнить переводы (влево, вправо, вверх, вниз), а также некоторые повороты под небольшим углом.
Чтобы сэкономить дисковое пространство, я хотел бы выполнить вышеупомянутые операции с изображениями для каждой мини-партии, чтобы создать таким образом список, содержащий текущую мини-серию, а также несколько отличающиеся от нее версии. Затем я хотел бы передать каждую мини-серию из этого списка в функцию train_mb.
Я не нашел способ сделать это. Может кто-нибудь дать подсказку о том, как это сделать.
Большое спасибо,
Alejandro