You could create a Dataset and return your appropriate targets.
I used a tensor for the 2D target instead of a numpy.array.
You can easily transform it to a tensor using:
target1 = torch.from_numpy(arr)

Also, I created the second target as a tensor containing class indices. The loss functions for classification need an index tensor instead of a one-hot encoded tensor.
Here is a small example:
class MyDataset(Dataset):
    def __init__(self, data, target1, target2):
        self.data = data
        self.target1 = target1
        self.target2 = target2
        
    def __getitem__(self, index):
        x = self.data[index]
        y1 = self.target1[index]
        y2 = self.target2[index]
        
        return x, y1, y2
    
    def __len__(self):
        return len(self.data)
    
    
data = torch.randn(100, 3, 24, 24)
target1 = torch.randn(100, 10, 10) # your 2d tensor
target2 = torch.empty(100, dtype=torch.long).random_(10) # 10 class indices
dataset = MyDataset(data, target1, target2)

x, y1, y2 = dataset[0]