This should generally work.
Here is a small code sample showing that the model outputs the right shape after pruning:
class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.conv1 = nn.Conv2d(1, 64, 3, 1, 1)
        self.bn1 = nn.BatchNorm2d(64)
        
    def forward(self, x):
        x = self.conv1(x)
        x = self.bn1(x)
        return x


model = MyModel()
x = torch.randn(1, 1, 10, 10)
output = model(x)
output.sum().backward()
print(model.conv1.weight.grad)
model.zero_grad()

# Prune channel10
with torch.no_grad():
    model.conv1.weight = nn.Parameter(torch.cat((
        model.conv1.weight[:10], model.conv1.weight[11:])))
    model.conv1.bias = nn.Parameter(torch.cat((
        model.conv1.bias[:10], model.conv1.bias[11:])))
    model.bn1.weight = nn.Parameter(torch.cat((
        model.bn1.weight[:10], model.bn1.weight[11:])))
    model.bn1.bias = nn.Parameter(torch.cat((
        model.bn1.bias[:10], model.bn1.bias[11:])))
    model.bn1.running_mean = torch.cat((
        model.bn1.running_mean[:10], model.bn1.running_mean[11:]))
    model.bn1.running_var = torch.cat((
        model.bn1.running_var[:10], model.bn1.running_var[11:]))
    
output = model(x)
print(output.shape)
output.sum().backward()
print(model.conv1.weight.grad)
model.zero_grad()