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