Are you sure about the sizes of train_feat and train_labels ? Your code should works.
As an example, the following works:
dummy_features = torch.randn(3000, 13)
dummy_labels   = torch.randint(2, (3000, 1))  # integers in [0, 1]

train_data = torch.hstack((dummy_features, dummy_labels))
print(train_data.shape)  # torch.Size([3000, 14])

train_loader = torch.utils.data.DataLoader(train_data, batch_size= 7, shuffle=True)

print(len(train_loader) == np.ceil(3000 / 7))  # True

batch = next(iter(train_loader))
print(batch.size())  # torch.Size([7, 14])

features, labels = batch[:, :-1], batch[:, -1]