Hint: Multiply epochs by batches for total prints [OK]
Common Mistakes:
Confusing range end values
Mixing epoch and batch indices
Counting fewer batches than loop runs
4. Identify the error in this PyTorch training loop snippet:
for data, target in dataloader:
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward
optimizer.step()
medium
A. Missing parentheses after loss.backward
B. optimizer.zero_grad() should be after optimizer.step()
C. criterion should be called before model(data)
D. optimizer.step() should be called before loss.backward
Solution
Step 1: Check method calls
loss.backward is missing parentheses, so it is not called as a function.
Step 2: Verify correct order
optimizer.zero_grad() is correctly before backward and step; criterion call order is correct; optimizer.step() after backward is correct.
Final Answer:
Missing parentheses after loss.backward -> Option A
Quick Check:
Call loss.backward() with parentheses [OK]
Hint: Always add () to call backward() [OK]
Common Mistakes:
Forgetting parentheses on backward()
Changing correct optimizer.zero_grad() position
Misordering loss and model calls
5. You want to train a model for 5 epochs with batches of size 10. Which of the following training loop structures correctly implements this in PyTorch?
hard
A. for epoch in range(5):
optimizer.zero_grad()
for batch_idx, (data, target) in enumerate(dataloader):
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
B. for batch_idx, (data, target) in enumerate(dataloader):
for epoch in range(5):
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
C. for epoch in range(5):
for batch_idx, (data, target) in enumerate(dataloader):
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
D. for epoch in range(5):
for batch_idx, (data, target) in enumerate(dataloader):
output = model(data)
loss = criterion(output, target)
optimizer.zero_grad()
loss.backward()
optimizer.step()
Solution
Step 1: Check loop order
The outer loop should be epochs, inner loop batches. for epoch in range(5):
for batch_idx, (data, target) in enumerate(dataloader):
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step() follows this correctly.
Step 2: Verify zero_grad and step calls
optimizer.zero_grad() must be before backward(), and optimizer.step() after. for epoch in range(5):
for batch_idx, (data, target) in enumerate(dataloader):
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step() has correct order.
Step 3: Check other options
for batch_idx, (data, target) in enumerate(dataloader):
for epoch in range(5):
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step() reverses loops (wrong). for epoch in range(5):
optimizer.zero_grad()
for batch_idx, (data, target) in enumerate(dataloader):
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step() zeros gradients outside batch loop (wrong). for epoch in range(5):
for batch_idx, (data, target) in enumerate(dataloader):
output = model(data)
loss = criterion(output, target)
optimizer.zero_grad()
loss.backward()
optimizer.step() zeros gradients after forward pass (wrong order).
Final Answer:
for epoch in range(5):
for batch_idx, (data, target) in enumerate(dataloader):
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step() -> Option C
Quick Check:
Epochs outside, zero_grad before backward, step after [OK]
Hint: Epoch loop outside, zero_grad before backward [OK]
Common Mistakes:
Swapping epoch and batch loops
Calling zero_grad outside batch loop
Calling zero_grad after forward pass
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.