我使用Python和Chainer创建了一个简单的Logistic回归模型,但对最终结果并不完全满意。因此,我想获得一些帮助。一个限制:我不想将已实现的功能与现有功能互换。我知道Chainer中有几乎相同的损失函数,但是我正在创建的更复杂的模型正在使用自定义损失函数。代码在这里找到:
https://gist.github.com/kmjjacobs/62fc96ece695b47af8d667b060a64559
我想保持模型代码尽可能干净,但是如您所见,call方法是对loss方法的转发,我怀疑在训练循环中有一种更干净的方法来调用loss方法。我认为,如果调用方法输出预测,并且有单独的损耗方法来计算损耗,那会更干净。您对此有何想法?
我也不确定转换器的功能。有没有更好的方法来达到相同的结果?
您是否有任何评论或最佳实践来编写Chainer代码?
提前致谢!
最佳答案
首先,您的主要问题是什么?分别定义损失函数和预测函数的最佳方法?
我查看了您的代码,我认为init_scope
和Link
的Chain
功能不同。为此,您不能使用它在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#L197init_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/