首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Theano成本函数

Theano成本函数
EN

Stack Overflow用户
提问于 2015-08-02 22:35:55
回答 1查看 450关注 0票数 1

我正在努力学习如何使用Theano。我经常从事生存分析工作,因此我想尝试使用Theano的自动微分和梯度下降来实现一个标准的生存模型。我正在尝试实现的模型被称为考克斯模型,这是维基百科上的文章:https://en.wikipedia.org/wiki/Proportional_hazards_model

非常有帮助的是,他们在那里写了部分似然函数,这是在估计Cox模型的参数时最大化的函数。我对Theano非常陌生,因此在实现这个成本函数时遇到了困难,所以我正在寻找一些指导。

以下是我到目前为止编写的代码。我的数据集有137条记录,因此我硬编码了这个值。T指的是张量模块,W指的是维基百科文章中所说的beta,状态指的是维基百科所说的C。其余的变量与维基百科的符号相同。

代码语言:javascript
复制
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希望的方式实现这个成本函数,所以我希望得到一些关于如何改进这段代码的指导,以便它能够工作。

EN

回答 1

Stack Overflow用户

发布于 2015-08-03 16:13:41

您混合了符号和非符号操作,但这不起作用。

例如,T.eq返回一个不可执行的符号表达式,该表达式表示比较两个事物是否相等的想法,但它实际上并不立即进行比较。T.eq实际上返回一个表示相等比较的Python对象,并且由于非None对象引用被认为与Python中的True相同,因此执行将始终在if语句中继续。

如果您需要构造一个涉及条件的Theano计算,那么您需要使用它的两个符号条件操作之一:T.switchtheano.ifelse.ifelseSee the documentation for examples and details

您还在使用Python循环,这可能不是您所需要的。要构造显式循环的Theano计算,您需要使用theano.scan module。但是,如果您可以用矩阵运算(点积、约简等)来表示您的计算。然后,它会比使用扫描的东西运行得更快、更快。

我建议你在尝试从头开始实现一些复杂的东西之前,先完成更多的Theano tutorials

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31772938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档