如何从 pytorch 更改聚光灯下的默认优化,例如torch.optim.SGD?

How to change default optimization in spotlight from pytorch e.g. torch.optim.SGD?

我目前正在使用聚光灯 https://github.com/maciejkula/spotlight/tree/master/spotlight 在推荐系统中实现矩阵分解。 spotlight基于pytorch,是一个实现RS的集成平台。在spotlight/factorization/explicit中,它使用torch.optim.Adam作为优化器,我想将其更改为torch.optim.SGD。 我试过了

emodel = ExplicitFactorizationModel(n_iter=15,
                                embedding_dim=32, 
                                use_cuda=False,
                                loss='regression',
                                l2=0.00005,
                                optimizer_func=optim.SGD(lr=0.001, momentum=0.9))

但它 gives:TypeError:init() 缺少 1 个必需的位置参数:'params' 有什么建议吗?

您可以使用 functools 中的 partial 首先设置学习率和动量,然后将此 class 传递给 ExplicitFactorizationModel。类似于:

from functools import partial
SDG_fix_lr_momentum = partial(torch.optim.SGD, lr=0.001, momentum=0.9)
emodel = ExplicitFactorizationModel(n_iter=15,
                                embedding_dim=32, 
                                use_cuda=False,
                                loss='regression',
                                l2=0.00005,
                                optimizer_func=SDG_fix_lr_momentum)