Я внедряю нейронную сеть, используя theano для идентификации рукописных цифр (проблема mnist). Входные данные - это изображения с полутоновыми оттенками 28x28 пикселей. Я использую градиентный спуск для обучения сети. В моем коде у меня есть функция, которая обновляет параметры (веса и смещения) с использованием стохастического градиентного спуска. Функция примерно такая,
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