Я тренирую многоцелевую нейронную сеть в TensorFlow с моей собственной функцией потерь и не могу найти документацию о том, как пакетная обработка взаимодействует с этой функциональностью.Как пакетная обработка взаимодействует с функцией потерь в TensorFlow?
Например, я фрагмент из моей функции потерь ниже, которая принимает тензор/список предсказаний и гарантирует, что их абсолютное значение сумма не более чем один:
def fitness(predictions,actual):
absTensor = tf.abs(predictions)
sumTensor = tf.reduce_sum(absTensor)
oneTensor = tf.constant(1.0)
isGTOne = tf.greater(sumTensor,oneTensor)
def norm(): return predictions/sumTensor
def unchanged(): return predictions
predictions = tf.cond(isGTOne,norm,unchanged)
etc...
Но когда я нахожусь проходя через партию оценок, я чувствую, что эта функция потерь нормализует весь набор входов для суммирования до 1 в этой точке, а не каждого индивидуального набора, суммирующего до 1. Т.е.
[[.8, .8], [.8, .8]] -> [[.25, .25], [. 25,25]]
, а не желаемый
[[.8, .8], [.8, .8]] -> [[.5, .5], [.5, .5]]
Может ли кто-нибудь разъяснить или успокоить мои подозрения? Если так работает моя функция, как мне это изменить?
Это прекрасно. Спасибо. Есть ли где-то в документах, которые говорят об этом поведении? Я бы хотел прочитать, если не будет ничего неожиданного. – liqiudilk
Какое поведение вы искали в документах? Использовать [tf.select docs] (https://www.tensorflow.org/api_docs/python/control_flow_ops/comparison_operators#select). – suharshs