我使用Python和Chainer创建了一个简单的Logistic回归模型,但我对最终结果并不完全满意。因此,我想寻求一些帮助。一个限制:我不想用已经存在的功能来交换已实现的功能。我知道Chainer中有一些丢失函数,这些函数几乎相同,但是我正在创建的一个更复杂的模型是使用自定义的丢失函数。代码在这里找到:
https://gist.github.com/kmjjacobs/62fc96ece695b47af8d667b060a64559
我希望尽可能保持模型代码的整洁,但正如您所看到的,调用方法是对丢失方法的转发,我怀疑在训练循环中有一种更干净的方法来调用丢失方法。我认为,如果调用方法输出预测,并且有一个单独的损失方法来计算损失,那就更干净了。你对此有何看法?
我也不确定转换器的功能。是否有更好的方法来实现同样的结果?
对于编写Chainer代码,您有什么备注或最佳实践吗?
提前感谢!
发布于 2018-02-25 11:41:08
首先,你的主要问题是什么?分别定义损失函数和预测函数的最佳方法是什么?
我查看了您的代码,我认为init_scope的功能在Link和Chain之间是不同的。为此,不能使用它在链中注册可学习参数。(当前的用法是Link,而不是Chain。)
init_scope in 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 in 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,并在您的LogisticRegressionModel中使用自己的link类。
https://stackoverflow.com/questions/48962697
复制相似问题