我一直在尝试在Keras中实现自定义目标函数(正态分布的负对数可能性)
Keras期望有一个关于地面实况张量的论证,一个关于预测张量的论证;对于y_pred,我传递的张量应该代表一个nx2矩阵,其中第一列是分布的平均值,第二列是精度。
我的问题是,我无法清楚地了解如何在将y_pred传递给似然函数之前正确切片y_pred而不会产生错误
'Expected an array-like object, but found a Variable: maybe you are trying to call a function on a (possibly shared) variable instead of a numeric array?'
虽然我知道在我需要一个数组时我正在提供变量类型的l_func参数,但我似乎无法理解如何正确地将输入y_pred变量拆分为其均值和精度组件以插入似然函数。这是一些尝试;如果有人可以告诉我如何继续,我会非常感激。
def log_likelihood(y_true,y_pred):
mu = T.vector('mu')
beta = T.vector('beta')
x=T.vector('x')
likelihood = .5*(beta*(x-mu)**2)-T.log(beta/(2*np.pi))
l_func = function([mu,beta,x], likelihood)
return(l_func(y_pred[:,0],y_pred[:,1],y_true))
def log_likelihood(y_true,y_pred):
likelihood = .5*(y_pred[:,1]*(y_true-y_pred[:,0])**2)-T.log(y_pred[:,1]/(2*np.pi))
l_func = function([y_true,y_pred], likelihood)
return(l_func(y_true,y_pred))
def log_likelihood(y_true,y_pred):
mu=y_pred[:,0]
beta=y_pred[:,1]
x=y_true
mu_function=function([y_pred],mu)
beta_function=function([y_pred],beta)
id_function=function([y_true],x)
likelihood = .5*(beta_function(y_pred)*(id_function(y_true)-mu_function(y_pred))**2)-T.log(beta_function(y_pred)/(2*np.pi))
l_func = function([y_true,y_pred], likelihood)
return(l_func(y_true,y_pred))