def METHOD_NAME(
    net: torch.nn.ModuleList,
    trainloader: torch.utils.data.DataLoader,
    epochs: int,
    device: torch.device,
) -> None:
    """Train the network."""
    # Define loss and optimizer
    criterion = nn.CrossEntropyLoss()
    optimizer = torch.optim.Adadelta(net.parameters(), lr=1.0)
    print(f"Training {epochs} epoch(s) w/ {len(trainloader)} batches each")
    # Train the network
    for epoch in range(epochs):  # loop over the dataset multiple times
        running_loss = 0.0
        acc1 = 0.0
        acc5 = 0.0
        for i, data in enumerate(tqdm(trainloader), 0):
            images, labels = data[0].to(device), data[1].to(device)
            # zero the parameter gradients
            optimizer.zero_grad()
            # forward + backward + optimize
            outputs = net(images)
            loss = criterion(outputs, labels)
            loss.backward()
            optimizer.step()
            # print statistics
            running_loss += loss.item()
            tmp1, tmp2 = accuracy(outputs, labels, topk=(1, 5))
            acc1, acc5 = acc1 + tmp1, acc5 + tmp2
            if i % 5 == 4:  # print every 5 mini-batches
                print(
                    "[%d, %5d] loss: %.3f acc1: %.3f acc5: %.3f"
                    % (
                        epoch + 1,
                        i + 1,
                        running_loss / (i + 1),
                        acc1 / (i + 1),
                        acc5 / (i + 1),
                    ),
                    flush=True,
                )