Your model seems to be able to overfit random data as seen here:
model = Net(4, 7)
x = torch.randn(64, 4)
target = torch.randn(64, 7)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
criterion = nn.MSELoss()


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()))

so you could check if changing some hyperparameters might help in your case.