I want to do this since I need two optimizers to take care of different model parameters.
for example, my model has many layers and an architecture parameter model.arch:
class model(nn.Module):
  def __init__(self):
    ...
    self.linear_layers = nn.ModuleList()
    for i in range(4):
      self.linear_layers.append(nn.Linear(...))
    # many other layers
    self.arch = torch.zeros([...], requires_grad=True)
  
  def get_arch_parameters(self):
    return [self.arch]

  def get_other_parameters(self):
     # I want to return all parameters other than self.arch

Now I want to use two optimizers to update different parameters:
opt1 = torch.optim.SGD(model.get_other_parameters(), ...)
opt2 = torch.optim.SGD(model.get_arch_parameters(), ...)

However, I do not know how to implement model.get_other_parameters(), which returns all model parameters but model.arch.
I cannot simply set model.arch.requries_grad=False and use model.parameters() instead, since opt2 needs to update it.
Hence I’d like to know if there is any method to exclude a parameter from model.parameters() without setting its requires_grad to False.
Thanks in advance.