I hope this helps
class ShallowConv(nn.Module):
    def __init__(self, size, mp_k_size):
        super(ShallowConv, self).__init__()
        self.size = size
        self.conv = nn.Conv2d(3, 96, 8, stride=(4,4))
        self.maxp = nn.MaxPool2d(mp_k_size)
        self.flat = Flatten()
    
    def forward(self, x):
        x = nn.functional.interpolate(x, self.size)
        x = self.conv(x)
        x = self.maxp(x)
        return self.flat(x)

class DeepRank(nn.Module):
    def __init__(self, deep_model, shallow_nets):
        super(DeepRank, self).__init__()
        self.deep_model = deep_model
        self.shallow_nets = nn.ModuleList(shallow_nets)
        
    def forward(self, x):
        feats = []
        deep_feat = self.deep_model(x)
        for net in self.shallow_nets:
            feats.append(net(x))

        # Not sure if a new list is needed
        # or can we just overwrite the old-list
        normed = [] 
        # L2-Norm of each extracted feature
        for feat in feats:
            normed.append(F.normalize(feat, dim=1, p=2))


        return torch.cat(normed, dim=1)

DeepRank(models.resnet34, [...Shallow Models...])