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

Как и многие люди, разрабатывающие модели глубокого обучения, мне мешают мои аппаратные ресурсы, а именно память GPU. У меня проблема с классификацией звука, для которой я пробую несколько RNN. Данные очень большие, и я могу использовать только небольшие размеры партий, и я должен также ограничить размер lstm. Я понимаю, что многие люди используют спектрограммы или другие методы для предоставления более сжатых данных в сеть, но мне бы хотелось узнать, как это сделать с необработанными данными.

Это то, что я делаю в настоящее время с размером партии около 4:

loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=label_op))

optimisation_op = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss_op)

В идеале я хотел бы рассчитать градиенты для каждого параметра для пакета в графическом процессоре, а затем переместить их в ОЗУ, вычисляя градиенты для следующего пакета. После некоторого количества пакетов я бы хотел усреднить градиенты для каждого параметра и использовать их для обновления сети.

Я получил эту идею на начальной странице github, которая описывает что-то похожее на распараллеливание на нескольких графических процессорах: https://github.com/tensorflow/models/tree/master/research/inception

1 ответ

Используйте объекты tf.Variable для хранения градиентов. Поместите их в процессор.

Другие вопросы по тегам