Я пишу пользовательскую функцию потерь и хочу взять 1 - логарифм вычисленного значения. Я пишу в кератах с бэкэндом тензорного потока следующим образом:
nonlabels = list(np.where(predictions<threshold)[1])
loss_fg_nT = 0
probs_nT = tf.gather(probs_fg,nonlabels,axis=3)
for i in range(len(nonlabels)):
probs_temp = tf.reshape(probs_nT[:,:,:,i],[-1])
prob_max = tf.math.reduce_max(probs_temp)
const = tf.constant(0.000001)
prob_max = tf.math.add(prob_max,const)
#prob_max = tf.math.subtract(tf.constant(1.0),prob_max)
val = K.log(prob_max)
loss_fg_nT -= val
loss_fg_nT = loss_fg_nT/(len(nonlabels)+0.000001)
Если я удаляю строку prob_max = tf.math.subtract(tf.constant(1.0),prob_max)
, функция работает нормально, но когда я беру журнал значения (1-prob_max), она дает nan
стоимость. Я не мог понять причину этого, так как я добавляю номинальную стоимость, чтобы также не брать log 0
. Может кто-нибудь помочь мне исправить эту ошибку.