You can do something like this to target individual modules:
import torchvision.models as models

resnet = models.resnet101(pretrained=True)

for (name, layer) in resnet._modules.items():
    #iteration over outer layers
    print((name, layer))

resnet._modules['layer1'][0]._modules['bn1'].weight.data.zero_()

The ._modules exposes layers as an ordered dict (it’s also private so maybe this is not future-proof? but the PT devs have referenced it on other threads) so you can index by key normally . Hence, printing them in the loop above helps to navigate complex models like resnet. it’s a little confusing becuase the nn.Sequential (keyed as ‘layer1’) is indexed like a list with integers.
You can use nested versions of that loop to get at things if you are changing a lot of stuff. If you are just changing a few, might actually be less confusing to do them in a one-liner individually. You can also use .requires_grad = False for individual layers if you just don’t want them to be updated during training.
And, of course, you could also just delete the module:
del(resnet._modules['layer1'][0]._modules['bn1'])
(edit)
You could also just duplicate the resnet.py 30 file from pytorch/vision and make your own version of ResNet. I have had to do this for using larger/smaller images. It is sometimes easer for experimentation as you can save the model file with
your_resnet.__class__.__name__
in the filename and name it something like ‘ResNet_noBN5’. But whatever works for you.
Good luck!