I'm currently using spotlight https://github.com/maciejkula/spotlight/tree/master/spotlight to implement Matrix Factorization in recommender system. spotlight is based on pytorch, it's a integrated platform implementing RS. In spotlight/factorization/explicit, it uses torch.optim.Adam as optimizer, I want to change it to torch.optim.SGD. I tried
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))
but it gives:TypeError: init() missing 1 required positional argument: 'params' Any suggestions?
You could use partial
from functools
to first set the learning rate and momentum and then pass this class to ExplicitFactorizationModel
. Something like:
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)