Pass nn.Sigmoid as an instance nn.Sigmoid() and it should work:
model = nn.Sequential(
    nn.Linear(n_in,n_hdn0), nn.Sigmoid(),
    nn.Linear(n_hdn0, n_hdn1), nn.Sigmoid(),
    nn.Linear(n_hdn1, n_hdn2), nn.Sigmoid(),
    nn.Linear(n_hdn2, n_hdn3), nn.Sigmoid(),
    nn.Linear(n_hdn3, n_hdn4), nn.Sigmoid(),
    nn.Linear(n_hdn4, n_out)
)

Also, it looks like the last nn.Linear shouldn’t be there.
Once this is fixed, you’ll get another error regarding the type of your tensors, since floating point data is expected.
You could fix this by using:
input_arr = torch.tensor(input_arr).float()
output_arr = torch.tensor(output_arr).float()

If you load the data into your memory, you could use torch.utils.data.TensorDataset.
Using this Dataset, you could wrap it in a DataLoader, which will create batches using multiple workers if needed (although you won’t benefit a lot from it if your data is already in memory):
dataset = TensorDataset(input_arr, output_arr)
loader = DataLoader(
    dataset,
    shuffle=True,
    batch_size=10
)

for epoch in range(50):
    for data, target in loader:    
        # Forward Propagation
        y_pred = model(data)
        # Compute and print loss
        loss = criterion(y_pred, target)
        print('epoch: ', epoch, ' loss: ', loss.item())
        # Zero the gradients
        optimizer.zero_grad()
    
        # perform a backward pass (backpropagation)
        loss.backward()
    
        # Update the parameters
        optimizer.step()

Have a look at the Data Loading tutorial 2 for more information.