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

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

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

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

您是否有任何评论或最佳实践来编写Chainer代码?

提前致谢!

最佳答案

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

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


init_scope中的Link用于注册参数,
https://docs.chainer.org/en/stable/tutorial/function.html#links-that-wrap-functions
https://github.com/chainer/chainer/blob/master/chainer/link.py#L197
init_scope中的Chain用于注册其他links
https://docs.chainer.org/en/stable/tutorial/basic.html#write-a-model-as-a-chain
https://github.com/chainer/chainer/blob/master/chainer/link.py#L675


就您而言,我认为您可以只对chainer.links.Linear使用LogisticRegressionModel,或者可以定义具有可学习参数Link的自己的W类,并在link中使用此自己的LogisticRegressionModel类。

关于python - Chainer-Python-Logistic回归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48962697/

10-12 22:41