Are you dealing with a multi-label classification use case, i.e. for each time step more than a single note can be active?
If so, could you print the shapes of the data and target as I think I didn’t understand it properly.
Anyway, here is a small dummy example:
batch_size = 10
nb_features = 256
nb_classes = 88
seq_len = 5

x = torch.randn(batch_size, seq_len, nb_features)
target = torch.randint(0, 2, (batch_size, seq_len, nb_classes)).float()

model = nn.Sequential(
    nn.Linear(nb_features, nb_classes),
    nn.Sigmoid(),
)
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=1e-0)

for epoch in range(1000):
    optimizer.zero_grad()
    output = model(x)
    loss = criterion(output, target)
    loss.backward()
    optimizer.step()
    print('Epoch {}, loss {}'.format(epoch, loss.item()))