Python 无成本函数
我正在努力学习如何使用Theano。我经常使用生存分析,因此我想尝试使用Theano的自动微分和梯度下降实现一个标准的生存模型。我试图实现的模型称为考克斯模型,以下是维基百科的文章: 非常有用的是,他们在那里写了部分似然函数,这是在估计Cox模型参数时最大化的函数。我对Theano是一个新手,因此在实现这个成本函数时遇到了困难,因此我正在寻求一些指导 这是我到目前为止编写的代码。我的数据集有137条记录,因此我硬编码了该值。T表示张量模,W表示维基百科文章称之为beta,status表示维基百科称之为C。其余变量与维基百科的符号相同Python 无成本函数,python,optimization,machine-learning,theano,Python,Optimization,Machine Learning,Theano,我正在努力学习如何使用Theano。我经常使用生存分析,因此我想尝试使用Theano的自动微分和梯度下降实现一个标准的生存模型。我试图实现的模型称为考克斯模型,以下是维基百科的文章: 非常有用的是,他们在那里写了部分似然函数,这是在估计Cox模型参数时最大化的函数。我对Theano是一个新手,因此在实现这个成本函数时遇到了困难,因此我正在寻求一些指导 这是我到目前为止编写的代码。我的数据集有137条记录,因此我硬编码了该值。T表示张量模,W表示维基百科文章称之为beta,status表示维基百科
def negative_log_likelihood(self, y, status):
v = 0
for i in xrange(137):
if T.eq(status[i], 1):
v += T.dot(self.X[i], self.W)
u = 0
for j in xrange(137):
if T.gt(y[j], y[i]):
u += T.exp(T.dot(self.X[j], self.W))
v -= T.log(u)
return T.sum(-v)
不幸的是,当我运行这段代码时,我不幸地遇到了一个无限递归错误,我希望这不会发生。这使我认为我没有以Theano希望的方式实现这个代价函数,因此我希望获得一些关于如何改进代码以使其工作的指导 您正在混合符号和非符号操作,但这不起作用 例如,
T.eq
返回一个不可执行的符号表达式,表示为了相等而比较两个事物的想法,但实际上它并不在那里进行比较T.eq
实际上返回一个表示相等比较的Python对象,并且由于非None
对象引用被认为与Python中的True
相同,因此执行将始终在if语句中继续
如果需要构造包含条件的Theano计算,则需要使用其两个符号条件操作之一:T.switch
或Theano.ifelse.ifelse
您还使用了Python循环,这可能不是您所需要的。要构造显式循环的Theano计算,需要使用。然而,如果你能用矩阵运算(点积、约化等)来表达你的计算,那么它将比使用扫描的东西运行得快得多
我建议您在尝试从头开始实现一些复杂的操作之前再进行一些操作。您正在混合符号和非符号操作,但这不起作用 例如,
T.eq
返回一个不可执行的符号表达式,表示为了相等而比较两个事物的想法,但实际上它并不在那里进行比较T.eq
实际上返回一个表示相等比较的Python对象,并且由于非None
对象引用被认为与Python中的True
相同,因此执行将始终在if语句中继续
如果需要构造包含条件的Theano计算,则需要使用其两个符号条件操作之一:T.switch
或Theano.ifelse.ifelse
您还使用了Python循环,这可能不是您所需要的。要构造显式循环的Theano计算,需要使用。然而,如果你能用矩阵运算(点积、约化等)来表达你的计算,那么它将比使用扫描的东西运行得快得多
我建议您在尝试从头开始实现复杂的东西之前,再进行一些工作