It looks like you are only loading a single sample in __init__, which will thus only return this one picked random data sample.
Since you have a lot of files (and each is stored in an own file), I would suggest to lazily load each sample in __getitem__.
This function should therefore contain the logic to load a single sample given the file paths and an index.
You don’t have to manually shuffle the file paths (or pick a sample randomly), as the DataLoader will do it for us.
The __init__ method of your Dataset can therefore only contain the logic to store all file paths.
Here is some dummy code:
class my_Dataset(Dataset):
    # Characterizes a dataset for PyTorch
    def __init__(self, data_paths, target_paths, transform=None):
        self.data_paths = data_paths
        self.target_paths = target_paths
        self.transform = transform

    def __len__(self):
        return len(self.data_paths)

    def __getitem__(self, index):
        x = torch.from_numpy(np.load(self.data_paths[index]))
        y = torch.from_numpy(np.load(self.target_paths[index]))
        if self.transform:
            x = self.transform(x)

        return x, y

In this example you would have to create the data and target paths before and pass them as arguments to the Dataset.
Once this is done, just wrap it in a DataLoader, which can create batches and e.g. shuffle your data:
loader = DataLoader(
    dataset,
    batch_size=5,
    shuffle=True,
    num_workers=2
)

Also, the Data Loading Tutorial 98 might be a good starter for some more information.