Hi guys, Im new in pytorch and I have met some problems in updating parameters while training model. For instance, I have 2 loss-functions: `loss1`

and `loss2`

, let `loss`

= `loss1 + loss2`

. The model has **feature extractor layers** and **classifier layers**. And I want to update the parameters in **feature extractor layers** using `loss`

and the parameters in **classifier layers** using `loss1`

. How can I do that in pytorch??? Thanks!

@Khah_Nguyen you will have to manually turn on and off requires_grad while doing the backward. This will ensure that when the optimizer step function runs, the appropriate grads are stored in the node

```
import numpy as np
import time
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.autograd import Variable
class random_model(nn.Module):
def __init__(self, num_layers):
super(random_model, self).__init__()
self.model1 = nn.Sequential(nn.Linear(100, 20), nn.BatchNorm1d(20), nn.ReLU())
self.model3 = nn.Linear(20, 1)
def forward(self, x):
x = self.model1(x)
x = self.model3(x)
return x
model = random_model(10)
loss1 = torch.nn.MSELoss()
loss2 = torch.nn.SmoothL1Loss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
X = torch.rand(100, 100)
y = torch.rand(100)
for cur_epoch in range(100):
optimizer.zero_grad()
output = model(X)
cur_loss1 = loss1(output, y)
cur_loss2 = loss2(output, y)
cur_loss = cur_loss1 + cur_loss2
for param in model.model3.parameters():
param.requires_grad = False
cur_loss.backward(retain_graph=True)
for param in model.model1.parameters():
param.requires_grad = False
for param in model.model3.parameters():
param.requires_grad = True
cur_loss2.backward()
optimizer.step()
print("Epoch {0} Loss is {1}".format(cur_epoch, cur_loss.item()))
```

Ok I got it, Tks sir!