Как оценить функцию потери кераса в установленное время - PullRequest
0 голосов
/ 14 января 2020

Я хочу подогнать свою модель под параметры нормальной функции плотности вероятности (PDF). Ввод 1D временных рядов. PDF определяется двумя параметрами: mu и sigma. Это желаемый результат. Я хочу, чтобы потеря была отсутствующим перекрытием между «истинным» и «прогнозируемым» PDF, где прогнозируемый PDF оценивается с множеством временных шагов, используя предсказанные mu и sigma. Эскиз требуемой потери выглядит следующим образом:

enter image description here

Это определение потери, которое я пытался использовать:

# Define extra inputs needed to evaluate loss
time = np.arange(10)
mu_true = Input((1,))
sigma_true = Input((1,))

# Define loss
def PDFKeras(time,mu,sigma): # Evaluate PDF @ time
    return  1/(sigma*K.constant(np.sqrt(2*np.pi)))*K.exp(-(K.constant(time[:,None])-mu)^2/(2*sigma^2))
PDF_true = PDFKeras(time,mu_true,sigma_true)
PDF_pred = PDFKeras(time,mu_pred,sigma_pred)
Loss = K.maximum(PDF_true-PDF_pred,K.constant(0))

#Put model together
model = Model(inputs=[visible,mu_true,sigma_true],
              outputs=[mu_pred,sigma_pred])
model.add_loss(Loss)
model.compile(optimizer=optim,
              metrics=metric)

При выполнении этого сегмента кода я получаю сообщение об ошибке:

TypeError: Вход 'x' из 'LogicalOr' Op имеет тип float32, который не соответствует ожидаемому типу bool.

Я думаю, что способ оценки моей функции PDF в разное время является ошибочным, но как это сделать правильно?

...