Я думаю, что это проблема с числовыми вычислениями всякий раз, когда y_pred == 0
.
Обратите внимание, что log(0)
не определено, поэтому, чтобы сделать наши расчеты потерь численно стабильными, мы склонны делать tf.log(y_pred + epsilon)
, гдеepsilon
- это очень небольшое число, которое будет иметь незначительное влияние на потерю, но не будет возвращать NaN при попытке деления на ноль (или делать log (0)).
Я предполагаю, что это то, что выстремились к параметру eps
, но вы должны поместить его в вызов tf.log()
.
Возможно, что-то вроде этого:
def custom_loss(eps):
def loss(y_true, y_pred):
ans = -(y_true*tf.log(y_pred + eps) + (1-y_true)*tf.log(y_pred + eps))
return ans
return loss