【问题标题】:Chainer - Python - Logistic RegressionChainer - Python - 逻辑回归
【发布时间】:2018-02-24 12:09:16
【问题描述】:

我使用 Python 和 Chainer 创建了一个简单的逻辑回归模型,但我对最终结果并不完全满意。因此,我想得到一些帮助。一个限制:我不想用已经存在的功能交换已实现的功能。我知道 Chainer 中的损失函数几乎相同,但我正在创建的一个更复杂的模型是使用自定义损失函数。代码在这里:

https://gist.github.com/kmjjacobs/62fc96ece695b47af8d667b060a64559

我希望模型代码尽可能简洁,但正如您所见,call 方法是对 loss 方法的转发,我怀疑有一种更简洁的方法来调用训练循环中的损失方法。我认为如果 call 方法输出预测并且有一个单独的损失方法来计算损失会更干净。您对此有何看法?

我也不确定转换器功能。有没有更好的方法来达到同样的效果?

您对编写 Chainer 代码有什么意见或最佳实践吗?

提前致谢!

【问题讨论】:

    标签: python machine-learning artificial-intelligence logistic-regression chainer


    【解决方案1】:

    首先,您的主要问题是什么?分别定义损失函数和预测函数的最佳方法是什么?

    我查看了您的代码,我认为init_scope 的功能在LinkChain 之间是不同的。为此,您不能使用它在 Chain 中注册可学习参数。 (您当前使用的是Link,而不是Chain。)

    在您的情况下,我认为您可以将chainer.links.Linear 用于您的LogisticRegressionModel,或者您可以定义自己的Link 类,该类具有可学习的参数W,并在您的LogisticRegressionModel.

    【讨论】:

    • 啊,谢谢。因此,如果我理解正确,链应该是链接的集合(作为 DAG),链接由可学习参数的集合组成(但不是其他链接)?因此您建议将线性链接放在 init_scope 中?我的主要问题是可以对代码进行哪些改进,现在已经回答了,谢谢:-)!
    • 是的,我想是的!我猜你已经知道了,但是-t * F.log(y) - (1 - t) * F.log(1 - y) 可以替换为softmax 函数,1. / (1. + F.exp(-z)) 可以替换为sigmoid 函数。这些函数为此目的进行了优化,因此当您认真考虑性能时,最好只使用chainer库提供的函数。
    猜你喜欢
    • 2020-03-22
    • 2016-12-01
    • 1970-01-01
    • 2016-03-06
    • 2016-03-09
    • 2011-04-14
    • 2014-12-19
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多