import pandas as pd
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.init as init
from torch.autograd import Variable
import pdb
import numpy as np

embedding_dim = 10
margin = 1

# Read data
trainFilename = 'base'
testFilename = 'test'

train = pd.read_csv(trainFilename, header=None, sep='\t', names=['1','2','3'], usecols=[0,1,2])
test = pd.read_csv(testFilename, header=None, sep='\t', names=['1','2','3'], usecols=[0,1,2])

numUsers = len(set(train.uid.unique()).union(set(test.uid.unique())))
numItems = len(set(train.iid.unique()).union(set(test.iid.unique())))

class modeler(nn.Module):
    def __init__(self, numUsers, numItems, embedding_dim):
        super(modeler, self).__init__()
        self.userEmbed = nn.Embedding(numUsers, embedding_dim)
        self.itemEmbed = nn.Embedding(numItems, embedding_dim)
        self.rel = nn.Parameter(torch.randn(1,embedding_dim), requires_grad=True)

    def forward(self, head, tail):
        userEmbeds = self.userEmbed(head)
        itemEmbeds = self.itemEmbed(tail)
        rel = self.rel

        out = (userEmbeds + rel - itemEmbeds).sum(1)
    
        return out

losses = []
model = modeler(numUsers, numItems, embedding_dim)
optimizer = optim.SGD(model.parameters(), lr = 0.01)

Given the above code, I want to also train the variable ‘rel’.
How can I do this?