Может ли тензорный поток оптимизировать потери каждого элемента в пакете отдельно, вместо оптимизации всей средней потери? - PullRequest
0 голосов
/ 19 апреля 2019

Как тензор потока может оптимизировать потери элементов партии индивидуально вместо оптимизации потерь партии?

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

Например, в следующих кодах.

losses = tf.nn.nce_loss(<my batch inputs here>)
loss = tf.reduce_mean(losses)
optim = tf.nn.GradientDesentOptimizor(learning_rate = 0.01).minimize(loss)

Как можно пропустить loss = tf.reduce_mean(losses) и минимизировать тензор losses напрямую?(Таким образом, мини-партия фактически сводится к ситуации, когда размер партии равен 1.)

У меня есть потери, чтобы минимизировать потери напрямую, как:

optim = tf.nn.GradientDesentOptimizor(learning_rate = 0.01).minimize(losses) # instead of loss

Я не уверенкак будет работать минимизирование.Когда я использую его для запуска в сеансе, потери имеют тенденцию увеличиваться до нан.

Так можно ли достичь указанной цели в тензорном потоке?

1 Ответ

0 голосов
/ 19 апреля 2019

Разница между вычислением градиентов tf.reduce_mean(losses) и градиентов losses заключается в том, что для тензора losses вы получите СУММУ градиентов (сумму по градиентам по каждому образцу в партии), а для tf.reduce_mean(losses) вы получите СРЕДСТВО градиентов (среднее значение градиентов по образцам в партии). Вот почему вы начинаете получать значения NaN - сумма градиентов становится очень большой при увеличении размера пакета.

Если вы собираетесь оптимизировать тензорную потерю вместо уменьшенной средней потери, вы можете получить точную эквивалентность, разделив скорость обучения на размер пакета.

Чтобы оптимизатор индивидуально для каждого образца, просто подайте один образец на партию.

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