Yes, you can get the gradient for each weight in the model w.r.t that weight. Just like this:
print(net.conv11.weight.grad) 
print(net.conv21.bias.grad)

The reason you do loss.grad it gives you None is that “loss” is not in optimizer, however, the “net.parameters()” in optimizer.
optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)

And “loss” is not leaf node in computation graph, so you  can’t add it to optimizer directly