В функции потерь Keras я хотел бы иметь эквивалент np.nanmean()
:
В функции потерь en эквивалент следующего упрощенного примера потерпел неудачу по очевидным причинам.Не удалось найти способ справиться с этим, например, используя K.gather()
.
Упрощенный пример:
from keras import backend as K
import numpy as np
nominator = np.array([-6,4,-8,7,0,5,1,-2])
denominator = np.array([1,4,5,7,9,0,12,0])
Nom = K.variable(nominator,dtype='int32')
DeNom = K.variable(denominator,dtype='int32')
Ratio = Nom/DeNom
Loss = K.sum(Ratio)
Из-за 0 в знаменателе это вернет значение Nan вФункция потери:
K.eval(Loss)
nan
Я хотел бы иметь какой-либо способ произвести эквивалент
Loss = K.nansum(Ratio)
Или эквивалент индексов:
Filter_Ratio = K.gather(Ratio,K.any(DeNom))
Loss = K.sum(Filter_Ratio)
ЗдесьFilter_Ratio = [-6,4,-8,7,0,1]/[1,4,5,7,9,12]
Но нет K.nansum()
и K.gather()
не работает таким образом.
Ошеломленная реализация, которую я хотел перенести в Keras:
nominator = np.array([-6,4,-8,7,0,5,1,2])
denominator = np.array([1,4,5,7,9,0,12,0])
ind = denominator!=0
ratio = nominator[ind]/denominator[ind]
loss = np.sum(ratio)