切片keras可变自定义目标函数

时间:2017-01-31 01:57:43

标签: theano keras

我一直在尝试在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))

0 个答案:

没有答案